comee_core 0.2.85 → 0.2.87

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: 92597cfcc6201f0e7735375e52b22e490ceb637cc76e519ead74d70c359cb55d
4
- data.tar.gz: a864b62cffa69931e1b340949d362217c0e2ea258eb6c6762987473962ce68c8
3
+ metadata.gz: 8087c47cfff3765329e378c4f90dc44a0a12d14335fe551d6a0822de437b9b13
4
+ data.tar.gz: cae23b72d5f323a8cdc53e60ca4834d1017afbad1a6902e6cc0e70d1d23c2047
5
5
  SHA512:
6
- metadata.gz: 4f287fb11f55ebe66f58fa03203ecf4b52920472bbd44c75298f56f682a5fa1e2e9e7c18072408f88bb1223706c5c1249438e60660fc433f229bc78f5f36cbfa
7
- data.tar.gz: ddaef63048d9f052b39143d2e04ff53e0de57ce9c777238701935b53490879f6f57d9448bb0756e7f41cbd431fa2f2c5d9048e45fd8c69a409f82b981bf6f00e
6
+ metadata.gz: 5585235c8cf45b06f896babb9b0d6e4f958c0b4cc8ed22887d637ddcca1592b40ace4bb0a28e9b143d5b37bc201c77c86ead2730198defd41d497eb8c68f97d3
7
+ data.tar.gz: 328f1153595fe03a94db8fab8a961bc42c7e998ea68e50ccda75423b86439f4bec8303205c0afd25b1c92371b3a928cf990df146448d2bd0e531e1e63b59267c
@@ -3,6 +3,19 @@ module Comee
3
3
  class CustomsDetailsController < ApplicationController
4
4
  include Common
5
5
 
6
+ def filter
7
+ customs_details = Comee::Core::CustomsDetail.includes(:sales_order).ransack(params[:q]).result
8
+ render_content(customs_details)
9
+ end
10
+
11
+ def send_customs_details
12
+ service = BeoService.new(params[:id])
13
+ data = service.send_customs_details
14
+ render json: {success: true, data: data}
15
+ rescue StandardError => e
16
+ render json: {success: false, error: e.message}, status: :unprocessable_entity
17
+ end
18
+
6
19
  private
7
20
 
8
21
  def model_params
@@ -32,8 +45,8 @@ module Comee
32
45
  :closure_mark3,
33
46
  :closure_mark4,
34
47
  :closure_mark5,
35
- :transportation_route,
36
- :sales_order_id
48
+ :sales_order_id,
49
+ transportation_route: %i[order route value]
37
50
  )
38
51
  end
39
52
  end
@@ -60,7 +60,7 @@ module Comee
60
60
 
61
61
  def model_params
62
62
  params.require(:payload).permit(:sales_order_item_id, :quantity, :shipment_status, :status, :handover_date, :delivery_date,
63
- :pallet_no, :consignee, :order_number)
63
+ :pallet_no, :consignee, :order_number, :package_type)
64
64
  end
65
65
  end
66
66
  end
@@ -3,6 +3,14 @@ module Comee
3
3
  class CustomsDetail < ApplicationRecord
4
4
  belongs_to :sales_order
5
5
 
6
+ def self.ransackable_attributes(_auth_object = nil)
7
+ %w[id sales_order_id]
8
+ end
9
+
10
+ def self.ransackable_associations(_auth_object = nil)
11
+ %w[sales_order]
12
+ end
13
+
6
14
  validates :registration_type, :export_declaration_type, :participant_constellation, :mode_of_transport_type, :destination_country,
7
15
  :additional_identifier, :packaging_type, :export_customs_office, :customs_office_of_exit, :mode_of_transport,
8
16
  :delivery_term_code, presence: true
@@ -1,7 +1,7 @@
1
1
  module Comee
2
2
  module Core
3
3
  class PurchaseOrderItemSerializer < ActiveModel::Serializer
4
- attributes :id, :quantity, :confirmed_quantity, :price
4
+ attributes :id, :serial_no, :quantity, :confirmed_quantity, :price
5
5
 
6
6
  belongs_to :purchase_order
7
7
  end
@@ -2,7 +2,7 @@ module Comee
2
2
  module Core
3
3
  class ShipmentItemSerializer < ActiveModel::Serializer
4
4
  attributes :id, :quantity, :shipment_status, :status, :handover_date, :delivery_date, :pallet_no, :consignee,
5
- :order_number
5
+ :order_number, :package_type
6
6
  belongs_to :sales_order_item
7
7
  has_many :item_statuses
8
8
  has_many :shipment_instruction_items
@@ -0,0 +1,154 @@
1
+ require "httparty"
2
+
3
+ module Comee
4
+ module Core
5
+ class BeoService
6
+ def initialize(id)
7
+ @atlas_token = ENV.fetch("ATLAS_TOKEN")
8
+ @atlas_base_url = ENV.fetch("ATLAS_BASE_URL")
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]
20
+ end
21
+ end
22
+
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,
32
+ "wareUrsprungsbundesland": mp.state_of_origin,
33
+ "wareEigenmasse": line_item.product.weight * line_item.quantity,
34
+ "wareRohmasse": line_item.product.weight * line_item.quantity,
35
+ "ausfuhrLand": "DE",
36
+ "ursprungsland": mp.country_of_origin.code,
37
+ "beantragtesVerfahren": "10",
38
+ "vorhergehendesVerfahren": "00",
39
+ "zusatzlichesVerfahren": "F61",
40
+ "aussenhandelsstatistikMenge": line_item.quantity,
41
+ "aussenhandelsstatistikWert": line_item.quantity * line_item.price,
42
+ "packstuck": [
43
+ {
44
+ "packstuckNummer": "1",
45
+ "packstuckAnzahl": sii.pallet_no,
46
+ "packstuckVerpackungsart": sii.package_type.split(" ")[0],
47
+ "packstuckZeichenNummern": @customs_detail.sales_order.order_number
48
+ }
49
+ ]
50
+ }
51
+ end
52
+
53
+ data = {
54
+ "dataIdentifier": "",
55
+ "kundenNumber": "",
56
+ "mandantId": "",
57
+ "module": {
58
+ "ausfuhr": {
59
+ "data": "true",
60
+ "email": "",
61
+ "autosend": "false"
62
+ }
63
+ },
64
+ "messageData": {
65
+ "ausfuhr": {
66
+ "expdat": [
67
+ {
68
+ "kopf": {
69
+ "eoriNiederlassungsnummer": "DE47897410000",
70
+ "dienststellennummer": "DE014851",
71
+ "artderAnmeldung": @customs_detail.registration_type.split(" ")[0],
72
+ "artderAnmeldungAusfuhr": @customs_detail.export_declaration_type,
73
+ "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,
83
+ "beforderungsmittelderGrenzeKennzeichen": "UNBEKANNT",
84
+ "beforderungsmittelderGrenzeStaatszugehorigkeit": @customs_detail.mode_of_transport_nationality.split(" ")[0],
85
+ "beforderungsmittelBeimAbgang": [
86
+ {
87
+ "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]
91
+ }
92
+ ],
93
+ "ausfuhrzollstelleDienststellennummer": @customs_detail.export_customs_office.split(" ")[0],
94
+ "vorgeseheneAusgangszollstelleDienststellennummer": @customs_detail.customs_office_of_exit.split(" ")[0],
95
+ "geschaftsvorgangArt": "11",
96
+ "geschaftsvorgangRechnungspreis": @customs_detail.sales_order.total_price,
97
+ "geschaftsvorgangWahrung": "EUR",
98
+ "beforderungsroute": {
99
+ "ausgewahlteLander": @transportation_routes,
100
+ "beforderungsVon": @customs_detail.transportation_route[0]["route"].split(" ")[0],
101
+ "beforderungsBis": @customs_detail.transportation_route[-1]["route"].split(" ")[0]
102
+ },
103
+ "empfanger": {
104
+ "tin": "",
105
+ "niederlassungsNummer": "",
106
+ "name": @customs_detail.sales_order.customer_order.client.name,
107
+ "strasse": @address[0],
108
+ "plz": @address[-1],
109
+ "ort": "#{@address[1].split(' ')[-3]} #{@address[1].split(' ')[-2]}",
110
+ "land": @address[1].split(" ")[-1]
111
+ },
112
+ "warenortArtdesOrtes": "B",
113
+ "warenortArtDerOrtsbestimmung": "Y",
114
+ "warenortZusatzlicheKennung": @customs_detail.additional_identifier.split(" ")[0],
115
+ "lieferbedingungIncotermCode": @customs_detail.delivery_term_code[0, 3],
116
+ "lieferbedingungOrt": "Hamburg"
117
+ },
118
+ "position": @position_data
119
+ }
120
+ ]
121
+ }
122
+ }
123
+ }
124
+
125
+ JSON(data)
126
+ end
127
+
128
+ def send_customs_details
129
+ response = HTTParty.post("#{@atlas_base_url}/PutData", headers: {'Content-Type': "application/json",
130
+ 'token': @atlas_token,
131
+ 'bearertoken': bearer_token}, body: prepare_data)
132
+ unless [200, 201].include?(response.code)
133
+ raise(StandardError,
134
+ "Failed to send POST request with token: #{response.code} - #{response.body}")
135
+ end
136
+
137
+ JSON.parse(response.body)
138
+ end
139
+
140
+ private
141
+
142
+ def bearer_token
143
+ response = HTTParty.post("#{@atlas_base_url}/authenticate", headers: {
144
+ 'Authorization': "Basic #{@encoded_auth}",
145
+ 'Accept': "application/json"
146
+ })
147
+
148
+ raise(StandardError, "Failed to obtain bearer token: #{response.code} - #{response.body}") unless response.code == 200
149
+
150
+ JSON.parse(response.body)["accessToken"]
151
+ end
152
+ end
153
+ end
154
+ end
data/config/routes.rb CHANGED
@@ -149,12 +149,23 @@ Comee::Core::Engine.routes.draw do
149
149
  post "cancel"
150
150
  end
151
151
  end
152
- resources :customs_details
152
+
153
+ resources :customs_details do
154
+ collection do
155
+ post "filter"
156
+ end
157
+
158
+ member do
159
+ post "send", action: :send_customs_details
160
+ end
161
+ end
162
+
153
163
  resources :item_statuses do
154
164
  collection do
155
165
  post "filter"
156
166
  end
157
167
  end
168
+
158
169
  resources :fulfillment_centers
159
170
 
160
171
  resources :client_warehouses
@@ -0,0 +1,5 @@
1
+ class AddPackageTypeToShipmentItem < ActiveRecord::Migration[7.1]
2
+ def change
3
+ add_column :comee_core_shipment_items, :package_type, :string, default: "PX - Palette"
4
+ end
5
+ end
@@ -1,5 +1,5 @@
1
1
  module Comee
2
2
  module Core
3
- VERSION = "0.2.85".freeze
3
+ VERSION = "0.2.87".freeze
4
4
  end
5
5
  end
@@ -9,5 +9,6 @@ FactoryBot.define do
9
9
  pallet_no { Faker::Alphanumeric.alpha(number: 10) }
10
10
  consignee { Faker::Name.name }
11
11
  order_number { sales_order_item.sales_order.order_number }
12
+ package_type { "PX - Palette" }
12
13
  end
13
14
  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.2.85
4
+ version: 0.2.87
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-05 00:00:00.000000000 Z
11
+ date: 2024-06-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: active_model_serializers
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '3.1'
55
+ - !ruby/object:Gem::Dependency
56
+ name: httparty
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: image_processing
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -396,6 +410,7 @@ files:
396
410
  - app/serializers/comee/core/unit_serializer.rb
397
411
  - app/serializers/comee/core/user_application_role_serializer.rb
398
412
  - app/serializers/comee/core/user_serializer.rb
413
+ - app/services/comee/core/beo_service.rb
399
414
  - app/services/comee/core/customer_order_service.rb
400
415
  - app/services/comee/core/product_lookup_service.rb
401
416
  - app/services/comee/core/quotation_request_service.rb
@@ -475,6 +490,7 @@ files:
475
490
  - db/migrate/20240602171355_add_order_reference_to_purchase_order.rb
476
491
  - db/migrate/20240604142805_add_serial_no_to_purchase_order_items.rb
477
492
  - db/migrate/20240604155157_add_fields_to_customs_details.rb
493
+ - db/migrate/20240608094721_add_package_type_to_shipment_item.rb
478
494
  - lib/comee/core.rb
479
495
  - lib/comee/core/engine.rb
480
496
  - lib/comee/core/version.rb