comee_core 0.3.1 → 0.3.3

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: fc0763d813df0b1e3ddf87c6a4212f0c0bf6f85e60744ade8f1d216fb2eefb9e
4
- data.tar.gz: 664f56499508ef5699bdeb95543f442d9dcc58f43d0cb05bdafa5eda0c4868a1
3
+ metadata.gz: 27037927222c47f336ab62f1a7663b4711e4e9d72569f8a22b6f9aa6456fc771
4
+ data.tar.gz: 4c530f8a8f820da46cd03a5d8715256eae40c9b229ca22448b95a57c5ed847dc
5
5
  SHA512:
6
- metadata.gz: 828cfd039c47d92f5cbb4c1039cb84006227a74e2dfc908b8003e9531eae83afb61f6d8fcac7ac3786b4b69199a36c68e31c53aa38684fcdbb29b7d259d241fb
7
- data.tar.gz: 3876f53bbb1c93e16eeff25e49f9b8e6d398797bc553ffeaf76af572a277da90eded3932d41e813004d7d620d07b8fcf47623dbd207649d3d01b22183e43f55b
6
+ metadata.gz: 2bc9dbf09a3f5131dec303aca390b204e5556aac0e7aea017feddcb19142fdfdaf0902f0ee7e30ada6753347e55e58951a0c0a5fd178f846b46822d7c21d2404
7
+ data.tar.gz: a31dd17eb583fe4182b0c070a915acb8fb8fc56066569418af0865218c330fbb65c9bb3db73b8ccd22823b5fb4fc907eba9277efce4472140975cedacf3f44fa
@@ -9,15 +9,29 @@ module Comee
9
9
  end
10
10
 
11
11
  def send_customs_details
12
- service = BeoService.new(params[:id])
12
+ service = BeoService.new(publish_params[:ids])
13
13
  data = service.send_customs_details
14
14
  render json: {success: true, data: data}
15
15
  rescue StandardError => e
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
 
29
+ def publish_params
30
+ params.require(:payload).permit(
31
+ ids: []
32
+ )
33
+ end
34
+
21
35
  def model_params
22
36
  params.require(:payload).permit(
23
37
  :registration_type,
@@ -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
 
@@ -10,10 +10,6 @@ module Comee
10
10
  def self.ransackable_associations(_auth_object = nil)
11
11
  %w[sales_order]
12
12
  end
13
-
14
- validates :registration_type, :export_declaration_type, :participant_constellation, :mode_of_transport_type, :destination_country,
15
- :additional_identifier, :packaging_type, :export_customs_office, :customs_office_of_exit, :mode_of_transport,
16
- :delivery_term_code, presence: true
17
13
  end
18
14
  end
19
15
  end
@@ -6,6 +6,14 @@ module Comee
6
6
 
7
7
  validates :gin_number, :stock_transfer_request, uniqueness: true
8
8
  validates :date_issued, :gin_number, presence: true
9
+
10
+ def self.ransackable_attributes(_auth_object = nil)
11
+ %w[gin_number date_issued stock_transfer_request_id]
12
+ end
13
+
14
+ def self.ransackable_associations(_auth_object = nil)
15
+ %w[stock_transfer_request]
16
+ end
9
17
  end
10
18
  end
11
19
  end
@@ -8,6 +8,14 @@ module Comee
8
8
  validates :report_date, presence: true
9
9
  validates :reference_number, uniqueness: true
10
10
 
11
+ def self.ransackable_attributes(_auth_object = nil)
12
+ %w[reference_number report_date store_id]
13
+ end
14
+
15
+ def self.ransackable_associations(_auth_object = nil)
16
+ %w[store]
17
+ end
18
+
11
19
  private
12
20
 
13
21
  def set_reference_number
@@ -3,7 +3,7 @@ module Comee
3
3
  class SalesOrderItemSerializer < ActiveModel::Serializer
4
4
  attributes :id, :serial_no, :customer_item_no, :customer_item_description, :quantity, :quantity_delivered, :quantity_canceled,
5
5
  :price, :handover_date, :delivery_date, :eb_number, :lead_time, :comment, :action_note, :purchase_order_item_id,
6
- :total_price, :canceled, :processing_status, :additional_details
6
+ :total_price, :canceled, :processing_status, :additional_details, :created_at
7
7
  belongs_to :sales_order
8
8
  belongs_to :customer_order_item
9
9
  belongs_to :source
@@ -4,7 +4,7 @@ module Comee
4
4
  attributes :id, :order_number, :order_date, :order_terms, :shipment_address, :delivery_address, :invoice_address,
5
5
  :destination, :handover_date, :shipping_date, :delivery_date, :consignee, :parent_client_name, :payment_term,
6
6
  :delivery_term, :payment_penalty, :status, :purchase_status, :total_price, :amount_paid, :pallete_note,
7
- :remark, :created_by, :files_url
7
+ :remark, :created_by, :files_url, :created_at
8
8
  belongs_to :customer_order
9
9
  belongs_to :client
10
10
  belongs_to :fulfillment_center
@@ -3,54 +3,105 @@ require "httparty"
3
3
  module Comee
4
4
  module Core
5
5
  class BeoService
6
- def initialize(id)
6
+ def initialize(ids)
7
7
  @atlas_token = ENV.fetch("ATLAS_TOKEN")
8
8
  @atlas_base_url = ENV.fetch("ATLAS_BASE_URL")
9
9
  @encoded_auth = ENV.fetch("ENCODED_AUTH")
10
- @customs_detail = Comee::Core::CustomsDetail.includes(sales_order: :customer_order).find_by(sales_order_id: id)
11
- @line_items = Comee::Core::SalesOrderItem.includes(:product, :unit, :customer_order_item, :source,
12
- :purchase_order_item).where(sales_order_id: id)
13
- @transportation_routes = []
14
- @position_data = []
15
- raise(StandardError, "No customs detail filed for sales order") unless @customs_detail.present?
16
-
17
- @address = @customs_detail.sales_order.customer_order.client.address.split(", ")
18
- @customs_detail.transportation_route.each do |tr|
19
- @transportation_routes << tr["route"][0, 2]
10
+ @ids = ids
11
+ end
12
+
13
+ def preprocess_data(xml: false)
14
+ @ids.each do |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
29
+ @customs_details = Comee::Core::CustomsDetail.includes(sales_order: :customer_order).where(sales_order_id: sales_order_ids)
30
+ @transportation_routes = []
31
+ @position_data = []
32
+
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
40
+
41
+ @no_of_packages = packaging_types.count
42
+ @package_type = packaging_types.count == 1 && packaging_types.first == "PX" ? "PX" : "PK"
43
+ @total_weight = @line_items.sum do |line_item|
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
49
+ end
50
+
51
+ raise(StandardError, "No customs detail filed for sales order") unless @customs_details.present?
52
+
53
+ @address = @customs_details[0].sales_order.customer_order.client.address.split(", ")
54
+ @customs_details[0].transportation_route.each do |tr|
55
+ @transportation_routes << tr["route"][0, 2]
56
+ end
57
+
58
+ @data = xml ? generate_xml : prepare_data
20
59
  end
60
+
61
+ xml ? @data : JSON(@data)
21
62
  end
22
63
 
23
- def prepare_data
24
- @line_items.each do |line_item, index|
25
- mp = Comee::Core::MasterPrice.includes(:country_of_origin).find_by(primary: true, product_id: line_item.product.id)
26
- sii = Comee::Core::ShipmentItem.find_by(sales_order_item_id: line_item.id)
27
- @position_data << {
28
- "warePositionsnummer": index,
29
- "wareWarennummerKN8": line_item.product.hs_code,
30
- "wareWarenbezeichnung": line_item.product.hs_description,
31
- "wareRegistriernummerFremdsystem": @customs_detail.sales_order.order_number,
64
+ def position_data
65
+ position_items = []
66
+ @line_items.each_with_index do |line_item, index|
67
+ si = line_item.shipment_item
68
+ customs_detail = @customs_details.find_by(sales_order_id: si.sales_order_item.sales_order_id)
69
+ mp = Comee::Core::MasterPrice.includes(:country_of_origin).find_by(primary: true,
70
+ product_id: si
71
+ .sales_order_item.product.id)
72
+
73
+ position_items << {
74
+ "warePositionsnummer": index + 1,
75
+ "wareWarennummerKN8": si.sales_order_item.product.hs_code,
76
+ "wareWarenbezeichnung": si.sales_order_item.product.hs_description,
77
+ "wareRegistriernummerFremdsystem": customs_detail.sales_order.customer_order.order_number,
32
78
  "wareUrsprungsbundesland": mp.state_of_origin,
33
- "wareEigenmasse": line_item.product.weight * line_item.quantity,
34
- "wareRohmasse": line_item.product.weight * line_item.quantity,
79
+ "wareEigenmasse": si.sales_order_item.product.weight * si.sales_order_item.quantity,
80
+ "wareRohmasse": index.zero? ? @total_weight : 0,
35
81
  "ausfuhrLand": "DE",
36
82
  "ursprungsland": mp.country_of_origin.code,
37
83
  "beantragtesVerfahren": "10",
38
84
  "vorhergehendesVerfahren": "00",
39
85
  "zusatzlichesVerfahren": "F61",
40
- "aussenhandelsstatistikMenge": line_item.quantity,
41
- "aussenhandelsstatistikWert": line_item.quantity * line_item.price,
86
+ "aussenhandelsstatistikMenge": si.sales_order_item.quantity,
87
+ "aussenhandelsstatistikWert": (si.sales_order_item.quantity *
88
+ si.sales_order_item.price * 1.05).round(2),
42
89
  "packstuck": [
43
90
  {
44
- "packstuckNummer": "1",
45
- "packstuckAnzahl": sii.pallet_no,
46
- "packstuckVerpackungsart": sii.package_type.split(" ")[0],
47
- "packstuckZeichenNummern": @customs_detail.sales_order.order_number
91
+ "packstuckNummer": index + 1,
92
+ "packstuckAnzahl": index.zero? ? @no_of_packages : 0,
93
+ "packstuckVerpackungsart": @package_type,
94
+ "packstuckZeichenNummern": customs_detail.sales_order.customer_order.order_number
48
95
  }
49
96
  ]
50
97
  }
51
98
  end
52
99
 
53
- data = {
100
+ position_items
101
+ end
102
+
103
+ def prepare_data
104
+ {
54
105
  "dataIdentifier": "",
55
106
  "kundenNumber": "",
56
107
  "mandantId": "",
@@ -67,43 +118,43 @@ module Comee
67
118
  {
68
119
  "kopf": {
69
120
  "eoriNiederlassungsnummer": "DE47897410000",
70
- "dienststellennummer": "DE014851",
71
- "artderAnmeldung": @customs_detail.registration_type.split(" ")[0],
72
- "artderAnmeldungAusfuhr": @customs_detail.export_declaration_type,
121
+ "artderAnmeldung": @customs_details[0].registration_type.split(" ")[0],
122
+ "artderAnmeldungAusfuhr": @customs_details[0].export_declaration_type,
73
123
  "ausfuhrLand": "DE",
74
- "beteiligtenKonstellation": @customs_detail.participant_constellation.split(" ")[0],
75
- "sicherheit": @customs_detail.registration_type.split(" ")[0] == "CO" ? 0 : 2,
76
- "container": @customs_detail.containerized == true ? 1 : 0,
77
- "bestimmungsLand": @customs_detail.destination_country,
78
- "referenznummerUCR": @customs_detail.sales_order.customer_order.consignee,
79
- "lrn": @customs_detail.sales_order.order_number,
80
- "beforderungsmittelImInlandVerkehrszweig": @customs_detail.mode_of_transport,
81
- "beforderungsmittelderGrenzeVerkehrszweig": @customs_detail.mode_of_transport_at_border,
82
- "beforderungsmittelderGrenzeArt": @customs_detail.mode_of_transport_type,
124
+ "beteiligtenKonstellation": @customs_details[0].participant_constellation.split(" ")[0],
125
+ "sicherheit": @customs_details[0].registration_type.split(" ")[0] == "CO" ? 0 : 2,
126
+ "container": @customs_details[0].containerized == true ? 1 : 0,
127
+ "bestimmungsLand": @customs_details[0].destination_country,
128
+ "referenznummerUCR": @customs_details.map(&:sales_order).map(&:customer_order).map(&:consignee).join(" "),
129
+ "lrn": @customs_details.map(&:sales_order).map(&:customer_order).map(&:order_number).join(" "),
130
+ "beforderungsmittelImInlandVerkehrszweig": @customs_details[0].mode_of_transport,
131
+ "beforderungsmittelderGrenzeVerkehrszweig": @customs_details[0].mode_of_transport_at_border,
132
+ "beforderungsmittelderGrenzeArt": @customs_details[0].mode_of_transport_type,
83
133
  "beforderungsmittelderGrenzeKennzeichen": "UNBEKANNT",
84
- "beforderungsmittelderGrenzeStaatszugehorigkeit": @customs_detail.mode_of_transport_nationality.split(" ")[0],
134
+ "beforderungsmittelderGrenzeStaatszugehorigkeit": @customs_details[0].mode_of_transport_nationality.split(" ")[0],
135
+ "gesamtRohmasse": @total_weight,
85
136
  "beforderungsmittelBeimAbgang": [
86
137
  {
87
138
  "sequenznummer": "1",
88
- "artderIdentifikation": @customs_detail.type_of_identification.split(" ")[0],
89
- "kennzeichen": @customs_detail.additional_identifier.split(" ")[0],
90
- "staatszugehorigkeit": @customs_detail.nationality.split(" ")[0]
139
+ "artderIdentifikation": @customs_details[0].type_of_identification.split(" ")[0],
140
+ "kennzeichen": @customs_details[0].additional_identifier.split(" ")[0],
141
+ "staatszugehorigkeit": @customs_details[0].nationality.split(" ")[0]
91
142
  }
92
143
  ],
93
- "ausfuhrzollstelleDienststellennummer": @customs_detail.export_customs_office.split(" ")[0],
94
- "vorgeseheneAusgangszollstelleDienststellennummer": @customs_detail.customs_office_of_exit.split(" ")[0],
144
+ "ausfuhrzollstelleDienststellennummer": @customs_details[0].export_customs_office.split(" ")[0],
145
+ "vorgeseheneAusgangszollstelleDienststellennummer": @customs_details[0].customs_office_of_exit.split(" ")[0],
95
146
  "geschaftsvorgangArt": "11",
96
- "geschaftsvorgangRechnungspreis": @customs_detail.sales_order.total_price,
147
+ "geschaftsvorgangRechnungspreis": @customs_details[0].sales_order.total_price.round(2),
97
148
  "geschaftsvorgangWahrung": "EUR",
98
149
  "beforderungsroute": {
99
150
  "ausgewahlteLander": @transportation_routes,
100
- "beforderungsVon": @customs_detail.transportation_route[0]["route"].split(" ")[0],
101
- "beforderungsBis": @customs_detail.transportation_route[-1]["route"].split(" ")[0]
151
+ "beforderungsVon": @customs_details[0].transportation_route[0]["route"].split(" ")[0],
152
+ "beforderungsBis": @customs_details[0].transportation_route[-1]["route"].split(" ")[0]
102
153
  },
103
154
  "empfanger": {
104
155
  "tin": "",
105
156
  "niederlassungsNummer": "",
106
- "name": @customs_detail.sales_order.customer_order.client.name,
157
+ "name": @customs_details[0].sales_order.customer_order.client.name,
107
158
  "strasse": @address[0],
108
159
  "plz": @address[-1],
109
160
  "ort": "#{@address[1].split(' ')[-3]} #{@address[1].split(' ')[-2]}",
@@ -111,24 +162,22 @@ module Comee
111
162
  },
112
163
  "warenortArtdesOrtes": "B",
113
164
  "warenortArtDerOrtsbestimmung": "Y",
114
- "warenortZusatzlicheKennung": @customs_detail.additional_identifier.split(" ")[0],
115
- "lieferbedingungIncotermCode": @customs_detail.delivery_term_code[0, 3],
165
+ "warenortZusatzlicheKennung": @customs_details[0].additional_identifier.split(" ")[0],
166
+ "lieferbedingungIncotermCode": @customs_details[0].delivery_term_code[0, 3],
116
167
  "lieferbedingungOrt": "Hamburg"
117
168
  },
118
- "position": @position_data
169
+ "position": position_data
119
170
  }
120
171
  ]
121
172
  }
122
173
  }
123
174
  }
124
-
125
- JSON(data)
126
175
  end
127
176
 
128
177
  def send_customs_details
129
178
  response = HTTParty.post("#{@atlas_base_url}/PutData", headers: {'Content-Type': "application/json",
130
179
  'token': @atlas_token,
131
- 'bearertoken': bearer_token}, body: prepare_data)
180
+ 'bearertoken': bearer_token}, body: preprocess_data)
132
181
  unless [200, 201].include?(response.code)
133
182
  raise(StandardError,
134
183
  "Failed to send POST request with token: #{response.code} - #{response.body}")
@@ -137,6 +186,133 @@ module Comee
137
186
  JSON.parse(response.body)
138
187
  end
139
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
+
140
316
  private
141
317
 
142
318
  def bearer_token
data/config/routes.rb CHANGED
@@ -157,10 +157,8 @@ Comee::Core::Engine.routes.draw do
157
157
  resources :customs_details do
158
158
  collection do
159
159
  post "filter"
160
- end
161
-
162
- member do
163
160
  post "send", action: :send_customs_details
161
+ post "generate_beo_xml", action: :generate_beo_xml
164
162
  end
165
163
  end
166
164
 
@@ -5,18 +5,18 @@ class CreateComeeCoreCustomsDetails < ActiveRecord::Migration[7.1]
5
5
  null: false,
6
6
  index: {name: "soi_on_cccd_indx"},
7
7
  foreign_key: {to_table: :comee_core_sales_orders}
8
- t.string :registration_type, null: false
9
- t.string :export_declaration_type, null: false
10
- t.string :participant_constellation, null: false
11
- t.string :mode_of_transport_type, null: false
12
- t.string :destination_country, null: false
13
- t.boolean :containerized, null: false, default: false
14
- t.string :additional_identifier, null: false
15
- t.string :packaging_type, null: false
16
- t.string :export_customs_office, null: false
17
- t.string :customs_office_of_exit, null: false
18
- t.string :mode_of_transport, null: false
19
- t.string :delivery_term_code, null: false
8
+ t.string :registration_type
9
+ t.string :export_declaration_type
10
+ t.string :participant_constellation
11
+ t.string :mode_of_transport_type
12
+ t.string :destination_country
13
+ t.boolean :containerized, default: false
14
+ t.string :additional_identifier
15
+ t.string :packaging_type
16
+ t.string :export_customs_office
17
+ t.string :customs_office_of_exit
18
+ t.string :mode_of_transport
19
+ t.string :delivery_term_code
20
20
  t.string :mrn
21
21
  t.string :office_number
22
22
  t.float :quantity
@@ -1,5 +1,5 @@
1
1
  module Comee
2
2
  module Core
3
- VERSION = "0.3.1".freeze
3
+ VERSION = "0.3.3".freeze
4
4
  end
5
5
  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.1
4
+ version: 0.3.3
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-23 00:00:00.000000000 Z
11
+ date: 2024-06-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: active_model_serializers