comee_core 0.1.52 → 0.1.53

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