definitions/desadv/d96a.rb in eancom-0.1.0 vs definitions/desadv/d96a.rb in eancom-1.1.0
- old
+ new
@@ -1,106 +1,141 @@
-Eancom::Definition.create(name: 'd96a', type: :desadv) do |document, config|
- document.envelope do |envelope|
- envelope.segment "UNA:+.? '"
- envelope.segment "UNB" do |segment|
- segment.composite "UNOC:3"
- segment.composite "#{config.sender_iln}:14"
- segment.composite "#{config.receiver_iln}:14"
- segment.composite Time.now.strftime("%y%m%d:%H%M")
- segment.composite "#{config.build_id}"
- segment.composite
- segment.composite "DESADV"
- segment.composite
- segment.composite
- segment.composite "EANCOM"
- end
- end
+Eancom::Definition.create(name: 'D96A', type: :desadv) do |document, config|
+ document.header do |header|
+ header.segment Eancom::Edifact::UNA.new()
- document.message "UHN" do |message|
+ header.segment Eancom::Edifact::UNB.new(
+ syntax_identifier: 'UNOC',
+ syntax_version_number: '3',
+ interchange_sender_identification: config.header.interchange_sender_identification,
+ sender_identifiction_code_qualifier: '14',
+ interchange_recipient_identification: config.header.interchange_recipient_identification,
+ recipient_identifiction_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'
+ )
- # Message ID
- message.composite "1" # Message ID
- message.composite "DESADV:D:96A:UN:EAN005"
+ header.segment Eancom::Edifact::UNH.new(
+ message_reference_number: config.header.message_reference_number,
+ message_type: config.header.message_type,
+ message_version_number: config.header.message_version_number,
+ message_release_number: config.header.message_release_number,
+ controlling_agency: config.header.controlling_agency,
+ association_assigned_code: config.header.association_assigned_code
+ )
+ end
- message.segment "BGM" do |segment|
- segment.composite "351"
- segment.composite "#{config.delivery_note_id}"
- segment.composite "9"
- 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'
+ )
# Document Date
- message.segment "DTM" do |segment|
- segment.composite "137:#{Time.now.strftime("%Y%m%d")}:102"
- end
+ body.segment Eancom::Edifact::DTM.new(
+ type: '137',
+ date_time: config.body.document_message_date_time,
+ format: '102'
+ )
# Shipping Date
- message.segment "DTM" do |segment|
- segment.composite "11:#{Time.now.strftime("%Y%m%d")}:102"
- end
+ body.segment Eancom::Edifact::DTM.new(
+ type: '11',
+ date_time: config.body.despatch_date_and_or_time,
+ format: '102'
+ )
# Order Reference
- message.segment "RFF" do |segment|
- segment.composite "VN:#{config.order_id}"
- end
+ body.segment Eancom::Edifact::RFF.new(
+ reference_code_qualifier: 'VN',
+ reference_identifier: config.body.document_identifier
+ )
# Sender ILN
- message.segment "NAD" do |segment|
- segment.composite "SU"
- segment.composite "#{config.sender_iln}::9"
- end
+ 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'
+ )
# Manufacturer ILN
- message.segment "NAD" do |segment|
- segment.composite "MF"
- segment.composite "#{config.sender_iln}::9"
- end
+ 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'
+ )
# Reciver ILN
- message.segment "NAD" do |segment|
- segment.composite "BY"
- segment.composite "#{config.receiver_iln}::9"
- end
+ 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'
+ )
# Destination ILN
- message.segment "NAD" do |segment|
- segment.composite "DP"
- segment.composite "#{config.receiver_iln}::9"
- end
+ 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'
+ )
# Final Recipient ILN
- message.segment "NAD" do |segment|
- segment.composite "UC"
- segment.composite "#{config.receiver_iln}::9"
- end
+ 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'
+ )
# Delivery Note Mode
- message.segment "CPS" do |segment|
- segment.composite "1"
- end
+ body.segment Eancom::Edifact::CPS.new(
+ hierarchical_structure_level_identifier: '1'
+ )
# Items
total_quantity = 0
- config.items.each_with_index do |item, index|
+
+ items = config.body.items
+
+ items.each_with_index do |item, index|
total_quantity += item.quantity.to_i
- message.segment "LIN" do |segment|
- segment.composite "#{index+1}"
- segment.composite
- segment.composite "#{item.ean}:EN"
- end
+ body.segment Eancom::Edifact::LIN.new(
+ line_item_identifier_1: "#{index + 1}",
+ item_identifier: item.ean,
+ item_type_identification_code: 'SRV'
+ )
- message.segment "QTY" do |segment|
- segment.composite "12:#{item.quantity}:PCE"
- end
+ body.segment Eancom::Edifact::QTY.new(
+ quantity_type_code_qualifier: '12',
+ quantity: "#{item.quantity}"
+ )
end
# Total Quantity
- message.segment "CNT" do |segment|
- segment.composite "1:#{total_quantity}"
- end
+ body.segment Eancom::Edifact::CNT.new(
+ control_total_type_code_quantifier: '1',
+ control_total_value: "#{total_quantity}"
+ )
# Position Count
- message.segment "CNT" do |segment|
- segment.composite "2:#{config.items.count}"
- end
+ 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}"
+ )
+ end
+
end