comee_core 0.1.52 → 0.1.53

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: ff1dfff0aa073499bc32fea5072e424c330b9615d213dc26270262438b26e9e5
4
- data.tar.gz: a87394329564dc44da058bbc4205f28abdb5a50e34d3ebe424cf2dc591877f87
3
+ metadata.gz: 738e68a65b4d7a96b3f0ea50a6e25da73e42d09f0ef888c49060a45ebc2fb39e
4
+ data.tar.gz: e42799a2bd3b0cfde406636e972ec258462df1df24dae8f4a051002eecc69294
5
5
  SHA512:
6
- metadata.gz: adf59f0b900a8d46b84a029c69208e71e135a2d9d8992f616474898129859178c1c524ec1558459ff8c0b43fcc4a685df54b2fd32b7855c98a580d3eb135617c
7
- data.tar.gz: e93a6583da3c90075e23b7e71a488bae640908a8ee1281bab2db02157b7855bbca65a8151bec3bd7d494eace4aba3ae22dedc7178db21b178856f6d9efb84507
6
+ metadata.gz: e680be5bdcf25fce5cd6fe5ee833c856fcf7eff59600b6cd8741a65d3713d36fd868bb6cac0bc25c2fe420c610ebce61617559b9da112ebdf214c818e5de407a
7
+ data.tar.gz: 343a4eff4586c0ea69d51960250a73766b710284c0f68724bbcb975f3b060080a288ca04e965dee8d7736d0e802af7fb3196f8f1ff841f494e9d5ec3cbd5fb40
@@ -27,7 +27,17 @@ module Comee
27
27
  private
28
28
 
29
29
  def model_params
30
- params.require(:payload).permit(:quantity, :price, :delivery_date, :canceled, :product_id, :customer_order_id, :unit_id)
30
+ params.require(:payload)
31
+ .permit(
32
+ :customer_item_no,
33
+ :quantity,
34
+ :price,
35
+ :delivery_date,
36
+ :canceled,
37
+ :product_id,
38
+ :customer_order_id,
39
+ :unit_id
40
+ )
31
41
  end
32
42
  end
33
43
  end
@@ -29,6 +29,7 @@ module Comee
29
29
  def model_params
30
30
  params.require(:payload)
31
31
  .permit(
32
+ :customer_item_no,
32
33
  :price,
33
34
  :quantity,
34
35
  :discount,
@@ -52,10 +52,19 @@ module Comee
52
52
  render json: {success: false, error: e.message}
53
53
  end
54
54
 
55
+ def convert
56
+ service = QuotationRequestService.new
57
+ order = service.convert_to_order(params[:id])
58
+ render json: {success: true, data: serialize(order)}
59
+ rescue StandardError => e
60
+ render json: {success: false, error: e.message}
61
+ end
62
+
55
63
  private
56
64
 
57
65
  def model_params
58
- params.require(:payload).permit(:reference_no, :status, :client_id)
66
+ params.require(:payload)
67
+ .permit(:reference_no, :order_number, :order_date, :delivery_address, :invoice_address, :status, :client_id)
59
68
  end
60
69
 
61
70
  def rfq_params
@@ -7,7 +7,7 @@ module Comee
7
7
 
8
8
  enum :status, {draft: 0, submitted: 1, awaiting_confirmation: 2, accepted: 3, canceled: 4}
9
9
 
10
- validates :order_number, :order_date, :order_terms, :delivery_address, :invoice_address, :status, presence: true
10
+ validates :order_number, :order_date, :delivery_address, :invoice_address, :status, presence: true
11
11
 
12
12
  def self.ransackable_attributes(_auth_object = nil)
13
13
  %w[client_id delivery_address invoice_address order_number status]
@@ -5,7 +5,7 @@ module Comee
5
5
  belongs_to :product
6
6
  belongs_to :unit
7
7
 
8
- validates :quantity, :price, :delivery_date, presence: true
8
+ validates :customer_item_no, :quantity, :price, :delivery_date, presence: true
9
9
 
10
10
  def self.ransackable_attributes(_auth_object = nil)
11
11
  %w[customer_order_id product_id unit_id]
@@ -6,7 +6,7 @@ module Comee
6
6
  belongs_to :client
7
7
  has_many :quotation_request_items
8
8
 
9
- enum :status, {draft: 0, submitted: 1, awaiting_confirmation: 2, confirmed: 3}
9
+ enum :status, {draft: 0, submitted: 1, awaiting_confirmation: 2, confirmed: 3, converted: 4}
10
10
 
11
11
  validates :status, presence: true
12
12
 
@@ -1,7 +1,7 @@
1
1
  module Comee
2
2
  module Core
3
3
  class CustomerOrderItemSerializer < ActiveModel::Serializer
4
- attributes :id, :quantity, :price, :delivery_date, :canceled
4
+ attributes :id, :customer_item_no, :quantity, :price, :delivery_date, :canceled
5
5
  belongs_to :product
6
6
  belongs_to :customer_order
7
7
  belongs_to :unit
@@ -1,7 +1,7 @@
1
1
  module Comee
2
2
  module Core
3
3
  class QuotationRequestItemSerializer < ActiveModel::Serializer
4
- attributes :id, :price, :discount, :valid_from, :valid_to
4
+ attributes :id, :customer_item_no, :price, :discount, :valid_from, :valid_to
5
5
  belongs_to :product
6
6
  belongs_to :quotation_request
7
7
  belongs_to :unit
@@ -1,7 +1,7 @@
1
1
  module Comee
2
2
  module Core
3
3
  class QuotationRequestSerializer < ActiveModel::Serializer
4
- attributes :id, :reference_no, :status
4
+ attributes :id, :reference_no, :order_number, :status
5
5
  belongs_to :client
6
6
  end
7
7
  end
@@ -4,7 +4,14 @@ module Comee
4
4
  def create_request_with_items(params)
5
5
  request = nil
6
6
  QuotationRequest.transaction do
7
- request = QuotationRequest.create!(client_id: params[:client_id], status: QuotationRequest.statuses[:draft])
7
+ request = QuotationRequest.create!(
8
+ client_id: params[:client_id],
9
+ status: QuotationRequest.statuses[:draft],
10
+ order_number: params[:order_number],
11
+ order_date: params[:order_date],
12
+ delivery_address: params[:delivery_address],
13
+ invoice_address: params[:invoice_address]
14
+ )
8
15
  items = params[:items]
9
16
  items.each do |item|
10
17
  item[:price] = 0
@@ -80,6 +87,49 @@ module Comee
80
87
  end
81
88
  rfq
82
89
  end
90
+
91
+ def convert_to_order(id)
92
+ rfq = QuotationRequest.find(id)
93
+ if QuotationRequest.statuses[rfq.status] != QuotationRequest.statuses[:confirmed]
94
+ raise(StandardError, "RFQ should be in confirmed state for conversion to order.")
95
+ end
96
+
97
+ if rfq.quotation_request_items.any? { |item| item.customer_item_no.nil? }
98
+ raise(StandardError, "All RFQ items should have customer item number set.")
99
+ end
100
+
101
+ order = nil
102
+ CustomerOrder.transaction do
103
+ order = CustomerOrder.create!(
104
+ order_number: rfq.order_number,
105
+ order_date: Date.current,
106
+ client_id: rfq.client_id,
107
+ order_terms: "",
108
+ delivery_address: rfq.delivery_address,
109
+ invoice_address: rfq.invoice_address,
110
+ status: CustomerOrder.statuses[:draft]
111
+ )
112
+
113
+ items = rfq.quotation_request_items.each_with_object([]) do |item, res|
114
+ res << {
115
+ customer_order_id: order.id,
116
+ product_id: item.product_id,
117
+ unit_id: item.unit_id,
118
+ customer_item_no: item.customer_item_no,
119
+ quantity: item.quantity,
120
+ price: item.price,
121
+ delivery_date: item.expected_delivery_date,
122
+ canceled: false
123
+ }
124
+ end
125
+
126
+ CustomerOrderItem.insert_all!(items)
127
+ rfq.status = QuotationRequest.statuses[:converted]
128
+ rfq.save!
129
+ end
130
+
131
+ order
132
+ end
83
133
  end
84
134
  end
85
135
  end
data/config/routes.rb CHANGED
@@ -25,6 +25,7 @@ Comee::Core::Engine.routes.draw do
25
25
  post "submit"
26
26
  post "submit_for_confirmation"
27
27
  post "confirm"
28
+ post "convert"
28
29
  end
29
30
  end
30
31
  resources :quotation_request_items do
@@ -7,7 +7,7 @@ class CreateComeeCoreCustomerOrders < ActiveRecord::Migration[7.1]
7
7
  null: false,
8
8
  index: {name: "client_on_cccuo_indx"},
9
9
  foreign_key: {to_table: :comee_core_clients}
10
- t.string :order_terms, null: false
10
+ t.string :order_terms
11
11
  t.string :delivery_address, null: false
12
12
  t.string :invoice_address, null: false
13
13
  t.integer :status, null: false, default: 0
@@ -13,6 +13,7 @@ class CreateComeeCoreCustomerOrderItems < ActiveRecord::Migration[7.1]
13
13
  null: false,
14
14
  index: {name: "unit_on_cccuoi_indx"},
15
15
  foreign_key: {to_table: :comee_core_units}
16
+ t.string :customer_item_no, null: false
16
17
  t.float :quantity, null: false, default: 0
17
18
  t.float :price, null: false, default: 0
18
19
  t.date :delivery_date, null: false
@@ -2,6 +2,10 @@ class CreateComeeCoreQuotationRequests < ActiveRecord::Migration[7.1]
2
2
  def change
3
3
  create_table :comee_core_quotation_requests do |t|
4
4
  t.string :reference_no, null: false
5
+ t.string :order_number, null: false
6
+ t.date :order_date, null: false
7
+ t.string :delivery_address, null: false
8
+ t.string :invoice_address, null: false
5
9
  t.references :client,
6
10
  null: false,
7
11
  index: {name: "client_on_ccrfq_indx"},
@@ -9,6 +9,7 @@ class CreateComeeCoreQuotationRequestItems < ActiveRecord::Migration[7.1]
9
9
  null: false,
10
10
  index: {name: "rfq_on_ccrfqi_indx"},
11
11
  foreign_key: {to_table: :comee_core_quotation_requests}
12
+ t.string :customer_item_no
12
13
  t.float :quantity, null: false
13
14
  t.float :price, null: false, default: 0
14
15
  t.float :discount, null: false, default: 0
@@ -1,5 +1,5 @@
1
1
  module Comee
2
2
  module Core
3
- VERSION = "0.1.52".freeze
3
+ VERSION = "0.1.53".freeze
4
4
  end
5
5
  end
@@ -3,6 +3,7 @@ FactoryBot.define do
3
3
  customer_order
4
4
  product
5
5
  unit
6
+ customer_item_no { Faker::Alphanumeric.alpha(number: 10) }
6
7
  quantity { 1 }
7
8
  price { 1.5 }
8
9
  delivery_date { Date.current }
@@ -3,6 +3,7 @@ FactoryBot.define do
3
3
  product
4
4
  quotation_request
5
5
  unit
6
+ customer_item_no { Faker::Alphanumeric.alpha(number: 10) }
6
7
  quantity { 10 }
7
8
  price { 0 }
8
9
  discount { 0 }
@@ -1,6 +1,10 @@
1
1
  FactoryBot.define do
2
2
  factory :quotation_request, class: "Comee::Core::QuotationRequest" do
3
3
  reference_no { "RFQ-#{client.code}-#{DateTime.now.to_i}" }
4
+ order_number { Faker::Alphanumeric.alpha(number: 10) }
5
+ order_date { Date.current }
6
+ delivery_address { Faker::Address.street_address }
7
+ invoice_address { Faker::Address.street_address }
4
8
  client
5
9
  status { 0 }
6
10
  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.52
4
+ version: 0.1.53
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-14 00:00:00.000000000 Z
11
+ date: 2023-12-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: active_model_serializers