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.
Files changed (28) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/comee/core/access_controller.rb +1 -1
  3. data/app/controllers/comee/core/client_prices_controller.rb +3 -3
  4. data/app/controllers/comee/core/customs_details_controller.rb +2 -2
  5. data/app/controllers/comee/core/sales_order_items_controller.rb +1 -1
  6. data/app/models/comee/core/client_address.rb +3 -3
  7. data/app/models/comee/core/customer_order_item.rb +1 -1
  8. data/app/models/comee/core/goods_received_note.rb +1 -1
  9. data/app/models/comee/core/master_price.rb +2 -2
  10. data/app/models/comee/core/notification.rb +1 -1
  11. data/app/models/comee/core/purchase_order.rb +1 -1
  12. data/app/models/comee/core/purchase_order_item.rb +1 -1
  13. data/app/models/comee/core/purchase_requisition_item.rb +1 -1
  14. data/app/models/comee/core/reorder_report.rb +1 -1
  15. data/app/models/comee/core/sales_order_item.rb +1 -1
  16. data/app/models/comee/core/stock_transfer_request.rb +2 -2
  17. data/app/models/comee/core/supplier_address.rb +3 -3
  18. data/app/notifications/comee/core/back_order_notification.rb +1 -1
  19. data/app/services/comee/core/beo_service.rb +59 -59
  20. data/app/services/comee/core/customer_order_service.rb +10 -10
  21. data/app/services/comee/core/goods_received_note_service.rb +2 -4
  22. data/app/services/comee/core/product_lookup_service.rb +4 -4
  23. data/app/services/comee/core/sales_order_service.rb +7 -7
  24. data/lib/comee/core/active_model_serializers_frozen_options_patch.rb +15 -0
  25. data/lib/comee/core/engine.rb +5 -0
  26. data/lib/comee/core/version.rb +1 -1
  27. data/spec/factories/comee/core/credit_notes.rb +1 -1
  28. metadata +39 -13
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a8f23f1d28138a9c1ea5c7b1d3db24677b6e19f65ca0f6a51f33ce71ed8cb96a
4
- data.tar.gz: 102f6fdcc04f3d4fbcb16001bb40d506aa3b696bfae706ead07145b404bb1dcd
3
+ metadata.gz: ca0bf8df6ae7657e0a6c77cee48a1da4268ba89529e6619f662de9975b60aa47
4
+ data.tar.gz: 8717fbcce6807e2c483e1df297c94fe438508f6e10d2e0d7990de1be9a1adaf8
5
5
  SHA512:
6
- metadata.gz: 39b430f64502160a7e1fceef29d9915bb585475f1f8d8649891cbb4bbbcf18d70486b82d02e76d2192bf3bf1cc740778b85b0357767fd2f389086e9d65a47862
7
- data.tar.gz: 7fc899f05efd56ea1046d0066a3e6c27e076ef909f5c804a5bdd2dc353acb18310636ce94667b3fa7873395b49f056011185e31dfecda32ce987efd5c1e3fc06
6
+ metadata.gz: fb999522604cbeb2e2a852786ee940a922d5b0d65ed03399d1f0ec9db96baf54644295abbb8b101f3f002f5745c83eb683af417b2d76c517f279268bd7f0ae00
7
+ data.tar.gz: 164e68de1f86011ac8296fb0e2f6cd99d1d6ec1bb942e68098cb3b436b7a0768b40d6e4f580f85e0a63dc2b5c4e9f293762e1f9175306be2852adf52d2b319da
@@ -16,7 +16,7 @@ module Comee
16
16
  id: user.id,
17
17
  name: user.name,
18
18
  email: user.email,
19
- roles: roles
19
+ roles:
20
20
  }
21
21
  jwt = TokenService.issue(payload)
22
22
  render json: {token: jwt, user: payload}
@@ -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: product_id, primary: true)
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: error}, status: 422
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: 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: 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: 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
@@ -34,7 +34,7 @@ module Comee
34
34
  :item_statuses
35
35
  ],
36
36
  # sales_order: :fulfillment_center,
37
- purchase_order_item: [{purchase_order: :supplier}]
37
+ purchase_order_item: [purchase_order: :supplier]
38
38
  ).find(params[:id])
39
39
  render_content(
40
40
  details,
@@ -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: address_type, client: client, default: true).count
14
+ ClientAddress.where(address_type:, client:, default: true).count
15
15
  else
16
- ClientAddress.where(address_type: address_type, client: client, default: true)
17
- .where.not(id: id).count
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?
@@ -24,7 +24,7 @@ module Comee
24
24
  lookup = ProductLookup.find_by(
25
25
  itemable_id: client_id,
26
26
  itemable_type: "Comee::Core::Client",
27
- product_id: product_id
27
+ product_id:
28
28
  )
29
29
  self.customer_item_alias = lookup&.aliases
30
30
  end
@@ -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: grn_number).exists?
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: 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: product, primary: true, status: Price.statuses[:current])
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: id, read: !read_at.nil?, created_at: created_at}.merge(to_notification.message)
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,
@@ -9,7 +9,7 @@ module Comee
9
9
 
10
10
  has_one :purchase_order_item_diff
11
11
 
12
- enum status: {active: 0, canceled: 1}
12
+ enum :status, {active: 0, canceled: 1}
13
13
 
14
14
  belongs_to :purchase_order
15
15
  belongs_to :product
@@ -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: {unprocessed: 0, partially_processed: 1, fully_processed: 2}
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: reference_number).exists?
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: {unprocessed: 0, partially_processed: 1, fully_processed: 2}
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: reference_number).exists?
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: address_type, supplier: supplier, default: true).count
12
+ SupplierAddress.where(address_type:, supplier:, default: true).count
13
13
  else
14
- SupplierAddress.where(address_type: address_type, supplier: supplier, default: true)
15
- .where.not(id: id).count
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?
@@ -16,7 +16,7 @@ module Comee
16
16
  order date: #{back_order.order_date}
17
17
  delivery date: #{back_order.delivery_date}
18
18
  CONTENT
19
- {title: title, date: date, content: content}
19
+ {title:, date:, content:}
20
20
  end
21
21
  end
22
22
  end
@@ -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
- .sales_order_item.product.id)
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
- "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
- }
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
- "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
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
- "position": position_data
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: 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: price, total_price: (new_quantity * price).round(2)}
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: 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: 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: 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: 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: 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: quantity,
214
- price: 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: 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: 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: 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: code}, **to)
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: code, **from).product
28
+ product = ProductLookup.find_by(code:, **from).product
29
29
  return product.code
30
30
  end
31
31
 
32
- product = ProductLookup.find_by(code: code, **from).product
33
- ProductLookup.find_by(product: product, **to)
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: product_id, requested_quantity: total_quantity, supplier_quantity: total_quantity, supplier_id: supplier_id,
90
- back_order_id: back_order_id, delivery_date: delivery_date}
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: 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: 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: 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: 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: 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
@@ -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
@@ -1,5 +1,5 @@
1
1
  module Comee
2
2
  module Core
3
- VERSION = "0.3.62".freeze
3
+ VERSION = "0.4.0".freeze
4
4
  end
5
5
  end
@@ -9,7 +9,7 @@ FactoryBot.define do
9
9
 
10
10
  after(:build) do |note, _|
11
11
  invoice = create(:invoice)
12
- create(:invoice_item, invoice: invoice)
12
+ create(:invoice_item, invoice:)
13
13
  note.invoice ||= invoice
14
14
  end
15
15
  end
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.3.62
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: 2024-09-20 00:00:00.000000000 Z
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: 4.1.0
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: 4.1.0
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: '2.7'
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: '2.7'
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: 7.1.0
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: 7.1.0
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.0'
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: 3.5.7
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: []