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