dorsale 3.8.1 → 3.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (189) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +5 -0
  3. data/README.md +5 -1
  4. data/app/commands/dorsale/flyboy/task_commands.rb +1 -1
  5. data/app/controllers/concerns/dorsale/flyboy/tasks_summary_concern.rb +0 -1
  6. data/app/controllers/dorsale/alexandrie/attachments_controller.rb +1 -2
  7. data/app/controllers/dorsale/application_controller.rb +0 -1
  8. data/app/controllers/dorsale/billing_machine/application_controller.rb +0 -2
  9. data/app/controllers/dorsale/billing_machine/invoices_controller.rb +9 -22
  10. data/app/controllers/dorsale/billing_machine/payment_terms_controller.rb +0 -1
  11. data/app/controllers/dorsale/billing_machine/quotations_controller.rb +1 -4
  12. data/app/controllers/dorsale/comments_controller.rb +3 -2
  13. data/app/controllers/dorsale/customer_vault/activity_types_controller.rb +0 -1
  14. data/app/controllers/dorsale/customer_vault/application_controller.rb +0 -1
  15. data/app/controllers/dorsale/customer_vault/links_controller.rb +22 -12
  16. data/app/controllers/dorsale/customer_vault/origins_controller.rb +0 -1
  17. data/app/controllers/dorsale/customer_vault/people_controller.rb +2 -3
  18. data/app/controllers/dorsale/expense_gun/categories_controller.rb +0 -1
  19. data/app/controllers/dorsale/expense_gun/expenses_controller.rb +0 -1
  20. data/app/controllers/dorsale/flyboy/task_comments_controller.rb +0 -1
  21. data/app/controllers/dorsale/flyboy/tasks_controller.rb +28 -21
  22. data/app/controllers/dorsale/users_controller.rb +0 -1
  23. data/app/filters/dorsale/billing_machine/small_data/filter_strategy_by_payment_status.rb +9 -5
  24. data/app/filters/dorsale/billing_machine/small_data/filter_strategy_by_state.rb +2 -2
  25. data/app/filters/dorsale/flyboy/small_data/filter_for_tasks.rb +1 -1
  26. data/app/helpers/dorsale/billing_machine/application_helper.rb +6 -6
  27. data/app/helpers/dorsale/context_helper.rb +1 -1
  28. data/app/helpers/dorsale/flyboy/application_helper.rb +4 -5
  29. data/app/mailers/dorsale/billing_machine/invoice_mailer.rb +0 -1
  30. data/app/mailers/dorsale/flyboy/task_mailer.rb +0 -1
  31. data/app/mailers/dorsale/user_mailer.rb +0 -1
  32. data/app/models/dorsale/address.rb +2 -2
  33. data/app/models/dorsale/alexandrie/attachment_type.rb +0 -1
  34. data/app/models/dorsale/billing_machine.rb +1 -2
  35. data/app/models/dorsale/billing_machine/invoice.rb +19 -30
  36. data/app/models/dorsale/billing_machine/invoice_line.rb +2 -2
  37. data/app/models/dorsale/billing_machine/quotation.rb +11 -17
  38. data/app/models/dorsale/billing_machine/quotation_line.rb +2 -3
  39. data/app/models/dorsale/comment.rb +1 -1
  40. data/app/models/dorsale/customer_vault/corporation.rb +11 -10
  41. data/app/models/dorsale/customer_vault/event.rb +2 -2
  42. data/app/models/dorsale/customer_vault/individual.rb +4 -2
  43. data/app/models/dorsale/customer_vault/person.rb +14 -4
  44. data/app/models/dorsale/customer_vault/person_data.rb +1 -2
  45. data/app/models/dorsale/expense_gun/expense.rb +2 -5
  46. data/app/models/dorsale/expense_gun/expense_line.rb +2 -2
  47. data/app/models/dorsale/flyboy/task.rb +17 -18
  48. data/app/models/dorsale/flyboy/task_comment.rb +1 -1
  49. data/app/models/dorsale/users/active.rb +1 -1
  50. data/app/models/dorsale/users/avatar.rb +2 -1
  51. data/app/models/dorsale/users/password_generation.rb +0 -1
  52. data/app/pdfs/concerns/dorsale/alexandrie/prawn/render_with_attachments.rb +1 -1
  53. data/app/pdfs/dorsale/application_pdf.rb +7 -0
  54. data/app/pdfs/dorsale/billing_machine/invoice_multiple_vat_pdf.rb +52 -47
  55. data/app/pdfs/dorsale/billing_machine/invoice_single_vat_pdf.rb +94 -205
  56. data/app/pdfs/dorsale/prawn_helpers.rb +107 -0
  57. data/app/policies/dorsale/application_policy.rb +2 -4
  58. data/app/policies/dorsale/expense_gun/expense_policy_helper.rb +0 -1
  59. data/app/policies/dorsale/flyboy/task_policy_helper.rb +3 -3
  60. data/app/policies/dorsale/policy_checker.rb +11 -18
  61. data/app/services/dorsale/billing_machine/invoice/copy.rb +2 -2
  62. data/app/services/dorsale/billing_machine/pdf_file_generator.rb +7 -2
  63. data/app/services/dorsale/billing_machine/quotation/copy.rb +1 -1
  64. data/app/services/dorsale/billing_machine/quotation/to_invoice.rb +10 -7
  65. data/app/services/dorsale/flyboy/task/snoozer.rb +1 -1
  66. data/app/views/dorsale/billing_machine/invoices/_details.html.slim +1 -2
  67. data/app/views/dorsale/billing_machine/invoices/_form.html.slim +4 -11
  68. data/app/views/dorsale/billing_machine/invoices/index.xlsx.ruby +1 -1
  69. data/app/views/dorsale/flyboy/tasks/index.xlsx.ruby +1 -1
  70. data/config/locales/alexandrie.en.yml +0 -4
  71. data/config/locales/alexandrie.fr.yml +0 -4
  72. data/config/locales/billing_machine.en.yml +0 -41
  73. data/config/locales/billing_machine.fr.yml +0 -41
  74. data/config/routes.rb +0 -1
  75. data/db/migrate/20161119064536_delete_id_cards.rb +9 -0
  76. data/features/billing_machine_invoices.feature +0 -1
  77. data/features/billing_machine_multiple_vat.feature +0 -1
  78. data/features/billing_machine_quotations.feature +0 -1
  79. data/features/step_definitions/billing_machine_invoices_steps.rb +73 -79
  80. data/features/step_definitions/billing_machine_multiple_vat.rb +5 -6
  81. data/features/step_definitions/billing_machine_payment_terms_steps.rb +2 -2
  82. data/features/step_definitions/billing_machine_quotations_steps.rb +45 -80
  83. data/features/step_definitions/common_steps.rb +0 -4
  84. data/features/step_definitions/customer_vault_activity_types_steps.rb +1 -1
  85. data/features/step_definitions/customer_vault_corporations_steps.rb +27 -23
  86. data/features/step_definitions/customer_vault_individuals_steps.rb +8 -9
  87. data/features/step_definitions/customer_vault_invoices_steps.rb +1 -1
  88. data/features/step_definitions/customer_vault_links_steps.rb +6 -6
  89. data/features/step_definitions/customer_vault_origins_steps.rb +1 -1
  90. data/features/step_definitions/customer_vault_people_steps.rb +2 -1
  91. data/features/step_definitions/expense_gun_categories_steps.rb +2 -2
  92. data/features/step_definitions/expense_gun_expenses_steps.rb +6 -6
  93. data/features/step_definitions/flyboy_tasks_steps.rb +4 -7
  94. data/features/step_definitions/tasks_summary_steps.rb +3 -3
  95. data/features/support/env.rb +3 -2
  96. data/lib/dorsale/engine.rb +8 -8
  97. data/lib/dorsale/file_loader.rb +1 -1
  98. data/lib/dorsale/simple_form.rb +3 -3
  99. data/lib/dorsale/simple_form_bootstrap.rb +46 -46
  100. data/lib/dorsale/version.rb +1 -1
  101. data/spec/controllers/dorsale/alexandrie/attachments_controller_spec.rb +3 -3
  102. data/spec/controllers/dorsale/billing_machine/invoices_controller_spec.rb +0 -1
  103. data/spec/controllers/dorsale/comments_controller_spec.rb +1 -1
  104. data/spec/controllers/dorsale/customer_vault/events_controller_spec.rb +9 -9
  105. data/spec/controllers/dorsale/customer_vault/people_controller_spec.rb +15 -19
  106. data/spec/controllers/dorsale/flyboy/task_comments_controller_spec.rb +1 -2
  107. data/spec/controllers/dorsale/flyboy/tasks_controller_spec.rb +43 -19
  108. data/spec/factories/alexandrie_attachment_types.rb +1 -1
  109. data/spec/factories/alexandrie_attachments.rb +1 -1
  110. data/spec/factories/billing_machine_invoice_lines.rb +1 -1
  111. data/spec/factories/billing_machine_invoices.rb +1 -2
  112. data/spec/factories/billing_machine_payment_terms.rb +1 -1
  113. data/spec/factories/billing_machine_quotation_lines.rb +1 -2
  114. data/spec/factories/billing_machine_quotations.rb +1 -2
  115. data/spec/factories/customer_vault_activity_types.rb +1 -1
  116. data/spec/factories/customer_vault_corporations.rb +1 -1
  117. data/spec/factories/customer_vault_event.rb +1 -1
  118. data/spec/factories/customer_vault_individuals.rb +2 -2
  119. data/spec/factories/customer_vault_links.rb +1 -1
  120. data/spec/factories/customer_vault_origins.rb +1 -1
  121. data/spec/factories/dorsale_addresses.rb +1 -1
  122. data/spec/factories/dorsale_comments.rb +1 -1
  123. data/spec/factories/expense_gun_categories.rb +2 -2
  124. data/spec/factories/expense_gun_expense_lines.rb +8 -8
  125. data/spec/factories/expense_gun_expenses.rb +2 -3
  126. data/spec/factories/flyboy_task_comments.rb +1 -1
  127. data/spec/factories/flyboy_tasks.rb +1 -1
  128. data/spec/mailers/user_mailer.rb +5 -6
  129. data/spec/models/dorsale/address_spec.rb +26 -26
  130. data/spec/models/dorsale/billing_machine/invoice_line_spec.rb +6 -6
  131. data/spec/models/dorsale/billing_machine/invoice_spec.rb +37 -23
  132. data/spec/models/dorsale/billing_machine/quotation_line_spec.rb +9 -10
  133. data/spec/models/dorsale/billing_machine/quotation_spec.rb +26 -28
  134. data/spec/models/dorsale/billing_machine_spec.rb +0 -1
  135. data/spec/models/dorsale/comment_spec.rb +0 -1
  136. data/spec/models/dorsale/customer_vault/corporation_spec.rb +20 -20
  137. data/spec/models/dorsale/customer_vault/event_spec.rb +1 -1
  138. data/spec/models/dorsale/customer_vault/individual_spec.rb +0 -2
  139. data/spec/models/dorsale/customer_vault/link_spec.rb +0 -1
  140. data/spec/models/dorsale/customer_vault/person_spec.rb +7 -6
  141. data/spec/models/dorsale/expense_gun/category_spec.rb +2 -2
  142. data/spec/models/dorsale/expense_gun/expense_line_spec.rb +14 -14
  143. data/spec/models/dorsale/expense_gun/expense_spec.rb +23 -13
  144. data/spec/models/dorsale/flyboy/task_comment_spec.rb +5 -6
  145. data/spec/models/dorsale/flyboy/task_spec.rb +66 -42
  146. data/spec/models/dorsale/users_spec.rb +3 -5
  147. data/spec/pdfs/dorsale/billing_machine/invoice_multiple_vat_pdf_spec.rb +6 -11
  148. data/spec/pdfs/dorsale/billing_machine/invoice_single_vat_pdf_spec.rb +7 -11
  149. data/spec/pdfs/dorsale/billing_machine/quotation_multiple_vat_pdf_spec.rb +6 -11
  150. data/spec/pdfs/dorsale/billing_machine/quotation_single_vat_pdf_spec.rb +7 -14
  151. data/spec/rails_helper.rb +1 -1
  152. data/spec/routing/dorsale/billing_machine/invoices_routing_spec.rb +0 -1
  153. data/spec/routing/dorsale/billing_machine/quotations_routing_spec.rb +0 -1
  154. data/spec/routing/dorsale/comments_routing_spec.rb +0 -2
  155. data/spec/routing/dorsale/customer_vault/people_routing_spec.rb +0 -1
  156. data/spec/routing/dorsale/expense_gun/expenses_routing_spec.rb +0 -1
  157. data/spec/routing/dorsale/flyboy/task_comments_routing_spec.rb +0 -1
  158. data/spec/routing/dorsale/users_routing_spec.rb +1 -1
  159. data/spec/services/dorsale/billing_machine/quotation/copy_spec.rb +2 -2
  160. data/spec/services/dorsale/expense_gun/expense/copy_spec.rb +13 -17
  161. data/spec/services/dorsale/flyboy/task/copy_spec.rb +1 -2
  162. data/spec/services/dorsale/flyboy/task/snoozer_spec.rb +3 -3
  163. data/spec/spec_helper.rb +1 -0
  164. metadata +5 -43
  165. data/app/controllers/dorsale/billing_machine/id_cards_controller.rb +0 -106
  166. data/app/models/dorsale/billing_machine/id_card.rb +0 -14
  167. data/app/policies/dorsale/billing_machine/id_card_policy_helper.rb +0 -7
  168. data/app/views/dorsale/billing_machine/id_cards/_form.html.slim +0 -42
  169. data/app/views/dorsale/billing_machine/id_cards/_index_actions.html.slim +0 -2
  170. data/app/views/dorsale/billing_machine/id_cards/_list.html.slim +0 -27
  171. data/app/views/dorsale/billing_machine/id_cards/edit.html.slim +0 -1
  172. data/app/views/dorsale/billing_machine/id_cards/index.html.slim +0 -11
  173. data/app/views/dorsale/billing_machine/id_cards/new.html.slim +0 -1
  174. data/features/billing_machine_id_cards.feature +0 -19
  175. data/features/step_definitions/billing_machine_id_cards_steps.rb +0 -53
  176. data/features/support/ajax.rb +0 -20
  177. data/features/support/database_cleaner.rb +0 -12
  178. data/features/support/factory_girl.rb +0 -1
  179. data/features/support/fix_referrer.rb +0 -9
  180. data/features/support/message_delivery.rb +0 -1
  181. data/features/support/poltergeist.rb +0 -22
  182. data/features/support/rails.rb +0 -1
  183. data/features/support/rspec.rb +0 -6
  184. data/features/support/screenshots.rb +0 -5
  185. data/features/support/sign_in.rb +0 -17
  186. data/features/support/simplecov.rb +0 -1
  187. data/features/support/turbolinks.rb +0 -30
  188. data/spec/factories/billing_machine_id_cards.rb +0 -26
  189. data/spec/models/dorsale/billing_machine/id_card_spec.rb +0 -12
@@ -1,5 +1,5 @@
1
1
  module Dorsale::ContextHelper
2
- def actions_for(obj, opts={})
2
+ def actions_for(obj, opts = {})
3
3
  url = opts[:url]
4
4
  edit_url = opts[:edit_url]
5
5
  delete_url = opts[:delete_url]
@@ -52,10 +52,10 @@ module Dorsale::Flyboy::ApplicationHelper
52
52
  end
53
53
 
54
54
  def task_term_values_for_select
55
- today = Time.zone.now.to_date
56
- tomorrow = (Time.zone.now + 1.day).to_date
57
- this_week = Time.zone.now.to_date.end_of_week
58
- next_week = (Time.zone.now + 1.week).to_date.end_of_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
@@ -10,5 +10,4 @@ class Dorsale::BillingMachine::InvoiceMailer < ::Dorsale::ApplicationMailer
10
10
  :body => body,
11
11
  )
12
12
  end
13
-
14
13
  end
@@ -29,5 +29,4 @@ class Dorsale::Flyboy::TaskMailer < ::Dorsale::ApplicationMailer
29
29
  :subject => t("task_mailer.term_email.subject", @locals),
30
30
  )
31
31
  end
32
-
33
32
  end
@@ -7,5 +7,4 @@ class Dorsale::UserMailer < ::Dorsale::ApplicationMailer
7
7
  :subject => t("emails.user.new_account.title"),
8
8
  )
9
9
  end
10
-
11
10
  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
@@ -8,5 +8,4 @@ class Dorsale::Alexandrie::AttachmentType < ::Dorsale::ApplicationRecord
8
8
  default_scope -> {
9
9
  order(:name)
10
10
  }
11
-
12
11
  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
- attr_accessor :default_currency
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 :id_card, presence: true
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, Time.zone.now.to_date
49
- assign_default :due_date, Time.zone.now.to_date + 30.days
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
- def vat_rate=(value)
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
- return :paid
110
- elsif due_date == nil
111
- return :on_alert
112
- elsif Time.zone.now.to_date >= due_date + 15
113
- return :on_alert
114
- elsif Time.zone.now.to_date > due_date
115
- return :late
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
- return :pending
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 && balance < 0
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
- def total_excluding_taxes=(*); super; end
132
- private :total_excluding_taxes=
133
-
134
- def vat_amount=(*); super; end
135
- private :vat_amount=
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 = self.quantity * self.unit_price
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
- self.invoice.reload.save!
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 :id_card, presence: true
26
- validates :date, presence: true
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, Time.zone.now.to_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
- def total_excluding_taxes=(*); super; end
80
- private :total_excluding_taxes=
81
-
82
- def vat_amount=(*); super; end
83
- private :vat_amount=
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
- self.total_including_taxes
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
- def vat_rate=(value)
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 = self.quantity * self.unit_price
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
- self.quotation.reload.save!
28
+ quotation.reload.save!
29
29
  end
30
-
31
30
  end
@@ -16,6 +16,6 @@ class Dorsale::Comment < ::Dorsale::ApplicationRecord
16
16
  private
17
17
 
18
18
  def assign_default_values
19
- assign_default :date, Time.zone.now.to_date
19
+ assign_default :date, Date.current
20
20
  end
21
21
  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
- private def first_name; raise NoMethodError; end
21
- private def first_name=; raise NoMethodError; end
22
- private def last_name; raise NoMethodError; end
23
- private def last_name=; raise NoMethodError; end
24
- private def corporation; raise NoMethodError; end
25
- private def corporation=; raise NoMethodError; end
26
- private def corporation_id; raise NoMethodError; end
27
- private def corporation_id=; raise NoMethodError; end
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
- [self.last_name, self.first_name].join(", ")
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=; raise NoMethodError; end
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
- order("LOWER(COALESCE(corporation_name, '') || COALESCE(last_name, '') || COALESCE(first_name, '')) ASC")
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 ; l.other_person = l.bob }
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 ; l.other_person = l.alice }
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.load(json_string)
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, Time.zone.now.to_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
- def current_state
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, numericality: {greater_than_or_equal_to: 0, less_than_or_equal_to: 100.0}
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