comee_core 0.3.2 → 0.3.4

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: b5679f8f8d4ed8da5747d3f1f63e4b9b0621d5204e821241ed126ed4148701d7
4
- data.tar.gz: 007bd33cf75d023854a2b4b35974065bee2e405f1c7d9830413b5c57fbe061f5
3
+ metadata.gz: 6574ea36fe12881077a861e6fb2606b08049a6c45c68777b865b73866a1155c1
4
+ data.tar.gz: 5829e9439f0796f165e5e065c311147d674314d4e8261162f38bdc7e1f826ce0
5
5
  SHA512:
6
- metadata.gz: 84538ddee22dcff3353d894c017f812d7b5beb4e7c81bbf532f0b558f1071350ef71b4b3ce698bc07e905195668166b49e9497c0e485f5b458b26a407e066ea4
7
- data.tar.gz: 20a4c722dcdd2bc4a6d075c0f0c886ae810f3977950236c069d4af995b629ab7011eea011ef359e8d8fbeae155b81e6da9a468e908830471dd217aeeebd87482
6
+ metadata.gz: a018ba9b48a1e0eb39f2b98cf4a779a495d5b46680e8370dca36c5d9a5aad08f03dd74fe95f23d2ea34669b393500997dded35f3ba3dffdf880378b32f5bba9c
7
+ data.tar.gz: bbdc8bc1570bfd605b90abcff20d72614ba198ca00180460d935863ffdccef69647f86cbf2c8788021dc8e2765d9028a04cf19d07679f64775b874e07a258c4a
@@ -57,7 +57,7 @@ module Comee
57
57
 
58
58
  def model_params
59
59
  params.require(:payload).permit(:code, :name, :match_code, :address, :locale, :user_id, :parent_id, :currency,
60
- :subsidiary, :country_id, :tax_code, :vat_number, consignees: [])
60
+ :subsidiary, :country_id, :tax_code, :vat_number, :print_details, consignees: [])
61
61
  end
62
62
 
63
63
  def agent_params
@@ -16,6 +16,14 @@ module Comee
16
16
  render json: {success: false, error: e.message}, status: 422
17
17
  end
18
18
 
19
+ def generate_beo_xml
20
+ service = BeoService.new(publish_params[:ids])
21
+ data = service.preprocess_data(xml: true)
22
+ render json: {success: true, data: data}
23
+ rescue StandardError => e
24
+ render json: {success: false, error: e.message}, status: 422
25
+ end
26
+
19
27
  private
20
28
 
21
29
  def publish_params
@@ -8,12 +8,12 @@ module Comee
8
8
  if @user.authenticate(change_password_params[:old_password])
9
9
  if @user.update(password: change_password_params[:new_password],
10
10
  password_confirmation: change_password_params[:new_password_confirmation])
11
- render json: @user, serializer: UserSerializer, status: :ok
11
+ render json: {success: true, data: serialize(@user)}
12
12
  else
13
- render json: {errors: @user.errors.full_messages}, status: 422
13
+ render json: {success: false, error: @user.errors.full_messages[0]}, status: 422
14
14
  end
15
15
  else
16
- render json: {error: "Old password is incorrect"}, status: :unauthorized
16
+ render json: {success: false, error: "Old password doesn't match!"}, status: 422
17
17
  end
18
18
  end
19
19
 
@@ -2,7 +2,7 @@ module Comee
2
2
  module Core
3
3
  class ClientSerializer < ActiveModel::Serializer
4
4
  attributes :id, :code, :name, :match_code, :address, :locale, :user_id, :user_name, :parent_id, :consignees,
5
- :shipment_addresses, :tax_code, :vat_number, :currency
5
+ :shipment_addresses, :tax_code, :vat_number, :currency, :print_details
6
6
  belongs_to :parent
7
7
  belongs_to :country
8
8
  has_many :agents
@@ -10,21 +10,42 @@ module Comee
10
10
  @ids = ids
11
11
  end
12
12
 
13
- def pre_process_data
13
+ def preprocess_data(xml: false)
14
14
  @ids.each do |id|
15
- @line_items = Comee::Core::ShipmentInstructionItem.includes(shipment_item: {sales_order_item: :sales_order})
16
- .where(shipment_instruction_id: id)
17
- sales_order_ids = @line_items.map(&:shipment_item).map(&:sales_order_item).map(&:sales_order).map(&:id)
15
+ @line_items = if xml
16
+ shipment_items = Comee::Core::ShipmentItem.includes(sales_order_item: :sales_order)
17
+ .where(sales_order_item: {sales_order_id: id})
18
+ sales_order_item_ids = shipment_items.map { |item| item.sales_order_item_id }
19
+ Comee::Core::SalesOrderItem.where(id: sales_order_item_ids)
20
+ else
21
+ Comee::Core::ShipmentInstructionItem.includes(shipment_item: {sales_order_item: :sales_order})
22
+ .where(shipment_instruction_id: id)
23
+ end
24
+ sales_order_ids = if xml
25
+ @line_items.map(&:sales_order_id)
26
+ else
27
+ @line_items.map { |item| item.shipment_item.sales_order_item.sales_order.id }
28
+ end
18
29
  @customs_details = Comee::Core::CustomsDetail.includes(sales_order: :customer_order).where(sales_order_id: sales_order_ids)
19
30
  @transportation_routes = []
20
31
  @position_data = []
21
32
 
22
- packaging_types = @line_items.map { |line_item| line_item.shipment_item.package_type.split(" ")[0] }.uniq
33
+ packaging_types = @line_items.map do |line_item|
34
+ if xml
35
+ Comee::Core::ShipmentItem.find_by(sales_order_item_id: line_item.id).package_type.split(" ")[0]
36
+ else
37
+ line_item.shipment_item.package_type.split(" ")[0]
38
+ end
39
+ end.uniq
23
40
 
24
41
  @no_of_packages = packaging_types.count
25
42
  @package_type = packaging_types.count == 1 && packaging_types.first == "PX" ? "PX" : "PK"
26
43
  @total_weight = @line_items.sum do |line_item|
27
- line_item.shipment_item.sales_order_item.quantity * line_item.shipment_item.sales_order_item.product.weight
44
+ if xml
45
+ (line_item.quantity * line_item.product.weight).round(2)
46
+ else
47
+ (line_item.shipment_item.sales_order_item.quantity * line_item.shipment_item.sales_order_item.product.weight).round(2)
48
+ end
28
49
  end
29
50
 
30
51
  raise(StandardError, "No customs detail filed for sales order") unless @customs_details.present?
@@ -34,36 +55,37 @@ module Comee
34
55
  @transportation_routes << tr["route"][0, 2]
35
56
  end
36
57
 
37
- prepare_data
58
+ @data = xml ? generate_xml : prepare_data
38
59
  end
39
60
 
40
- JSON(@data)
61
+ xml ? @data : JSON(@data)
41
62
  end
42
63
 
43
64
  def position_data
44
65
  position_items = []
45
66
  @line_items.each_with_index do |line_item, index|
46
- customs_detail = @customs_details.find_by(sales_order_id: line_item.shipment_item.sales_order_item.sales_order_id)
67
+ si = line_item.shipment_item
68
+ customs_detail = @customs_details.find_by(sales_order_id: si.sales_order_item.sales_order_id)
47
69
  mp = Comee::Core::MasterPrice.includes(:country_of_origin).find_by(primary: true,
48
- product_id: line_item.shipment_item
70
+ product_id: si
49
71
  .sales_order_item.product.id)
50
- line_item.shipment_item
72
+
51
73
  position_items << {
52
74
  "warePositionsnummer": index + 1,
53
- "wareWarennummerKN8": line_item.shipment_item.sales_order_item.product.hs_code,
54
- "wareWarenbezeichnung": line_item.shipment_item.sales_order_item.product.hs_description,
75
+ "wareWarennummerKN8": si.sales_order_item.product.hs_code,
76
+ "wareWarenbezeichnung": si.sales_order_item.product.hs_description,
55
77
  "wareRegistriernummerFremdsystem": customs_detail.sales_order.customer_order.order_number,
56
78
  "wareUrsprungsbundesland": mp.state_of_origin,
57
- "wareEigenmasse": line_item.shipment_item.sales_order_item.product.weight * line_item.shipment_item.sales_order_item.quantity,
79
+ "wareEigenmasse": si.sales_order_item.product.weight * si.sales_order_item.quantity,
58
80
  "wareRohmasse": index.zero? ? @total_weight : 0,
59
81
  "ausfuhrLand": "DE",
60
82
  "ursprungsland": mp.country_of_origin.code,
61
83
  "beantragtesVerfahren": "10",
62
84
  "vorhergehendesVerfahren": "00",
63
85
  "zusatzlichesVerfahren": "F61",
64
- "aussenhandelsstatistikMenge": line_item.shipment_item.sales_order_item.quantity,
65
- "aussenhandelsstatistikWert": (line_item.shipment_item.sales_order_item.quantity *
66
- line_item.shipment_item.sales_order_item.price * 1.05).round(2),
86
+ "aussenhandelsstatistikMenge": si.sales_order_item.quantity,
87
+ "aussenhandelsstatistikWert": (si.sales_order_item.quantity *
88
+ si.sales_order_item.price * 1.05).round(2),
67
89
  "packstuck": [
68
90
  {
69
91
  "packstuckNummer": index + 1,
@@ -79,7 +101,7 @@ module Comee
79
101
  end
80
102
 
81
103
  def prepare_data
82
- @data = {
104
+ {
83
105
  "dataIdentifier": "",
84
106
  "kundenNumber": "",
85
107
  "mandantId": "",
@@ -155,7 +177,7 @@ module Comee
155
177
  def send_customs_details
156
178
  response = HTTParty.post("#{@atlas_base_url}/PutData", headers: {'Content-Type': "application/json",
157
179
  'token': @atlas_token,
158
- 'bearertoken': bearer_token}, body: pre_process_data)
180
+ 'bearertoken': bearer_token}, body: preprocess_data)
159
181
  unless [200, 201].include?(response.code)
160
182
  raise(StandardError,
161
183
  "Failed to send POST request with token: #{response.code} - #{response.body}")
@@ -164,6 +186,133 @@ module Comee
164
186
  JSON.parse(response.body)
165
187
  end
166
188
 
189
+ def xml_position_data(xml)
190
+ @line_items.each_with_index do |line_item, index|
191
+ customs_detail = @customs_details.find_by(sales_order_id: line_item.sales_order_id)
192
+ mp = Comee::Core::MasterPrice.includes(:country_of_origin).find_by(primary: true,
193
+ product_id: line_item.product.id)
194
+
195
+ xml.Position do
196
+ xml.Positionsnummer (index + 1).to_s
197
+ xml.Warenbezeichnung line_item.product.hs_description
198
+ xml.Registriernummer_Fremdsystem customs_detail.sales_order.customer_order.order_number
199
+ xml.Kennnummer_der_Sendung @customs_details.map(&:sales_order).map(&:customer_order).map(&:consignee).join(" ")
200
+ xml.Ursprungsbundesland mp.state_of_origin
201
+ xml.Ursprungsland mp.country_of_origin.code
202
+ xml.Eigenmasse line_item.product.weight * line_item.quantity
203
+ xml.Rohmasse index.zero? ? @total_weight : 0
204
+ xml.Gefahrgutnummer_UNDG
205
+ xml.Warennummer_KN8 line_item.product.hs_code
206
+ xml.Verfahren do
207
+ xml.angemeldetes "10"
208
+ xml.vorangegangenes "00"
209
+ xml.weiteres "F61"
210
+ xml.Ausfuhrerstattung
211
+ end
212
+ xml.Aussenhandelsstatistik do
213
+ xml.Menge line_item.quantity
214
+ xml.Wert (line_item.quantity *
215
+ line_item.price * 1.05).round(2)
216
+ end
217
+ xml.Vorpapier do
218
+ xml.Typ
219
+ xml.Referenz
220
+ xml.Zusatz
221
+ end
222
+ xml.Packstuecke do
223
+ xml.Anzahl index.zero? ? @no_of_packages : 0
224
+ xml.Nummer index + 1
225
+ xml.Verpackungsart @package_type
226
+ xml.Zeichen_Nummern customs_detail.sales_order.customer_order.order_number
227
+ end
228
+ xml.Unterlage do
229
+ xml.Qualifizierung
230
+ xml.Typ
231
+ xml.Referenz
232
+ xml.Zusatz
233
+ xml.Detail
234
+ xml.Datum_der_Ausstellung
235
+ xml.Datum_des_Gueltigkeitsendes
236
+ xml.Wert
237
+ xml.Masseinheit
238
+ xml.Aschreibungsmenge
239
+ end
240
+ end
241
+ end
242
+ end
243
+
244
+ def generate_xml
245
+ Nokogiri::XML::Builder.new(encoding: "Windows-1252") do |xml|
246
+ xml.BEO_ATLAS("xmlns:xsi" => "http://www.w3.org/2001/XMLSchema-instance",
247
+ "xmlns:xsd" => "http://www.w3.org/2001/XMLSchema") do
248
+ xml.Nachricht do
249
+ xml.Zollnummer_Sender "4789741"
250
+ xml.Nachrichten_Typ "DEXPDF"
251
+ xml.BEO_Atlas_KundenID
252
+ xml.Anwendung
253
+ xml.Name "Maveko_korrigiert"
254
+ end
255
+ xml.Kopf do
256
+ xml.EORI_Number "DE47897410000"
257
+ xml.Art_der_Ausfuhranmeldung @customs_details[0].export_declaration_type
258
+ xml.Ausfuhrland "DE"
259
+ xml.Bestimmungsland @customs_details[0].destination_country
260
+ xml.Container @customs_details[0].containerized == true ? 1 : 0
261
+ xml.send("Beteiligten-Konstellation", @customs_details[0].participant_constellation.split(" ")[0])
262
+ xml.send("Gesamt-Rohmasse", @total_weight)
263
+ xml.Kennnummer_der_Sendung @customs_details.map(&:sales_order).map(&:customer_order).map(&:consignee).join(" ")
264
+ xml.Bezugsnummer @customs_details.map(&:sales_order).map(&:customer_order).map(&:order_number).join(" ")
265
+ xml.inlandischerVerkehrszweig @customs_details[0].mode_of_transport
266
+ xml.verkehrszweigAnDerGrenze @customs_details[0].mode_of_transport_at_border
267
+ xml.Befoerderungsmittel_an_der_Grenze do
268
+ xml.Art @customs_details[0].mode_of_transport_type
269
+ xml.Kennzeichen "UNBEKANNT"
270
+ end
271
+ xml.Befoerderungsmittel_am_Abgang do
272
+ xml.sequenznummer "1"
273
+ xml.Art @customs_details[0].type_of_identification.split(" ")[0]
274
+ xml.Kennzeichen @customs_details[0].additional_identifier.split(" ")[0]
275
+ xml.Staatszugehoerigkeit @customs_details[0].nationality.split(" ")[0]
276
+ end
277
+ xml.Ausfuhrzollstelle do
278
+ xml.Dienststellennummer @customs_details[0].export_customs_office.split(" ")[0]
279
+ end
280
+ xml.Vorgesehene_Ausgangszollstelle do
281
+ xml.Dienststellennummer @customs_details[0].customs_office_of_exit.split(" ")[0]
282
+ end
283
+ xml.Geschaeftsvorgang do
284
+ xml.Art "11"
285
+ xml.Rechnungspreis @customs_details[0].sales_order.total_price.round(2)
286
+ xml.Waehrung "EUR"
287
+ end
288
+ xml.Befoerderungsroute do
289
+ @transportation_routes.each do |tr|
290
+ xml.Land tr
291
+ end
292
+ end
293
+ xml.Empfaenger do
294
+ xml.Identifikationsart
295
+ xml.TIN
296
+ xml.Niederlassungsnummer
297
+ xml.Name @customs_details[0].sales_order.customer_order.client.name
298
+ xml.Strasse @address[0]
299
+ xml.PLZ @address[-1]
300
+ xml.Ort "#{@address[1].split(' ')[-3]} #{@address[1].split(' ')[-2]}"
301
+ xml.Land @address[1].split(" ")[-1]
302
+ end
303
+ xml.Lieferbedingung do
304
+ xml.send("Incoterm-Code", @customs_details[0].delivery_term_code[0, 3])
305
+ xml.Ort "Hamburg"
306
+ xml.Land "DE"
307
+ end
308
+ end
309
+ xml.Waren do
310
+ xml_position_data(xml)
311
+ end
312
+ end
313
+ end.to_xml
314
+ end
315
+
167
316
  private
168
317
 
169
318
  def bearer_token
data/config/routes.rb CHANGED
@@ -158,6 +158,7 @@ Comee::Core::Engine.routes.draw do
158
158
  collection do
159
159
  post "filter"
160
160
  post "send", action: :send_customs_details
161
+ post "generate_beo_xml", action: :generate_beo_xml
161
162
  end
162
163
  end
163
164
 
@@ -0,0 +1,5 @@
1
+ class AddPrintDetailsFieldToCustomer < ActiveRecord::Migration[7.1]
2
+ def change
3
+ add_column :comee_core_clients, :print_details, :boolean, null: false, default: false
4
+ end
5
+ end
@@ -1,5 +1,5 @@
1
1
  module Comee
2
2
  module Core
3
- VERSION = "0.3.2".freeze
3
+ VERSION = "0.3.4".freeze
4
4
  end
5
5
  end
@@ -11,5 +11,6 @@ FactoryBot.define do
11
11
  shipment_addresses { [] }
12
12
  currency
13
13
  subsidiary { false }
14
+ print_details { false }
14
15
  end
15
16
  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.3.2
4
+ version: 0.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Henock L.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-06-24 00:00:00.000000000 Z
11
+ date: 2024-06-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: active_model_serializers
@@ -515,6 +515,7 @@ files:
515
515
  - db/migrate/20240406162711_create_comee_core_goods_issued_items.rb
516
516
  - db/migrate/20240407083617_create_comee_core_email_settings.rb
517
517
  - db/migrate/20240503040722_create_comee_core_client_addresses.rb
518
+ - db/migrate/20240628205454_add_print_details_field_to_customer.rb
518
519
  - lib/comee/core.rb
519
520
  - lib/comee/core/engine.rb
520
521
  - lib/comee/core/version.rb