comee_core 0.2.86 → 0.2.88

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: 0b47ff185684d95c48309abdf2e33c7d32e8498ee7f33857829e989e3b6b1984
4
- data.tar.gz: 6c1810467a26b2bf5873df68e97dfdef9372cb2716e41b8da475b88f43add885
3
+ metadata.gz: 0130a43666a70736bf713ceca90adf41dc646683367083cb39923aeb9deefa7c
4
+ data.tar.gz: 1817df779fd04f49e533a4c6c1ce444396a501a30a9a825e84026a36bd890ccf
5
5
  SHA512:
6
- metadata.gz: 95c97852bb34c1ac0ece112345a34a15847efa33aca1b9c0b955bb4b5fac437ba72c769835e8224270eb2ae7fb5ec623a1a08d0360b37f2b932feea1aa7c381d
7
- data.tar.gz: 314bd7f7d3daf7db42926bf622ad4993d6397bc78d78d2d5b3e00cc21b9988fea93b363dbf5527ac96b3697d4f353b2de22229804f2de1a8d97ceef5e3051588
6
+ metadata.gz: 93ec1272995413a3ed4629ca0c30fb2870c19c524660534f20616942abc3b531696c947ab2a82ebe065684f68c0073c21ad37fdce39ac331cd213f04648a9ed0
7
+ data.tar.gz: ef32d4bc6d8ffabe0295516f5585908be70bb54078db6169f12867a1007040ed8315c87aa94de294528c658c32786e7a76620642ea1870ce205f4aba8f4b26cb
@@ -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
@@ -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
@@ -9,7 +9,7 @@ module Comee
9
9
  validates :name, :address, :locale, :payment_terms, presence: true
10
10
 
11
11
  def self.ransackable_attributes(_auth_object = nil)
12
- %w[id user_id code address locale]
12
+ %w[id user_id code name address locale]
13
13
  end
14
14
 
15
15
  def self.ransackable_associations(_auth_object = nil)
@@ -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
@@ -1,5 +1,5 @@
1
1
  module Comee
2
2
  module Core
3
- VERSION = "0.2.86".freeze
3
+ VERSION = "0.2.88".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.2.86
4
+ version: 0.2.88
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-08 00:00:00.000000000 Z
11
+ date: 2024-06-11 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