# frozen_string_literal: true Eancom::Definition.create(name: 'D96A', type: :desadv) do |document, config| document.header do |header| header.segment Eancom::Edifact::UNB.new( syntax_identifier: 'UNOA', syntax_version_number: '2', interchange_sender_identification: config.header.interchange_sender_identification, sender_identifiction_code_qualifier: config.header.sender_identification_code_qualifier || '14', interchange_recipient_identification: config.header.interchange_recipient_identification, 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 ) 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 document.body do |body| messages = config.body.messages messages.each do |message| body.segment Eancom::Edifact::BGM.new( document_name_code: '351', document_identifier: message.document_identifier, message_function_code: '9' ) # Document Date body.segment Eancom::Edifact::DTM.new( type: '137', date_time: message.document_message_date_time.date_time, format: '102' ) # Shipping Date body.segment Eancom::Edifact::DTM.new( type: '11', date_time: message.despatch_date_and_or_time.date_time, format: '102' ) # 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 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 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' ) end 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 # 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 # 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 # 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 # Delivery Note Mode body.segment Eancom::Edifact::CPS.new( hierarchical_structure_level_identifier: '1' ) # 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 ) # Total Quantity body.segment Eancom::Edifact::CNT.new( control_total_type_code_quantifier: '1', control_total_value: total_quantity.to_s ) end 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 ) end document.footer do |footer| footer.segment Eancom::Edifact::UNZ.new( interchange_control_count: '1', interchange_control_reference: config.header.interchange_control_reference.to_s ) end end