smerp-quotation 0.2.2 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8c8ccbdb5928d32132abbd47b040135e7b119765e37357aca2a5decb984d53b9
4
- data.tar.gz: '0977180c69458fd15b22787c3a7f169fdf8b2002d0ad636571ba1257b99ec40c'
3
+ metadata.gz: 0a18dda7b56228271c1032e1a27ef4c0a1dabfa1ed8d44c219ba4b88a9ae4d5a
4
+ data.tar.gz: bd4083071f2cdf271a4eab01422282ad51fc5a55959e40f65514ba8af06e6c2d
5
5
  SHA512:
6
- metadata.gz: cf286bbbcb7ef09a08acb48ae2f4749e4f2079a5f4866e14116a026e96126383ef96422e9bf14a124e4050def1ca9e6c05aa6c0c619b82a85028a7485e00d7a0
7
- data.tar.gz: cff193ff53153f5c892194668afda4bd4c4568a9dc5a187db801a6264d43bf01b4ca4adf690eef6b9a279f9d37962d28a5b65577ac3715a7e026f82512b32f35
6
+ metadata.gz: f52d9a81d3f337e75eb8abcb9087adc0faf6850b743ffe8378578dcaaa8550f118ae6085992dfb3631cb8c071971a7b9fefe97615787be4092ac7bd24fe6fb3d
7
+ data.tar.gz: cb3e06001da8068f511261852688f6c19aa2b3716b1db7ca6e99c1420f101e9134faf9014b060939127fbb5fd2dfde7975fdeb86070197a6e39950bb9b45d321
data/.release_history.yml CHANGED
@@ -6,3 +6,7 @@ smerp-quotation:
6
6
  :timestamp: 1664783292.2046304
7
7
  - :version: 0.2.1
8
8
  :timestamp: 1664817326.603613
9
+ - :version: 0.2.2
10
+ :timestamp: 1664874428.3551033
11
+ - :version: 0.2.3
12
+ :timestamp: 1664880291.384937
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- smerp-quotation (0.2.2)
4
+ smerp-quotation (0.2.4)
5
5
  acts_as_list
6
6
  acts_as_tree
7
7
  ca-data_store
@@ -33,15 +33,17 @@ module Smerp
33
33
 
34
34
  belongs_to :quotation_item_group, optional: true
35
35
 
36
- before_save :update_total
37
- after_save :update_group_total, :update_quotation_total
36
+ #before_save :update_total
37
+ #after_save :update_group_total, :update_quotation_total
38
+
39
+ around_save :update_related_around_save
38
40
 
39
41
  #before_destroy :update_total, :update_group_total, :update_quotation_total, :remove_total_from_destination_quotation_items
40
42
  #after_destroy :update_group_total, :update_quotation_total, :remove_total_from_destination_quotation_items
41
43
  #after_destroy :update_quotation_total, :remove_total_from_destination_quotation_items
42
44
  around_destroy :destroy_hook
43
45
 
44
- def update_total
46
+ def update_related_around_save
45
47
 
46
48
  if self.children.length == 0
47
49
  self.line_total = self.quantity * self.unit_price if self.quantity_changed? or self.unit_price_changed?
@@ -71,7 +73,7 @@ module Smerp
71
73
  #teLogger.debug "Before recalculate : #{self.inspect}"
72
74
  ## Calculate consolidated line total
73
75
  # Calculate line total of each item that push to this parent item
74
- if not self.new_record?
76
+ if self.is_consolidation_destination_item? and not self.new_record?
75
77
  recalculate_total_from_source_quotation_items
76
78
  end
77
79
  #teLogger.debug "After recalculate : #{self.inspect}"
@@ -144,9 +146,227 @@ module Smerp
144
146
  self.extended_calculators = YAML.dump(res)
145
147
  ## Calculator execution completed
146
148
 
147
- teLogger.debug "before save done : #{self.inspect}"
149
+ # cater parent changed
150
+ oldParent = nil
151
+ if self.parent_id_changed? and not self.parent_id_was.nil?
152
+ oldParent = QuotationItem.find(self.parent_id_was)
153
+ end
154
+
155
+ # cater group changed
156
+ oldGroup = nil
157
+ if self.quotation_item_group_id_changed? and not self.quotation_item_group_id_was.nil?
158
+ oldGroup = QuotationItemGroup.find(self.quotation_item_group_id)
159
+ end
160
+
161
+ ###
162
+ # SAVE HAPPENED HERE
163
+ ###
164
+ yield
165
+
166
+
167
+ #
168
+ # AFTER SAVE
169
+ #
170
+ grp = self.quotation_item_group
171
+ [grp, oldGroup].each do |g|
172
+
173
+ if not g.nil?
174
+ # update total
175
+ g.group_total = g.children.sum(:group_total) + g.quotation_items.sum(:line_total)
176
+ g.group_discount = g.children.sum(:group_discount) + g.quotation_items.sum(:discount)
177
+ g.group_tax = g.children.sum(:group_tax) + g.quotation_items.sum(:tax)
178
+ g.save
179
+ end
180
+ end
181
+
182
+
183
+ [self.parent, oldParent].each do |pa|
184
+
185
+ if not pa.nil?
186
+
187
+ #pa.reload
188
+
189
+ if pa.is_children_linked?
190
+
191
+ teLogger.debug "Parent #{pa.inspect} IS children linked"
192
+ #
193
+ # Children of another QuotationItem
194
+ #
195
+ if pa.quantity > 0
196
+
197
+ # this parent children has changed because self
198
+ # has changed its parent to other parent
199
+ pa.children.reload
200
+
201
+
202
+ teLogger.debug "Before setting any price : #{pa.inspect}"
203
+ # for children item that has a parent
204
+ # update parent line_total
205
+ pa.line_total = pa.children.sum(:line_total)
206
+ pa.consolidated_line_total = pa.children.sum(:consolidated_line_total)
207
+
208
+ teLogger.debug "Before resetting unit price : #{pa.inspect}"
209
+ # update unit_price since line_total is sum of children's line_total
210
+ pa.unit_price = pa.consolidated_line_total / pa.quantity
211
+ teLogger.debug "After resetting unit price : #{pa.inspect}"
212
+
213
+ pa.discount = pa.children.sum(:discount)
214
+ pa.line_total_after_discount = pa.children.sum(:line_total_after_discount)
215
+ pa.tax = pa.children.sum(:tax)
216
+ pa.line_total_with_tax = pa.children.sum(:line_total_with_tax)
217
+
218
+ #teLogger.debug "After update from children : #{self.parent.inspect}"
219
+
220
+ else
221
+
222
+ pa.line_total = 0.0
223
+ pa.consolidated_line_total = 0.0
224
+ pa.unit_price = 0.0
225
+ pa.discount = 0.0
226
+ pa.line_total_after_discount = 0.0
227
+ pa.tax = 0.0
228
+ pa.line_total_with_tax = 0.0
229
+ end
230
+
231
+ teLogger.debug "Before save parent #{pa.changes}"
232
+ pa.save
233
+
234
+ #pobj = QuotationItem.find(pa.id)
235
+ #p pobj
236
+ #pa.changes.each do |k,v|
237
+ # pobj.send("#{k}=", v[1])
238
+ #end
239
+ #pobj.save
240
+
241
+ else
242
+ teLogger.debug "Parent #{pa.inspect} is NOT children linked. Skipping children update to parent."
243
+ end
244
+
245
+ end # if parent exist
246
+ end
247
+
248
+ # calculate if I'm the source to be embedded into other items
249
+ recalculate_total_to_destination_quotation_items if self.is_consolidation_source_item?
250
+
251
+ #self.quotation.update_total_from_children
252
+
253
+ self.quotation.total = self.quotation.quotation_items.where(["parent_id is null"]).sum(:line_total)
254
+ self.quotation.total_discount = self.quotation.quotation_items.where(["parent_id is null"]).sum(:discount)
255
+ self.quotation.total_after_discount = self.quotation.quotation_items.where(["parent_id is null"]).sum(:line_total_after_discount)
256
+ self.quotation.total_tax = self.quotation.quotation_items.where(["parent_id is null"]).sum(:tax)
257
+ self.quotation.total_with_tax = self.quotation.quotation_items.where(["parent_id is null"]).sum(:line_total_with_tax)
258
+
259
+ self.quotation.save
260
+
148
261
  end
149
262
 
263
+ #def update_total
264
+
265
+ # if self.children.length == 0
266
+ # self.line_total = self.quantity * self.unit_price if self.quantity_changed? or self.unit_price_changed?
267
+ # self.line_total_after_discount = self.line_total
268
+ # self.line_total_with_tax = self.line_total
269
+
270
+ # #teLogger.debug "sync consolidated #{self.inspect} to line_total #{self.line_total.to_i}"
271
+ # self.consolidated_line_total = self.line_total if self.new_record?
272
+ # #teLogger.debug "sync consolidated #{self.inspect} to line_total #{self.line_total.to_i}"
273
+
274
+ # else
275
+ # #teLogger.debug "#{self.inspect} has children : #{self.children}"
276
+ # end
277
+
278
+ # if self.quantity_changed?
279
+ # teLogger.debug "Quantity changed"
280
+ # # Change unit_price for record that has children
281
+ # # since unit_price is 'derived' from children's line_total
282
+ # if self.quantity > 0
283
+ # self.unit_price = self.line_total / self.quantity
284
+ # else
285
+ # self.unit_price = 0.0
286
+ # self.line_total = 0.0
287
+ # end
288
+ # end
289
+
290
+ # #teLogger.debug "Before recalculate : #{self.inspect}"
291
+ # ## Calculate consolidated line total
292
+ # # Calculate line total of each item that push to this parent item
293
+ # if not self.new_record?
294
+ # recalculate_total_from_source_quotation_items
295
+ # end
296
+ # #teLogger.debug "After recalculate : #{self.inspect}"
297
+
298
+ # #
299
+ # # Start trigger defined calculators
300
+ # #
301
+ # res = { local: [], quotation: [] }
302
+ # extCals = { local: [], quotation: [] }
303
+ # if not_empty?(self.extended_calculators)
304
+ # extCals = YAML.load(self.extended_calculators)
305
+ # end
306
+
307
+ # extCals[:local].each do |ec|
308
+ # teLogger.debug "Executing item calculator : #{ec.inspect}"
309
+ # ec.calculate(self)
310
+ # ec.owner_id = self.id if is_empty?(ec.owner_id) and not self.new_record?
311
+ # res[:local] << ec.for_storage
312
+ # end
313
+
314
+ # if self.new_record?
315
+ #
316
+ # # apply global calculator from quotation
317
+ # gExtCals = []
318
+ # if not_empty?(self.quotation.extended_calculators)
319
+ # gExtCals = YAML.load(self.quotation.extended_calculators)
320
+ # end
321
+
322
+ # #cals = []
323
+ # gExtCals.each do |ec|
324
+
325
+ # teLogger.debug "Executing item-quotation calculator : #{ec.inspect}"
326
+ # ec.calculate(self)
327
+ # ec.owner_id = self.quotation.id if is_empty?(ec.owner_id)
328
+ # res[:quotation] << ec.for_storage
329
+
330
+ # end
331
+
332
+ # else
333
+
334
+ # extCals[:quotation].each do |ec|
335
+ # teLogger.debug "Executing item-quotation calculator : #{ec.inspect}"
336
+ # ec.calculate(self)
337
+ # ec.owner_id = self.quotation.id if is_empty?(ec.owner_id)
338
+ # res[:quotation] << ec.for_storage
339
+ # end
340
+ #
341
+ # end
342
+
343
+
344
+ # # after calculate, remove item with zero params
345
+ # res[:local].delete_if { |c|
346
+ # case c.params
347
+ # when Smerp::Common::FinUtils::Percent
348
+ # c.params.value == 0
349
+ # else
350
+ # c.params.to_i == 0
351
+ # end
352
+ # }
353
+
354
+ # res[:quotation].delete_if { |c|
355
+ # case c.params
356
+ # when Smerp::Common::FinUtils::Percent
357
+ # c.params.value == 0
358
+ # else
359
+ # c.params.to_i == 0
360
+ # end
361
+ # }
362
+
363
+ # self.extended_calculators = YAML.dump(res)
364
+ # ## Calculator execution completed
365
+
366
+ # teLogger.debug "before save done : #{self.inspect}"
367
+
368
+ #end
369
+
150
370
  def update_group_total
151
371
 
152
372
  grp = self.quotation_item_group
@@ -243,113 +463,119 @@ module Smerp
243
463
 
244
464
  end
245
465
 
246
- def update_quotation_total
466
+ # trigger after save
467
+ #def update_quotation_total
247
468
 
248
- if not self.parent.nil?
469
+ # if not self.parent.nil?
249
470
 
250
- self.parent.reload
471
+ # self.parent.reload
251
472
 
252
- if self.parent.is_children_linked?
473
+ # if self.parent.is_children_linked?
253
474
 
254
- teLogger.debug "Parent #{self.parent.inspect} IS children linked"
255
- #
256
- # Children of another QuotationItem
257
- #
258
- if self.parent.quantity > 0
259
- # for children item that has a parent
260
- # update parent line_total
261
- self.parent.line_total = self.parent.children.sum(:line_total)
262
- self.parent.consolidated_line_total = self.parent.children.sum(:consolidated_line_total)
475
+ # teLogger.debug "Parent #{self.parent.inspect} IS children linked"
476
+ # #
477
+ # # Children of another QuotationItem
478
+ # #
479
+ # if self.parent.quantity > 0
480
+ #
481
+ # # this parent children has changed because self
482
+ # # has changed its parent to other parent
483
+ # self.parent.children.reload
263
484
 
264
- # update unit_price since line_total is sum of children's line_total
265
- self.parent.unit_price = self.parent.consolidated_line_total / self.parent.quantity
485
+ # # for children item that has a parent
486
+ # # update parent line_total
487
+ # self.parent.line_total = self.parent.children.sum(:line_total)
488
+ # self.parent.consolidated_line_total = self.parent.children.sum(:consolidated_line_total)
266
489
 
267
- self.parent.discount = self.parent.children.sum(:discount)
268
- self.parent.line_total_after_discount = self.parent.children.sum(:line_total_after_discount)
269
- self.parent.tax = self.parent.children.sum(:tax)
270
- self.parent.line_total_with_tax = self.parent.children.sum(:line_total_with_tax)
490
+ # # update unit_price since line_total is sum of children's line_total
491
+ # self.parent.unit_price = self.parent.consolidated_line_total / self.parent.quantity
271
492
 
272
- #teLogger.debug "After update from children : #{self.parent.inspect}"
493
+ # self.parent.discount = self.parent.children.sum(:discount)
494
+ # self.parent.line_total_after_discount = self.parent.children.sum(:line_total_after_discount)
495
+ # self.parent.tax = self.parent.children.sum(:tax)
496
+ # self.parent.line_total_with_tax = self.parent.children.sum(:line_total_with_tax)
273
497
 
274
- else
498
+ # #teLogger.debug "After update from children : #{self.parent.inspect}"
275
499
 
276
- self.parent.line_total = 0.0
277
- self.parent.consolidated_line_total = 0.0
278
- self.parent.unit_price = 0.0
279
- self.parent.discount = 0.0
280
- self.parent.line_total_after_discount = 0.0
281
- self.parent.tax = 0.0
282
- self.parent.line_total_with_tax = 0.0
283
- end
500
+ # else
284
501
 
285
- self.parent.save
502
+ # self.parent.line_total = 0.0
503
+ # self.parent.consolidated_line_total = 0.0
504
+ # self.parent.unit_price = 0.0
505
+ # self.parent.discount = 0.0
506
+ # self.parent.line_total_after_discount = 0.0
507
+ # self.parent.tax = 0.0
508
+ # self.parent.line_total_with_tax = 0.0
509
+ # end
286
510
 
287
- else
288
- teLogger.debug "Parent #{self.parent.inspect} is NOT children linked. Skipping children update to parent."
289
- end
511
+ # self.parent.save
290
512
 
291
- end # if parent exist
513
+ # else
514
+ # teLogger.debug "Parent #{self.parent.inspect} is NOT children linked. Skipping children update to parent."
515
+ # end
292
516
 
293
- # calculate if I'm the source to be embedded into other items
294
- recalculate_total_to_destination_quotation_items
517
+ # end # if parent exist
295
518
 
296
- #self.quotation.update_total_from_children
519
+ # # calculate if I'm the source to be embedded into other items
520
+ # recalculate_total_to_destination_quotation_items
297
521
 
298
- self.quotation.total = self.quotation.quotation_items.where(["parent_id is null"]).sum(:line_total)
299
- self.quotation.total_discount = self.quotation.quotation_items.where(["parent_id is null"]).sum(:discount)
300
- self.quotation.total_after_discount = self.quotation.quotation_items.where(["parent_id is null"]).sum(:line_total_after_discount)
301
- self.quotation.total_tax = self.quotation.quotation_items.where(["parent_id is null"]).sum(:tax)
302
- self.quotation.total_with_tax = self.quotation.quotation_items.where(["parent_id is null"]).sum(:line_total_with_tax)
522
+ # #self.quotation.update_total_from_children
303
523
 
304
- self.quotation.save
524
+ # self.quotation.total = self.quotation.quotation_items.where(["parent_id is null"]).sum(:line_total)
525
+ # self.quotation.total_discount = self.quotation.quotation_items.where(["parent_id is null"]).sum(:discount)
526
+ # self.quotation.total_after_discount = self.quotation.quotation_items.where(["parent_id is null"]).sum(:line_total_after_discount)
527
+ # self.quotation.total_tax = self.quotation.quotation_items.where(["parent_id is null"]).sum(:tax)
528
+ # self.quotation.total_with_tax = self.quotation.quotation_items.where(["parent_id is null"]).sum(:line_total_with_tax)
305
529
 
306
- end
530
+ # self.quotation.save
531
+
532
+ #end
307
533
 
308
534
  # this called after child is destroy
309
- def update_self_as_parent
535
+ #def update_self_as_parent
310
536
 
311
- self.reload
537
+ # self.reload
312
538
 
313
- if self.is_children_linked?
539
+ # if self.is_children_linked?
314
540
 
315
- teLogger.debug "Parent #{self.inspect} IS children linked"
316
- #
317
- # Children of another QuotationItem
318
- #
319
- if self.quantity > 0
320
- # for children item that has a parent
321
- # update parent line_total
322
- self.line_total = self.children.sum(:line_total)
323
- self.consolidated_line_total = self.children.sum(:consolidated_line_total)
541
+ # teLogger.debug "Parent #{self.inspect} IS children linked"
542
+ # #
543
+ # # Children of another QuotationItem
544
+ # #
545
+ # if self.quantity > 0
546
+ # # for children item that has a parent
547
+ # # update parent line_total
548
+ # self.line_total = self.children.sum(:line_total)
549
+ # self.consolidated_line_total = self.children.sum(:consolidated_line_total)
324
550
 
325
- # update unit_price since line_total is sum of children's line_total
326
- self.unit_price = self.consolidated_line_total / self.quantity
551
+ # # update unit_price since line_total is sum of children's line_total
552
+ # self.unit_price = self.consolidated_line_total / self.quantity
327
553
 
328
- self.discount = self.children.sum(:discount)
329
- self.line_total_after_discount = self.children.sum(:line_total_after_discount)
330
- self.tax = self.children.sum(:tax)
331
- self.line_total_with_tax = self.children.sum(:line_total_with_tax)
554
+ # self.discount = self.children.sum(:discount)
555
+ # self.line_total_after_discount = self.children.sum(:line_total_after_discount)
556
+ # self.tax = self.children.sum(:tax)
557
+ # self.line_total_with_tax = self.children.sum(:line_total_with_tax)
332
558
 
333
- #teLogger.debug "After update from children : #{self.parent.inspect}"
559
+ # #teLogger.debug "After update from children : #{self.parent.inspect}"
334
560
 
335
- else
561
+ # else
336
562
 
337
- self.line_total = 0.0
338
- self.consolidated_line_total = 0.0
339
- self.unit_price = 0.0
340
- self.discount = 0.0
341
- self.line_total_after_discount = 0.0
342
- self.tax = 0.0
343
- self.line_total_with_tax = 0.0
344
- end
563
+ # self.line_total = 0.0
564
+ # self.consolidated_line_total = 0.0
565
+ # self.unit_price = 0.0
566
+ # self.discount = 0.0
567
+ # self.line_total_after_discount = 0.0
568
+ # self.tax = 0.0
569
+ # self.line_total_with_tax = 0.0
570
+ # end
345
571
 
346
- self.save
572
+ # self.save
347
573
 
348
- else
349
- teLogger.debug "Parent #{self.inspect} is NOT children linked. Skipping children update to parent."
350
- end
351
-
352
- end
574
+ # else
575
+ # teLogger.debug "Parent #{self.inspect} is NOT children linked. Skipping children update to parent."
576
+ # end
577
+
578
+ #end
353
579
 
354
580
 
355
581
  def recalculate
@@ -7,10 +7,40 @@ module Smerp
7
7
  class QuotationItemDistribution < Ca::DataStore::Ar::Model
8
8
  include TR::CondUtils
9
9
 
10
+ include TeLogger::TeLogHelper
11
+ teLogger_tag :qiDist
12
+
10
13
  belongs_to :quotation_item
11
14
  belongs_to :distributed_quotation_item, class_name: 'QuotationItem'
12
15
 
13
16
 
17
+ around_destroy :update_link_total
18
+
19
+ def update_link_total
20
+
21
+ src = self.quotation_item
22
+ dest = self.distributed_quotation_item
23
+ cal = YAML.load(self.distribution_calculations)
24
+
25
+ ##
26
+ # Deleted
27
+ ##
28
+ yield
29
+
30
+
31
+ teLogger.debug "Result : #{cal.result}"
32
+ distVal = cal.result[Smerp::Quotation::DistributionCalculator::DistributedAmount]
33
+
34
+ #teLogger.debug "Source : #{src.inspect}"
35
+ #src.consolidated_line_total += distVal
36
+ #src.save
37
+
38
+ teLogger.debug "Dest : #{dest.inspect}"
39
+ dest.consolidated_line_total -= distVal
40
+ dest.save
41
+
42
+ end
43
+
14
44
  #after_save :distribute
15
45
 
16
46
  #def distribute
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Smerp
4
4
  module Quotation
5
- VERSION = "0.2.2"
5
+ VERSION = "0.2.4"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: smerp-quotation
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ian