comee_core 0.1.39 → 0.1.40

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: 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