comee_core 0.3.41 → 0.3.43

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 945ebcfda26158faf04eeb992d73078a05ece14bf999e93287d4f9a40a536f3e
4
- data.tar.gz: b85605bbe210dafc52a8f1e0f29f572c5ee258cbc65bfa11bfaee65ab88edcc3
3
+ metadata.gz: 4ff7350423a4f7d4bfbab481f69a78c1526754c515c6f58ccfd31f5e77b4eb60
4
+ data.tar.gz: 15b0575c52dcc8994efdba583b2455fa2375f1b87612e5fab71c765bdfe0f376
5
5
  SHA512:
6
- metadata.gz: 1c67e379c9ae392240d543c73a99cb89f3084db1648df9ad2310fb5054589fb32a1cb8ab4a2270f1ceaa7f9eefcb018a19cf3c5d56c15de8b0ebb414f6048c76
7
- data.tar.gz: 6d7578c2ebbf76fcba4ecf48e4ee43130f30a9b73ed5bd83d53e4cffafeb1d8f95dd4dbfbd451edbca971a4722cad75f5c55a8b3dea33aa8373b359ba0f349bf
6
+ metadata.gz: 85e67b19d45298a5da7fce3a0337516242fb073b05255836b313d9bacad96909b72582485b91f57d471de60e7756952cc025f22a95b77b599954215b185c08dc
7
+ data.tar.gz: a7b7c841130e5760d30b44ee997f4a275e1e28504cc84733b9c4fa228b2c905705e820fda9785c50ff67f99c88044026ecb68d9dcb5a61d93d66e91b1e858f15
@@ -1,11 +1,17 @@
1
1
  module Comee
2
2
  module Core
3
3
  class Invoice < ApplicationRecord
4
+ ADVANCE = "Advance".freeze
5
+ DELIVERY = "Delivery".freeze
6
+ DIRECT = "Direct".freeze
7
+
8
+ INVOICE_TYPES = [ADVANCE, DELIVERY, DIRECT].freeze
9
+
4
10
  before_validation :generate_invoice_no, if: proc { |inv| inv.invoice_no.nil? }
5
11
  before_save :calculate_due_date, unless: proc { |inv| inv.date_issued.nil? }
6
12
 
7
13
  belongs_to :sales_order
8
- belongs_to :pod
14
+ belongs_to :pod, optional: true
9
15
  belongs_to :invoice_address,
10
16
  -> { where(address_type: ClientAddress::INVOICING_ADDRESS) },
11
17
  class_name: "Comee::Core::ClientAddress"
@@ -23,9 +29,35 @@ module Comee
23
29
  validates :total_price, numericality: {greater_than_or_equal_to: 0, allow_nil: true}
24
30
  validates :amount_paid, numericality: {greater_than_or_equal_to: 0, allow_nil: true}
25
31
 
32
+ validates :pct_advanced,
33
+ presence: true,
34
+ numericality: {greater_than: 0, less_than_or_equal_to: 100},
35
+ if: -> { advance? }
36
+ validates :pct_advanced,
37
+ absence: true,
38
+ if: -> { delivery? || direct? }
39
+ validates :pod_id,
40
+ presence: true,
41
+ if: -> { delivery? }
42
+ validates :pod_id,
43
+ absence: true,
44
+ if: -> { advance? }
45
+
26
46
  delegate(:order_number, to: :sales_order, prefix: false)
27
47
  delegate(:reference_no, to: :pod, prefix: true)
28
48
 
49
+ def delivery?
50
+ invoice_type == DELIVERY
51
+ end
52
+
53
+ def advance?
54
+ invoice_type == ADVANCE
55
+ end
56
+
57
+ def direct?
58
+ invoice_type == DIRECT
59
+ end
60
+
29
61
  def calculate_total_price
30
62
  self.total_price = calculate_total
31
63
  end
@@ -43,7 +75,9 @@ module Comee
43
75
  def calculate_total
44
76
  items = InvoiceItem.where(invoice_id: id)
45
77
  additionals = AdditionalItem.where(invoice_id: id)
46
- (items.sum(:total_price) + additionals.sum(:total_price)).round(2)
78
+ total = (items.sum(:total_price) + additionals.sum(:total_price))
79
+ total *= (pct_advanced / 100) if advance?
80
+ total.round(2)
47
81
  end
48
82
 
49
83
  def calculate_amount_paid
@@ -56,6 +90,7 @@ module Comee
56
90
  id
57
91
  sales_order_id
58
92
  invoice_no
93
+ invoice_type
59
94
  date_issued
60
95
  ship_name
61
96
  delivery_date
@@ -1,6 +1,8 @@
1
1
  module Comee
2
2
  module Core
3
3
  class ShipmentInstructionItem < ApplicationRecord
4
+ before_save :set_details, if: proc { |item| item.details.empty? }
5
+
4
6
  belongs_to :shipment_instruction
5
7
  belongs_to :shipment_item
6
8
  belongs_to :unit
@@ -9,6 +11,15 @@ module Comee
9
11
 
10
12
  validates :pallet_no, presence: true
11
13
  validates :length, :width, :height, :weight, :quantity, :price, presence: true, numericality: {greater_than: 0}
14
+
15
+ def set_details
16
+ self.details = {
17
+ customer_item_no: shipment_item.sales_order_item.customer_item_no,
18
+ customer_item_description: shipment_item.sales_order_item.customer_item_description,
19
+ customer_item_alias: shipment_item.sales_order_item.customer_item_alias,
20
+ use_alias: shipment_item.sales_order_item.use_alias
21
+ }
22
+ end
12
23
  end
13
24
  end
14
25
  end
@@ -2,7 +2,7 @@ module Comee
2
2
  module Core
3
3
  class ShipmentInstructionItemSerializer < ActiveModel::Serializer
4
4
  attributes :id, :delivery_note_no, :pallet_no, :goods_issue_date, :length, :width, :height, :weight, :quantity, :price,
5
- :pod_id
5
+ :pod_id, :details
6
6
  belongs_to :unit
7
7
  belongs_to :shipment_item
8
8
  belongs_to :pod
@@ -0,0 +1,7 @@
1
+ class UpdateInvoiceFields < ActiveRecord::Migration[7.1]
2
+ def change
3
+ change_column_null :comee_core_invoices, :pod_id, true
4
+ add_column :comee_core_invoices, :invoice_type, :string, default: "Delivery"
5
+ add_column :comee_core_invoices, :pct_advanced, :float, null: true
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ class AddDetailsToShipmentInstructionItem < ActiveRecord::Migration[7.1]
2
+ def change
3
+ add_column :comee_core_shipment_instruction_items, :details, :jsonb, null: false, default: {}
4
+ end
5
+ end
@@ -0,0 +1,14 @@
1
+ class UpdateDetailsColumnInShipmentInstructionItems < ActiveRecord::Migration[7.1]
2
+ def up
3
+ Comee::Core::ShipmentInstructionItem.reset_column_information
4
+ Comee::Core::ShipmentInstructionItem.find_each do |item|
5
+ details = {
6
+ customer_item_no: item.shipment_item.sales_order_item.customer_item_no,
7
+ customer_item_description: item.shipment_item.sales_order_item.customer_item_description,
8
+ customer_item_alias: item.shipment_item.sales_order_item.customer_item_alias,
9
+ use_alias: item.shipment_item.sales_order_item.use_alias
10
+ }
11
+ item.update_column(:details, details)
12
+ end
13
+ end
14
+ end
@@ -1,5 +1,5 @@
1
1
  module Comee
2
2
  module Core
3
- VERSION = "0.3.41".freeze
3
+ VERSION = "0.3.43".freeze
4
4
  end
5
5
  end
@@ -2,12 +2,14 @@ FactoryBot.define do
2
2
  factory :invoice, class: "Comee::Core::Invoice" do
3
3
  invoice_no { nil }
4
4
  sales_order
5
+ invoice_type { Comee::Core::Invoice::DELIVERY }
5
6
  pod
6
7
  date_issued { Date.current }
7
8
  due_date { Date.current.advance(days: 10) }
8
9
  total_price { 0 }
9
10
  amount_paid { 0 }
10
11
  payment_term { Faker::Lorem.sentence }
12
+ pct_advanced { nil }
11
13
  notifications_sent { 0 }
12
14
  status { Comee::Core::Invoice.statuses[:draft] }
13
15
  payment_status { Comee::Core::Invoice.payment_statuses[:not_paid] }
@@ -20,5 +22,16 @@ FactoryBot.define do
20
22
  trait :issued do
21
23
  status { Comee::Core::Invoice.statuses[:issued] }
22
24
  end
25
+
26
+ trait :advance do
27
+ invoice_type { Comee::Core::Invoice::ADVANCE }
28
+ pod { nil }
29
+ pct_advanced { 25 }
30
+ end
31
+
32
+ trait :direct do
33
+ invoice_type { Comee::Core::Invoice::DIRECT }
34
+ pct_advanced { nil }
35
+ end
23
36
  end
24
37
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: comee_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.41
4
+ version: 0.3.43
5
5
  platform: ruby
6
6
  authors:
7
7
  - Henock L.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-08-03 00:00:00.000000000 Z
11
+ date: 2024-08-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: active_model_serializers
@@ -535,6 +535,9 @@ files:
535
535
  - db/migrate/20240731080746_create_comee_core_credit_note_items.rb
536
536
  - db/migrate/20240731081502_create_comee_core_credit_note_additional_items.rb
537
537
  - db/migrate/20240803194006_change_reference_in_invoice_to_polymorphic.rb
538
+ - db/migrate/20240803231700_update_invoice_fields.rb
539
+ - db/migrate/20240805085256_add_details_to_shipment_instruction_item.rb
540
+ - db/migrate/20240805093326_update_details_column_in_shipment_instruction_items.rb
538
541
  - lib/comee/core.rb
539
542
  - lib/comee/core/engine.rb
540
543
  - lib/comee/core/version.rb