comee_core 0.2.85 → 0.2.87

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: 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