comee_core 0.1.53 → 0.1.54

Sign up to get free protection for your applications and to get access to all the features.
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