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