comee_core 0.3.62 → 0.4.0
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 +4 -4
- data/app/controllers/comee/core/access_controller.rb +1 -1
- data/app/controllers/comee/core/client_prices_controller.rb +3 -3
- data/app/controllers/comee/core/customs_details_controller.rb +2 -2
- data/app/controllers/comee/core/sales_order_items_controller.rb +1 -1
- data/app/models/comee/core/client_address.rb +3 -3
- data/app/models/comee/core/customer_order_item.rb +1 -1
- data/app/models/comee/core/goods_received_note.rb +1 -1
- data/app/models/comee/core/master_price.rb +2 -2
- data/app/models/comee/core/notification.rb +1 -1
- data/app/models/comee/core/purchase_order.rb +1 -1
- data/app/models/comee/core/purchase_order_item.rb +1 -1
- data/app/models/comee/core/purchase_requisition_item.rb +1 -1
- data/app/models/comee/core/reorder_report.rb +1 -1
- data/app/models/comee/core/sales_order_item.rb +1 -1
- data/app/models/comee/core/stock_transfer_request.rb +2 -2
- data/app/models/comee/core/supplier_address.rb +3 -3
- data/app/notifications/comee/core/back_order_notification.rb +1 -1
- data/app/services/comee/core/beo_service.rb +59 -59
- data/app/services/comee/core/customer_order_service.rb +10 -10
- data/app/services/comee/core/goods_received_note_service.rb +2 -4
- data/app/services/comee/core/product_lookup_service.rb +4 -4
- data/app/services/comee/core/sales_order_service.rb +7 -7
- data/lib/comee/core/active_model_serializers_frozen_options_patch.rb +15 -0
- data/lib/comee/core/engine.rb +5 -0
- data/lib/comee/core/version.rb +1 -1
- data/spec/factories/comee/core/credit_notes.rb +1 -1
- metadata +39 -13
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: ca0bf8df6ae7657e0a6c77cee48a1da4268ba89529e6619f662de9975b60aa47
|
|
4
|
+
data.tar.gz: 8717fbcce6807e2c483e1df297c94fe438508f6e10d2e0d7990de1be9a1adaf8
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: fb999522604cbeb2e2a852786ee940a922d5b0d65ed03399d1f0ec9db96baf54644295abbb8b101f3f002f5745c83eb683af417b2d76c517f279268bd7f0ae00
|
|
7
|
+
data.tar.gz: 164e68de1f86011ac8296fb0e2f6cd99d1d6ec1bb942e68098cb3b436b7a0768b40d6e4f580f85e0a63dc2b5c4e9f293762e1f9175306be2852adf52d2b319da
|
|
@@ -24,7 +24,7 @@ module Comee
|
|
|
24
24
|
def update
|
|
25
25
|
if @obj.draft?
|
|
26
26
|
product_id = model_params[:product_id] || @obj.product_id
|
|
27
|
-
master_price = MasterPrice.find_by(product_id
|
|
27
|
+
master_price = MasterPrice.find_by(product_id:, primary: true)
|
|
28
28
|
@obj.price = master_price&.selling_price
|
|
29
29
|
@obj.valid_from = model_params[:valid_from] if model_params[:valid_from]
|
|
30
30
|
@obj.valid_to = model_params[:valid_to] if model_params[:valid_to]
|
|
@@ -41,7 +41,7 @@ module Comee
|
|
|
41
41
|
end
|
|
42
42
|
else
|
|
43
43
|
error = "Client price should be in draft state to edit."
|
|
44
|
-
render json: {success: false, error:
|
|
44
|
+
render json: {success: false, error:}, status: 422
|
|
45
45
|
end
|
|
46
46
|
rescue StandardError => e
|
|
47
47
|
render json: {success: false, error: e.message}
|
|
@@ -64,7 +64,7 @@ module Comee
|
|
|
64
64
|
client = Client.find(params[:id])
|
|
65
65
|
client_id = client.parent_id || client.id
|
|
66
66
|
prices = ClientPrice.includes(:client, :product, :unit, :product_lookup)
|
|
67
|
-
.where(client_id:
|
|
67
|
+
.where(client_id:)
|
|
68
68
|
render_content(prices)
|
|
69
69
|
end
|
|
70
70
|
|
|
@@ -11,7 +11,7 @@ module Comee
|
|
|
11
11
|
def send_customs_details
|
|
12
12
|
service = BeoService.new(publish_params[:ids])
|
|
13
13
|
data = service.send_customs_details
|
|
14
|
-
render json: {success: true, data:
|
|
14
|
+
render json: {success: true, data:}
|
|
15
15
|
rescue StandardError => e
|
|
16
16
|
render json: {success: false, error: e.message}, status: 422
|
|
17
17
|
end
|
|
@@ -19,7 +19,7 @@ module Comee
|
|
|
19
19
|
def generate_beo_xml
|
|
20
20
|
service = BeoService.new(publish_params[:ids])
|
|
21
21
|
data = service.preprocess_data(xml: true)
|
|
22
|
-
render json: {success: true, data:
|
|
22
|
+
render json: {success: true, data:}
|
|
23
23
|
rescue StandardError => e
|
|
24
24
|
render json: {success: false, error: e.message}, status: 422
|
|
25
25
|
end
|
|
@@ -11,10 +11,10 @@ module Comee
|
|
|
11
11
|
return unless client && address_type && default
|
|
12
12
|
|
|
13
13
|
default_count = if new_record?
|
|
14
|
-
ClientAddress.where(address_type
|
|
14
|
+
ClientAddress.where(address_type:, client:, default: true).count
|
|
15
15
|
else
|
|
16
|
-
ClientAddress.where(address_type
|
|
17
|
-
.where.not(id:
|
|
16
|
+
ClientAddress.where(address_type:, client:, default: true)
|
|
17
|
+
.where.not(id:).count
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
return if default_count.zero?
|
|
@@ -20,7 +20,7 @@ module Comee
|
|
|
20
20
|
number = SecureRandom.random_number(10000000)
|
|
21
21
|
grn_number = "GRN-#{number}"
|
|
22
22
|
|
|
23
|
-
break grn_number unless GoodsReceivedNote.where(grn_number:
|
|
23
|
+
break grn_number unless GoodsReceivedNote.where(grn_number:).exists?
|
|
24
24
|
end
|
|
25
25
|
end
|
|
26
26
|
end
|
|
@@ -21,7 +21,7 @@ module Comee
|
|
|
21
21
|
|
|
22
22
|
def self.product_price(product_id)
|
|
23
23
|
MasterPrice.find_by(
|
|
24
|
-
product_id
|
|
24
|
+
product_id:,
|
|
25
25
|
primary: true,
|
|
26
26
|
status: Price.statuses[:current]
|
|
27
27
|
)
|
|
@@ -30,7 +30,7 @@ module Comee
|
|
|
30
30
|
def validate_primary_price
|
|
31
31
|
return unless product && primary
|
|
32
32
|
|
|
33
|
-
price = MasterPrice.find_by(product
|
|
33
|
+
price = MasterPrice.find_by(product:, primary: true, status: Price.statuses[:current])
|
|
34
34
|
return unless price && price.id != id && status == price.status
|
|
35
35
|
|
|
36
36
|
errors.add(:base, "There is already a primary price entry for item '#{product.code}'")
|
|
@@ -6,7 +6,7 @@ module Comee
|
|
|
6
6
|
belongs_to :recipient, polymorphic: true
|
|
7
7
|
|
|
8
8
|
def message
|
|
9
|
-
{id
|
|
9
|
+
{id:, read: !read_at.nil?, created_at:}.merge(to_notification.message)
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
def self.messages(notifications)
|
|
@@ -11,7 +11,7 @@ module Comee
|
|
|
11
11
|
validates :order_date, :delivery_address, :status, :delivery_date, presence: true
|
|
12
12
|
validates :discount, numericality: {greater_than_or_equal_to: 0, less_than_or_equal_to: 100, allow_nil: true}
|
|
13
13
|
validates :confirmed_discount, numericality: {greater_than_or_equal_to: 0, less_than_or_equal_to: 100, allow_nil: true}
|
|
14
|
-
enum status
|
|
14
|
+
enum :status, {
|
|
15
15
|
draft: 0,
|
|
16
16
|
submitted: 1,
|
|
17
17
|
approved: 2,
|
|
@@ -5,7 +5,7 @@ module Comee
|
|
|
5
5
|
after_save :calculate_requisition_price
|
|
6
6
|
after_save :update_requisition_purchase_status, if: proc { |item| item.fully_processed? }
|
|
7
7
|
|
|
8
|
-
enum processing_status
|
|
8
|
+
enum :processing_status, {unprocessed: 0, partially_processed: 1, fully_processed: 2}
|
|
9
9
|
|
|
10
10
|
belongs_to :product
|
|
11
11
|
belongs_to :unit
|
|
@@ -27,7 +27,7 @@ module Comee
|
|
|
27
27
|
number = SecureRandom.random_number(10000000)
|
|
28
28
|
reference_number = "RR-#{number}"
|
|
29
29
|
|
|
30
|
-
break reference_number unless ReorderReport.where(reference_number:
|
|
30
|
+
break reference_number unless ReorderReport.where(reference_number:).exists?
|
|
31
31
|
end
|
|
32
32
|
end
|
|
33
33
|
end
|
|
@@ -8,7 +8,7 @@ module Comee
|
|
|
8
8
|
after_save :update_sales_order_purchase_status, if: proc { |item| item.fully_processed? }
|
|
9
9
|
after_destroy :update_sales_order
|
|
10
10
|
|
|
11
|
-
enum processing_status
|
|
11
|
+
enum :processing_status, {unprocessed: 0, partially_processed: 1, fully_processed: 2}
|
|
12
12
|
|
|
13
13
|
belongs_to :sales_order
|
|
14
14
|
belongs_to :customer_order_item
|
|
@@ -12,7 +12,7 @@ module Comee
|
|
|
12
12
|
validates :reference_number, uniqueness: true
|
|
13
13
|
validates :reference_number, :reference_date, :due_date, :status, presence: true
|
|
14
14
|
validate :validate_due_date_is_after_reference_date, if: -> { due_date.present? && reference_date.present? }
|
|
15
|
-
enum status
|
|
15
|
+
enum :status, {
|
|
16
16
|
draft: 0,
|
|
17
17
|
issued: 1,
|
|
18
18
|
accepted: 2,
|
|
@@ -44,7 +44,7 @@ module Comee
|
|
|
44
44
|
number = SecureRandom.random_number(10000000)
|
|
45
45
|
reference_number = "STR-#{number}"
|
|
46
46
|
|
|
47
|
-
break reference_number unless StockTransferRequest.where(reference_number:
|
|
47
|
+
break reference_number unless StockTransferRequest.where(reference_number:).exists?
|
|
48
48
|
end
|
|
49
49
|
end
|
|
50
50
|
end
|
|
@@ -9,10 +9,10 @@ module Comee
|
|
|
9
9
|
return unless supplier && address_type && default
|
|
10
10
|
|
|
11
11
|
default_count = if new_record?
|
|
12
|
-
SupplierAddress.where(address_type
|
|
12
|
+
SupplierAddress.where(address_type:, supplier:, default: true).count
|
|
13
13
|
else
|
|
14
|
-
SupplierAddress.where(address_type
|
|
15
|
-
.where.not(id:
|
|
14
|
+
SupplierAddress.where(address_type:, supplier:, default: true)
|
|
15
|
+
.where.not(id:).count
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
return if default_count.zero?
|
|
@@ -62,7 +62,7 @@ module Comee
|
|
|
62
62
|
customs_detail = @customs_details.find_by(sales_order_id: si.sales_order_item.sales_order_id)
|
|
63
63
|
mp = Comee::Core::MasterPrice.includes(:country_of_origin).find_by(primary: true,
|
|
64
64
|
product_id: si
|
|
65
|
-
|
|
65
|
+
.sales_order_item.product.id)
|
|
66
66
|
|
|
67
67
|
position_items << {
|
|
68
68
|
"warePositionsnummer": index + 1,
|
|
@@ -81,12 +81,12 @@ module Comee
|
|
|
81
81
|
"aussenhandelsstatistikWert": (si.sales_order_item.quantity *
|
|
82
82
|
si.sales_order_item.price * 1.05).round(2).to_i,
|
|
83
83
|
"packstuck": [
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
84
|
+
|
|
85
|
+
"packstuckNummer": index + 1,
|
|
86
|
+
"packstuckAnzahl": index.zero? ? @no_of_packages : 0,
|
|
87
|
+
"packstuckVerpackungsart": @package_type,
|
|
88
|
+
"packstuckZeichenNummern": customs_detail.sales_order.customer_order.order_number
|
|
89
|
+
|
|
90
90
|
]
|
|
91
91
|
}
|
|
92
92
|
end
|
|
@@ -109,59 +109,59 @@ module Comee
|
|
|
109
109
|
"messageData": {
|
|
110
110
|
"ausfuhr": {
|
|
111
111
|
"expdat": [
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
},
|
|
157
|
-
"warenortArtdesOrtes": "B",
|
|
158
|
-
"warenortArtDerOrtsbestimmung": "Y",
|
|
159
|
-
"warenortZusatzlicheKennung": @customs_details[0].additional_identifier.split(" ")[0],
|
|
160
|
-
"lieferbedingungIncotermCode": @customs_details[0].delivery_term_code[0, 3],
|
|
161
|
-
"lieferbedingungOrt": "Hamburg"
|
|
112
|
+
|
|
113
|
+
"kopf": {
|
|
114
|
+
"eoriNiederlassungsnummer": "DE47897410000",
|
|
115
|
+
"artderAnmeldung": @customs_details[0].registration_type.split(" ")[0],
|
|
116
|
+
"artderAnmeldungAusfuhr": @customs_details[0].export_declaration_type.split(" ")[0],
|
|
117
|
+
"ausfuhrLand": "DE",
|
|
118
|
+
"beteiligtenKonstellation": @customs_details[0].participant_constellation.split(" ")[0],
|
|
119
|
+
"sicherheit": @customs_details[0].registration_type.split(" ")[0] == "CO" ? 0 : 2,
|
|
120
|
+
"container": @customs_details[0].containerized == true ? 1 : 0,
|
|
121
|
+
"bestimmungsLand": @customs_details[0].destination_country.split(" ")[0],
|
|
122
|
+
"referenznummerUCR": @customs_details.map(&:sales_order).map(&:customer_order).map(&:consignee).join(" "),
|
|
123
|
+
"lrn": @customs_details.map(&:sales_order).map(&:customer_order).map(&:order_number).join(" "),
|
|
124
|
+
"beforderungsmittelImInlandVerkehrszweig": @customs_details[0].mode_of_transport.split(" ")[0],
|
|
125
|
+
"beforderungsmittelderGrenzeVerkehrszweig": @customs_details[0].mode_of_transport_at_border.split(" ")[0],
|
|
126
|
+
"beforderungsmittelderGrenzeArt": @customs_details[0].mode_of_transport_type.split(" ")[0],
|
|
127
|
+
"beforderungsmittelderGrenzeKennzeichen": "UNBEKANNT",
|
|
128
|
+
"beforderungsmittelderGrenzeStaatszugehorigkeit": @customs_details[0].mode_of_transport_nationality.split(" ")[0],
|
|
129
|
+
"gesamtRohmasse": @total_weight,
|
|
130
|
+
"beforderungsmittelBeimAbgang": [
|
|
131
|
+
|
|
132
|
+
"sequenznummer": "1",
|
|
133
|
+
"artderIdentifikation": @customs_details[0].type_of_identification.split(" ")[0],
|
|
134
|
+
"kennzeichen": "UNBEKANNT",
|
|
135
|
+
"staatszugehorigkeit": @customs_details[0].nationality.split(" ")[0]
|
|
136
|
+
|
|
137
|
+
],
|
|
138
|
+
"ausfuhrzollstelleDienststellennummer": @customs_details[0].export_customs_office.split(" ")[0],
|
|
139
|
+
"vorgeseheneAusgangszollstelleDienststellennummer": @customs_details[0].customs_office_of_exit.split(" ")[0],
|
|
140
|
+
"geschaftsvorgangArt": "11",
|
|
141
|
+
"geschaftsvorgangRechnungspreis": @customs_details[0].sales_order.total_price.round(2),
|
|
142
|
+
"geschaftsvorgangWahrung": "EUR",
|
|
143
|
+
"beforderungsroute": {
|
|
144
|
+
"ausgewahlteLander": @transportation_routes,
|
|
145
|
+
"beforderungsVon": "DE",
|
|
146
|
+
"beforderungsBis": @customs_details[0].destination_country.split(" ")[0]
|
|
147
|
+
},
|
|
148
|
+
"empfanger": {
|
|
149
|
+
"tin": "",
|
|
150
|
+
"niederlassungsNummer": "",
|
|
151
|
+
"name": @customs_details[0].sales_order.customer_order.client.name,
|
|
152
|
+
"strasse": @address.street,
|
|
153
|
+
"plz": @address.postal_code,
|
|
154
|
+
"ort": @address.city,
|
|
155
|
+
"land": @address.country.code
|
|
162
156
|
},
|
|
163
|
-
"
|
|
164
|
-
|
|
157
|
+
"warenortArtdesOrtes": "B",
|
|
158
|
+
"warenortArtDerOrtsbestimmung": "Y",
|
|
159
|
+
"warenortZusatzlicheKennung": @customs_details[0].additional_identifier.split(" ")[0],
|
|
160
|
+
"lieferbedingungIncotermCode": @customs_details[0].delivery_term_code[0, 3],
|
|
161
|
+
"lieferbedingungOrt": "Hamburg"
|
|
162
|
+
},
|
|
163
|
+
"position": position_data
|
|
164
|
+
|
|
165
165
|
]
|
|
166
166
|
}
|
|
167
167
|
}
|
|
@@ -89,7 +89,7 @@ module Comee
|
|
|
89
89
|
|
|
90
90
|
client_price = old_price
|
|
91
91
|
unless client_price
|
|
92
|
-
client_price = ClientPrice.find_by(product_id: item.product_id, client_id:
|
|
92
|
+
client_price = ClientPrice.find_by(product_id: item.product_id, client_id:)
|
|
93
93
|
if client_price
|
|
94
94
|
client_price = convert_price(client_price.price, client_price.unit_id, from_id)
|
|
95
95
|
else
|
|
@@ -102,11 +102,11 @@ module Comee
|
|
|
102
102
|
|
|
103
103
|
price = convert_price(client_price, from_id, to_id)
|
|
104
104
|
new_quantity = convert_quantity(quantity, from_id, to_id)
|
|
105
|
-
{quantity: new_quantity, price
|
|
105
|
+
{quantity: new_quantity, price:, total_price: (new_quantity * price).round(2)}
|
|
106
106
|
end
|
|
107
107
|
|
|
108
108
|
def submit(id)
|
|
109
|
-
order = CustomerOrder.find_by(id:
|
|
109
|
+
order = CustomerOrder.find_by(id:)
|
|
110
110
|
raise(StandardError, "Customer order with id `#{id}` not found.") unless order
|
|
111
111
|
|
|
112
112
|
unless CustomerOrder.statuses[order.status] == CustomerOrder.statuses[:draft]
|
|
@@ -120,7 +120,7 @@ module Comee
|
|
|
120
120
|
end
|
|
121
121
|
|
|
122
122
|
def submit_for_confirmation(id)
|
|
123
|
-
order = CustomerOrder.find_by(id:
|
|
123
|
+
order = CustomerOrder.find_by(id:)
|
|
124
124
|
raise(StandardError, "Customer order with id `#{id}` not found.") unless order
|
|
125
125
|
|
|
126
126
|
unless CustomerOrder.statuses[order.status] == CustomerOrder.statuses[:submitted]
|
|
@@ -134,7 +134,7 @@ module Comee
|
|
|
134
134
|
end
|
|
135
135
|
|
|
136
136
|
def accept(id, accepted_by = nil)
|
|
137
|
-
order = CustomerOrder.find_by(id:
|
|
137
|
+
order = CustomerOrder.find_by(id:)
|
|
138
138
|
raise(StandardError, "Customer order with id `#{id}` not found.") unless order
|
|
139
139
|
|
|
140
140
|
if CustomerOrder.statuses[order.status] == CustomerOrder.statuses[:accepted]
|
|
@@ -176,7 +176,7 @@ module Comee
|
|
|
176
176
|
client_id = order.client.parent_id || order.client_id
|
|
177
177
|
product_ids = order_items.map(&:product_id).uniq
|
|
178
178
|
client_prices = ClientPrice.where(
|
|
179
|
-
client_id
|
|
179
|
+
client_id:,
|
|
180
180
|
product_id: product_ids,
|
|
181
181
|
status: ClientPrice.statuses[:current]
|
|
182
182
|
)
|
|
@@ -205,13 +205,13 @@ module Comee
|
|
|
205
205
|
sales_order_id: sales_order.id,
|
|
206
206
|
customer_order_item_id: item.id,
|
|
207
207
|
product_id: item.product_id,
|
|
208
|
-
unit_id
|
|
208
|
+
unit_id:,
|
|
209
209
|
serial_no: item.serial_no,
|
|
210
210
|
customer_item_no: item.customer_item_no,
|
|
211
211
|
customer_item_alias: item.customer_item_alias,
|
|
212
212
|
customer_item_description: item.customer_item_description,
|
|
213
|
-
quantity
|
|
214
|
-
price
|
|
213
|
+
quantity:,
|
|
214
|
+
price:,
|
|
215
215
|
price_diff: price - order_price,
|
|
216
216
|
total_price: quantity * price,
|
|
217
217
|
delivery_date: item.delivery_date,
|
|
@@ -237,7 +237,7 @@ module Comee
|
|
|
237
237
|
end
|
|
238
238
|
|
|
239
239
|
def cancel(id)
|
|
240
|
-
order = CustomerOrder.find_by(id:
|
|
240
|
+
order = CustomerOrder.find_by(id:)
|
|
241
241
|
raise(StandardError, "Customer order with id `#{id}` not found.") unless order
|
|
242
242
|
|
|
243
243
|
if CustomerOrder.statuses[order.status] == CustomerOrder.statuses[:canceled]
|
|
@@ -10,9 +10,7 @@ module Comee
|
|
|
10
10
|
raise StandardError, "Purchase Order does not exist."
|
|
11
11
|
end
|
|
12
12
|
|
|
13
|
-
if GoodsReceivedNote.exists?(purchase_order:
|
|
14
|
-
raise StandardError, "Goods Received Note already exists for this purchase order"
|
|
15
|
-
end
|
|
13
|
+
raise StandardError, "Goods Received Note already exists for this purchase order" if GoodsReceivedNote.exists?(purchase_order:)
|
|
16
14
|
|
|
17
15
|
GoodsReceivedNote.transaction do
|
|
18
16
|
purchase_order_items = PurchaseOrderItem.where(purchase_order_id: purchase_order.id)
|
|
@@ -44,7 +42,7 @@ module Comee
|
|
|
44
42
|
end
|
|
45
43
|
total_quantity = calculate_grn_total_quantity(goods_received_note)
|
|
46
44
|
total_price = calculate_grn_total_price(goods_received_note)
|
|
47
|
-
goods_received_note.update!(total_amount: total_price, total_quantity:
|
|
45
|
+
goods_received_note.update!(total_amount: total_price, total_quantity:)
|
|
48
46
|
end
|
|
49
47
|
goods_received_note
|
|
50
48
|
rescue StandardError
|
|
@@ -20,17 +20,17 @@ module Comee
|
|
|
20
20
|
raise(StandardError, error) if to.instance_of?(String) && to != ORGANIZATION
|
|
21
21
|
|
|
22
22
|
if from == ORGANIZATION
|
|
23
|
-
query = ProductLookup.joins(:product).find_by(product: {code:
|
|
23
|
+
query = ProductLookup.joins(:product).find_by(product: {code:}, **to)
|
|
24
24
|
return query
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
if to == ORGANIZATION
|
|
28
|
-
product = ProductLookup.find_by(code
|
|
28
|
+
product = ProductLookup.find_by(code:, **from).product
|
|
29
29
|
return product.code
|
|
30
30
|
end
|
|
31
31
|
|
|
32
|
-
product = ProductLookup.find_by(code
|
|
33
|
-
ProductLookup.find_by(product
|
|
32
|
+
product = ProductLookup.find_by(code:, **from).product
|
|
33
|
+
ProductLookup.find_by(product:, **to)
|
|
34
34
|
end
|
|
35
35
|
end
|
|
36
36
|
end
|
|
@@ -86,8 +86,8 @@ module Comee
|
|
|
86
86
|
def aggregate_back_order_item(items, supplier_id, back_order_id, delivery_date)
|
|
87
87
|
items.group_by { |item| item[:product_id] }.map do |product_id, aggregated_items|
|
|
88
88
|
total_quantity = aggregated_items.reduce(0) { |sum, agg_item| agg_item[:requested_quantity] + sum }
|
|
89
|
-
{product_id
|
|
90
|
-
back_order_id
|
|
89
|
+
{product_id:, requested_quantity: total_quantity, supplier_quantity: total_quantity, supplier_id:,
|
|
90
|
+
back_order_id:, delivery_date:}
|
|
91
91
|
end
|
|
92
92
|
end
|
|
93
93
|
|
|
@@ -138,7 +138,7 @@ module Comee
|
|
|
138
138
|
end
|
|
139
139
|
|
|
140
140
|
def submit(id)
|
|
141
|
-
order = SalesOrder.find_by(id:
|
|
141
|
+
order = SalesOrder.find_by(id:)
|
|
142
142
|
raise(StandardError, "Sales order with id `#{id}` not found.") unless order
|
|
143
143
|
|
|
144
144
|
raise(StandardError, "Sales order should be in draft state.") unless order.draft?
|
|
@@ -166,7 +166,7 @@ module Comee
|
|
|
166
166
|
# end
|
|
167
167
|
|
|
168
168
|
def confirm(id)
|
|
169
|
-
order = SalesOrder.find_by(id:
|
|
169
|
+
order = SalesOrder.find_by(id:)
|
|
170
170
|
raise(StandardError, "Sales order with id `#{id}` not found.") unless order
|
|
171
171
|
|
|
172
172
|
raise(StandardError, "Sales order should be in submitted state.") unless order.submitted?
|
|
@@ -180,7 +180,7 @@ module Comee
|
|
|
180
180
|
end
|
|
181
181
|
|
|
182
182
|
def accept(id)
|
|
183
|
-
order = SalesOrder.find_by(id:
|
|
183
|
+
order = SalesOrder.find_by(id:)
|
|
184
184
|
raise(StandardError, "Sales order with id `#{id}` not found.") unless order
|
|
185
185
|
|
|
186
186
|
raise(StandardError, "Sales order should be in confirmed state.") unless order.confirmed?
|
|
@@ -194,7 +194,7 @@ module Comee
|
|
|
194
194
|
end
|
|
195
195
|
|
|
196
196
|
def cancel(id)
|
|
197
|
-
order = SalesOrder.find_by(id:
|
|
197
|
+
order = SalesOrder.find_by(id:)
|
|
198
198
|
raise(StandardError, "Sales order with id `#{id}` not found.") unless order
|
|
199
199
|
|
|
200
200
|
raise(StandardError, "Sales order is already canceled.") if order.canceled?
|
|
@@ -204,7 +204,7 @@ module Comee
|
|
|
204
204
|
end
|
|
205
205
|
|
|
206
206
|
def revert(id)
|
|
207
|
-
order = SalesOrder.find_by(id:
|
|
207
|
+
order = SalesOrder.find_by(id:)
|
|
208
208
|
raise(StandardError, "Sales order with id `#{id}` not found.") unless order
|
|
209
209
|
|
|
210
210
|
raise(StandardError, "Sales order should be in draft state.") unless order.draft?
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module Comee
|
|
2
|
+
module Core
|
|
3
|
+
# Rails 8.1's ActiveSupport::JSON encoder freezes the options hash it passes to
|
|
4
|
+
# `as_json` (see ActiveSupport::JSON::Encoding::JSONGemEncoder#encode). active_model_serializers
|
|
5
|
+
# 0.10.x (unmaintained since 2022) mutates that options hash while building the
|
|
6
|
+
# serializable hash, which raises FrozenError. Duping here restores the old behavior
|
|
7
|
+
# without touching the gem itself.
|
|
8
|
+
module ActiveModelSerializersFrozenOptionsPatch
|
|
9
|
+
def serializable_hash(options = nil)
|
|
10
|
+
options = options.dup if options&.frozen?
|
|
11
|
+
super(options)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
data/lib/comee/core/engine.rb
CHANGED
|
@@ -17,6 +17,11 @@ module Comee
|
|
|
17
17
|
initializer :append_migrations do |app|
|
|
18
18
|
app.config.paths["db/migrate"].concat(config.paths["db/migrate"].expanded) unless app.root.to_s.match(root.to_s + File::SEPARATOR)
|
|
19
19
|
end
|
|
20
|
+
|
|
21
|
+
initializer "comee_core.active_model_serializers_frozen_options_patch" do
|
|
22
|
+
require "comee/core/active_model_serializers_frozen_options_patch"
|
|
23
|
+
ActiveModelSerializers::Adapter::Attributes.prepend(Comee::Core::ActiveModelSerializersFrozenOptionsPatch)
|
|
24
|
+
end
|
|
20
25
|
end
|
|
21
26
|
end
|
|
22
27
|
end
|
data/lib/comee/core/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: comee_core
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.4.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Henock L.
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: bin
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
13
|
name: active_model_serializers
|
|
@@ -30,14 +29,14 @@ dependencies:
|
|
|
30
29
|
requirements:
|
|
31
30
|
- - "~>"
|
|
32
31
|
- !ruby/object:Gem::Version
|
|
33
|
-
version:
|
|
32
|
+
version: '5.0'
|
|
34
33
|
type: :runtime
|
|
35
34
|
prerelease: false
|
|
36
35
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
36
|
requirements:
|
|
38
37
|
- - "~>"
|
|
39
38
|
- !ruby/object:Gem::Version
|
|
40
|
-
version:
|
|
39
|
+
version: '5.0'
|
|
41
40
|
- !ruby/object:Gem::Dependency
|
|
42
41
|
name: bcrypt
|
|
43
42
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -52,6 +51,34 @@ dependencies:
|
|
|
52
51
|
- - "~>"
|
|
53
52
|
- !ruby/object:Gem::Version
|
|
54
53
|
version: '3.1'
|
|
54
|
+
- !ruby/object:Gem::Dependency
|
|
55
|
+
name: benchmark
|
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
|
57
|
+
requirements:
|
|
58
|
+
- - ">="
|
|
59
|
+
- !ruby/object:Gem::Version
|
|
60
|
+
version: '0'
|
|
61
|
+
type: :runtime
|
|
62
|
+
prerelease: false
|
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
64
|
+
requirements:
|
|
65
|
+
- - ">="
|
|
66
|
+
- !ruby/object:Gem::Version
|
|
67
|
+
version: '0'
|
|
68
|
+
- !ruby/object:Gem::Dependency
|
|
69
|
+
name: cgi
|
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
|
71
|
+
requirements:
|
|
72
|
+
- - ">="
|
|
73
|
+
- !ruby/object:Gem::Version
|
|
74
|
+
version: '0'
|
|
75
|
+
type: :runtime
|
|
76
|
+
prerelease: false
|
|
77
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
78
|
+
requirements:
|
|
79
|
+
- - ">="
|
|
80
|
+
- !ruby/object:Gem::Version
|
|
81
|
+
version: '0'
|
|
55
82
|
- !ruby/object:Gem::Dependency
|
|
56
83
|
name: httparty
|
|
57
84
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -92,14 +119,14 @@ dependencies:
|
|
|
92
119
|
requirements:
|
|
93
120
|
- - "~>"
|
|
94
121
|
- !ruby/object:Gem::Version
|
|
95
|
-
version: '
|
|
122
|
+
version: '3.0'
|
|
96
123
|
type: :runtime
|
|
97
124
|
prerelease: false
|
|
98
125
|
version_requirements: !ruby/object:Gem::Requirement
|
|
99
126
|
requirements:
|
|
100
127
|
- - "~>"
|
|
101
128
|
- !ruby/object:Gem::Version
|
|
102
|
-
version: '
|
|
129
|
+
version: '3.0'
|
|
103
130
|
- !ruby/object:Gem::Dependency
|
|
104
131
|
name: noticed
|
|
105
132
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -120,14 +147,14 @@ dependencies:
|
|
|
120
147
|
requirements:
|
|
121
148
|
- - "~>"
|
|
122
149
|
- !ruby/object:Gem::Version
|
|
123
|
-
version:
|
|
150
|
+
version: '8.1'
|
|
124
151
|
type: :runtime
|
|
125
152
|
prerelease: false
|
|
126
153
|
version_requirements: !ruby/object:Gem::Requirement
|
|
127
154
|
requirements:
|
|
128
155
|
- - "~>"
|
|
129
156
|
- !ruby/object:Gem::Version
|
|
130
|
-
version:
|
|
157
|
+
version: '8.1'
|
|
131
158
|
- !ruby/object:Gem::Dependency
|
|
132
159
|
name: ransack
|
|
133
160
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -544,6 +571,7 @@ files:
|
|
|
544
571
|
- db/migrate/20240829135433_add_serial_no_to_invoice_items.rb
|
|
545
572
|
- db/migrate/20240905111934_add_additional_fields_to_pod.rb
|
|
546
573
|
- lib/comee/core.rb
|
|
574
|
+
- lib/comee/core/active_model_serializers_frozen_options_patch.rb
|
|
547
575
|
- lib/comee/core/engine.rb
|
|
548
576
|
- lib/comee/core/version.rb
|
|
549
577
|
- lib/comee_core.rb
|
|
@@ -627,7 +655,6 @@ metadata:
|
|
|
627
655
|
homepage_uri: https://www.mks.com
|
|
628
656
|
source_code_uri: https://bitbucket.org
|
|
629
657
|
changelog_uri: https://bitbucket.org/
|
|
630
|
-
post_install_message:
|
|
631
658
|
rdoc_options: []
|
|
632
659
|
require_paths:
|
|
633
660
|
- lib
|
|
@@ -635,15 +662,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
635
662
|
requirements:
|
|
636
663
|
- - ">="
|
|
637
664
|
- !ruby/object:Gem::Version
|
|
638
|
-
version: '3.
|
|
665
|
+
version: '3.2'
|
|
639
666
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
640
667
|
requirements:
|
|
641
668
|
- - ">="
|
|
642
669
|
- !ruby/object:Gem::Version
|
|
643
670
|
version: '0'
|
|
644
671
|
requirements: []
|
|
645
|
-
rubygems_version:
|
|
646
|
-
signing_key:
|
|
672
|
+
rubygems_version: 4.0.16
|
|
647
673
|
specification_version: 4
|
|
648
674
|
summary: An engine for the COMee ERP.
|
|
649
675
|
test_files: []
|