comee_core 0.3.4 → 0.3.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/comee/core/agents_controller.rb +3 -1
  3. data/app/controllers/comee/core/client_addresses_controller.rb +1 -1
  4. data/app/controllers/comee/core/clients_controller.rb +5 -3
  5. data/app/controllers/comee/core/customer_orders_controller.rb +6 -3
  6. data/app/controllers/comee/core/product_lookups_controller.rb +1 -1
  7. data/app/controllers/comee/core/supplier_addresses_controller.rb +21 -0
  8. data/app/controllers/comee/core/suppliers_controller.rb +1 -1
  9. data/app/models/comee/core/address.rb +20 -0
  10. data/app/models/comee/core/agent.rb +2 -0
  11. data/app/models/comee/core/client.rb +2 -1
  12. data/app/models/comee/core/client_address.rb +9 -8
  13. data/app/models/comee/core/customer_order.rb +1 -0
  14. data/app/models/comee/core/pickup_schedule.rb +2 -0
  15. data/app/models/comee/core/product_lookup.rb +1 -1
  16. data/app/models/comee/core/sales_order.rb +7 -2
  17. data/app/models/comee/core/sales_order_item.rb +7 -0
  18. data/app/models/comee/core/supplier.rb +2 -1
  19. data/app/models/comee/core/supplier_address.rb +24 -0
  20. data/app/serializers/comee/core/agent_serializer.rb +3 -1
  21. data/app/serializers/comee/core/client_address_serializer.rb +1 -1
  22. data/app/serializers/comee/core/client_serializer.rb +3 -2
  23. data/app/serializers/comee/core/customer_order_serializer.rb +1 -1
  24. data/app/serializers/comee/core/product_lookup_serializer.rb +1 -1
  25. data/app/serializers/comee/core/sales_order_serializer.rb +1 -1
  26. data/app/serializers/comee/core/supplier_address_serializer.rb +11 -0
  27. data/app/serializers/comee/core/supplier_serializer.rb +2 -1
  28. data/app/services/comee/core/beo_service.rb +41 -36
  29. data/app/services/comee/core/customer_order_service.rb +2 -1
  30. data/config/routes.rb +7 -0
  31. data/db/migrate/20240629044824_create_comee_core_supplier_addresses.rb +23 -0
  32. data/db/migrate/20240629065810_remove_address_field_from_supplier_and_client.rb +7 -0
  33. data/db/migrate/20240629135249_add_additional_fields_to_order.rb +10 -0
  34. data/db/migrate/20240629145738_add_telephone_and_email_to_address.rb +8 -0
  35. data/db/migrate/20240629160357_add_more_address_fields_to_agent.rb +14 -0
  36. data/db/migrate/20240629170409_add_vat_to_sales_orders.rb +5 -0
  37. data/db/migrate/20240630063656_add_aliases_field_to_product_lookup.rb +5 -0
  38. data/db/migrate/20240630083042_add_agent_to_pickup_schedule.rb +8 -0
  39. data/lib/comee/core/version.rb +1 -1
  40. data/spec/factories/comee/core/agents.rb +7 -2
  41. data/spec/factories/comee/core/client_addresses.rb +2 -0
  42. data/spec/factories/comee/core/clients.rb +1 -2
  43. data/spec/factories/comee/core/customer_orders.rb +3 -0
  44. data/spec/factories/comee/core/pickup_schedules.rb +1 -0
  45. data/spec/factories/comee/core/product_lookups.rb +1 -0
  46. data/spec/factories/comee/core/sales_orders.rb +3 -0
  47. data/spec/factories/comee/core/supplier_addresses.rb +15 -0
  48. data/spec/factories/comee/core/suppliers.rb +0 -1
  49. metadata +15 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6574ea36fe12881077a861e6fb2606b08049a6c45c68777b865b73866a1155c1
4
- data.tar.gz: 5829e9439f0796f165e5e065c311147d674314d4e8261162f38bdc7e1f826ce0
3
+ metadata.gz: 904aacbb433502ee95c7973c9ff1f50d5fe9698998a7600dcb84a038068f5125
4
+ data.tar.gz: a943ec5bd2893b7d1cff862f12695f193013740ff3c09606320306dbd252e2a6
5
5
  SHA512:
6
- metadata.gz: a018ba9b48a1e0eb39f2b98cf4a779a495d5b46680e8370dca36c5d9a5aad08f03dd74fe95f23d2ea34669b393500997dded35f3ba3dffdf880378b32f5bba9c
7
- data.tar.gz: bbdc8bc1570bfd605b90abcff20d72614ba198ca00180460d935863ffdccef69647f86cbf2c8788021dc8e2765d9028a04cf19d07679f64775b874e07a258c4a
6
+ metadata.gz: c14eda451d86694be060e733b8fdc3cf903872faf587b9c74349663bf0badb23ae6cb8dfc7103b8109ea5da3e457eb36b1b6a0b7cb4773697899d144ca0abed1
7
+ data.tar.gz: ad1835d0bf82d0002b9f710b5f7439cb218abf4223cbbfa46229d1793e7f6f806107deb2a8334906ca7e4a5d2259d7c80497ea006f980d2d3c6475db9ecf5e2d
@@ -6,7 +6,9 @@ module Comee
6
6
  private
7
7
 
8
8
  def model_params
9
- params.require(:payload).permit(:name, :address, :email, :telephone)
9
+ params.require(:payload).permit(
10
+ :name, :address_line1, :street, :city, :state, :country_id, :postal_code, :email, :telephone
11
+ )
10
12
  end
11
13
  end
12
14
  end
@@ -14,7 +14,7 @@ module Comee
14
14
  def model_params
15
15
  params.require(:payload)
16
16
  .permit(:client_id, :name, :address_line1, :street, :city, :state, :country_id, :postal_code, :address_type,
17
- :default)
17
+ :email, :telephone, :default)
18
18
  end
19
19
  end
20
20
  end
@@ -56,12 +56,14 @@ module Comee
56
56
  private
57
57
 
58
58
  def model_params
59
- params.require(:payload).permit(:code, :name, :match_code, :address, :locale, :user_id, :parent_id, :currency,
60
- :subsidiary, :country_id, :tax_code, :vat_number, :print_details, consignees: [])
59
+ params.require(:payload).permit(:code, :name, :match_code, :locale, :user_id, :parent_id, :currency, :subsidiary,
60
+ :country_id, :tax_code, :vat_number, :print_details, consignees: [])
61
61
  end
62
62
 
63
63
  def agent_params
64
- params.require(:payload).permit(:name, :address, :email, :telephone)
64
+ params.require(:payload).permit(
65
+ :name, :address_line1, :street, :city, :state, :country_id, :postal_code, :email, :telephone
66
+ )
65
67
  end
66
68
 
67
69
  def contact_params
@@ -68,16 +68,19 @@ module Comee
68
68
  .permit(
69
69
  :order_number, :order_date, :order_terms, :consignee, :shipment_address, :final_destination,
70
70
  :final_delivery_date, :handover_date, :shipping_date, :delivery_address, :invoice_address, :status,
71
- :client_id, :file
71
+ :client_id, :consolidator_date, :voyage_no, :shipping_arrangement, :file
72
72
  )
73
73
  end
74
74
 
75
75
  def create_with_item_params
76
76
  params.require(:payload)
77
77
  .permit(
78
- :order_number, :order_date, :order_terms, :consignee, :shipment_address, :final_destination,
78
+ :order_number, :order_date, :order_terms, :consignee, :shipment_address, :final_destination, :voyage_no,
79
79
  :final_delivery_date, :handover_date, :shipping_date, :delivery_address, :invoice_address, :status, :client_id,
80
- items: %i[serial_no customer_item_no customer_item_description product_id quantity price total_price unit_id delivery_date]
80
+ :consolidator_date, :shipping_arrangement,
81
+ items: %i[
82
+ serial_no customer_item_no customer_item_description product_id quantity price total_price unit_id delivery_date
83
+ ]
81
84
  )
82
85
  end
83
86
 
@@ -31,7 +31,7 @@ module Comee
31
31
  end
32
32
 
33
33
  def model_params
34
- params.required(:payload).permit(:code, :itemable_id, :itemable_type, :item_description, :product_id)
34
+ params.required(:payload).permit(:code, :itemable_id, :itemable_type, :item_description, :product_id, :aliases)
35
35
  end
36
36
  end
37
37
  end
@@ -0,0 +1,21 @@
1
+ module Comee
2
+ module Core
3
+ class SupplierAddressesController < ApplicationController
4
+ include Common
5
+
6
+ def index
7
+ super do
8
+ SupplierAddress.where(supplier_id: params[:id])
9
+ end
10
+ end
11
+
12
+ private
13
+
14
+ def model_params
15
+ params.require(:payload)
16
+ .permit(:supplier_id, :address_line1, :street, :city, :state, :country_id, :postal_code, :address_type,
17
+ :email, :telephone, :default)
18
+ end
19
+ end
20
+ end
21
+ end
@@ -17,7 +17,7 @@ module Comee
17
17
  private
18
18
 
19
19
  def model_params
20
- params.require(:payload).permit(:code, :name, :address, :locale, :payment_terms, :currency_id, :vat_number, :tax_code)
20
+ params.require(:payload).permit(:code, :name, :locale, :payment_terms, :currency_id, :vat_number, :tax_code)
21
21
  end
22
22
  end
23
23
  end
@@ -0,0 +1,20 @@
1
+ module Comee
2
+ module Core
3
+ class Address < ApplicationRecord
4
+ self.abstract_class = true
5
+
6
+ BASIC_ADDRESS = "Basic Address".freeze
7
+ SHIPPING_ADDRESS = "Shipping Address".freeze
8
+ DELIVERY_ADDRESS = "Delivery Address".freeze
9
+ INVOICING_ADDRESS = "Invoicing Address".freeze
10
+
11
+ ADDRESS_TYPES = [BASIC_ADDRESS, SHIPPING_ADDRESS, DELIVERY_ADDRESS, INVOICING_ADDRESS].freeze
12
+
13
+ belongs_to :country, -> { where(lookup_type: :country) }, class_name: "Comee::Core::Lookup"
14
+
15
+ validates :address_line1, :address_type, presence: true
16
+ validates :address_type, inclusion: {in: ADDRESS_TYPES}
17
+ validates :email, format: {with: URI::MailTo::EMAIL_REGEXP}
18
+ end
19
+ end
20
+ end
@@ -1,6 +1,8 @@
1
1
  module Comee
2
2
  module Core
3
3
  class Agent < ApplicationRecord
4
+ belongs_to :country, -> { where(lookup_type: :country) }, class_name: "Comee::Core::Lookup"
5
+
4
6
  validates :name, :email, :telephone, presence: true
5
7
  end
6
8
  end
@@ -8,8 +8,9 @@ module Comee
8
8
  has_and_belongs_to_many :contacts, join_table: :comee_core_clients_contacts
9
9
  has_and_belongs_to_many :agents, join_table: :comee_core_clients_agents
10
10
  has_many :client_warehouses
11
+ has_many :client_addresses
11
12
 
12
- validates :code, :name, :match_code, :address, :locale, presence: true
13
+ validates :code, :name, :match_code, :locale, presence: true
13
14
  validates :code, uniqueness: true
14
15
 
15
16
  delegate(:name, to: :user, prefix: true, allow_nil: true)
@@ -1,17 +1,18 @@
1
1
  module Comee
2
2
  module Core
3
- class ClientAddress < ApplicationRecord
4
- SHIPPING_ADDRESS = "Shipping Address".freeze
5
- DELIVERY_ADDRESS = "Delivery Address".freeze
6
- INVOICING_ADDRESS = "Invoicing Address".freeze
3
+ class ClientAddress < Address
4
+ # BASIC_ADDRESS = "Basic Address".freeze
5
+ # SHIPPING_ADDRESS = "Shipping Address".freeze
6
+ # DELIVERY_ADDRESS = "Delivery Address".freeze
7
+ # INVOICING_ADDRESS = "Invoicing Address".freeze
7
8
 
8
- ADDRESS_TYPES = [SHIPPING_ADDRESS, DELIVERY_ADDRESS, INVOICING_ADDRESS].freeze
9
+ # ADDRESS_TYPES = [BASIC_ADDRESS, SHIPPING_ADDRESS, DELIVERY_ADDRESS, INVOICING_ADDRESS].freeze
9
10
 
10
11
  belongs_to :client
11
- belongs_to :country, -> { where(lookup_type: :country) }, class_name: "Comee::Core::Lookup"
12
+ # belongs_to :country, -> { where(lookup_type: :country) }, class_name: "Comee::Core::Lookup"
12
13
 
13
- validates :name, :address_line1, :address_type, presence: true
14
- validates :address_type, inclusion: {in: ADDRESS_TYPES}
14
+ validates :name, presence: true
15
+ # validates :address_type, inclusion: {in: ADDRESS_TYPES}
15
16
 
16
17
  validate :validate_default
17
18
 
@@ -6,6 +6,7 @@ module Comee
6
6
  has_one_attached :file
7
7
 
8
8
  enum :status, {draft: 0, submitted: 1, awaiting_confirmation: 2, accepted: 3, canceled: 4}
9
+ enum :shipping_arrangement, {own: 0, agent: 1}
9
10
 
10
11
  validates :order_number, :order_date, :delivery_address, :invoice_address, :status, presence: true
11
12
 
@@ -5,6 +5,8 @@ module Comee
5
5
 
6
6
  belongs_to :pod
7
7
  belongs_to :time_slot
8
+ belongs_to :agent, optional: true
9
+
8
10
  validates :status, presence: true
9
11
 
10
12
  def self.ransackable_attributes(_auth_object = nil)
@@ -9,7 +9,7 @@ module Comee
9
9
  validates :code, uniqueness: {scope: %i[product_id itemable_id itemable_type]}
10
10
 
11
11
  def self.ransackable_attributes(_auth_object = nil)
12
- %w[id code item_description itemable_id itemable_type product_id]
12
+ %w[id code item_description itemable_id itemable_type product_id alias]
13
13
  end
14
14
 
15
15
  def self.ransackable_associations(_auth_object = nil)
@@ -3,7 +3,6 @@ module Comee
3
3
  class SalesOrder < ApplicationRecord
4
4
  before_validation :generate_order_number, if: proc { |so| so.order_number.nil? }
5
5
 
6
- before_save :total_price
7
6
  before_save :set_parent_client_name
8
7
 
9
8
  belongs_to :customer_order
@@ -15,6 +14,7 @@ module Comee
15
14
 
16
15
  enum :status, {draft: 0, submitted: 1, confirmed: 2, accepted: 3, canceled: 4}
17
16
  enum :purchase_status, {unprocessed: 0, processed: 1}
17
+ enum :shipping_arrangement, {own: 0, agent: 1}
18
18
 
19
19
  validates :order_number, presence: true, uniqueness: true
20
20
  validates :order_date, :status, :purchase_status, presence: true
@@ -25,11 +25,16 @@ module Comee
25
25
  numericality: {greater_than_or_equal_to: 0},
26
26
  allow_nil: true
27
27
 
28
- def total_price
28
+ def calculate_total_price
29
29
  sales_order_items = SalesOrderItem.where(sales_order_id: id)
30
30
  self.total_price = sales_order_items.sum(&:total_price)
31
31
  end
32
32
 
33
+ def calculate_vat
34
+ total_price = SalesOrderItem.where(sales_order_id: id).sum(&:total_price)
35
+ self.vat = (total_price * 0.19).round(2) if client.tax_code == "Inland"
36
+ end
37
+
33
38
  def set_parent_client_name
34
39
  self.parent_client_name = client.parent&.name
35
40
  end
@@ -5,7 +5,9 @@ module Comee
5
5
 
6
6
  before_save :calculate_total_price
7
7
  before_save :calculate_handover_date
8
+ after_save :update_sales_order
8
9
  after_save :update_sales_order_purchase_status, if: proc { |item| item.fully_processed? }
10
+ after_destroy :update_sales_order
9
11
 
10
12
  enum processing_status: {unprocessed: 0, partially_processed: 1, fully_processed: 2}
11
13
 
@@ -34,6 +36,11 @@ module Comee
34
36
  self.total_price = (price * quantity).round(2)
35
37
  end
36
38
 
39
+ def update_sales_order
40
+ sales_order.calculate_total_price
41
+ sales_order.calculate_vat
42
+ end
43
+
37
44
  def quantity_remaining
38
45
  quantity - (quantity_delivered + quantity_canceled)
39
46
  end
@@ -3,10 +3,11 @@ module Comee
3
3
  class Supplier < ApplicationRecord
4
4
  belongs_to :user, optional: true
5
5
  belongs_to :currency, optional: true
6
+ has_many :supplier_addresses
6
7
  has_and_belongs_to_many :contacts, join_table: :comee_core_suppliers_contacts
7
8
 
8
9
  validates :code, presence: true, uniqueness: true
9
- validates :name, :address, :locale, :payment_terms, presence: true
10
+ validates :name, :locale, :payment_terms, presence: true
10
11
 
11
12
  def self.ransackable_attributes(_auth_object = nil)
12
13
  %w[id user_id code name address locale]
@@ -0,0 +1,24 @@
1
+ module Comee
2
+ module Core
3
+ class SupplierAddress < Address
4
+ belongs_to :supplier
5
+
6
+ validate :validate_default
7
+
8
+ def validate_default
9
+ return unless supplier && address_type && default
10
+
11
+ default_count = if new_record?
12
+ SupplierAddress.where(address_type: address_type, supplier: supplier, default: true).count
13
+ else
14
+ SupplierAddress.where(address_type: address_type, supplier: supplier, default: true)
15
+ .where.not(id: id).count
16
+ end
17
+
18
+ return if default_count.zero?
19
+
20
+ errors.add(:default, "cannot be set to true. There is already a default address for this supplier and address type.")
21
+ end
22
+ end
23
+ end
24
+ end
@@ -1,7 +1,9 @@
1
1
  module Comee
2
2
  module Core
3
3
  class AgentSerializer < ActiveModel::Serializer
4
- attributes :id, :name, :address, :email, :telephone
4
+ attributes :id, :name, :address_line1, :street, :city, :state, :country_id, :postal_code, :email, :telephone
5
+
6
+ belongs_to :country
5
7
  end
6
8
  end
7
9
  end
@@ -2,7 +2,7 @@ module Comee
2
2
  module Core
3
3
  class ClientAddressSerializer < ActiveModel::Serializer
4
4
  attributes :id, :name, :address_line1, :street, :city, :state, :country_id, :postal_code, :address_type,
5
- :client_id, :default
5
+ :email, :telephone, :client_id, :default
6
6
 
7
7
  belongs_to :client
8
8
  belongs_to :country
@@ -1,13 +1,14 @@
1
1
  module Comee
2
2
  module Core
3
3
  class ClientSerializer < ActiveModel::Serializer
4
- attributes :id, :code, :name, :match_code, :address, :locale, :user_id, :user_name, :parent_id, :consignees,
5
- :shipment_addresses, :tax_code, :vat_number, :currency, :print_details
4
+ attributes :id, :code, :name, :match_code, :locale, :user_id, :user_name, :parent_id, :consignees, :tax_code,
5
+ :vat_number, :currency, :print_details
6
6
  belongs_to :parent
7
7
  belongs_to :country
8
8
  has_many :agents
9
9
  has_many :contacts
10
10
  has_many :client_warehouses
11
+ has_many :client_addresses
11
12
  end
12
13
  end
13
14
  end
@@ -3,7 +3,7 @@ module Comee
3
3
  class CustomerOrderSerializer < ActiveModel::Serializer
4
4
  attributes :id, :order_number, :order_date, :order_terms, :consignee, :shipment_address, :final_destination,
5
5
  :final_delivery_date, :handover_date, :shipping_date, :delivery_address, :invoice_address, :status,
6
- :file_url
6
+ :consolidator_date, :voyage_no, :shipping_arrangement, :file_url
7
7
 
8
8
  belongs_to :client
9
9
  has_many :customer_order_items
@@ -1,7 +1,7 @@
1
1
  module Comee
2
2
  module Core
3
3
  class ProductLookupSerializer < ActiveModel::Serializer
4
- attributes :id, :code, :itemable_id, :itemable_type, :item_description
4
+ attributes :id, :code, :itemable_id, :itemable_type, :item_description, :aliases
5
5
  belongs_to :product
6
6
  end
7
7
  end
@@ -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, :created_at
7
+ :consolidator_date, :voyage_no, :shipping_arrangement, :remark, :created_by, :files_url, :created_at
8
8
  belongs_to :customer_order
9
9
  belongs_to :client
10
10
  belongs_to :fulfillment_center
@@ -0,0 +1,11 @@
1
+ module Comee
2
+ module Core
3
+ class SupplierAddressSerializer < ActiveModel::Serializer
4
+ attributes :id, :address_line1, :street, :city, :state, :country_id, :postal_code, :address_type, :email, :telephone,
5
+ :supplier_id, :default
6
+
7
+ belongs_to :supplier
8
+ belongs_to :country
9
+ end
10
+ end
11
+ end
@@ -1,8 +1,9 @@
1
1
  module Comee
2
2
  module Core
3
3
  class SupplierSerializer < ActiveModel::Serializer
4
- attributes :id, :code, :name, :address, :locale, :user_id, :payment_terms, :tax_code, :vat_number
4
+ attributes :id, :code, :name, :locale, :user_id, :payment_terms, :tax_code, :vat_number
5
5
  belongs_to :currency
6
+ has_many :supplier_addresses
6
7
  end
7
8
  end
8
9
  end
@@ -42,22 +42,27 @@ module Comee
42
42
  @package_type = packaging_types.count == 1 && packaging_types.first == "PX" ? "PX" : "PK"
43
43
  @total_weight = @line_items.sum do |line_item|
44
44
  if xml
45
- (line_item.quantity * line_item.product.weight).round(2)
45
+ xml_line = Comee::Core::ShipmentInstructionItem.where(shipment_item_id: Comee::Core::ShipmentItem
46
+ .find_by(sales_order_item_id: line_item.id).id).first
47
+ (xml_line.quantity * xml_line.weight).round(2)
46
48
  else
47
- (line_item.shipment_item.sales_order_item.quantity * line_item.shipment_item.sales_order_item.product.weight).round(2)
49
+ (line_item.quantity * line_item.weight).round(2)
48
50
  end
49
51
  end
50
52
 
51
53
  raise(StandardError, "No customs detail filed for sales order") unless @customs_details.present?
52
54
 
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]
55
+ @address = Comee::Core::ClientAddress.find(@customs_details[0].sales_order.delivery_address.to_i)
56
+ @customs_details[0].transportation_route.each_with_index do |tr, index|
57
+ if xml
58
+ @transportation_routes << tr["route"][0, 2]
59
+ else
60
+ @transportation_routes << tr["route"][0, 2] unless index.zero?
61
+ end
56
62
  end
57
63
 
58
64
  @data = xml ? generate_xml : prepare_data
59
65
  end
60
-
61
66
  xml ? @data : JSON(@data)
62
67
  end
63
68
 
@@ -73,10 +78,10 @@ module Comee
73
78
  position_items << {
74
79
  "warePositionsnummer": index + 1,
75
80
  "wareWarennummerKN8": si.sales_order_item.product.hs_code,
76
- "wareWarenbezeichnung": si.sales_order_item.product.hs_description,
81
+ "wareWarenbezeichnung": si.sales_order_item.product.customs_description,
77
82
  "wareRegistriernummerFremdsystem": customs_detail.sales_order.customer_order.order_number,
78
- "wareUrsprungsbundesland": mp.state_of_origin,
79
- "wareEigenmasse": si.sales_order_item.product.weight * si.sales_order_item.quantity,
83
+ "wareUrsprungsbundesland": mp.state_of_origin.split(" ")[0],
84
+ "wareEigenmasse": line_item.weight * line_item.quantity,
80
85
  "wareRohmasse": index.zero? ? @total_weight : 0,
81
86
  "ausfuhrLand": "DE",
82
87
  "ursprungsland": mp.country_of_origin.code,
@@ -85,7 +90,7 @@ module Comee
85
90
  "zusatzlichesVerfahren": "F61",
86
91
  "aussenhandelsstatistikMenge": si.sales_order_item.quantity,
87
92
  "aussenhandelsstatistikWert": (si.sales_order_item.quantity *
88
- si.sales_order_item.price * 1.05).round(2),
93
+ si.sales_order_item.price * 1.05).round(2).to_i,
89
94
  "packstuck": [
90
95
  {
91
96
  "packstuckNummer": index + 1,
@@ -119,17 +124,17 @@ module Comee
119
124
  "kopf": {
120
125
  "eoriNiederlassungsnummer": "DE47897410000",
121
126
  "artderAnmeldung": @customs_details[0].registration_type.split(" ")[0],
122
- "artderAnmeldungAusfuhr": @customs_details[0].export_declaration_type,
127
+ "artderAnmeldungAusfuhr": @customs_details[0].export_declaration_type.split(" ")[0],
123
128
  "ausfuhrLand": "DE",
124
129
  "beteiligtenKonstellation": @customs_details[0].participant_constellation.split(" ")[0],
125
130
  "sicherheit": @customs_details[0].registration_type.split(" ")[0] == "CO" ? 0 : 2,
126
131
  "container": @customs_details[0].containerized == true ? 1 : 0,
127
- "bestimmungsLand": @customs_details[0].destination_country,
132
+ "bestimmungsLand": @customs_details[0].destination_country.split(" ")[0],
128
133
  "referenznummerUCR": @customs_details.map(&:sales_order).map(&:customer_order).map(&:consignee).join(" "),
129
134
  "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,
135
+ "beforderungsmittelImInlandVerkehrszweig": @customs_details[0].mode_of_transport.split(" ")[0],
136
+ "beforderungsmittelderGrenzeVerkehrszweig": @customs_details[0].mode_of_transport_at_border.split(" ")[0],
137
+ "beforderungsmittelderGrenzeArt": @customs_details[0].mode_of_transport_type.split(" ")[0],
133
138
  "beforderungsmittelderGrenzeKennzeichen": "UNBEKANNT",
134
139
  "beforderungsmittelderGrenzeStaatszugehorigkeit": @customs_details[0].mode_of_transport_nationality.split(" ")[0],
135
140
  "gesamtRohmasse": @total_weight,
@@ -137,7 +142,7 @@ module Comee
137
142
  {
138
143
  "sequenznummer": "1",
139
144
  "artderIdentifikation": @customs_details[0].type_of_identification.split(" ")[0],
140
- "kennzeichen": @customs_details[0].additional_identifier.split(" ")[0],
145
+ "kennzeichen": "UNBEKANNT",
141
146
  "staatszugehorigkeit": @customs_details[0].nationality.split(" ")[0]
142
147
  }
143
148
  ],
@@ -148,17 +153,17 @@ module Comee
148
153
  "geschaftsvorgangWahrung": "EUR",
149
154
  "beforderungsroute": {
150
155
  "ausgewahlteLander": @transportation_routes,
151
- "beforderungsVon": @customs_details[0].transportation_route[0]["route"].split(" ")[0],
152
- "beforderungsBis": @customs_details[0].transportation_route[-1]["route"].split(" ")[0]
156
+ "beforderungsVon": "DE",
157
+ "beforderungsBis": @customs_details[0].destination_country.split(" ")[0]
153
158
  },
154
159
  "empfanger": {
155
160
  "tin": "",
156
161
  "niederlassungsNummer": "",
157
162
  "name": @customs_details[0].sales_order.customer_order.client.name,
158
- "strasse": @address[0],
159
- "plz": @address[-1],
160
- "ort": "#{@address[1].split(' ')[-3]} #{@address[1].split(' ')[-2]}",
161
- "land": @address[1].split(" ")[-1]
163
+ "strasse": @address.street,
164
+ "plz": @address.postal_code,
165
+ "ort": @address.city,
166
+ "land": @address.country.code
162
167
  },
163
168
  "warenortArtdesOrtes": "B",
164
169
  "warenortArtDerOrtsbestimmung": "Y",
@@ -194,10 +199,10 @@ module Comee
194
199
 
195
200
  xml.Position do
196
201
  xml.Positionsnummer (index + 1).to_s
197
- xml.Warenbezeichnung line_item.product.hs_description
202
+ xml.Warenbezeichnung line_item.product.customs_description
198
203
  xml.Registriernummer_Fremdsystem customs_detail.sales_order.customer_order.order_number
199
204
  xml.Kennnummer_der_Sendung @customs_details.map(&:sales_order).map(&:customer_order).map(&:consignee).join(" ")
200
- xml.Ursprungsbundesland mp.state_of_origin
205
+ xml.Ursprungsbundesland mp.state_of_origin.split(" ")[0]
201
206
  xml.Ursprungsland mp.country_of_origin.code
202
207
  xml.Eigenmasse line_item.product.weight * line_item.quantity
203
208
  xml.Rohmasse index.zero? ? @total_weight : 0
@@ -212,7 +217,7 @@ module Comee
212
217
  xml.Aussenhandelsstatistik do
213
218
  xml.Menge line_item.quantity
214
219
  xml.Wert (line_item.quantity *
215
- line_item.price * 1.05).round(2)
220
+ line_item.price * 1.05).round(2).to_i
216
221
  end
217
222
  xml.Vorpapier do
218
223
  xml.Typ
@@ -250,28 +255,28 @@ module Comee
250
255
  xml.Nachrichten_Typ "DEXPDF"
251
256
  xml.BEO_Atlas_KundenID
252
257
  xml.Anwendung
253
- xml.Name "Maveko_korrigiert"
258
+ xml.Name "MAVEKO"
254
259
  end
255
260
  xml.Kopf do
256
261
  xml.EORI_Number "DE47897410000"
257
- xml.Art_der_Ausfuhranmeldung @customs_details[0].export_declaration_type
262
+ xml.Art_der_Ausfuhranmeldung @customs_details[0].export_declaration_type.split(" ")[0]
258
263
  xml.Ausfuhrland "DE"
259
- xml.Bestimmungsland @customs_details[0].destination_country
264
+ xml.Bestimmungsland @customs_details[0].destination_country.split(" ")[0]
260
265
  xml.Container @customs_details[0].containerized == true ? 1 : 0
261
266
  xml.send("Beteiligten-Konstellation", @customs_details[0].participant_constellation.split(" ")[0])
262
267
  xml.send("Gesamt-Rohmasse", @total_weight)
263
268
  xml.Kennnummer_der_Sendung @customs_details.map(&:sales_order).map(&:customer_order).map(&:consignee).join(" ")
264
269
  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
270
+ xml.inlandischerVerkehrszweig @customs_details[0].mode_of_transport.split(" ")[0]
271
+ xml.verkehrszweigAnDerGrenze @customs_details[0].mode_of_transport_at_border.split(" ")[0]
267
272
  xml.Befoerderungsmittel_an_der_Grenze do
268
- xml.Art @customs_details[0].mode_of_transport_type
273
+ xml.Art @customs_details[0].mode_of_transport_type.split(" ")[0]
269
274
  xml.Kennzeichen "UNBEKANNT"
270
275
  end
271
276
  xml.Befoerderungsmittel_am_Abgang do
272
277
  xml.sequenznummer "1"
273
278
  xml.Art @customs_details[0].type_of_identification.split(" ")[0]
274
- xml.Kennzeichen @customs_details[0].additional_identifier.split(" ")[0]
279
+ xml.Kennzeichen "UNBEKANNT"
275
280
  xml.Staatszugehoerigkeit @customs_details[0].nationality.split(" ")[0]
276
281
  end
277
282
  xml.Ausfuhrzollstelle do
@@ -295,10 +300,10 @@ module Comee
295
300
  xml.TIN
296
301
  xml.Niederlassungsnummer
297
302
  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]
303
+ xml.Strasse @address.street
304
+ xml.PLZ @address.postal_code
305
+ xml.Ort @address.city
306
+ xml.Land @address.country.code
302
307
  end
303
308
  xml.Lieferbedingung do
304
309
  xml.send("Incoterm-Code", @customs_details[0].delivery_term_code[0, 3])
@@ -218,7 +218,8 @@ module Comee
218
218
  supplier_id: master_price.supplier_id,
219
219
  supplier_name: master_price.supplier.name,
220
220
  supplier_item_no: product_lookup.code,
221
- supplier_description: product_lookup.item_description
221
+ supplier_description: product_lookup.item_description,
222
+ country_of_origin: master_price.country_of_origin.name
222
223
  }
223
224
  }
224
225
  end
data/config/routes.rb CHANGED
@@ -12,11 +12,18 @@ Comee::Core::Engine.routes.draw do
12
12
  end
13
13
  end
14
14
  resources :contacts
15
+
16
+ resources :supplier_addresses
15
17
  resources :suppliers do
16
18
  collection do
17
19
  post "filter"
18
20
  end
21
+
22
+ member do
23
+ get "addresses", controller: :supplier_addresses, action: :index
24
+ end
19
25
  end
26
+
20
27
  resources :products do
21
28
  collection do
22
29
  post "master_prices"
@@ -0,0 +1,23 @@
1
+ class CreateComeeCoreSupplierAddresses < ActiveRecord::Migration[7.1]
2
+ def change
3
+ create_table :comee_core_supplier_addresses do |t|
4
+ t.references :supplier,
5
+ null: false,
6
+ index: {name: "supplier_on_ccsa_indx"},
7
+ foreign_key: {to_table: :comee_core_suppliers}
8
+ t.string :address_line1, null: false
9
+ t.string :street
10
+ t.string :city
11
+ t.string :state
12
+ t.references :country,
13
+ null: false,
14
+ index: {name: "country_on_ccsa_indx"},
15
+ foreign_key: {to_table: :comee_core_lookups}
16
+ t.string :postal_code
17
+ t.string :address_type, null: false
18
+ t.boolean :default, default: false
19
+
20
+ t.timestamps
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,7 @@
1
+ class RemoveAddressFieldFromSupplierAndClient < ActiveRecord::Migration[7.1]
2
+ def change
3
+ remove_column :comee_core_clients, :address, :string
4
+ remove_column :comee_core_suppliers, :address, :string
5
+ remove_column :comee_core_clients, :shipment_addresses, array: true
6
+ end
7
+ end
@@ -0,0 +1,10 @@
1
+ class AddAdditionalFieldsToOrder < ActiveRecord::Migration[7.1]
2
+ def change
3
+ add_column :comee_core_customer_orders, :consolidator_date, :date
4
+ add_column :comee_core_sales_orders, :consolidator_date, :date
5
+ add_column :comee_core_customer_orders, :voyage_no, :string
6
+ add_column :comee_core_sales_orders, :voyage_no, :string
7
+ add_column :comee_core_customer_orders, :shipping_arrangement, :integer
8
+ add_column :comee_core_sales_orders, :shipping_arrangement, :integer
9
+ end
10
+ end
@@ -0,0 +1,8 @@
1
+ class AddTelephoneAndEmailToAddress < ActiveRecord::Migration[7.1]
2
+ def change
3
+ add_column :comee_core_client_addresses, :telephone, :string
4
+ add_column :comee_core_supplier_addresses, :telephone, :string
5
+ add_column :comee_core_client_addresses, :email, :string
6
+ add_column :comee_core_supplier_addresses, :email, :string
7
+ end
8
+ end
@@ -0,0 +1,14 @@
1
+ class AddMoreAddressFieldsToAgent < ActiveRecord::Migration[7.1]
2
+ def change
3
+ remove_column :comee_core_agents, :address, :string
4
+ add_column :comee_core_agents, :address_line1, :string
5
+ add_column :comee_core_agents, :street, :string
6
+ add_column :comee_core_agents, :city, :string
7
+ add_column :comee_core_agents, :state, :string
8
+ add_reference :comee_core_agents,
9
+ :country,
10
+ index: {name: "country_on_cca_indx"},
11
+ foreign_key: {to_table: :comee_core_lookups}
12
+ add_column :comee_core_agents, :postal_code, :string
13
+ end
14
+ end
@@ -0,0 +1,5 @@
1
+ class AddVatToSalesOrders < ActiveRecord::Migration[7.1]
2
+ def change
3
+ add_column :comee_core_sales_orders, :vat, :float, default: 0
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class AddAliasesFieldToProductLookup < ActiveRecord::Migration[7.1]
2
+ def change
3
+ add_column :comee_core_product_lookups, :aliases, :string
4
+ end
5
+ end
@@ -0,0 +1,8 @@
1
+ class AddAgentToPickupSchedule < ActiveRecord::Migration[7.1]
2
+ def change
3
+ add_reference :comee_core_pickup_schedules,
4
+ :agent,
5
+ index: {name: "agent_on_ccps_indx"},
6
+ foreign_key: {to_table: :comee_core_agents}
7
+ end
8
+ end
@@ -1,5 +1,5 @@
1
1
  module Comee
2
2
  module Core
3
- VERSION = "0.3.4".freeze
3
+ VERSION = "0.3.6".freeze
4
4
  end
5
5
  end
@@ -1,8 +1,13 @@
1
1
  FactoryBot.define do
2
2
  factory :agent, class: "Comee::Core::Agent" do
3
3
  name { Faker::Name.name }
4
- address { Faker::Address.full_address }
5
- email { Faker::Internet.email }
4
+ address_line1 { Faker::Address.street_address }
5
+ street { Faker::Address.street_name }
6
+ city { Faker::Address.city }
7
+ state { Faker::Address.state }
8
+ country
9
+ postal_code { Faker::Address.postcode }
6
10
  telephone { Faker::PhoneNumber.phone_number }
11
+ email { Faker::Internet.email }
7
12
  end
8
13
  end
@@ -8,6 +8,8 @@ FactoryBot.define do
8
8
  state { Faker::Address.state }
9
9
  country
10
10
  postal_code { Faker::Address.postcode }
11
+ telephone { Faker::PhoneNumber.phone_number }
12
+ email { Faker::Internet.email }
11
13
  address_type { Comee::Core::ClientAddress::SHIPPING_ADDRESS }
12
14
  default { false }
13
15
  end
@@ -4,13 +4,12 @@ FactoryBot.define do
4
4
  sequence(:code) { |n| "#{Faker::Alphanumeric.unique.alpha(number: 8)}-#{n}" }
5
5
  name { Faker::Name.name }
6
6
  match_code { Faker::Name.name }
7
- address { Faker::Address.full_address }
8
7
  locale { "en" }
9
8
  parent { nil }
10
9
  consignees { [] }
11
- shipment_addresses { [] }
12
10
  currency
13
11
  subsidiary { false }
12
+ tax_code { "Inland" }
14
13
  print_details { false }
15
14
  end
16
15
  end
@@ -13,5 +13,8 @@ FactoryBot.define do
13
13
  delivery_address { Faker::Address.full_address }
14
14
  invoice_address { Faker::Address.full_address }
15
15
  status { 0 }
16
+ consolidator_date { Date.current }
17
+ voyage_no { Faker::Alphanumeric.alpha(number: 10) }
18
+ shipping_arrangement { Comee::Core::CustomerOrder.shipping_arrangements[:own] }
16
19
  end
17
20
  end
@@ -6,5 +6,6 @@ FactoryBot.define do
6
6
  truck_no { Faker::Alphanumeric.alpha(number: 10) }
7
7
  driver_license_no { Faker::Alphanumeric.alpha(number: 10) }
8
8
  plate_no { Faker::Alphanumeric.alpha(number: 10) }
9
+ agent
9
10
  end
10
11
  end
@@ -4,5 +4,6 @@ FactoryBot.define do
4
4
  product
5
5
  itemable factory: :supplier
6
6
  item_description { Faker::Lorem.sentence }
7
+ aliases { nil }
7
8
  end
8
9
  end
@@ -19,6 +19,9 @@ FactoryBot.define do
19
19
  delivery_term { Faker::Lorem.sentence }
20
20
  payment_penalty { 0 }
21
21
  status { Comee::Core::SalesOrder.statuses[:draft] }
22
+ consolidator_date { Date.current }
23
+ voyage_no { Faker::Alphanumeric.alpha(number: 10) }
24
+ shipping_arrangement { Comee::Core::SalesOrder.shipping_arrangements[:own] }
22
25
  purchase_status { Comee::Core::SalesOrder.purchase_statuses[:unprocessed] }
23
26
  total_price { 0 }
24
27
  amount_paid { 0 }
@@ -0,0 +1,15 @@
1
+ FactoryBot.define do
2
+ factory :supplier_address, class: "Comee::Core::SupplierAddress" do
3
+ supplier
4
+ address_line1 { Faker::Address.street_address }
5
+ street { Faker::Address.street_name }
6
+ city { Faker::Address.city }
7
+ state { Faker::Address.state }
8
+ country
9
+ postal_code { Faker::Address.postcode }
10
+ telephone { Faker::PhoneNumber.phone_number }
11
+ email { Faker::Internet.email }
12
+ address_type { Comee::Core::SupplierAddress::BASIC_ADDRESS }
13
+ default { false }
14
+ end
15
+ end
@@ -2,7 +2,6 @@ FactoryBot.define do
2
2
  factory :supplier, class: "Comee::Core::Supplier" do
3
3
  sequence(:code) { |n| "#{Faker::Alphanumeric.alpha(number: 8)}-#{n}" }
4
4
  name { Faker::Name.name }
5
- address { Faker::Address.full_address }
6
5
  locale { "en" }
7
6
  payment_terms { Faker::Lorem.word }
8
7
  vat_number { Faker::Alphanumeric.alpha(number: 8) }
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.4
4
+ version: 0.3.6
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-29 00:00:00.000000000 Z
11
+ date: 2024-06-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: active_model_serializers
@@ -310,6 +310,7 @@ files:
310
310
  - app/controllers/comee/core/stock_transfer_requests_controller.rb
311
311
  - app/controllers/comee/core/store_items_controller.rb
312
312
  - app/controllers/comee/core/stores_controller.rb
313
+ - app/controllers/comee/core/supplier_addresses_controller.rb
313
314
  - app/controllers/comee/core/suppliers_controller.rb
314
315
  - app/controllers/comee/core/unit_conversions_controller.rb
315
316
  - app/controllers/comee/core/units_controller.rb
@@ -322,6 +323,7 @@ files:
322
323
  - app/mailers/comee/core/notification_mailer.rb
323
324
  - app/mailers/comee/core/supplier_mailer.rb
324
325
  - app/models/comee/core/additional_item.rb
326
+ - app/models/comee/core/address.rb
325
327
  - app/models/comee/core/agent.rb
326
328
  - app/models/comee/core/application_module.rb
327
329
  - app/models/comee/core/application_record.rb
@@ -382,6 +384,7 @@ files:
382
384
  - app/models/comee/core/store.rb
383
385
  - app/models/comee/core/store_item.rb
384
386
  - app/models/comee/core/supplier.rb
387
+ - app/models/comee/core/supplier_address.rb
385
388
  - app/models/comee/core/supplier_invoice.rb
386
389
  - app/models/comee/core/supplier_payment.rb
387
390
  - app/models/comee/core/time_slot.rb
@@ -425,6 +428,7 @@ files:
425
428
  - app/serializers/comee/core/stock_transfer_request_serializer.rb
426
429
  - app/serializers/comee/core/store_item_serializer.rb
427
430
  - app/serializers/comee/core/store_serializer.rb
431
+ - app/serializers/comee/core/supplier_address_serializer.rb
428
432
  - app/serializers/comee/core/supplier_serializer.rb
429
433
  - app/serializers/comee/core/unit_conversion_serializer.rb
430
434
  - app/serializers/comee/core/unit_serializer.rb
@@ -516,6 +520,14 @@ files:
516
520
  - db/migrate/20240407083617_create_comee_core_email_settings.rb
517
521
  - db/migrate/20240503040722_create_comee_core_client_addresses.rb
518
522
  - db/migrate/20240628205454_add_print_details_field_to_customer.rb
523
+ - db/migrate/20240629044824_create_comee_core_supplier_addresses.rb
524
+ - db/migrate/20240629065810_remove_address_field_from_supplier_and_client.rb
525
+ - db/migrate/20240629135249_add_additional_fields_to_order.rb
526
+ - db/migrate/20240629145738_add_telephone_and_email_to_address.rb
527
+ - db/migrate/20240629160357_add_more_address_fields_to_agent.rb
528
+ - db/migrate/20240629170409_add_vat_to_sales_orders.rb
529
+ - db/migrate/20240630063656_add_aliases_field_to_product_lookup.rb
530
+ - db/migrate/20240630083042_add_agent_to_pickup_schedule.rb
519
531
  - lib/comee/core.rb
520
532
  - lib/comee/core/engine.rb
521
533
  - lib/comee/core/version.rb
@@ -579,6 +591,7 @@ files:
579
591
  - spec/factories/comee/core/stock_transfer_requests.rb
580
592
  - spec/factories/comee/core/store_items.rb
581
593
  - spec/factories/comee/core/stores.rb
594
+ - spec/factories/comee/core/supplier_addresses.rb
582
595
  - spec/factories/comee/core/supplier_invoices.rb
583
596
  - spec/factories/comee/core/supplier_payments.rb
584
597
  - spec/factories/comee/core/suppliers.rb