comee_core 0.3.1 → 0.3.2

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: b5679f8f8d4ed8da5747d3f1f63e4b9b0621d5204e821241ed126ed4148701d7
4
+ data.tar.gz: 007bd33cf75d023854a2b4b35974065bee2e405f1c7d9830413b5c57fbe061f5
5
5
  SHA512:
6
- metadata.gz: 828cfd039c47d92f5cbb4c1039cb84006227a74e2dfc908b8003e9531eae83afb61f6d8fcac7ac3786b4b69199a36c68e31c53aa38684fcdbb29b7d259d241fb
7
- data.tar.gz: 3876f53bbb1c93e16eeff25e49f9b8e6d398797bc553ffeaf76af572a277da90eded3932d41e813004d7d620d07b8fcf47623dbd207649d3d01b22183e43f55b
6
+ metadata.gz: 84538ddee22dcff3353d894c017f812d7b5beb4e7c81bbf532f0b558f1071350ef71b4b3ce698bc07e905195668166b49e9497c0e485f5b458b26a407e066ea4
7
+ data.tar.gz: 20a4c722dcdd2bc4a6d075c0f0c886ae810f3977950236c069d4af995b629ab7011eea011ef359e8d8fbeae155b81e6da9a468e908830471dd217aeeebd87482
@@ -9,7 +9,7 @@ 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
@@ -18,6 +18,12 @@ module Comee
18
18
 
19
19
  private
20
20
 
21
+ def publish_params
22
+ params.require(:payload).permit(
23
+ ids: []
24
+ )
25
+ end
26
+
21
27
  def model_params
22
28
  params.require(:payload).permit(
23
29
  :registration_type,
@@ -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,83 @@ 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 pre_process_data
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)
18
+ @customs_details = Comee::Core::CustomsDetail.includes(sales_order: :customer_order).where(sales_order_id: sales_order_ids)
19
+ @transportation_routes = []
20
+ @position_data = []
21
+
22
+ packaging_types = @line_items.map { |line_item| line_item.shipment_item.package_type.split(" ")[0] }.uniq
23
+
24
+ @no_of_packages = packaging_types.count
25
+ @package_type = packaging_types.count == 1 && packaging_types.first == "PX" ? "PX" : "PK"
26
+ @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
28
+ end
29
+
30
+ raise(StandardError, "No customs detail filed for sales order") unless @customs_details.present?
31
+
32
+ @address = @customs_details[0].sales_order.customer_order.client.address.split(", ")
33
+ @customs_details[0].transportation_route.each do |tr|
34
+ @transportation_routes << tr["route"][0, 2]
35
+ end
36
+
37
+ prepare_data
20
38
  end
39
+
40
+ JSON(@data)
21
41
  end
22
42
 
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,
43
+ def position_data
44
+ position_items = []
45
+ @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)
47
+ mp = Comee::Core::MasterPrice.includes(:country_of_origin).find_by(primary: true,
48
+ product_id: line_item.shipment_item
49
+ .sales_order_item.product.id)
50
+ line_item.shipment_item
51
+ position_items << {
52
+ "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,
55
+ "wareRegistriernummerFremdsystem": customs_detail.sales_order.customer_order.order_number,
32
56
  "wareUrsprungsbundesland": mp.state_of_origin,
33
- "wareEigenmasse": line_item.product.weight * line_item.quantity,
34
- "wareRohmasse": line_item.product.weight * line_item.quantity,
57
+ "wareEigenmasse": line_item.shipment_item.sales_order_item.product.weight * line_item.shipment_item.sales_order_item.quantity,
58
+ "wareRohmasse": index.zero? ? @total_weight : 0,
35
59
  "ausfuhrLand": "DE",
36
60
  "ursprungsland": mp.country_of_origin.code,
37
61
  "beantragtesVerfahren": "10",
38
62
  "vorhergehendesVerfahren": "00",
39
63
  "zusatzlichesVerfahren": "F61",
40
- "aussenhandelsstatistikMenge": line_item.quantity,
41
- "aussenhandelsstatistikWert": line_item.quantity * line_item.price,
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),
42
67
  "packstuck": [
43
68
  {
44
- "packstuckNummer": "1",
45
- "packstuckAnzahl": sii.pallet_no,
46
- "packstuckVerpackungsart": sii.package_type.split(" ")[0],
47
- "packstuckZeichenNummern": @customs_detail.sales_order.order_number
69
+ "packstuckNummer": index + 1,
70
+ "packstuckAnzahl": index.zero? ? @no_of_packages : 0,
71
+ "packstuckVerpackungsart": @package_type,
72
+ "packstuckZeichenNummern": customs_detail.sales_order.customer_order.order_number
48
73
  }
49
74
  ]
50
75
  }
51
76
  end
52
77
 
53
- data = {
78
+ position_items
79
+ end
80
+
81
+ def prepare_data
82
+ @data = {
54
83
  "dataIdentifier": "",
55
84
  "kundenNumber": "",
56
85
  "mandantId": "",
@@ -67,43 +96,43 @@ module Comee
67
96
  {
68
97
  "kopf": {
69
98
  "eoriNiederlassungsnummer": "DE47897410000",
70
- "dienststellennummer": "DE014851",
71
- "artderAnmeldung": @customs_detail.registration_type.split(" ")[0],
72
- "artderAnmeldungAusfuhr": @customs_detail.export_declaration_type,
99
+ "artderAnmeldung": @customs_details[0].registration_type.split(" ")[0],
100
+ "artderAnmeldungAusfuhr": @customs_details[0].export_declaration_type,
73
101
  "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,
102
+ "beteiligtenKonstellation": @customs_details[0].participant_constellation.split(" ")[0],
103
+ "sicherheit": @customs_details[0].registration_type.split(" ")[0] == "CO" ? 0 : 2,
104
+ "container": @customs_details[0].containerized == true ? 1 : 0,
105
+ "bestimmungsLand": @customs_details[0].destination_country,
106
+ "referenznummerUCR": @customs_details.map(&:sales_order).map(&:customer_order).map(&:consignee).join(" "),
107
+ "lrn": @customs_details.map(&:sales_order).map(&:customer_order).map(&:order_number).join(" "),
108
+ "beforderungsmittelImInlandVerkehrszweig": @customs_details[0].mode_of_transport,
109
+ "beforderungsmittelderGrenzeVerkehrszweig": @customs_details[0].mode_of_transport_at_border,
110
+ "beforderungsmittelderGrenzeArt": @customs_details[0].mode_of_transport_type,
83
111
  "beforderungsmittelderGrenzeKennzeichen": "UNBEKANNT",
84
- "beforderungsmittelderGrenzeStaatszugehorigkeit": @customs_detail.mode_of_transport_nationality.split(" ")[0],
112
+ "beforderungsmittelderGrenzeStaatszugehorigkeit": @customs_details[0].mode_of_transport_nationality.split(" ")[0],
113
+ "gesamtRohmasse": @total_weight,
85
114
  "beforderungsmittelBeimAbgang": [
86
115
  {
87
116
  "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]
117
+ "artderIdentifikation": @customs_details[0].type_of_identification.split(" ")[0],
118
+ "kennzeichen": @customs_details[0].additional_identifier.split(" ")[0],
119
+ "staatszugehorigkeit": @customs_details[0].nationality.split(" ")[0]
91
120
  }
92
121
  ],
93
- "ausfuhrzollstelleDienststellennummer": @customs_detail.export_customs_office.split(" ")[0],
94
- "vorgeseheneAusgangszollstelleDienststellennummer": @customs_detail.customs_office_of_exit.split(" ")[0],
122
+ "ausfuhrzollstelleDienststellennummer": @customs_details[0].export_customs_office.split(" ")[0],
123
+ "vorgeseheneAusgangszollstelleDienststellennummer": @customs_details[0].customs_office_of_exit.split(" ")[0],
95
124
  "geschaftsvorgangArt": "11",
96
- "geschaftsvorgangRechnungspreis": @customs_detail.sales_order.total_price,
125
+ "geschaftsvorgangRechnungspreis": @customs_details[0].sales_order.total_price.round(2),
97
126
  "geschaftsvorgangWahrung": "EUR",
98
127
  "beforderungsroute": {
99
128
  "ausgewahlteLander": @transportation_routes,
100
- "beforderungsVon": @customs_detail.transportation_route[0]["route"].split(" ")[0],
101
- "beforderungsBis": @customs_detail.transportation_route[-1]["route"].split(" ")[0]
129
+ "beforderungsVon": @customs_details[0].transportation_route[0]["route"].split(" ")[0],
130
+ "beforderungsBis": @customs_details[0].transportation_route[-1]["route"].split(" ")[0]
102
131
  },
103
132
  "empfanger": {
104
133
  "tin": "",
105
134
  "niederlassungsNummer": "",
106
- "name": @customs_detail.sales_order.customer_order.client.name,
135
+ "name": @customs_details[0].sales_order.customer_order.client.name,
107
136
  "strasse": @address[0],
108
137
  "plz": @address[-1],
109
138
  "ort": "#{@address[1].split(' ')[-3]} #{@address[1].split(' ')[-2]}",
@@ -111,24 +140,22 @@ module Comee
111
140
  },
112
141
  "warenortArtdesOrtes": "B",
113
142
  "warenortArtDerOrtsbestimmung": "Y",
114
- "warenortZusatzlicheKennung": @customs_detail.additional_identifier.split(" ")[0],
115
- "lieferbedingungIncotermCode": @customs_detail.delivery_term_code[0, 3],
143
+ "warenortZusatzlicheKennung": @customs_details[0].additional_identifier.split(" ")[0],
144
+ "lieferbedingungIncotermCode": @customs_details[0].delivery_term_code[0, 3],
116
145
  "lieferbedingungOrt": "Hamburg"
117
146
  },
118
- "position": @position_data
147
+ "position": position_data
119
148
  }
120
149
  ]
121
150
  }
122
151
  }
123
152
  }
124
-
125
- JSON(data)
126
153
  end
127
154
 
128
155
  def send_customs_details
129
156
  response = HTTParty.post("#{@atlas_base_url}/PutData", headers: {'Content-Type': "application/json",
130
157
  'token': @atlas_token,
131
- 'bearertoken': bearer_token}, body: prepare_data)
158
+ 'bearertoken': bearer_token}, body: pre_process_data)
132
159
  unless [200, 201].include?(response.code)
133
160
  raise(StandardError,
134
161
  "Failed to send POST request with token: #{response.code} - #{response.body}")
data/config/routes.rb CHANGED
@@ -157,9 +157,6 @@ 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
164
161
  end
165
162
  end
@@ -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.2".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.2
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-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: active_model_serializers