comee_core 0.1.39 → 0.1.40

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: dd406451f665c2411b46b48fed525f69afd962075634190a5b48cd7c364c439a
4
- data.tar.gz: 48fb03e9374548943dc7b5c882af57da8858a1020b7cf51d3c1057ca4c553b80
3
+ metadata.gz: 3977dd0f3b6240767a796a47eea12d0416a294884beab0afcd922ee36fe32fa8
4
+ data.tar.gz: 608f811273a984214974ff03f006b01b084cb766478c67da439c144570b89b65
5
5
  SHA512:
6
- metadata.gz: da647c1b130ae6a410a278621f11f81008005b2dd63e456cbb16a257df041e8a25bfde11c39824808f8418933c84436e66ec75fcf0065f9fa5aa670cd4c43e39
7
- data.tar.gz: 9dec58c03d0f7ab17f0c302aebe2a9d130b1e5868178b59989383e099d64e6040a302d3a85c29e1c25606c4d786f8c7fbde9bac9050b406f1557a425ba21cbd6
6
+ metadata.gz: d39a9af367c1146deb698ae4e1ba4132a355ac5f19cd2b6fa5583492dbb2347450ef90ef907106c32b3a260729c0e45a719494ddb73e8c8bd2ac73850fefc5fa
7
+ data.tar.gz: 7d4914e40e9f67cd3dab3199f6a5dfd3551333342901656c70a2308f6862c946c9e01a6c0fbbc6a76b9c6b1e32ad1471ffc09c45f72c0db4368d735c3bcec6b5
@@ -8,7 +8,7 @@ module Comee
8
8
  validates :price, presence: true
9
9
  validates :price, numericality: {greater_than: 0}
10
10
  validates :discount, presence: true, numericality: {greater_than_or_equal_to: 0, less_than_or_equal_to: 100}
11
- validates :product_id, uniqueness: {scope: %i[client_id previous_price_id]}
11
+ validates :product_id, uniqueness: {scope: %i[client_id previous_price_id next_price_id status]}
12
12
 
13
13
  def self.ransackable_attributes(_auth_object = nil)
14
14
  %w[
@@ -0,0 +1,11 @@
1
+ module Comee
2
+ module Core
3
+ class CustomerOrder < ApplicationRecord
4
+ belongs_to :client
5
+
6
+ enum :status, {draft: 0, submitted: 1, accepted: 2, cancelled: 3}
7
+
8
+ validates :order_number, :order_date, :order_terms, :delivery_address, :invoice_address, :status, presence: true
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module Comee
2
+ module Core
3
+ class CustomerOrderItem < ApplicationRecord
4
+ belongs_to :customer_order
5
+ belongs_to :product
6
+ belongs_to :unit
7
+
8
+ validates :quantity, :price, :delivery_date, presence: true
9
+ end
10
+ end
11
+ end
@@ -7,7 +7,7 @@ module Comee
7
7
 
8
8
  validates :purchase_price, :selling_price, presence: true
9
9
  validates :margin, presence: true, numericality: {greater_than_or_equal_to: 0, less_than_or_equal_to: 100}
10
- validates :product_id, uniqueness: {scope: %i[supplier_id previous_price_id]}
10
+ validates :product_id, uniqueness: {scope: %i[supplier_id previous_price_id next_price_id status]}
11
11
  validate :validate_primary_price
12
12
 
13
13
  scope :current_primary, -> { where(primary: true).current }
@@ -1,20 +1,29 @@
1
1
  module Comee
2
2
  module Core
3
3
  class SalesOrder < ApplicationRecord
4
- belongs_to :client
4
+ before_save :total_price
5
+
6
+ belongs_to :customer_order
5
7
  has_many :sales_order_items
6
8
 
7
9
  enum :status, {draft: 0, confirmed: 1, cancelled: 2}
8
10
 
9
11
  validates :order_number, presence: true, uniqueness: true
10
- validates :order_date, :expected_delivery_date, :delivery_address, :invoice_address, :status, presence: true
11
- validates :payment_no_of_days,
12
- :payment_discount,
13
- :payment_penalty,
12
+ validates :status, :pallete_note, :handover_date, presence: true
13
+ validates :payment_penalty,
14
14
  presence: true,
15
15
  numericality: {greater_than_or_equal_to: 0, less_than_or_equal_to: 100}
16
16
 
17
- delegate(:name, to: :client, prefix: true)
17
+ validates :total_price,
18
+ :amount_paid,
19
+ presence: true,
20
+ numericality: {greater_than_or_equal_to: 0}
21
+
22
+ def total_price
23
+ sales_order_items = SalesOrderItem.where(sales_order_id: id)
24
+ total_price = sales_order_items.sum(&:price)
25
+ self.total_price = total_price
26
+ end
18
27
 
19
28
  def confirm
20
29
  raise(StandardError, "Sales order is already confirmed.") if SalesOrder.statuses[status] == SalesOrder.statuses[:confirmed]
@@ -32,13 +41,9 @@ module Comee
32
41
 
33
42
  def self.ransackable_attributes(_auth_object = nil)
34
43
  %w[
35
- delivery_address
36
- expected_delivery_date
37
- invoice_address
38
- order_date
39
44
  order_number
40
45
  status
41
- client_id
46
+ customer_order_id
42
47
  ]
43
48
  end
44
49
 
@@ -1,42 +1,14 @@
1
1
  module Comee
2
2
  module Core
3
3
  class SalesOrderItem < ApplicationRecord
4
- before_validation :set_delivery_date, if: proc { delivery_date.nil? }
5
- before_validation :update_quantity_remaining, if: proc { quantity_remaining.nil? }
6
-
7
4
  belongs_to :sales_order
8
- belongs_to :product
5
+ belongs_to :customer_order_item
6
+ belongs_to :unit
9
7
  has_many :warehouse_shipment_items
10
8
 
11
9
  validates :delivery_date, presence: true
12
10
  validates :quantity, :price, presence: true, numericality: {greater_than: 0}
13
- validates :quantity_en_route, numericality: {greater_than_or_equal_to: 0}
14
- validates :quantity_remaining, numericality: {greater_than: 0}
15
-
16
- delegate(:name, to: :product, prefix: true)
17
- delegate(:code, to: :product, prefix: true)
18
-
19
- def set_delivery_date
20
- self.delivery_date = sales_order.expected_delivery_date
21
- end
22
-
23
- def update_quantity_remaining
24
- self.quantity_remaining = quantity
25
- return unless quantity_en_route_changed? && quantity_en_route_was.positive? && quantity_en_route.zero?
26
-
27
- self.quantity_remaining -= quantity_en_route_was
28
- end
29
-
30
- def update_quantity_en_route(quantity)
31
- self.quantity_en_route = quantity
32
- save
33
- end
34
-
35
- def confirm_delivery
36
- self.quantity_remaining -= quantity_en_route
37
- self.quantity_en_route = 0
38
- save
39
- end
11
+ validates :quantity_delivered, numericality: {greater_than_or_equal_to: 0}
40
12
  end
41
13
  end
42
14
  end
@@ -37,12 +37,13 @@ module Comee
37
37
  {
38
38
  id: order_item.id,
39
39
  sales_order_id: order_item.sales_order_id,
40
- product_id: order_item.product_id,
40
+ unit_id: order_item.unit_id,
41
+ customer_order_item_id: order_item.customer_order_item_id,
41
42
  quantity: order_item.quantity,
42
- quantity_en_route: order_item.quantity_en_route + item.quantity,
43
- quantity_remaining: order_item.quantity_remaining - item.quantity,
43
+ quantity_delivered: order_item.quantity_delivered,
44
44
  price: order_item.price,
45
- delivery_date: order_item.delivery_date
45
+ delivery_date: order_item.delivery_date,
46
+ eb_number: order_item.eb_number
46
47
  }
47
48
  end
48
49
  SalesOrderItem.upsert_all(updates)
@@ -58,7 +59,10 @@ module Comee
58
59
  order_items = warehouse_shipment_items.includes(:sales_order_item).map(&:sales_order_item)
59
60
  return self unless order_items.count.positive?
60
61
 
61
- SalesOrderItem.where(id: order_items.map(&:id)).update_all(quantity_en_route: 0)
62
+ order_items.each do |sales_order_item|
63
+ sales_order_item.update(quantity_delivered: sales_order_item.quantity)
64
+ end
65
+ # SalesOrderItem.where(id: order_items.map(&:id)).update_all(quantity_delivered: sales_order_item.quantity)
62
66
  self
63
67
  end
64
68
  end
@@ -12,9 +12,9 @@ module Comee
12
12
  def validate_inventory_quantity
13
13
  return unless quantity && sales_order_item
14
14
 
15
- inventory = Inventory.find_by(product_id: sales_order_item.product_id)
15
+ inventory = Inventory.find_by(product_id: sales_order_item.customer_order_item.product_id)
16
16
  unless inventory
17
- errors.add(:base, "Inventory entry not found for product `#{sales_order_item.product.name}`.")
17
+ errors.add(:base, "Inventory entry not found for product `#{sales_order_item.customer_order_item.product.name}`.")
18
18
  return
19
19
  end
20
20
 
@@ -24,7 +24,7 @@ module Comee
24
24
  end
25
25
 
26
26
  def update_inventory
27
- inventory = Inventory.find_by(product_id: sales_order_item.product_id)
27
+ inventory = Inventory.find_by(product_id: sales_order_item.customer_order_item.product_id)
28
28
  return unless quantity_changed?
29
29
 
30
30
  old_quantity = quantity_was || 0
@@ -0,0 +1,19 @@
1
+ class CreateComeeCoreCustomerOrders < ActiveRecord::Migration[7.1]
2
+ def change
3
+ create_table :comee_core_customer_orders do |t|
4
+ t.string :order_number, null: false
5
+ t.date :order_date, null: false
6
+ t.references :client,
7
+ null: false,
8
+ index: {name: "client_on_cccuo_indx"},
9
+ foreign_key: {to_table: :comee_core_clients}
10
+ t.string :order_terms, null: false
11
+ t.string :delivery_address, null: false
12
+ t.string :invoice_address, null: false
13
+ t.integer :status, null: false, default: 0
14
+
15
+ t.timestamps
16
+ end
17
+ add_index :comee_core_customer_orders, :order_number, unique: true
18
+ end
19
+ end
@@ -0,0 +1,23 @@
1
+ class CreateComeeCoreCustomerOrderItems < ActiveRecord::Migration[7.1]
2
+ def change
3
+ create_table :comee_core_customer_order_items do |t|
4
+ t.references :customer_order,
5
+ null: false,
6
+ index: {name: "co_on_cccuoi_indx"},
7
+ foreign_key: {to_table: :comee_core_customer_orders}
8
+ t.references :product,
9
+ null: false,
10
+ index: {name: "product_on_cccuoi_indx"},
11
+ foreign_key: {to_table: :comee_core_products}
12
+ t.references :unit,
13
+ null: false,
14
+ index: {name: "unit_on_cccuoi_indx"},
15
+ foreign_key: {to_table: :comee_core_units}
16
+ t.float :quantity, null: false, default: 0
17
+ t.float :price, null: false, default: 0
18
+ t.date :delivery_date, null: false
19
+
20
+ t.timestamps
21
+ end
22
+ end
23
+ end
@@ -2,22 +2,16 @@ class CreateComeeCoreSalesOrders < ActiveRecord::Migration[7.0]
2
2
  def change
3
3
  create_table :comee_core_sales_orders do |t|
4
4
  t.string :order_number, null: false
5
- t.date :order_date, null: false, default: -> { "CURRENT_DATE" }
6
- t.date :expected_delivery_date, null: false
7
- t.references :client,
5
+ t.references :customer_order,
8
6
  null: false,
9
- index: {name: "client_on_ccso_indx"},
10
- foreign_key: {to_table: :comee_core_clients}
11
- t.json :client_terms
12
- t.integer :payment_no_of_days, null: false, default: 0
13
- t.float :payment_discount, null: false, default: 0.0
7
+ index: {name: "co_on_ccso_indx"},
8
+ foreign_key: {to_table: :comee_core_customer_orders}
14
9
  t.float :payment_penalty, null: false, default: 0.0
15
10
  t.integer :status, null: false, default: 0
16
- t.string :delivery_address, null: false
17
- t.string :invoice_address, null: false
18
11
  t.float :total_price, null: true, default: 0
19
12
  t.float :amount_paid, null: true, default: 0
20
- t.float :amount_due, null: true, default: 0
13
+ t.string :pallete_note, null: false
14
+ t.date :handover_date, null: false
21
15
  t.string :remark
22
16
 
23
17
  t.timestamps
@@ -3,17 +3,21 @@ class CreateComeeCoreSalesOrderItems < ActiveRecord::Migration[7.0]
3
3
  create_table :comee_core_sales_order_items do |t|
4
4
  t.references :sales_order,
5
5
  null: false,
6
- index: {name: "co_on_coi_indx"},
6
+ index: {name: "so_on_ccsoi_indx"},
7
7
  foreign_key: {to_table: :comee_core_sales_orders}
8
- t.references :product,
8
+ t.references :unit,
9
9
  null: false,
10
- index: {name: "po_on_coi_indx"},
11
- foreign_key: {to_table: :comee_core_products}
10
+ index: {name: "unit_on_ccsoi_indx"},
11
+ foreign_key: {to_table: :comee_core_units}
12
+ t.references :customer_order_item,
13
+ null: false,
14
+ index: {name: "coi_on_ccsoi_indx"},
15
+ foreign_key: {to_table: :comee_core_customer_order_items}
12
16
  t.float :quantity, null: false
13
- t.float :quantity_remaining
14
- t.float :quantity_en_route, default: 0
17
+ t.float :quantity_delivered, null: false, default: 0
15
18
  t.float :price, null: false
16
19
  t.date :delivery_date, null: false
20
+ t.integer :eb_number
17
21
 
18
22
  t.timestamps
19
23
  end
@@ -34,7 +34,7 @@ class CreateComeeCoreMasterPrices < ActiveRecord::Migration[7.0]
34
34
  end
35
35
 
36
36
  add_index :comee_core_master_prices,
37
- %i[product_id supplier_id previous_price_id],
37
+ %i[product_id supplier_id previous_price_id next_price_id status],
38
38
  unique: true,
39
39
  name: "pi_si_ppi_on_ccmp_indx"
40
40
  end
@@ -30,7 +30,7 @@ class CreateComeeCoreClientPrices < ActiveRecord::Migration[7.0]
30
30
  t.timestamps
31
31
  end
32
32
  add_index :comee_core_client_prices,
33
- %i[product_id client_id previous_price_id],
33
+ %i[product_id client_id previous_price_id next_price_id status],
34
34
  unique: true,
35
35
  name: "pi_ci_ppi_on_cccp_indx"
36
36
  end
@@ -1,5 +1,5 @@
1
1
  module Comee
2
2
  module Core
3
- VERSION = "0.1.39".freeze
3
+ VERSION = "0.1.40".freeze
4
4
  end
5
5
  end
@@ -0,0 +1,16 @@
1
+ FactoryBot.define do
2
+ factory :customer_order_item, class: "Comee::Core::CustomerOrderItem" do
3
+ customer_order
4
+ product
5
+ unit
6
+ quantity { 1 }
7
+ price { 1.5 }
8
+ delivery_date { Date.current }
9
+
10
+ trait :with_inventory do
11
+ after(:create) do |item|
12
+ create(:inventory, product: item.product, quantity: item.quantity + 100)
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,11 @@
1
+ FactoryBot.define do
2
+ factory :customer_order, class: "Comee::Core::CustomerOrder" do
3
+ order_number { Faker::Alphanumeric.alpha(number: 8) }
4
+ order_date { Date.current }
5
+ client
6
+ order_terms { Faker::Lorem.sentence }
7
+ delivery_address { Faker::Address.full_address }
8
+ invoice_address { Faker::Address.full_address }
9
+ status { 0 }
10
+ end
11
+ end
@@ -22,5 +22,44 @@ FactoryBot.define do
22
22
  valid_from { Date.current.advance(months: 1) }
23
23
  valid_to { Date.current.advance(months: 2) }
24
24
  end
25
+
26
+ trait :with_previous_price do
27
+ after(:create) do |price|
28
+ previous_price = build(
29
+ :master_price,
30
+ valid_from: price.valid_from.advance(months: -1),
31
+ valid_to: price.valid_from.advance(days: -1),
32
+ primary: price.primary,
33
+ margin: price.margin,
34
+ product: price.product,
35
+ supplier: price.supplier,
36
+ unit: price.unit,
37
+ next_price: price
38
+ )
39
+
40
+ price.previous_price = previous_price
41
+ price.save!
42
+ price
43
+ end
44
+ end
45
+
46
+ trait :with_next_price do
47
+ after(:create) do |price|
48
+ next_price = create(
49
+ :master_price,
50
+ valid_from: price.valid_to.advance(days: 1),
51
+ valid_to: price.valid_to.advance(months: 1),
52
+ primary: price.primary,
53
+ margin: price.margin,
54
+ product: price.product,
55
+ supplier: price.supplier,
56
+ unit: price.unit,
57
+ previous_price: price
58
+ )
59
+ price.next_price = next_price
60
+ price.save!
61
+ price
62
+ end
63
+ end
25
64
  end
26
65
  end
@@ -1,17 +1,12 @@
1
1
  FactoryBot.define do
2
2
  factory :sales_order_item, class: "Comee::Core::SalesOrderItem" do
3
3
  sales_order
4
- product
4
+ association :customer_order_item, :with_inventory
5
+ unit
5
6
  quantity { 100 }
6
- quantity_en_route { 0 }
7
- quantity_remaining { quantity }
7
+ quantity_delivered { 0 }
8
8
  price { 50 }
9
9
  delivery_date { Date.current.advance(months: 1) }
10
-
11
- trait :with_inventory do
12
- after(:create) do |item|
13
- create(:inventory, product: item.product, quantity: item.quantity + 100)
14
- end
15
- end
10
+ eb_number { 100 }
16
11
  end
17
12
  end
@@ -1,16 +1,13 @@
1
1
  FactoryBot.define do
2
2
  factory :sales_order, class: "Comee::Core::SalesOrder" do
3
3
  order_number { Faker::Alphanumeric.alpha(number: 10) }
4
- order_date { Date.current }
5
- expected_delivery_date { Date.current.advance(months: 1) }
6
- client
7
- client_terms { Faker::Lorem.sentence }
8
- payment_no_of_days { 7 }
9
- payment_discount { 0 }
4
+ customer_order
10
5
  payment_penalty { 0 }
6
+ total_price { 0 }
7
+ amount_paid { 0 }
11
8
  status { Comee::Core::SalesOrder.statuses[:draft] }
12
- delivery_address { Faker::Address.full_address }
13
- invoice_address { Faker::Address.full_address }
9
+ pallete_note { Faker::Lorem.sentence }
10
+ handover_date { Date.current }
14
11
  remark { Faker::Lorem.sentence }
15
12
  end
16
13
  end
@@ -1,6 +1,6 @@
1
1
  FactoryBot.define do
2
2
  factory :warehouse_shipment_item, class: "Comee::Core::WarehouseShipmentItem" do
3
- association :sales_order_item, :with_inventory
3
+ sales_order_item
4
4
  warehouse_shipment
5
5
  quantity { 10 }
6
6
  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.1.39
4
+ version: 0.1.40
5
5
  platform: ruby
6
6
  authors:
7
7
  - Henock L.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-11-25 00:00:00.000000000 Z
11
+ date: 2023-11-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: active_model_serializers
@@ -268,6 +268,8 @@ files:
268
268
  - app/models/comee/core/client_order.rb
269
269
  - app/models/comee/core/client_price.rb
270
270
  - app/models/comee/core/currency.rb
271
+ - app/models/comee/core/customer_order.rb
272
+ - app/models/comee/core/customer_order_item.rb
271
273
  - app/models/comee/core/edi_order.rb
272
274
  - app/models/comee/core/field_mapping.rb
273
275
  - app/models/comee/core/inventory.rb
@@ -316,6 +318,8 @@ files:
316
318
  - db/migrate/20230728123928_create_comee_core_back_orders.rb
317
319
  - db/migrate/20230728125723_create_comee_core_back_order_items.rb
318
320
  - db/migrate/20230730061225_create_comee_core_notifications.rb
321
+ - db/migrate/20230811083239_create_comee_core_customer_orders.rb
322
+ - db/migrate/20230811102708_create_comee_core_customer_order_items.rb
319
323
  - db/migrate/20230812190652_create_comee_core_sales_orders.rb
320
324
  - db/migrate/20230812212844_create_comee_core_sales_order_items.rb
321
325
  - db/migrate/20230813235946_create_comee_core_master_prices.rb
@@ -341,6 +345,8 @@ files:
341
345
  - spec/factories/comee/core/client_prices.rb
342
346
  - spec/factories/comee/core/clients.rb
343
347
  - spec/factories/comee/core/currencies.rb
348
+ - spec/factories/comee/core/customer_order_items.rb
349
+ - spec/factories/comee/core/customer_orders.rb
344
350
  - spec/factories/comee/core/edi_orders.rb
345
351
  - spec/factories/comee/core/field_mappings.rb
346
352
  - spec/factories/comee/core/inventories.rb