diff --git a/app/assets/javascripts/angular/controllers/registers.js.coffee b/app/assets/javascripts/angular/controllers/registers.js.coffee index cf53645..a813e47 100644 --- a/app/assets/javascripts/angular/controllers/registers.js.coffee +++ b/app/assets/javascripts/angular/controllers/registers.js.coffee @@ -61,7 +61,6 @@ {value: "translations", text: $translate.instant('Translation')} ] - $scope.CounterpartyTypes = [ { value: "Customer", text: 'Customers' }, { value: "Vendor", text: 'Vendors' }, @@ -114,7 +113,7 @@ if v.id == parseInt($scope.newRegister.counterparty_id) $scope.counterpartiesWithoutPay.splice(k,1) return - $scope.newRegister = {date: $scope.newRegister.date, currency: $scope.newRegister.currency} + $scope.newRegister = {date: $scope.newRegister.date, currency: $scope.newRegister.currency, vendor_id: $scope.vendor_id} , (response) -> $scope.newRegister.errors = response.data.errors ) diff --git a/app/assets/javascripts/angular/directives.js.coffee.erb b/app/assets/javascripts/angular/directives.js.coffee.erb index 7a6fe79..e7bb0fc 100644 --- a/app/assets/javascripts/angular/directives.js.coffee.erb +++ b/app/assets/javascripts/angular/directives.js.coffee.erb @@ -106,6 +106,8 @@ app.config ['$translateProvider', ($translateProvider) -> counterparty: "Counterparty" articles: "Articles" article: "Article" + customer: "Customer" + vendor: "Vendor" register: "Register" reports: "Reports" charts: "Charts" @@ -122,8 +124,8 @@ app.config ['$translateProvider', ($translateProvider) -> Loan: "loan" profit: "profit" month: "Month" - totall: "Total" - totall_min: "Total(min)" + total: "Total" + total_min: "Total(min)" clearForm: "Clear form" searchFilter: "Search filter" note: "Note" @@ -292,6 +294,8 @@ app.config ['$translateProvider', ($translateProvider) -> counterparty: "Контрагент" articles: "Статті" article: "Стаття" + customer: "Клієнт" + vendor: "Постачальник" register: "Реєстр" reports: "Звіти" charts: "Графік" @@ -308,8 +312,8 @@ app.config ['$translateProvider', ($translateProvider) -> Loan: "позика" profit: "прибуток" month: "Місяць" - totall: "Сумма" - totall_min: "Сумма(min)" + total: "Сумма" + total_min: "Сумма(min)" clearForm: "Очистити форму" SearchFilter: "Пошук за фільтром" notes: "Примітки" diff --git a/app/assets/templates/angular/shared/registers.html.slim b/app/assets/templates/angular/shared/registers.html.slim index ddaae2e..0405cd6 100644 --- a/app/assets/templates/angular/shared/registers.html.slim +++ b/app/assets/templates/angular/shared/registers.html.slim @@ -5,8 +5,9 @@ tr th translate="date" th translate="article" - th translate="counterparty" - th translate="totall" + th translate="customer" + th translate="vendor" + th translate="total" th translate="note" tr td @@ -17,7 +18,11 @@ | {{article.name}} ({{article.type | translate}}) td select.counterparty.clear_after_add ng-model="newRegister.counterparty_id" - option ng-repeat="counterparty in counterparties" value="{{counterparty.id}}" + option ng-repeat="counterparty in counterparties | filter: {type: 'Customer'}" value="{{counterparty.id}}" + | {{counterparty.name}} + td + select.counterparty.clear_after_add ng-model="newRegister.vendor_id" + option ng-repeat="counterparty in counterparties | filter: {type: 'Vendor'}" value="{{counterparty.id}}" | {{counterparty.name}} td ng-class=("{td_correction: sandbox, input_and_select: sandbox}") input.value ng-model="newRegister.value" type="text" @@ -43,7 +48,7 @@ span.rate_currency ng-show="sandbox" | {{ 'rate_currency' | translate }} input.value ng-change="changeValue()" ng-model="rateDollar" type="text" - a.show_list_count href="" ng-click="showlistCount = !showlistCount" ng-show="counterpartiesWithoutPay.length>0 && !showlistCount" + a.show_list_count href="" ng-click="showlistCount = !showlistCount" ng-show="counterpartiesWithoutPay.length > 0 && !showlistCount" | {{ 'show' | translate }}: {{ 'count_without_pay' | translate }} form.form-filter.ng-pristine.ng-valid ng-class="{open_form_filter: filter.active}" ng-submit="filter.fetchRegisters({initLoad: true})" .head_filter ng-show="filter.active" @@ -71,9 +76,11 @@ th | {{ 'articles' | translate }} th - | {{ 'counterparty' | translate }} + | {{ 'customer' | translate }} th - | {{ 'totall_min' | translate }} + | {{ 'vendor' | translate }} + th + | {{ 'total_min' | translate }} tr td input#dateFilter.input_data.ng-pristine.ng-valid ng-change="filter.data.month = undefined" ng-model="filter.data.date" type="text" @@ -85,7 +92,11 @@ | {{article.name}} ({{article.type | translate}}) td select.counterparty.search ng-model="filter.data.counterparty_id" - option ng-repeat="counterparty in counterparties" value="{{counterparty.id}}" + option ng-repeat="counterparty in counterparties | filter: {type: 'Customer'}" value="{{counterparty.id}}" + | {{counterparty.name}} + td + select.counterparty.search ng-model="filter.data.vendor_id" + option ng-repeat="counterparty in counterparties | filter: {type: 'Vendor'}" value="{{counterparty.id}}" | {{counterparty.name}} td input.value.search ng-model="filter.data.value" type="text" @@ -133,10 +144,13 @@ | {{ 'article' | translate }} th a href="" ng-class="{'up_arrow' : predicate=='counterparty.name' && reverse, 'down_arrow' : predicate=='counterparty.name' && !reverse}" ng-click="predicate='counterparty.name'; reverse=!reverse" - | {{ 'counterparty' | translate }} + | {{ 'customer' | translate }} + th + a href="" ng-class="{'up_arrow' : predicate=='vendor.name' && reverse, 'down_arrow' : predicate=='vendor.name' && !reverse}" ng-click="predicate='vendor.name'; reverse=!reverse" + | {{ 'vendor' | translate }} th a href="" ng-class="{'up_arrow' : predicate=='value_currency' && reverse, 'down_arrow' : predicate=='value_currency' && !reverse}" ng-click="predicate='value_currency'; reverse=!reverse" - | {{ 'totall' | translate }} + | {{ 'total' | translate }} th translate="notes" tr ng-repeat="register in registers | orderBy:(predicate || 'date_reverse'):reverse" repeat-complete="" style="background: {{ register.background }}" td @@ -155,6 +169,10 @@ span e-class="search-select" e-form="rowform" e-name="counterparty_id" e-ng-options="s.id as s.name for s in counterparties" editable-select="register.counterparty.id" .buttons ng-show="!rowform.$visible" | {{ register.counterparty.name }} + td + span e-class="search-select" e-form="rowform" e-name="vendor_id" e-ng-options="s.id as s.name for s in counterparties" editable-select="register.vendor.id" + .buttons ng-show="!rowform.$visible" + | {{ register.vendor.name }} td.td_correction ng-class=("{input_and_select: sandbox}") span e-class="value" e-form="rowform" e-name="value" e-ng-class="{value_plan: sandbox}" editable-text="register.value" span.buttons ng-show="!rowform.$visible" diff --git a/app/controllers/registers_controller.rb b/app/controllers/registers_controller.rb index a03d63a..0e7ef90 100644 --- a/app/controllers/registers_controller.rb +++ b/app/controllers/registers_controller.rb @@ -4,7 +4,7 @@ class RegistersController < ApplicationController before_action :set_model def index - registers = @model.index_sort(params.slice(:month, :type, :article_id, :counterparty_id, :date, :value, :offset)) + registers = @model.index_sort(params.slice(:month, :type, :article_id, :counterparty_id, :vendor_id, :date, :value, :offset)) json = ActiveModel::ArraySerializer.new(registers, each_serializer: RegisterSerializer, root: nil) @@ -44,7 +44,7 @@ def set_model end def register_params - params.require(:register).permit(:date, :article_id, :counterparty_id, :value, :notes, :background, :currency) + params.require(:register).permit(:date, :article_id, :counterparty_id, :vendor_id, :value, :notes, :background, :currency) end def find_register diff --git a/app/helpers/counterparties_controller_helper.rb b/app/helpers/counterparties_controller_helper.rb deleted file mode 100644 index af6e7cc..0000000 --- a/app/helpers/counterparties_controller_helper.rb +++ /dev/null @@ -1,2 +0,0 @@ -module CounterpartiesControllerHelper -end diff --git a/app/models/counterparties/customer.rb b/app/models/counterparties/customer.rb index 9b2a4f2..f64eba1 100644 --- a/app/models/counterparties/customer.rb +++ b/app/models/counterparties/customer.rb @@ -1,11 +1,11 @@ class Customer < Counterparty - after_create :create_info_record - - has_many :vendors - has_many :hours has_one :client_info, dependent: :destroy has_many :client_acts, dependent: :destroy has_many :client_invoices, dependent: :destroy + has_many :hours + + after_create :create_info_record + delegate :repr_name, :name, :address, :invoice_id, :agreement_number, :title_en, :title_ua, :agreement_date, to: :client_info, prefix: true def create_info_record diff --git a/app/models/counterparties/vendor.rb b/app/models/counterparties/vendor.rb index b3973e2..4838660 100644 --- a/app/models/counterparties/vendor.rb +++ b/app/models/counterparties/vendor.rb @@ -1,15 +1,14 @@ class Vendor < Counterparty - after_create :create_info_record - belongs_to :customer - has_many :hours has_one :vendor_info, dependent: :destroy + has_many :counterparties, through: :registers + has_many :hours + has_many :registers, dependent: :destroy + has_many :vacations, dependent: :destroy has_many :vendor_acts, dependent: :destroy has_many :vendor_orders, dependent: :destroy - has_many :vacations, dependent: :destroy before_create { generate_token(:auth_token) } - - delegate :name, to: :customer, prefix: true + after_create :create_info_record scope :by_missing_hours, lambda { |date = Date.current.at_beginning_of_month| includes(:hours).active.reject do |v| diff --git a/app/models/counterparty.rb b/app/models/counterparty.rb index a694ff2..dbece27 100644 --- a/app/models/counterparty.rb +++ b/app/models/counterparty.rb @@ -1,6 +1,7 @@ class Counterparty < ActiveRecord::Base - has_many :registers has_many :payment_histories, dependent: :destroy + has_many :registers, dependent: :destroy + has_many :vendors, through: :registers module TYPES CUSTOMER = 'Customer' diff --git a/app/models/register.rb b/app/models/register.rb index 450a87f..a859a78 100644 --- a/app/models/register.rb +++ b/app/models/register.rb @@ -1,7 +1,8 @@ # frozen_string_literal: true class Register < ActiveRecord::Base - belongs_to :counterparty belongs_to :article + belongs_to :counterparty + belongs_to :vendor module TYPES FACT = 'Fact' @@ -16,7 +17,10 @@ def plan? type == TYPES::PLAN end - validates :date, :article, :value, presence: true + validates :date, :article, :value, :counterparty_id, :vendor_id, presence: true + validates :counterparty_id, uniqueness: { scope: :vendor_id } + + delegate :article_name, :type, to: :article scope :revenues, lambda { joins(:article).where(articles: { type: Article::TYPES::REVENUE }) @@ -40,6 +44,7 @@ def plan? .by_type(params[:type]) .by_article(params[:article_id]) .by_counterparty(params[:counterparty_id]) + .by_vendor(params[:vendor_id]) .by_date(params[:date]) .by_value(params[:value]) .limit(10) @@ -66,6 +71,7 @@ def plan? scope :by_date, -> (date) { where(date: Date.parse(date)) unless date.blank? } scope :by_counterparty, -> (data) { where(counterparty_id: data) if data } + scope :by_vendor, -> (data) { where(vendor_id: data) if data } scope :by_value, -> (data) { where('value >= ?', data) if data } scope :by_type, -> (type) { send(type) if type } @@ -82,8 +88,6 @@ def plan? where('extract(year from date) = ?', year) } - delegate :article_name, :type, to: :article - scope :group_by_month, lambda { joins(:article).select(" month(date) as month, sum(case when articles.type = '#{Article::TYPES::REVENUE}' then value else 0 end) as revenue, diff --git a/app/serializers/register_serializer.rb b/app/serializers/register_serializer.rb index bf11a7d..73f3b64 100644 --- a/app/serializers/register_serializer.rb +++ b/app/serializers/register_serializer.rb @@ -1,10 +1,14 @@ class RegisterSerializer < ActiveModel::Serializer - attributes :id, :date, :counterparty, :article, :value, :notes, :background, :currency + attributes :id, :date, :counterparty, :vendor, :article, :value, :notes, :background, :currency def counterparty CounterpartyRegisterSerializer.new(object.counterparty) end + def vendor + CounterpartyRegisterSerializer.new(object.vendor) + end + def article ArticleSerializer.new(object.article) end diff --git a/app/views/notification_mailer/vendor_add_hours.html.slim b/app/views/notification_mailer/vendor_add_hours.html.slim index 5a63c68..a15c459 100644 --- a/app/views/notification_mailer/vendor_add_hours.html.slim +++ b/app/views/notification_mailer/vendor_add_hours.html.slim @@ -14,7 +14,7 @@ table th tr td - = @vendor.customer_name + = @hour[:customer_name] td = @hour[:hours] td diff --git a/db/migrate/20160909080732_add_vendor_id_to_registers.rb b/db/migrate/20160909080732_add_vendor_id_to_registers.rb new file mode 100644 index 0000000..776a82f --- /dev/null +++ b/db/migrate/20160909080732_add_vendor_id_to_registers.rb @@ -0,0 +1,5 @@ +class AddVendorIdToRegisters < ActiveRecord::Migration + def change + add_column :registers, :vendor_id, :integer, index: true + end +end diff --git a/db/schema.rb b/db/schema.rb index cc3fbdd..e73b4dc 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,12 +11,12 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20160607174627) do +ActiveRecord::Schema.define(version: 20160909080732) do - create_table "admins", force: true do |t| - t.string "email", default: "", null: false - t.string "encrypted_password", default: "", null: false - t.string "reset_password_token" + create_table "admins", force: :cascade do |t| + t.string "email", limit: 191, default: "", null: false + t.string "encrypted_password", limit: 191, default: "", null: false + t.string "reset_password_token", limit: 191 t.datetime "reset_password_sent_at" t.datetime "remember_created_at" t.datetime "created_at" @@ -26,98 +26,98 @@ add_index "admins", ["email"], name: "index_admins_on_email", unique: true, using: :btree add_index "admins", ["reset_password_token"], name: "index_admins_on_reset_password_token", unique: true, using: :btree - create_table "articles", force: true do |t| - t.string "name" - t.string "type" + create_table "articles", force: :cascade do |t| + t.string "name", limit: 191 + t.string "type", limit: 191 t.datetime "created_at" t.datetime "updated_at" end - create_table "client_acts", force: true do |t| - t.string "total_money" + create_table "client_acts", force: :cascade do |t| + t.string "total_money", limit: 191 t.date "month" - t.integer "customer_id" + t.integer "customer_id", limit: 4 t.datetime "created_at" t.datetime "updated_at" - t.integer "signature_id" + t.integer "signature_id", limit: 4 end add_index "client_acts", ["customer_id"], name: "index_client_acts_on_customer_id", using: :btree add_index "client_acts", ["signature_id"], name: "index_client_acts_on_signature_id", using: :btree - create_table "client_infos", force: true do |t| - t.integer "customer_id" - t.string "name" - t.string "agreement_number" - t.integer "invoice_id" - t.string "address" - t.string "repr_name" + create_table "client_infos", force: :cascade do |t| + t.integer "customer_id", limit: 4 + t.string "name", limit: 191 + t.string "agreement_number", limit: 191 + t.integer "invoice_id", limit: 4 + t.string "address", limit: 191 + t.string "repr_name", limit: 191 t.datetime "created_at" t.datetime "updated_at" - t.string "title_en" - t.string "title_ua" + t.string "title_en", limit: 191 + t.string "title_ua", limit: 191 t.date "agreement_date" end add_index "client_infos", ["customer_id"], name: "index_client_infos_on_customer_id", using: :btree add_index "client_infos", ["invoice_id"], name: "index_client_infos_on_invoice_id", using: :btree - create_table "client_invoices", force: true do |t| + create_table "client_invoices", force: :cascade do |t| t.date "month" - t.integer "customer_id" + t.integer "customer_id", limit: 4 t.datetime "created_at" t.datetime "updated_at" - t.integer "signature_id" + t.integer "signature_id", limit: 4 end add_index "client_invoices", ["customer_id"], name: "index_client_invoices_on_customer_id", using: :btree add_index "client_invoices", ["signature_id"], name: "index_client_invoices_on_signature_id", using: :btree - create_table "counterparties", force: true do |t| - t.string "name" + create_table "counterparties", force: :cascade do |t| + t.string "name", limit: 191 t.date "start_date" - t.boolean "active", default: true + t.boolean "active", default: true t.datetime "created_at" t.datetime "updated_at" t.float "value_payment", limit: 24 t.boolean "monthly_payment" - t.string "type" - t.integer "customer_id" - t.string "email" - t.string "password" - t.string "auth_token" - t.string "password_reset_token" + t.string "type", limit: 191 + t.integer "customer_id", limit: 4 + t.string "email", limit: 191 + t.string "password", limit: 191 + t.string "auth_token", limit: 191 + t.string "password_reset_token", limit: 191 t.datetime "password_reset_sent_at" - t.boolean "approve_hours", default: false - t.boolean "signed_in", default: false - t.string "currency_monthly_payment", default: "USD" + t.boolean "approve_hours", default: false + t.boolean "signed_in", default: false + t.string "currency_monthly_payment", limit: 191, default: "USD" end - create_table "features", force: true do |t| - t.string "name" - t.string "type" + create_table "features", force: :cascade do |t| + t.string "name", limit: 191 + t.string "type", limit: 191 t.datetime "created_at" t.datetime "updated_at" end - create_table "features_vendor_orders", id: false, force: true do |t| - t.integer "vendor_order_id", null: false - t.integer "feature_id", null: false + create_table "features_vendor_orders", id: false, force: :cascade do |t| + t.integer "vendor_order_id", limit: 4, null: false + t.integer "feature_id", limit: 4, null: false t.datetime "created_at" t.datetime "updated_at" end - create_table "holidays", force: true do |t| - t.string "name" + create_table "holidays", force: :cascade do |t| + t.string "name", limit: 191 t.date "date" t.datetime "created_at" t.datetime "updated_at" end - create_table "hours", force: true do |t| - t.integer "vendor_id" - t.integer "customer_id" - t.integer "hours" + create_table "hours", force: :cascade do |t| + t.integer "vendor_id", limit: 4 + t.integer "customer_id", limit: 4 + t.integer "hours", limit: 4 t.datetime "created_at" t.datetime "updated_at" t.date "month" @@ -126,9 +126,9 @@ add_index "hours", ["customer_id"], name: "index_hours_on_customer_id", using: :btree add_index "hours", ["vendor_id"], name: "index_hours_on_vendor_id", using: :btree - create_table "payment_histories", force: true do |t| - t.integer "counterparty_id" - t.integer "admin_id" + create_table "payment_histories", force: :cascade do |t| + t.integer "counterparty_id", limit: 4 + t.integer "admin_id", limit: 4 t.float "value_payment", limit: 24 t.datetime "created_at" t.datetime "updated_at" @@ -136,31 +136,32 @@ add_index "payment_histories", ["counterparty_id"], name: "index_payment_histories_on_counterparty_id", using: :btree - create_table "registers", force: true do |t| + create_table "registers", force: :cascade do |t| t.date "date" - t.integer "article_id" - t.integer "counterparty_id" + t.integer "article_id", limit: 4 + t.integer "counterparty_id", limit: 4 t.float "value", limit: 24 - t.text "notes" + t.text "notes", limit: 65535 t.datetime "created_at" t.datetime "updated_at" - t.string "background" - t.string "type" - t.string "currency", default: "UAH" + t.string "background", limit: 191 + t.string "type", limit: 191 + t.string "currency", limit: 191, default: "UAH" + t.integer "vendor_id", limit: 4 end - create_table "signatures", force: true do |t| - t.string "name_ua" - t.string "name_en" - t.string "title_en" - t.string "title_ua" - t.string "tel" - t.string "email" + create_table "signatures", force: :cascade do |t| + t.string "name_ua", limit: 191 + t.string "name_en", limit: 191 + t.string "title_en", limit: 191 + t.string "title_ua", limit: 191 + t.string "tel", limit: 191 + t.string "email", limit: 191 t.datetime "created_at" t.datetime "updated_at" end - create_table "taxes", force: true do |t| + create_table "taxes", force: :cascade do |t| t.float "social", limit: 24 t.float "single", limit: 24 t.float "cash", limit: 24 @@ -168,35 +169,35 @@ t.datetime "updated_at" end - create_table "vacations", force: true do |t| - t.integer "vendor_id" + create_table "vacations", force: :cascade do |t| + t.integer "vendor_id", limit: 4 t.date "start" t.date "ending" end add_index "vacations", ["vendor_id"], name: "index_vacations_on_vendor_id", using: :btree - create_table "vendor_acts", force: true do |t| - t.string "total_money" + create_table "vendor_acts", force: :cascade do |t| + t.string "total_money", limit: 191 t.date "month" - t.integer "vendor_id" + t.integer "vendor_id", limit: 4 t.datetime "created_at" t.datetime "updated_at" - t.integer "signature_id" + t.integer "signature_id", limit: 4 end add_index "vendor_acts", ["signature_id"], name: "index_vendor_acts_on_signature_id", using: :btree add_index "vendor_acts", ["vendor_id"], name: "index_vendor_acts_on_vendor_id", using: :btree - create_table "vendor_infos", force: true do |t| - t.string "name" - t.string "ipn" - t.string "address" - t.string "contract" - t.string "account" - t.string "bank" - t.integer "mfo" - t.integer "vendor_id" + create_table "vendor_infos", force: :cascade do |t| + t.string "name", limit: 191 + t.string "ipn", limit: 191 + t.string "address", limit: 191 + t.string "contract", limit: 191 + t.string "account", limit: 191 + t.string "bank", limit: 191 + t.integer "mfo", limit: 4 + t.integer "vendor_id", limit: 4 t.datetime "created_at" t.datetime "updated_at" t.date "agreement_date" @@ -204,12 +205,12 @@ add_index "vendor_infos", ["vendor_id"], name: "index_vendor_infos_on_vendor_id", using: :btree - create_table "vendor_orders", force: true do |t| + create_table "vendor_orders", force: :cascade do |t| t.date "month" - t.integer "vendor_id" + t.integer "vendor_id", limit: 4 t.datetime "created_at" t.datetime "updated_at" - t.integer "signature_id" + t.integer "signature_id", limit: 4 end add_index "vendor_orders", ["signature_id"], name: "index_vendor_orders_on_signature_id", using: :btree diff --git a/spec/classes/approve_hours_spec.rb b/spec/classes/approve_hours_spec.rb index 27df6d0..4c8ecae 100644 --- a/spec/classes/approve_hours_spec.rb +++ b/spec/classes/approve_hours_spec.rb @@ -1,8 +1,8 @@ require 'rails_helper' RSpec.describe ApproveHours, type: :class do - let(:customer) { FactoryGirl.create(:customer) } - let!(:vendor) { FactoryGirl.create(:vendor, approve_hours: true, customer_id: customer.id) } + let(:customer) { create(:customer) } + let!(:vendor) { create(:vendor, approve_hours: true, customer_id: customer.id) } let(:approve_hours) { ApproveHours.new } it 'send an email for vendors' do diff --git a/spec/controllers/plan_registers_controller_spec.rb b/spec/controllers/plan_registers_controller_spec.rb index 358fb91..eda0d6f 100644 --- a/spec/controllers/plan_registers_controller_spec.rb +++ b/spec/controllers/plan_registers_controller_spec.rb @@ -1,10 +1,12 @@ require 'rails_helper' RSpec.describe PlanRegistersController, type: :controller do - let(:article) { FactoryGirl.create(:article) } - let(:plan_register) { FactoryGirl.create(:register_plan) } - let(:plan_register_attributes) { FactoryGirl.attributes_for(:register_plan, date: Date.yesterday, value: '100', type: 'Plan', article_id: article.id) } - let(:invalid_plan_register_attributes) { FactoryGirl.attributes_for(:register_plan, date: '', value: '', type: '') } + let(:article) { create(:article) } + let(:counterparty) { create(:counterparty) } + let(:vendor) { create(:counterparty) } + let(:plan_register) { create(:register_plan) } + let(:plan_register_attributes) { attributes_for(:register_plan, article_id: article.id, date: '18-01-2016', counterparty_id: counterparty.id, vendor_id: vendor.id) } + let(:invalid_plan_register_attributes) { attributes_for(:register_plan, date: '', value: '', type: '') } before do allow(controller).to receive(:authenticate_admin!) { true } diff --git a/spec/controllers/registers_controller_spec.rb b/spec/controllers/registers_controller_spec.rb index df2fa2a..90e8d99 100644 --- a/spec/controllers/registers_controller_spec.rb +++ b/spec/controllers/registers_controller_spec.rb @@ -1,20 +1,22 @@ require 'rails_helper' RSpec.describe RegistersController, type: :controller do - let(:article) { FactoryGirl.create(:article) } - let(:register) { FactoryGirl.create(:register) } - let(:register_attributes) { FactoryGirl.attributes_for(:register, date: '18-01-2016', type: 'Fact', value: 100, article_id: article.id) } - let(:invalid_register_attributes) { FactoryGirl.attributes_for(:register, date: '', type: '', value: '', article_id: '') } + let(:article) { create(:article) } + let(:counterparty) { create(:counterparty) } + let(:vendor) { create(:counterparty) } + let(:register) { create(:register) } + let(:register_attributes) { attributes_for(:register, article_id: article.id, date: '18-01-2016', counterparty_id: counterparty.id, vendor_id: vendor.id) } + let(:invalid_register_attributes) { attributes_for(:register, date: '', type: '', value: '', article_id: '') } before do allow(controller).to receive(:authenticate_admin!) { true } end describe '#index' do - let(:article_type_revenue) { FactoryGirl.create(:article, type: Article::TYPES::REVENUE) } - let!(:register_article_cost) { FactoryGirl.create(:register, value: 200) } - let!(:register_date_not_yesterday) { FactoryGirl.create(:register, date: Date.yesterday - 1.day, value: 150) } - let!(:register_article_revenue) { FactoryGirl.create(:register, article_id: article_type_revenue.id) } + let(:article_type_revenue) { create(:article, type: Article::TYPES::REVENUE) } + let!(:register_article_cost) { create(:register, value: 200) } + let!(:register_date_not_yesterday) { create(:register, date: Date.yesterday - 1.day, value: 150) } + let!(:register_article_revenue) { create(:register, article_id: article_type_revenue.id) } context 'returns registers with article type "cost"' do before do diff --git a/spec/factories/registers.rb b/spec/factories/registers.rb index 3d36ed1..be61412 100644 --- a/spec/factories/registers.rb +++ b/spec/factories/registers.rb @@ -1,9 +1,11 @@ FactoryGirl.define do factory :register do date { Date.yesterday } - association :article type Register::TYPES::FACT value 100 + association :article + association :counterparty + association :vendor end factory :register_plan, parent: :register do diff --git a/spec/helpers/counterparties_controller_helper_spec.rb b/spec/helpers/counterparties_controller_helper_spec.rb deleted file mode 100644 index 90cd10e..0000000 --- a/spec/helpers/counterparties_controller_helper_spec.rb +++ /dev/null @@ -1,15 +0,0 @@ -require 'rails_helper' - -# Specs in this file have access to a helper object that includes -# the CounterpartiesControllerHelper. For example: -# -# describe CounterpartiesControllerHelper do -# describe "string concat" do -# it "concats two strings with spaces" do -# expect(helper.concat_strings("this","that")).to eq("this that") -# end -# end -# end -RSpec.describe CounterpartiesControllerHelper, type: :helper do - pending "add some examples to (or delete) #{__FILE__}" -end diff --git a/spec/models/counterparty_spec.rb b/spec/models/counterparty_spec.rb index 16a1c10..3f7ab7c 100644 --- a/spec/models/counterparty_spec.rb +++ b/spec/models/counterparty_spec.rb @@ -3,5 +3,9 @@ RSpec.describe Counterparty, type: :model do subject { build(:counterparty) } - it { is_expected.to be_valid } + context 'associations' do + it { is_expected.to have_many(:payment_histories).dependent(:destroy) } + it { is_expected.to have_many(:registers).dependent(:destroy) } + it { is_expected.to have_many(:vendors).through(:registers) } + end end diff --git a/spec/models/customer_spec.rb b/spec/models/customer_spec.rb index 34b8e9d..c6afe38 100644 --- a/spec/models/customer_spec.rb +++ b/spec/models/customer_spec.rb @@ -1,7 +1,12 @@ require 'rails_helper' RSpec.describe Customer, type: :model do - it { is_expected.to have_many(:vendors) } + context 'associations' do + it { is_expected.to have_one(:client_info).dependent(:destroy) } + it { is_expected.to have_many(:client_acts).dependent(:destroy) } + it { is_expected.to have_many(:client_invoices).dependent(:destroy) } + it { is_expected.to have_many(:hours) } + end context 'after create callbacks' do let(:customer) { create(:customer) } diff --git a/spec/models/register_spec.rb b/spec/models/register_spec.rb index 7158129..833680f 100644 --- a/spec/models/register_spec.rb +++ b/spec/models/register_spec.rb @@ -1,25 +1,49 @@ require 'rails_helper' RSpec.describe Register, type: :model do - context '.by_months' do - let(:date1) { '10/12/2014' } - let(:date2) { '05/10/2014' } + context 'scopes' do + context '.by_months' do + let(:date1) { '10/12/2014' } + let(:date2) { '05/10/2014' } - before do - FactoryGirl.create(:register, date: date1) - FactoryGirl.create(:register, date: date2) + before do + FactoryGirl.create(:register, date: date1) + FactoryGirl.create(:register, date: date2) + end + + context 'returns records' do + subject { Register.by_months([Date.parse(date1), Date.parse(date2)]) } + + it { is_expected.to have(2).items } + end + + context 'exepts nil' do + subject { Register.by_months(nil) } + + it { is_expected.to be_blank } + end end - context 'returns records' do - subject { Register.by_months([Date.parse(date1), Date.parse(date2)]) } + context '.by_counterparty' do + let(:counterparty) { create(:counterparty) } + let(:data) { counterparty } + let!(:register_one) { create(:register, counterparty: counterparty) } + let!(:register_two) { create(:register) } + + subject { Register.by_counterparty(data) } - it { is_expected.to have(2).items } + it { is_expected.to have(1).item } end - context 'exepts nil' do - subject { Register.by_months(nil) } + context '.by_counterparty' do + let(:vendor) { create(:vendor) } + let(:data) { vendor } + let!(:register_one) { create(:register, vendor: vendor) } + let!(:register_two) { create(:register) } + + subject { Register.by_vendor(data) } - it { is_expected.to be_blank } + it { is_expected.to have(1).item } end end end diff --git a/spec/models/vendor_spec.rb b/spec/models/vendor_spec.rb index a4ca83d..6dbeb2b 100644 --- a/spec/models/vendor_spec.rb +++ b/spec/models/vendor_spec.rb @@ -1,9 +1,14 @@ require 'rails_helper' RSpec.describe Vendor, type: :model do - context 'association' do - it { is_expected.to belong_to(:customer) } - it { is_expected.to have_many(:vendor_acts) } + context 'associations' do + it { is_expected.to have_one(:vendor_info).dependent(:destroy) } + it { is_expected.to have_many(:counterparties).through(:registers) } + it { is_expected.to have_many(:hours) } + it { is_expected.to have_many(:registers).dependent(:destroy) } + it { is_expected.to have_many(:vacations).dependent(:destroy) } + it { is_expected.to have_many(:vendor_acts).dependent(:destroy) } + it { is_expected.to have_many(:vendor_orders).dependent(:destroy) } end context 'after create callbacks' do @@ -12,10 +17,6 @@ it { expect(vendor).to callback(:create_info_record).after(:create) } end - context 'delegate' do - it { is_expected.to delegate_method(:name).to(:customer).with_prefix(true) } - end - describe 'scope' do context '.by_missing_hours' do context 'should include vendor' do