comee_core 0.1.53 → 0.1.54

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.
Files changed (26) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/comee/core/products_controller.rb +1 -1
  3. data/app/controllers/comee/core/sales_order_items_controller.rb +8 -2
  4. data/app/controllers/comee/core/sales_orders_controller.rb +2 -1
  5. data/app/models/comee/core/fulfillment_center.rb +14 -0
  6. data/app/models/comee/core/product.rb +2 -0
  7. data/app/models/comee/core/sales_order.rb +1 -0
  8. data/app/models/comee/core/sales_order_item.rb +1 -0
  9. data/app/serializers/comee/core/master_price_serializer.rb +1 -1
  10. data/app/serializers/comee/core/product_serializer.rb +1 -0
  11. data/app/serializers/comee/core/sales_order_item_serializer.rb +2 -1
  12. data/app/serializers/comee/core/sales_order_serializer.rb +1 -0
  13. data/app/services/comee/core/customer_order_service.rb +6 -4
  14. data/app/validators/array_validator.rb +23 -0
  15. data/db/migrate/20230727091518_create_comee_core_fulfillment_centers.rb +14 -0
  16. data/db/migrate/20230728014322_create_comee_core_products.rb +4 -0
  17. data/db/migrate/20230812190652_create_comee_core_sales_orders.rb +4 -0
  18. data/db/migrate/20230812212844_create_comee_core_sales_order_items.rb +5 -0
  19. data/db/migrate/20230813235946_create_comee_core_master_prices.rb +1 -0
  20. data/lib/comee/core/version.rb +1 -1
  21. data/spec/factories/comee/core/fulfillment_centers.rb +9 -0
  22. data/spec/factories/comee/core/master_prices.rb +1 -0
  23. data/spec/factories/comee/core/products.rb +1 -0
  24. data/spec/factories/comee/core/sales_order_items.rb +2 -0
  25. data/spec/factories/comee/core/sales_orders.rb +1 -0
  26. metadata +6 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 738e68a65b4d7a96b3f0ea50a6e25da73e42d09f0ef888c49060a45ebc2fb39e
4
- data.tar.gz: e42799a2bd3b0cfde406636e972ec258462df1df24dae8f4a051002eecc69294
3
+ metadata.gz: f1384668dff4008a978c0526a50f3e61c2d7375025fa420577d93bcb87533735
4
+ data.tar.gz: 4c90e389141355f9c6178d0bb5369360b4a3fce1e61e62d38a58697d89d48712
5
5
  SHA512:
6
- metadata.gz: e680be5bdcf25fce5cd6fe5ee833c856fcf7eff59600b6cd8741a65d3713d36fd868bb6cac0bc25c2fe420c610ebce61617559b9da112ebdf214c818e5de407a
7
- data.tar.gz: 343a4eff4586c0ea69d51960250a73766b710284c0f68724bbcb975f3b060080a288ca04e965dee8d7736d0e802af7fb3196f8f1ff841f494e9d5ec3cbd5fb40
6
+ metadata.gz: f2dae046eaefed52198da2a2e90f4c4b167459ce7091ba5b28eb884aa74f3b7ebcd400a32b5aa8df469a1450a51233bcde4c3a8c199537618fc03293893bf2ee
7
+ data.tar.gz: f05e56528126274994fa7bab6517cba5ea6efffeffff022fd02ebc149c49219db97d45b80d501bc56cdf4910c522205947250924b0a5b1f43f8bb897adab7abc
@@ -30,7 +30,7 @@ module Comee
30
30
  private
31
31
 
32
32
  def model_params
33
- params.required(:payload).permit(:code, :name, :description, :parent_id, :thumbnail_image, :preferred_units, images: [])
33
+ params.required(:payload).permit(:code, :name, :description, :parent_id, :thumbnail_image, :preferred_units, :source_id, images: [])
34
34
  end
35
35
 
36
36
  def price_params
@@ -5,7 +5,12 @@ module Comee
5
5
 
6
6
  def index
7
7
  super do
8
- Comee::Core::SalesOrderItem.includes(:customer_order_item).where(sales_order_id: params[:id])
8
+ Comee::Core::SalesOrderItem.includes(
9
+ :sales_order,
10
+ :customer_order_item,
11
+ :source,
12
+ :unit
13
+ ).where(sales_order_id: params[:id])
9
14
  end
10
15
  end
11
16
 
@@ -24,7 +29,8 @@ module Comee
24
29
 
25
30
  def model_params
26
31
  params.require(:payload).permit(:sales_order_id, :customer_order_item_id, :product_id, :unit_id, :quantity, :quantity_delivered,
27
- :customer_item_no, :price, :delivery_date, :eb_number, :comment, :action_note, :po_reference)
32
+ :customer_item_no, :price, :delivery_date, :eb_number, :lead_time, :comment, :action_note,
33
+ :po_reference, :source_id)
28
34
  end
29
35
  end
30
36
  end
@@ -6,7 +6,7 @@ module Comee
6
6
 
7
7
  def index
8
8
  super do
9
- Comee::Core::SalesOrder.includes(:sales_order_items).all
9
+ Comee::Core::SalesOrder.includes(:customer_order, :fulfillment_center, :sales_order_items).all
10
10
  end
11
11
  end
12
12
 
@@ -45,6 +45,7 @@ module Comee
45
45
 
46
46
  def back_order_params
47
47
  params.permit(payload: [:supplier_id, :order_number, :order_date, :delivery_date, :delivery_address, :invoice_address,
48
+ :fulfillment_center_id,
48
49
  back_order_items: %i[product_id requested_quantity requested_price supplier_quantity delivery_date]])
49
50
  end
50
51
 
@@ -0,0 +1,14 @@
1
+ module Comee
2
+ module Core
3
+ class FulfillmentCenter < ApplicationRecord
4
+ WAREHOUSE = "Warehouse".freeze
5
+ PURCHASE = "Purchase".freeze
6
+ SERVICES = [WAREHOUSE, PURCHASE].freeze
7
+
8
+ validates :code, presence: true, uniqueness: true
9
+ validates :name, :address, :email, presence: true
10
+ validates :email, format: URI::MailTo::EMAIL_REGEXP
11
+ validates :service, presence: true, array: {inclusion: {in: SERVICES}}
12
+ end
13
+ end
14
+ end
@@ -7,6 +7,8 @@ module Comee
7
7
  has_one_attached :thumbnail_image
8
8
  has_many_attached :images
9
9
 
10
+ belongs_to :source, class_name: "Comee::Core::FulfillmentCenter", optional: true
11
+
10
12
  validates :code, presence: true, uniqueness: true
11
13
  validates :name, presence: true
12
14
 
@@ -4,6 +4,7 @@ module Comee
4
4
  before_save :total_price
5
5
 
6
6
  belongs_to :customer_order
7
+ belongs_to :fulfillment_center, optional: true
7
8
  has_many :sales_order_items
8
9
  has_many_attached :files
9
10
 
@@ -5,6 +5,7 @@ module Comee
5
5
  belongs_to :customer_order_item
6
6
  belongs_to :product
7
7
  belongs_to :unit
8
+ belongs_to :source, class_name: "Comee::Core::FulfillmentCenter", optional: true
8
9
  has_many :warehouse_shipment_items
9
10
  has_many :item_statuses
10
11
 
@@ -1,7 +1,7 @@
1
1
  module Comee
2
2
  module Core
3
3
  class MasterPriceSerializer < ActiveModel::Serializer
4
- attributes :id, :purchase_price, :selling_price, :valid_from, :valid_to, :primary, :margin
4
+ attributes :id, :purchase_price, :selling_price, :valid_from, :valid_to, :primary, :margin, :lead_time
5
5
  belongs_to :product
6
6
  belongs_to :supplier
7
7
  end
@@ -2,6 +2,7 @@ module Comee
2
2
  module Core
3
3
  class ProductSerializer < ActiveModel::Serializer
4
4
  attributes :id, :code, :name, :description, :thumbnail_image_url, :images_url, :preferred_units
5
+ belongs_to :source
5
6
  end
6
7
  end
7
8
  end
@@ -1,10 +1,11 @@
1
1
  module Comee
2
2
  module Core
3
3
  class SalesOrderItemSerializer < ActiveModel::Serializer
4
- attributes :id, :customer_item_no, :quantity, :quantity_delivered, :price, :delivery_date, :eb_number, :comment,
4
+ attributes :id, :customer_item_no, :quantity, :quantity_delivered, :price, :delivery_date, :eb_number, :lead_time, :comment,
5
5
  :action_note, :po_reference
6
6
  belongs_to :sales_order
7
7
  belongs_to :customer_order_item
8
+ belongs_to :source
8
9
  belongs_to :unit
9
10
  end
10
11
  end
@@ -4,6 +4,7 @@ module Comee
4
4
  attributes :id, :order_number, :payment_penalty, :status, :total_price,
5
5
  :amount_paid, :pallete_note, :handover_date, :remark, :files_url
6
6
  belongs_to :customer_order
7
+ belongs_to :fulfillment_center
7
8
  has_many :sales_order_items
8
9
  end
9
10
  end
@@ -125,18 +125,19 @@ module Comee
125
125
  status: SalesOrder.statuses[:draft]
126
126
  )
127
127
  order_items = order.customer_order_items.includes(:product, :unit)
128
- prices = ClientPrice.where(client: order.client, product_id: order_items.map(&:product_id))
128
+ client_prices = ClientPrice.where(client: order.client, product_id: order_items.map(&:product_id))
129
+ master_prices = MasterPrice.where(primary: true, status: Price.statuses[:current], product: order_items.map(&:product))
129
130
  items = order_items.each_with_object([]) do |item, res|
130
131
  next if item.canceled?
131
132
 
132
133
  default_unit = item.product.default_unit
133
134
  unit_id = default_unit ? default_unit["id"] : item.unit_id
134
135
  quantity = convert_quantity(item.quantity, item.unit_id, unit_id)
135
- client_price = prices.find { |price| price.product_id == item.product_id }
136
+ client_price = client_prices.find { |price| price.product_id == item.product_id }
137
+ master_price = master_prices.find { |price| price.product_id == item.product_id }
136
138
  if client_price
137
139
  price = convert_price(client_price.price, client_price.unit_id, unit_id)
138
140
  else
139
- master_price = MasterPrice.find_by(product: item.product, primary: true)
140
141
  raise(StandardError, "No price entry could be found for product `#{item.product.code}`.") unless master_price
141
142
 
142
143
  price = convert_price(master_price.selling_price, master_price.unit_id, unit_id)
@@ -150,7 +151,8 @@ module Comee
150
151
  customer_item_no: item.product.code,
151
152
  quantity: quantity,
152
153
  price: price,
153
- delivery_date: item.delivery_date
154
+ delivery_date: item.delivery_date,
155
+ lead_time: master_price&.lead_time
154
156
  }
155
157
  end
156
158
  SalesOrderItem.insert_all!(items)
@@ -0,0 +1,23 @@
1
+ class ArrayValidator < ActiveModel::EachValidator
2
+ def validate_each(record, attribute, values)
3
+ Array(values).each do |value|
4
+ options.each do |key, args|
5
+ validator_options = {attributes: attribute}
6
+ validator_options.merge!(args) if args.is_a?(Hash)
7
+ next if value.nil? && validator_options[:allow_nil]
8
+
9
+ next if value.blank? && validator_options[:allow_blank]
10
+
11
+ validator_class_name = "#{key.to_s.camelize}Validator"
12
+ validator_class = begin
13
+ validator_class_name.constantize
14
+ rescue NameError
15
+ "ActiveModel::Validations::#{validator_class_name}".constantize
16
+ end
17
+
18
+ validator = validator_class.new(validator_options)
19
+ validator.validate_each(record, attribute, value)
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,14 @@
1
+ class CreateComeeCoreFulfillmentCenters < ActiveRecord::Migration[7.1]
2
+ def change
3
+ create_table :comee_core_fulfillment_centers do |t|
4
+ t.string :code, null: false
5
+ t.string :name, null: false
6
+ t.string :address, null: false
7
+ t.string :email, null: false
8
+ t.string :service, array: true, null: false
9
+
10
+ t.timestamps
11
+ end
12
+ add_index :comee_core_fulfillment_centers, :code, unique: true
13
+ end
14
+ end
@@ -7,6 +7,10 @@ class CreateComeeCoreProducts < ActiveRecord::Migration[7.0]
7
7
  t.boolean :leaf, null: false, default: true
8
8
  t.string :ancestry
9
9
  t.jsonb :preferred_units, null: false, default: []
10
+ t.references :source,
11
+ null: true,
12
+ index: {name: "source_on_ccp_indx"},
13
+ foreign_key: {to_table: :comee_core_fulfillment_centers}
10
14
 
11
15
  t.timestamps
12
16
  end
@@ -6,6 +6,10 @@ class CreateComeeCoreSalesOrders < ActiveRecord::Migration[7.0]
6
6
  null: false,
7
7
  index: {name: "co_on_ccso_indx"},
8
8
  foreign_key: {to_table: :comee_core_customer_orders}
9
+ t.references :fulfillment_center,
10
+ null: true,
11
+ index: {name: "fc_on_ccso_indx"},
12
+ foreign_key: {to_table: :comee_core_fulfillment_centers}
9
13
  t.float :payment_penalty, null: false, default: 0.0
10
14
  t.integer :status, null: false, default: 0
11
15
  t.float :total_price, null: false, default: 0
@@ -17,6 +17,10 @@ class CreateComeeCoreSalesOrderItems < ActiveRecord::Migration[7.0]
17
17
  null: false,
18
18
  index: {name: "coi_on_ccsoi_indx"},
19
19
  foreign_key: {to_table: :comee_core_customer_order_items}
20
+ t.references :source,
21
+ null: true,
22
+ index: {name: "source_on_ccsoi_indx"},
23
+ foreign_key: {to_table: :comee_core_fulfillment_centers}
20
24
  t.string :customer_item_no, null: false
21
25
  t.float :quantity, null: false
22
26
  t.float :quantity_delivered, null: false, default: 0
@@ -25,6 +29,7 @@ class CreateComeeCoreSalesOrderItems < ActiveRecord::Migration[7.0]
25
29
  t.boolean :canceled, default: false
26
30
  t.date :handover_date
27
31
  t.string :eb_number
32
+ t.integer :lead_time
28
33
  t.string :comment
29
34
  t.string :action_note
30
35
  t.string :po_reference
@@ -8,6 +8,7 @@ class CreateComeeCoreMasterPrices < ActiveRecord::Migration[7.0]
8
8
  t.float :status, null: false, default: 0
9
9
  t.boolean :primary, null: false, default: false
10
10
  t.integer :margin, null: false
11
+ t.integer :lead_time
11
12
  t.references :product,
12
13
  null: false,
13
14
  index: {name: "product_on_ccmp_indx"},
@@ -1,5 +1,5 @@
1
1
  module Comee
2
2
  module Core
3
- VERSION = "0.1.53".freeze
3
+ VERSION = "0.1.54".freeze
4
4
  end
5
5
  end
@@ -0,0 +1,9 @@
1
+ FactoryBot.define do
2
+ factory :fulfillment_center, class: "Comee::Core::FulfillmentCenter" do
3
+ code { Faker::Alphanumeric.alpha(number: 10) }
4
+ name { Faker::Name.name }
5
+ address { Faker::Address.street_address }
6
+ email { Faker::Internet.email }
7
+ service { Comee::Core::FulfillmentCenter::SERVICES }
8
+ end
9
+ end
@@ -6,6 +6,7 @@ FactoryBot.define do
6
6
  valid_to { Date.current.advance(months: 1) }
7
7
  primary { false }
8
8
  margin { 10.0 }
9
+ lead_time { nil }
9
10
  product
10
11
  supplier
11
12
  unit
@@ -9,5 +9,6 @@ FactoryBot.define do
9
9
  leaf { true }
10
10
  ancestry { root.id.to_s }
11
11
  preferred_units { [] }
12
+ source factory: :fulfillment_center
12
13
  end
13
14
  end
@@ -2,6 +2,7 @@ FactoryBot.define do
2
2
  factory :sales_order_item, class: "Comee::Core::SalesOrderItem" do
3
3
  sales_order
4
4
  association :customer_order_item, :with_inventory
5
+ source factory: :fulfillment_center
5
6
  product
6
7
  unit
7
8
  customer_item_no { Faker::Alphanumeric.alpha(number: 10) }
@@ -11,6 +12,7 @@ FactoryBot.define do
11
12
  delivery_date { Date.current.advance(months: 1) }
12
13
  handover_date { Date.current }
13
14
  eb_number { Faker::Lorem.word }
15
+ lead_time { nil }
14
16
  comment { Faker::Lorem.sentence }
15
17
  action_note { Faker::Lorem.sentence }
16
18
  po_reference { Faker::Alphanumeric.alpha(number: 10) }
@@ -2,6 +2,7 @@ FactoryBot.define do
2
2
  factory :sales_order, class: "Comee::Core::SalesOrder" do
3
3
  order_number { Faker::Alphanumeric.alpha(number: 10) }
4
4
  customer_order
5
+ fulfillment_center
5
6
  payment_penalty { 0 }
6
7
  total_price { 0 }
7
8
  amount_paid { 0 }
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.53
4
+ version: 0.1.54
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-12-15 00:00:00.000000000 Z
11
+ date: 2023-12-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: active_model_serializers
@@ -320,6 +320,7 @@ files:
320
320
  - app/models/comee/core/edi_order.rb
321
321
  - app/models/comee/core/external_rfq.rb
322
322
  - app/models/comee/core/field_mapping.rb
323
+ - app/models/comee/core/fulfillment_center.rb
323
324
  - app/models/comee/core/inventory.rb
324
325
  - app/models/comee/core/invoice.rb
325
326
  - app/models/comee/core/invoice_item.rb
@@ -372,6 +373,7 @@ files:
372
373
  - app/services/comee/core/sales_order_service.rb
373
374
  - app/services/comee/core/token_service.rb
374
375
  - app/utils/comee/core/period.rb
376
+ - app/validators/array_validator.rb
375
377
  - app/views/comee/core/supplier_mailer/new_order_notification.html.erb
376
378
  - app/views/layouts/comee/core/mailer.html.erb
377
379
  - app/views/layouts/comee/core/mailer.text.erb
@@ -379,6 +381,7 @@ files:
379
381
  - config/locales/en.yml
380
382
  - config/routes.rb
381
383
  - config/spring.rb
384
+ - db/migrate/20230727091518_create_comee_core_fulfillment_centers.rb
382
385
  - db/migrate/20230727153013_create_comee_core_units.rb
383
386
  - db/migrate/20230728011037_create_comee_core_currencies.rb
384
387
  - db/migrate/20230728014322_create_comee_core_products.rb
@@ -430,6 +433,7 @@ files:
430
433
  - spec/factories/comee/core/edi_orders.rb
431
434
  - spec/factories/comee/core/external_rfqs.rb
432
435
  - spec/factories/comee/core/field_mappings.rb
436
+ - spec/factories/comee/core/fulfillment_centers.rb
433
437
  - spec/factories/comee/core/inventories.rb
434
438
  - spec/factories/comee/core/invoice_items.rb
435
439
  - spec/factories/comee/core/invoices.rb