dorsale 3.8.1 → 3.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/README.md +5 -1
- data/app/commands/dorsale/flyboy/task_commands.rb +1 -1
- data/app/controllers/concerns/dorsale/flyboy/tasks_summary_concern.rb +0 -1
- data/app/controllers/dorsale/alexandrie/attachments_controller.rb +1 -2
- data/app/controllers/dorsale/application_controller.rb +0 -1
- data/app/controllers/dorsale/billing_machine/application_controller.rb +0 -2
- data/app/controllers/dorsale/billing_machine/invoices_controller.rb +9 -22
- data/app/controllers/dorsale/billing_machine/payment_terms_controller.rb +0 -1
- data/app/controllers/dorsale/billing_machine/quotations_controller.rb +1 -4
- data/app/controllers/dorsale/comments_controller.rb +3 -2
- data/app/controllers/dorsale/customer_vault/activity_types_controller.rb +0 -1
- data/app/controllers/dorsale/customer_vault/application_controller.rb +0 -1
- data/app/controllers/dorsale/customer_vault/links_controller.rb +22 -12
- data/app/controllers/dorsale/customer_vault/origins_controller.rb +0 -1
- data/app/controllers/dorsale/customer_vault/people_controller.rb +2 -3
- data/app/controllers/dorsale/expense_gun/categories_controller.rb +0 -1
- data/app/controllers/dorsale/expense_gun/expenses_controller.rb +0 -1
- data/app/controllers/dorsale/flyboy/task_comments_controller.rb +0 -1
- data/app/controllers/dorsale/flyboy/tasks_controller.rb +28 -21
- data/app/controllers/dorsale/users_controller.rb +0 -1
- data/app/filters/dorsale/billing_machine/small_data/filter_strategy_by_payment_status.rb +9 -5
- data/app/filters/dorsale/billing_machine/small_data/filter_strategy_by_state.rb +2 -2
- data/app/filters/dorsale/flyboy/small_data/filter_for_tasks.rb +1 -1
- data/app/helpers/dorsale/billing_machine/application_helper.rb +6 -6
- data/app/helpers/dorsale/context_helper.rb +1 -1
- data/app/helpers/dorsale/flyboy/application_helper.rb +4 -5
- data/app/mailers/dorsale/billing_machine/invoice_mailer.rb +0 -1
- data/app/mailers/dorsale/flyboy/task_mailer.rb +0 -1
- data/app/mailers/dorsale/user_mailer.rb +0 -1
- data/app/models/dorsale/address.rb +2 -2
- data/app/models/dorsale/alexandrie/attachment_type.rb +0 -1
- data/app/models/dorsale/billing_machine.rb +1 -2
- data/app/models/dorsale/billing_machine/invoice.rb +19 -30
- data/app/models/dorsale/billing_machine/invoice_line.rb +2 -2
- data/app/models/dorsale/billing_machine/quotation.rb +11 -17
- data/app/models/dorsale/billing_machine/quotation_line.rb +2 -3
- data/app/models/dorsale/comment.rb +1 -1
- data/app/models/dorsale/customer_vault/corporation.rb +11 -10
- data/app/models/dorsale/customer_vault/event.rb +2 -2
- data/app/models/dorsale/customer_vault/individual.rb +4 -2
- data/app/models/dorsale/customer_vault/person.rb +14 -4
- data/app/models/dorsale/customer_vault/person_data.rb +1 -2
- data/app/models/dorsale/expense_gun/expense.rb +2 -5
- data/app/models/dorsale/expense_gun/expense_line.rb +2 -2
- data/app/models/dorsale/flyboy/task.rb +17 -18
- data/app/models/dorsale/flyboy/task_comment.rb +1 -1
- data/app/models/dorsale/users/active.rb +1 -1
- data/app/models/dorsale/users/avatar.rb +2 -1
- data/app/models/dorsale/users/password_generation.rb +0 -1
- data/app/pdfs/concerns/dorsale/alexandrie/prawn/render_with_attachments.rb +1 -1
- data/app/pdfs/dorsale/application_pdf.rb +7 -0
- data/app/pdfs/dorsale/billing_machine/invoice_multiple_vat_pdf.rb +52 -47
- data/app/pdfs/dorsale/billing_machine/invoice_single_vat_pdf.rb +94 -205
- data/app/pdfs/dorsale/prawn_helpers.rb +107 -0
- data/app/policies/dorsale/application_policy.rb +2 -4
- data/app/policies/dorsale/expense_gun/expense_policy_helper.rb +0 -1
- data/app/policies/dorsale/flyboy/task_policy_helper.rb +3 -3
- data/app/policies/dorsale/policy_checker.rb +11 -18
- data/app/services/dorsale/billing_machine/invoice/copy.rb +2 -2
- data/app/services/dorsale/billing_machine/pdf_file_generator.rb +7 -2
- data/app/services/dorsale/billing_machine/quotation/copy.rb +1 -1
- data/app/services/dorsale/billing_machine/quotation/to_invoice.rb +10 -7
- data/app/services/dorsale/flyboy/task/snoozer.rb +1 -1
- data/app/views/dorsale/billing_machine/invoices/_details.html.slim +1 -2
- data/app/views/dorsale/billing_machine/invoices/_form.html.slim +4 -11
- data/app/views/dorsale/billing_machine/invoices/index.xlsx.ruby +1 -1
- data/app/views/dorsale/flyboy/tasks/index.xlsx.ruby +1 -1
- data/config/locales/alexandrie.en.yml +0 -4
- data/config/locales/alexandrie.fr.yml +0 -4
- data/config/locales/billing_machine.en.yml +0 -41
- data/config/locales/billing_machine.fr.yml +0 -41
- data/config/routes.rb +0 -1
- data/db/migrate/20161119064536_delete_id_cards.rb +9 -0
- data/features/billing_machine_invoices.feature +0 -1
- data/features/billing_machine_multiple_vat.feature +0 -1
- data/features/billing_machine_quotations.feature +0 -1
- data/features/step_definitions/billing_machine_invoices_steps.rb +73 -79
- data/features/step_definitions/billing_machine_multiple_vat.rb +5 -6
- data/features/step_definitions/billing_machine_payment_terms_steps.rb +2 -2
- data/features/step_definitions/billing_machine_quotations_steps.rb +45 -80
- data/features/step_definitions/common_steps.rb +0 -4
- data/features/step_definitions/customer_vault_activity_types_steps.rb +1 -1
- data/features/step_definitions/customer_vault_corporations_steps.rb +27 -23
- data/features/step_definitions/customer_vault_individuals_steps.rb +8 -9
- data/features/step_definitions/customer_vault_invoices_steps.rb +1 -1
- data/features/step_definitions/customer_vault_links_steps.rb +6 -6
- data/features/step_definitions/customer_vault_origins_steps.rb +1 -1
- data/features/step_definitions/customer_vault_people_steps.rb +2 -1
- data/features/step_definitions/expense_gun_categories_steps.rb +2 -2
- data/features/step_definitions/expense_gun_expenses_steps.rb +6 -6
- data/features/step_definitions/flyboy_tasks_steps.rb +4 -7
- data/features/step_definitions/tasks_summary_steps.rb +3 -3
- data/features/support/env.rb +3 -2
- data/lib/dorsale/engine.rb +8 -8
- data/lib/dorsale/file_loader.rb +1 -1
- data/lib/dorsale/simple_form.rb +3 -3
- data/lib/dorsale/simple_form_bootstrap.rb +46 -46
- data/lib/dorsale/version.rb +1 -1
- data/spec/controllers/dorsale/alexandrie/attachments_controller_spec.rb +3 -3
- data/spec/controllers/dorsale/billing_machine/invoices_controller_spec.rb +0 -1
- data/spec/controllers/dorsale/comments_controller_spec.rb +1 -1
- data/spec/controllers/dorsale/customer_vault/events_controller_spec.rb +9 -9
- data/spec/controllers/dorsale/customer_vault/people_controller_spec.rb +15 -19
- data/spec/controllers/dorsale/flyboy/task_comments_controller_spec.rb +1 -2
- data/spec/controllers/dorsale/flyboy/tasks_controller_spec.rb +43 -19
- data/spec/factories/alexandrie_attachment_types.rb +1 -1
- data/spec/factories/alexandrie_attachments.rb +1 -1
- data/spec/factories/billing_machine_invoice_lines.rb +1 -1
- data/spec/factories/billing_machine_invoices.rb +1 -2
- data/spec/factories/billing_machine_payment_terms.rb +1 -1
- data/spec/factories/billing_machine_quotation_lines.rb +1 -2
- data/spec/factories/billing_machine_quotations.rb +1 -2
- data/spec/factories/customer_vault_activity_types.rb +1 -1
- data/spec/factories/customer_vault_corporations.rb +1 -1
- data/spec/factories/customer_vault_event.rb +1 -1
- data/spec/factories/customer_vault_individuals.rb +2 -2
- data/spec/factories/customer_vault_links.rb +1 -1
- data/spec/factories/customer_vault_origins.rb +1 -1
- data/spec/factories/dorsale_addresses.rb +1 -1
- data/spec/factories/dorsale_comments.rb +1 -1
- data/spec/factories/expense_gun_categories.rb +2 -2
- data/spec/factories/expense_gun_expense_lines.rb +8 -8
- data/spec/factories/expense_gun_expenses.rb +2 -3
- data/spec/factories/flyboy_task_comments.rb +1 -1
- data/spec/factories/flyboy_tasks.rb +1 -1
- data/spec/mailers/user_mailer.rb +5 -6
- data/spec/models/dorsale/address_spec.rb +26 -26
- data/spec/models/dorsale/billing_machine/invoice_line_spec.rb +6 -6
- data/spec/models/dorsale/billing_machine/invoice_spec.rb +37 -23
- data/spec/models/dorsale/billing_machine/quotation_line_spec.rb +9 -10
- data/spec/models/dorsale/billing_machine/quotation_spec.rb +26 -28
- data/spec/models/dorsale/billing_machine_spec.rb +0 -1
- data/spec/models/dorsale/comment_spec.rb +0 -1
- data/spec/models/dorsale/customer_vault/corporation_spec.rb +20 -20
- data/spec/models/dorsale/customer_vault/event_spec.rb +1 -1
- data/spec/models/dorsale/customer_vault/individual_spec.rb +0 -2
- data/spec/models/dorsale/customer_vault/link_spec.rb +0 -1
- data/spec/models/dorsale/customer_vault/person_spec.rb +7 -6
- data/spec/models/dorsale/expense_gun/category_spec.rb +2 -2
- data/spec/models/dorsale/expense_gun/expense_line_spec.rb +14 -14
- data/spec/models/dorsale/expense_gun/expense_spec.rb +23 -13
- data/spec/models/dorsale/flyboy/task_comment_spec.rb +5 -6
- data/spec/models/dorsale/flyboy/task_spec.rb +66 -42
- data/spec/models/dorsale/users_spec.rb +3 -5
- data/spec/pdfs/dorsale/billing_machine/invoice_multiple_vat_pdf_spec.rb +6 -11
- data/spec/pdfs/dorsale/billing_machine/invoice_single_vat_pdf_spec.rb +7 -11
- data/spec/pdfs/dorsale/billing_machine/quotation_multiple_vat_pdf_spec.rb +6 -11
- data/spec/pdfs/dorsale/billing_machine/quotation_single_vat_pdf_spec.rb +7 -14
- data/spec/rails_helper.rb +1 -1
- data/spec/routing/dorsale/billing_machine/invoices_routing_spec.rb +0 -1
- data/spec/routing/dorsale/billing_machine/quotations_routing_spec.rb +0 -1
- data/spec/routing/dorsale/comments_routing_spec.rb +0 -2
- data/spec/routing/dorsale/customer_vault/people_routing_spec.rb +0 -1
- data/spec/routing/dorsale/expense_gun/expenses_routing_spec.rb +0 -1
- data/spec/routing/dorsale/flyboy/task_comments_routing_spec.rb +0 -1
- data/spec/routing/dorsale/users_routing_spec.rb +1 -1
- data/spec/services/dorsale/billing_machine/quotation/copy_spec.rb +2 -2
- data/spec/services/dorsale/expense_gun/expense/copy_spec.rb +13 -17
- data/spec/services/dorsale/flyboy/task/copy_spec.rb +1 -2
- data/spec/services/dorsale/flyboy/task/snoozer_spec.rb +3 -3
- data/spec/spec_helper.rb +1 -0
- metadata +5 -43
- data/app/controllers/dorsale/billing_machine/id_cards_controller.rb +0 -106
- data/app/models/dorsale/billing_machine/id_card.rb +0 -14
- data/app/policies/dorsale/billing_machine/id_card_policy_helper.rb +0 -7
- data/app/views/dorsale/billing_machine/id_cards/_form.html.slim +0 -42
- data/app/views/dorsale/billing_machine/id_cards/_index_actions.html.slim +0 -2
- data/app/views/dorsale/billing_machine/id_cards/_list.html.slim +0 -27
- data/app/views/dorsale/billing_machine/id_cards/edit.html.slim +0 -1
- data/app/views/dorsale/billing_machine/id_cards/index.html.slim +0 -11
- data/app/views/dorsale/billing_machine/id_cards/new.html.slim +0 -1
- data/features/billing_machine_id_cards.feature +0 -19
- data/features/step_definitions/billing_machine_id_cards_steps.rb +0 -53
- data/features/support/ajax.rb +0 -20
- data/features/support/database_cleaner.rb +0 -12
- data/features/support/factory_girl.rb +0 -1
- data/features/support/fix_referrer.rb +0 -9
- data/features/support/message_delivery.rb +0 -1
- data/features/support/poltergeist.rb +0 -22
- data/features/support/rails.rb +0 -1
- data/features/support/rspec.rb +0 -6
- data/features/support/screenshots.rb +0 -5
- data/features/support/sign_in.rb +0 -17
- data/features/support/simplecov.rb +0 -1
- data/features/support/turbolinks.rb +0 -30
- data/spec/factories/billing_machine_id_cards.rb +0 -26
- data/spec/models/dorsale/billing_machine/id_card_spec.rb +0 -12
@@ -52,10 +52,10 @@ module Dorsale::Flyboy::ApplicationHelper
|
|
52
52
|
end
|
53
53
|
|
54
54
|
def task_term_values_for_select
|
55
|
-
today =
|
56
|
-
tomorrow =
|
57
|
-
this_week =
|
58
|
-
next_week = (
|
55
|
+
today = Date.current
|
56
|
+
tomorrow = Date.tomorrow
|
57
|
+
this_week = Date.current.end_of_week
|
58
|
+
next_week = (Date.current + 1.week).end_of_week
|
59
59
|
|
60
60
|
# Because today or tomorrow can be equal to this week
|
61
61
|
if @task.term == today
|
@@ -78,5 +78,4 @@ module Dorsale::Flyboy::ApplicationHelper
|
|
78
78
|
[Dorsale::Flyboy::Task.t("term_value.custom"), :custom, {selected: is_custom}],
|
79
79
|
]
|
80
80
|
end
|
81
|
-
|
82
81
|
end
|
@@ -4,7 +4,7 @@ class Dorsale::Address < ::Dorsale::ApplicationRecord
|
|
4
4
|
validates :addressable, presence: true
|
5
5
|
|
6
6
|
def one_line
|
7
|
-
zip_city = [zip, city].select(&:present?).join(
|
8
|
-
[street, street_bis, zip_city, country].select(&:present?).join(
|
7
|
+
zip_city = [zip, city].select(&:present?).join(" ")
|
8
|
+
[street, street_bis, zip_city, country].select(&:present?).join(", ")
|
9
9
|
end
|
10
10
|
end
|
@@ -23,11 +23,10 @@ module Dorsale::BillingMachine
|
|
23
23
|
"::Dorsale::BillingMachine::Quotation#{vat_mode.to_s.capitalize}VatPdf".constantize
|
24
24
|
end
|
25
25
|
|
26
|
-
|
26
|
+
attr_writer :default_currency
|
27
27
|
|
28
28
|
def default_currency
|
29
29
|
@default_currency ||= "€"
|
30
30
|
end
|
31
|
-
|
32
31
|
end
|
33
32
|
end
|
@@ -3,7 +3,6 @@ class Dorsale::BillingMachine::Invoice < ::Dorsale::ApplicationRecord
|
|
3
3
|
|
4
4
|
belongs_to :customer, polymorphic: true
|
5
5
|
belongs_to :payment_term
|
6
|
-
belongs_to :id_card
|
7
6
|
|
8
7
|
has_many :lines, inverse_of: :invoice, dependent: :destroy, class_name: ::Dorsale::BillingMachine::InvoiceLine
|
9
8
|
|
@@ -13,8 +12,7 @@ class Dorsale::BillingMachine::Invoice < ::Dorsale::ApplicationRecord
|
|
13
12
|
|
14
13
|
mount_uploader :pdf_file, ::Dorsale::PdfUploader
|
15
14
|
|
16
|
-
validates :
|
17
|
-
validates :date, presence: true
|
15
|
+
validates :date, presence: true
|
18
16
|
|
19
17
|
default_scope -> {
|
20
18
|
order(unique_index: :desc)
|
@@ -39,14 +37,13 @@ class Dorsale::BillingMachine::Invoice < ::Dorsale::ApplicationRecord
|
|
39
37
|
assign_default :commercial_discount, 0.0
|
40
38
|
assign_default :total_excluding_taxes, 0.0
|
41
39
|
assign_default :paid, false
|
42
|
-
|
43
40
|
end
|
44
41
|
|
45
42
|
after_initialize :assign_default_dates
|
46
43
|
|
47
44
|
def assign_default_dates
|
48
|
-
assign_default :date,
|
49
|
-
assign_default :due_date,
|
45
|
+
assign_default :date, Date.current
|
46
|
+
assign_default :due_date, Date.current + 30.days
|
50
47
|
end
|
51
48
|
|
52
49
|
before_save :update_totals
|
@@ -90,9 +87,7 @@ class Dorsale::BillingMachine::Invoice < ::Dorsale::ApplicationRecord
|
|
90
87
|
vat_rates.first || ::Dorsale::BillingMachine::DEFAULT_VAT_RATE
|
91
88
|
end
|
92
89
|
|
93
|
-
|
94
|
-
@vat_rate = value
|
95
|
-
end
|
90
|
+
attr_writer :vat_rate
|
96
91
|
|
97
92
|
before_validation :apply_vat_rate_to_lines
|
98
93
|
|
@@ -106,38 +101,32 @@ class Dorsale::BillingMachine::Invoice < ::Dorsale::ApplicationRecord
|
|
106
101
|
|
107
102
|
def payment_status
|
108
103
|
if paid?
|
109
|
-
|
110
|
-
elsif due_date
|
111
|
-
|
112
|
-
elsif
|
113
|
-
|
114
|
-
elsif
|
115
|
-
|
104
|
+
:paid
|
105
|
+
elsif due_date.nil?
|
106
|
+
:on_alert
|
107
|
+
elsif Date.current >= due_date + 15
|
108
|
+
:on_alert
|
109
|
+
elsif Date.current > due_date
|
110
|
+
:late
|
116
111
|
else
|
117
|
-
|
112
|
+
:pending
|
118
113
|
end
|
119
114
|
end
|
120
115
|
|
121
116
|
def t(*args)
|
122
117
|
return super if args.any?
|
123
118
|
|
124
|
-
if balance
|
119
|
+
if balance&.negative?
|
125
120
|
super(:credit_note)
|
126
121
|
else
|
127
122
|
self.class.t
|
128
123
|
end
|
129
124
|
end
|
130
125
|
|
131
|
-
|
132
|
-
private
|
133
|
-
|
134
|
-
def
|
135
|
-
private
|
136
|
-
|
137
|
-
def total_including_taxes=(*); super; end
|
138
|
-
private :total_including_taxes=
|
139
|
-
|
140
|
-
def balance=(*); super; end
|
141
|
-
private :balance=
|
142
|
-
|
126
|
+
# rubocop:disable Style/SingleLineMethods
|
127
|
+
private def total_excluding_taxes=(*); super; end
|
128
|
+
private def vat_amount=(*); super; end
|
129
|
+
private def total_including_taxes=(*); super; end
|
130
|
+
private def balance=(*); super; end
|
131
|
+
# rubocop:enable Style/SingleLineMethods
|
143
132
|
end
|
@@ -19,12 +19,12 @@ class Dorsale::BillingMachine::InvoiceLine < ::Dorsale::ApplicationRecord
|
|
19
19
|
|
20
20
|
def update_total
|
21
21
|
assign_default_values
|
22
|
-
self.total =
|
22
|
+
self.total = quantity * unit_price
|
23
23
|
end
|
24
24
|
|
25
25
|
after_save :update_invoice_total
|
26
26
|
|
27
27
|
def update_invoice_total
|
28
|
-
|
28
|
+
invoice.reload.save!
|
29
29
|
end
|
30
30
|
end
|
@@ -4,8 +4,8 @@ class Dorsale::BillingMachine::Quotation < ::Dorsale::ApplicationRecord
|
|
4
4
|
STATES = %w(pending accepted refused canceled)
|
5
5
|
|
6
6
|
belongs_to :customer, polymorphic: true
|
7
|
-
belongs_to :id_card
|
8
7
|
belongs_to :payment_term
|
8
|
+
|
9
9
|
has_many :lines,
|
10
10
|
:inverse_of => :quotation,
|
11
11
|
:dependent => :destroy,
|
@@ -22,9 +22,8 @@ class Dorsale::BillingMachine::Quotation < ::Dorsale::ApplicationRecord
|
|
22
22
|
|
23
23
|
mount_uploader :pdf_file, ::Dorsale::PdfUploader
|
24
24
|
|
25
|
-
validates :
|
26
|
-
validates :
|
27
|
-
validates :state, presence: true, inclusion: {in: proc { STATES } }
|
25
|
+
validates :date, presence: true
|
26
|
+
validates :state, presence: true, inclusion: {in: proc { STATES }}
|
28
27
|
|
29
28
|
default_scope -> {
|
30
29
|
order(unique_index: :desc)
|
@@ -45,7 +44,7 @@ class Dorsale::BillingMachine::Quotation < ::Dorsale::ApplicationRecord
|
|
45
44
|
|
46
45
|
def assign_default_values
|
47
46
|
assign_default :state, STATES.first
|
48
|
-
assign_default :date,
|
47
|
+
assign_default :date, Date.current
|
49
48
|
assign_default :expires_at, date + 1.month
|
50
49
|
assign_default :commercial_discount, 0
|
51
50
|
assign_default :vat_amount, 0
|
@@ -76,17 +75,14 @@ class Dorsale::BillingMachine::Quotation < ::Dorsale::ApplicationRecord
|
|
76
75
|
self.total_including_taxes = total_excluding_taxes + vat_amount
|
77
76
|
end
|
78
77
|
|
79
|
-
|
80
|
-
private
|
81
|
-
|
82
|
-
def
|
83
|
-
|
84
|
-
|
85
|
-
def total_including_taxes=(*); super; end
|
86
|
-
private :total_including_taxes=
|
78
|
+
# rubocop:disable Style/SingleLineMethods
|
79
|
+
private def total_excluding_taxes=(*); super; end
|
80
|
+
private def vat_amount=(*); super; end
|
81
|
+
private def total_including_taxes=(*); super; end
|
82
|
+
# rubocop:enable Style/SingleLineMethods
|
87
83
|
|
88
84
|
def balance
|
89
|
-
|
85
|
+
total_including_taxes
|
90
86
|
end
|
91
87
|
|
92
88
|
def vat_rate
|
@@ -105,9 +101,7 @@ class Dorsale::BillingMachine::Quotation < ::Dorsale::ApplicationRecord
|
|
105
101
|
vat_rates.first || ::Dorsale::BillingMachine::DEFAULT_VAT_RATE
|
106
102
|
end
|
107
103
|
|
108
|
-
|
109
|
-
@vat_rate = value
|
110
|
-
end
|
104
|
+
attr_writer :vat_rate
|
111
105
|
|
112
106
|
before_validation :apply_vat_rate_to_lines
|
113
107
|
|
@@ -19,13 +19,12 @@ class Dorsale::BillingMachine::QuotationLine < ::Dorsale::ApplicationRecord
|
|
19
19
|
|
20
20
|
def update_total
|
21
21
|
assign_default_values
|
22
|
-
self.total =
|
22
|
+
self.total = quantity * unit_price
|
23
23
|
end
|
24
24
|
|
25
25
|
after_save :update_quotation_total
|
26
26
|
|
27
27
|
def update_quotation_total
|
28
|
-
|
28
|
+
quotation.reload.save!
|
29
29
|
end
|
30
|
-
|
31
30
|
end
|
@@ -3,7 +3,7 @@ class Dorsale::CustomerVault::Corporation < Dorsale::CustomerVault::Person
|
|
3
3
|
def_delegators :data, *Dorsale::CustomerVault::CorporationData.methods_to_delegate
|
4
4
|
|
5
5
|
validates :corporation_name, presence: true
|
6
|
-
has_many :individuals
|
6
|
+
has_many :individuals, dependent: :nullify
|
7
7
|
|
8
8
|
def self_and_related_events
|
9
9
|
::Dorsale::CustomerVault::Event.where(person: [self] + individuals)
|
@@ -17,13 +17,14 @@ class Dorsale::CustomerVault::Corporation < Dorsale::CustomerVault::Person
|
|
17
17
|
self.corporation_name = corporation_name
|
18
18
|
end
|
19
19
|
|
20
|
-
|
21
|
-
private def first_name
|
22
|
-
private def
|
23
|
-
private def last_name
|
24
|
-
private def
|
25
|
-
private def corporation
|
26
|
-
private def
|
27
|
-
private def corporation_id
|
28
|
-
|
20
|
+
# rubocop:disable Style/SingleLineMethods
|
21
|
+
private def first_name; raise NoMethodError; end
|
22
|
+
private def first_name=; raise NoMethodError; end
|
23
|
+
private def last_name; raise NoMethodError; end
|
24
|
+
private def last_name=; raise NoMethodError; end
|
25
|
+
private def corporation; raise NoMethodError; end
|
26
|
+
private def corporation=; raise NoMethodError; end
|
27
|
+
private def corporation_id; raise NoMethodError; end
|
28
|
+
private def corporation_id=; raise NoMethodError; end
|
29
|
+
# rubocop:enable Style/SingleLineMethods
|
29
30
|
end
|
@@ -10,8 +10,8 @@ class Dorsale::CustomerVault::Event < ::Dorsale::ApplicationRecord
|
|
10
10
|
validates :person, presence: true
|
11
11
|
validates :date, presence: true
|
12
12
|
validates :text, presence: true
|
13
|
-
validates :action, presence: true, inclusion: {in: proc {ACTIONS
|
14
|
-
validates :contact_type, presence: true, inclusion: {in: proc {CONTACT_TYPES
|
13
|
+
validates :action, presence: true, inclusion: {in: proc { ACTIONS }}
|
14
|
+
validates :contact_type, presence: true, inclusion: {in: proc { CONTACT_TYPES }}
|
15
15
|
|
16
16
|
default_scope -> {
|
17
17
|
all
|
@@ -11,16 +11,18 @@ class Dorsale::CustomerVault::Individual < Dorsale::CustomerVault::Person
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def name
|
14
|
-
[
|
14
|
+
[last_name, first_name].join(", ")
|
15
15
|
end
|
16
16
|
|
17
17
|
def activity_type
|
18
18
|
corporation.try(:activity_type)
|
19
19
|
end
|
20
20
|
|
21
|
+
# rubocop:disable Style/SingleLineMethods
|
21
22
|
private def corporation_name; raise NoMethodError; end
|
22
23
|
private def corporation_name=; raise NoMethodError; end
|
23
|
-
private def activity_type=;
|
24
|
+
private def activity_type=; raise NoMethodError; end
|
24
25
|
private def activity_type_id; raise NoMethodError; end
|
25
26
|
private def activity_type_id=; raise NoMethodError; end
|
27
|
+
# rubocop:enable Style/SingleLineMethods
|
26
28
|
end
|
@@ -24,7 +24,7 @@ class Dorsale::CustomerVault::Person < ::Dorsale::ApplicationRecord
|
|
24
24
|
has_one :address, class_name: ::Dorsale::Address, as: :addressable, inverse_of: :addressable, dependent: :destroy
|
25
25
|
has_many :tasks, class_name: ::Dorsale::Flyboy::Task, as: :taskable, dependent: :destroy
|
26
26
|
has_many :events, dependent: :destroy
|
27
|
-
has_many :invoices, class_name: ::Dorsale::BillingMachine::Invoice, as: :customer
|
27
|
+
has_many :invoices, class_name: ::Dorsale::BillingMachine::Invoice, as: :customer, dependent: :nullify
|
28
28
|
accepts_nested_attributes_for :address, allow_destroy: true
|
29
29
|
|
30
30
|
belongs_to :activity_type, class_name: ::Dorsale::CustomerVault::ActivityType
|
@@ -33,7 +33,17 @@ class Dorsale::CustomerVault::Person < ::Dorsale::ApplicationRecord
|
|
33
33
|
after_destroy :destroy_links
|
34
34
|
|
35
35
|
default_scope -> {
|
36
|
-
|
36
|
+
order_by_name
|
37
|
+
}
|
38
|
+
|
39
|
+
scope :order_by_name, -> {
|
40
|
+
order %(
|
41
|
+
LOWER(
|
42
|
+
COALESCE(corporation_name, '') ||
|
43
|
+
COALESCE(last_name, '') ||
|
44
|
+
COALESCE(first_name, '')
|
45
|
+
) ASC
|
46
|
+
)
|
37
47
|
}
|
38
48
|
|
39
49
|
after_initialize :build_address, if: proc { new_record? && address.nil? }
|
@@ -59,12 +69,12 @@ class Dorsale::CustomerVault::Person < ::Dorsale::ApplicationRecord
|
|
59
69
|
a = ::Dorsale::CustomerVault::Link
|
60
70
|
.where(alice_id: id)
|
61
71
|
.preload(:alice => :taggings, :bob => :taggings)
|
62
|
-
.each { |l| l.person = l.alice
|
72
|
+
.each { |l| l.person = l.alice; l.other_person = l.bob }
|
63
73
|
|
64
74
|
b = ::Dorsale::CustomerVault::Link
|
65
75
|
.where(bob_id: id)
|
66
76
|
.preload(:alice => :taggings, :bob => :taggings)
|
67
|
-
.each { |l| l.person = l.bob
|
77
|
+
.each { |l| l.person = l.bob; l.other_person = l.alice }
|
68
78
|
|
69
79
|
return a + b
|
70
80
|
end
|
@@ -8,11 +8,10 @@ class Dorsale::CustomerVault::PersonData
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def self.load(json_string)
|
11
|
-
new JSON.
|
11
|
+
new JSON.parse(json_string.presence || "{}")
|
12
12
|
end
|
13
13
|
|
14
14
|
def self.methods_to_delegate
|
15
15
|
instance_methods - Dorsale::CustomerVault::PersonData.instance_methods
|
16
16
|
end
|
17
17
|
end
|
18
|
-
|
@@ -24,7 +24,7 @@ class Dorsale::ExpenseGun::Expense < ::Dorsale::ApplicationRecord
|
|
24
24
|
}
|
25
25
|
|
26
26
|
def assign_default_values
|
27
|
-
assign_default :date,
|
27
|
+
assign_default :date, Date.current
|
28
28
|
end
|
29
29
|
|
30
30
|
# Sum of line amounts
|
@@ -42,9 +42,7 @@ class Dorsale::ExpenseGun::Expense < ::Dorsale::ApplicationRecord
|
|
42
42
|
expense_lines.map(&:total_vat_deductible).sum
|
43
43
|
end
|
44
44
|
|
45
|
-
|
46
|
-
aasm.current_state
|
47
|
-
end
|
45
|
+
delegate :current_state, to: :aasm
|
48
46
|
|
49
47
|
aasm(column: :state, whiny_transitions: false) do
|
50
48
|
state :draft, initial: true
|
@@ -73,5 +71,4 @@ class Dorsale::ExpenseGun::Expense < ::Dorsale::ApplicationRecord
|
|
73
71
|
def may_edit?
|
74
72
|
current_state == :draft
|
75
73
|
end
|
76
|
-
|
77
74
|
end
|
@@ -10,7 +10,8 @@ class Dorsale::ExpenseGun::ExpenseLine < ::Dorsale::ApplicationRecord
|
|
10
10
|
validates :category, presence: true
|
11
11
|
validates :total_all_taxes, presence: true, numericality: {greater_than_or_equal_to: 0}
|
12
12
|
validates :vat, presence: true, numericality: {greater_than_or_equal_to: 0}
|
13
|
-
validates :company_part, presence: true
|
13
|
+
validates :company_part, presence: true
|
14
|
+
validates :company_part, numericality: {greater_than_or_equal_to: 0, less_than_or_equal_to: 100}
|
14
15
|
|
15
16
|
def assign_default_values
|
16
17
|
assign_default :company_part, 100
|
@@ -23,5 +24,4 @@ class Dorsale::ExpenseGun::ExpenseLine < ::Dorsale::ApplicationRecord
|
|
23
24
|
def total_vat_deductible
|
24
25
|
category.vat_deductible == true ? (vat * company_part / 100) : 0.0
|
25
26
|
end
|
26
|
-
|
27
27
|
end
|