definitions/desadv/d96a.rb in eancom-1.4.0 vs definitions/desadv/d96a.rb in eancom-1.5.0
- old
+ new
@@ -1,21 +1,19 @@
+# frozen_string_literal: true
+
Eancom::Definition.create(name: 'D96A', type: :desadv) do |document, config|
document.header do |header|
- header.segment Eancom::Edifact::UNA.new()
-
header.segment Eancom::Edifact::UNB.new(
- syntax_identifier: 'UNOC',
- syntax_version_number: '3',
+ syntax_identifier: 'UNOA',
+ syntax_version_number: '2',
interchange_sender_identification: config.header.interchange_sender_identification,
- sender_identifiction_code_qualifier: '14',
+ sender_identifiction_code_qualifier: config.header.sender_identification_code_qualifier || '14',
interchange_recipient_identification: config.header.interchange_recipient_identification,
- recipient_identifiction_code_qualifier: '14',
+ recipient_identifiction_code_qualifier: config.header.recipient_identification_code_qualifier || '14',
date: config.header.date,
time: config.header.time,
- interchange_control_reference: config.header.interchange_control_reference,
- application_reference: 'DESADV',
- interchange_agreement_identifier: 'EANCOM'
+ interchange_control_reference: config.header.interchange_control_reference
)
header.segment Eancom::Edifact::UNH.new(
message_reference_number: config.header.message_reference_number,
message_type: config.header.message_type,
@@ -25,117 +23,142 @@
association_assigned_code: config.header.association_assigned_code
)
end
document.body do |body|
- body.segment Eancom::Edifact::BGM.new(
- document_name_code: '351',
- document_identifier: config.body.document_identifier,
- message_function_code: '9'
- )
+ messages = config.body.messages
- # Document Date
- body.segment Eancom::Edifact::DTM.new(
- type: '137',
- date_time: config.body.document_message_date_time,
- format: '102'
- )
+ messages.each do |message|
+ body.segment Eancom::Edifact::BGM.new(
+ document_name_code: '351',
+ document_identifier: message.document_identifier,
+ message_function_code: '9'
+ )
- # Shipping Date
- body.segment Eancom::Edifact::DTM.new(
- type: '11',
- date_time: config.body.despatch_date_and_or_time,
- format: '102'
- )
+ # Document Date
+ body.segment Eancom::Edifact::DTM.new(
+ type: '137',
+ date_time: message.document_message_date_time.date_time,
+ format: '102'
+ )
- # Order Reference
- body.segment Eancom::Edifact::RFF.new(
- reference_code_qualifier: 'VN',
- reference_identifier: config.body.document_identifier
- )
+ # Shipping Date
+ body.segment Eancom::Edifact::DTM.new(
+ type: '11',
+ date_time: message.despatch_date_and_or_time.date_time,
+ format: '102'
+ )
- # Sender ILN
- body.segment Eancom::Edifact::NAD.new(
- party_function_code_qualifier: 'SU',
- party_identifier: config.header.interchange_sender_identification,
- code_list_responsible_agancy_code_1: '9'
- )
+ # Order Reference
+ if order_number_buyer = message.order_number_buyer
+ body.segment Eancom::Edifact::RFF.new(
+ reference_code_qualifier: 'ON',
+ reference_identifier: order_number_buyer.reference_identifier
+ )
+ end
- # Manufacturer ILN
- body.segment Eancom::Edifact::NAD.new(
- party_function_code_qualifier: 'MF',
- party_identifier: config.header.interchange_sender_identification,
- code_list_responsible_agancy_code_1: '9'
- )
+ if order_number_supplier = message.order_number_supplier
+ body.segment Eancom::Edifact::RFF.new(
+ reference_code_qualifier: 'VN',
+ reference_identifier: order_number_supplier.reference_identifier
+ )
+ end
- # Reciver ILN
- body.segment Eancom::Edifact::NAD.new(
- party_function_code_qualifier: 'BY',
- party_identifier: config.header.interchange_recipient_identification,
- code_list_responsible_agancy_code_1: '9'
- )
+ if (supplier = message.supplier)
+ # Sender ILN
+ body.segment Eancom::Edifact::NAD.new(
+ party_function_code_qualifier: 'SU',
+ party_identifier: supplier.party_identifier,
+ code_list_responsible_agancy_code_1: '9'
+ )
- # Destination ILN
- body.segment Eancom::Edifact::NAD.new(
- party_function_code_qualifier: 'DP',
- party_identifier: config.header.interchange_recipient_identification,
- code_list_responsible_agancy_code_1: '9'
- )
+ end
- # Final Recipient ILN
- body.segment Eancom::Edifact::NAD.new(
- party_function_code_qualifier: 'UC',
- party_identifier: config.header.interchange_recipient_identification,
- code_list_responsible_agancy_code_1: '9'
- )
+ if (manufacturer = message.manufacturer)
+ # Manufacturer ILN
+ body.segment Eancom::Edifact::NAD.new(
+ party_function_code_qualifier: 'MF',
+ party_identifier: manufacturer.party_identifier,
+ code_list_responsible_agancy_code_1: '9'
+ )
+ end
- # Delivery Note Mode
- body.segment Eancom::Edifact::CPS.new(
- hierarchical_structure_level_identifier: '1'
- )
+ # Reciver ILN
+ if (buyer = message.buyer)
+ body.segment Eancom::Edifact::NAD.new(
+ party_function_code_qualifier: 'BY',
+ party_identifier: buyer.party_identifier,
+ code_list_responsible_agancy_code_1: '9'
+ )
+ end
- # Items
- total_quantity = 0
+ # Delivery Party ILN
+ if (delivery_party = message.delivery_party)
+ body.segment Eancom::Edifact::NAD.new(
+ party_function_code_qualifier: 'DP',
+ party_identifier: delivery_party.party_identifier,
+ code_list_responsible_agancy_code_1: '9'
+ )
+ end
- items = config.body.items
+ # Final Recipient ILN
+ if (ultimate_consignee = message.ultimate_consignee)
+ body.segment Eancom::Edifact::NAD.new(
+ party_function_code_qualifier: 'UC',
+ party_identifier: ultimate_consignee.party_identifier,
+ code_list_responsible_agancy_code_1: '9'
+ )
+ end
- items.each_with_index do |item, index|
- total_quantity += item.quantity.to_i
+ # Delivery Note Mode
+ body.segment Eancom::Edifact::CPS.new(
+ hierarchical_structure_level_identifier: '1'
+ )
- body.segment Eancom::Edifact::LIN.new(
- line_item_identifier_1: "#{index + 1}",
- item_identifier: item.ean,
- item_type_identification_code: 'SRV'
+ # Items
+ total_quantity = 0
+
+ items = message.items
+
+ items.each_with_index do |item, _index|
+ dispatch_quantity = item.despatch_quantity
+ total_quantity += dispatch_quantity.quantity.to_i
+
+ body.segment Eancom::Edifact::LIN.new(
+ line_item_identifier_1: item.line_item_identifier_1.to_s,
+ item_identifier: item.ean,
+ item_type_identification_code: 'EN'
+ )
+
+ body.segment Eancom::Edifact::QTY.new(
+ quantity_type_code_qualifier: '12',
+ quantity: dispatch_quantity.quantity.to_s,
+ measurement_unit_code: 'PCE'
+ )
+ end
+
+ # Position Count
+ body.segment Eancom::Edifact::CNT.new(
+ control_total_type_code_quantifier: '2',
+ control_total_value: items.count.to_s
)
- body.segment Eancom::Edifact::QTY.new(
- quantity_type_code_qualifier: '12',
- quantity: "#{item.quantity}"
+ # Total Quantity
+ body.segment Eancom::Edifact::CNT.new(
+ control_total_type_code_quantifier: '1',
+ control_total_value: total_quantity.to_s
)
end
- # Total Quantity
- body.segment Eancom::Edifact::CNT.new(
- control_total_type_code_quantifier: '1',
- control_total_value: "#{total_quantity}"
+ body.segment Eancom::Edifact::UNT.new(
+ number_of_segments_in_message: (document.total_segments + 2).to_s,
+ message_reference_number: config.header.interchange_control_reference.to_s
)
-
- # Position Count
- body.segment Eancom::Edifact::CNT.new(
- control_total_type_code_quantifier: '2',
- control_total_value: "#{items.count}"
- )
end
document.footer do |footer|
- footer.segment Eancom::Edifact::UNT.new(
- number_of_segments_in_message: "#{document.total_segments}",
- message_reference_number: '1'
- )
-
footer.segment Eancom::Edifact::UNZ.new(
interchange_control_count: '1',
- interchange_control_reference: "#{config.body.document_identifier}"
+ interchange_control_reference: config.header.interchange_control_reference.to_s
)
end
-
end