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.
- checksums.yaml +4 -4
- data/app/controllers/comee/core/products_controller.rb +1 -1
- data/app/controllers/comee/core/sales_order_items_controller.rb +8 -2
- data/app/controllers/comee/core/sales_orders_controller.rb +2 -1
- data/app/models/comee/core/fulfillment_center.rb +14 -0
- data/app/models/comee/core/product.rb +2 -0
- data/app/models/comee/core/sales_order.rb +1 -0
- data/app/models/comee/core/sales_order_item.rb +1 -0
- data/app/serializers/comee/core/master_price_serializer.rb +1 -1
- data/app/serializers/comee/core/product_serializer.rb +1 -0
- data/app/serializers/comee/core/sales_order_item_serializer.rb +2 -1
- data/app/serializers/comee/core/sales_order_serializer.rb +1 -0
- data/app/services/comee/core/customer_order_service.rb +6 -4
- data/app/validators/array_validator.rb +23 -0
- data/db/migrate/20230727091518_create_comee_core_fulfillment_centers.rb +14 -0
- data/db/migrate/20230728014322_create_comee_core_products.rb +4 -0
- data/db/migrate/20230812190652_create_comee_core_sales_orders.rb +4 -0
- data/db/migrate/20230812212844_create_comee_core_sales_order_items.rb +5 -0
- data/db/migrate/20230813235946_create_comee_core_master_prices.rb +1 -0
- data/lib/comee/core/version.rb +1 -1
- data/spec/factories/comee/core/fulfillment_centers.rb +9 -0
- data/spec/factories/comee/core/master_prices.rb +1 -0
- data/spec/factories/comee/core/products.rb +1 -0
- data/spec/factories/comee/core/sales_order_items.rb +2 -0
- data/spec/factories/comee/core/sales_orders.rb +1 -0
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f1384668dff4008a978c0526a50f3e61c2d7375025fa420577d93bcb87533735
|
4
|
+
data.tar.gz: 4c90e389141355f9c6178d0bb5369360b4a3fce1e61e62d38a58697d89d48712
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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(
|
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,
|
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
|
@@ -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
|
@@ -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
|
@@ -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
|
-
|
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 =
|
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"},
|
data/lib/comee/core/version.rb
CHANGED
@@ -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
|
@@ -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) }
|
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.
|
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-
|
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
|