Eancom::Definition.create(name: 'D01B', type: :slsrpt) 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', interchange_sender_identification: config.header.interchange_sender_identification, sender_identifiction_code_qualifier: config.header.sender_identifiction_code_qualifier || '14', interchange_recipient_identification: config.header.interchange_recipient_identification, recipient_identifiction_code_qualifier: config.header.recipient_identifiction_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 messages = config.body.messages messages.each do |message| body.segment Eancom::Edifact::BGM.new( document_name_code: '73E', code_list_identification_code: '', code_list_responsible_agency_code: '9', 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' ) # Report Start Date if date_time = message.report_start_date.date_time body.segment Eancom::Edifact::DTM.new( type: '90', date_time: date_time, format: '102' ) end # Report End Date if date_time = message.report_end_date.date_time body.segment Eancom::Edifact::DTM.new( type: '91', date_time: date_time, format: '102' ) end # Supplier if supplier = message.supplier code_list_responsible_agency_code_1 = if supplier.code_list_responsible_agancy_code_1 structure = Eancom.find_structure(tag: 'NAD') structure.dictionary_lookup( :code_list_responsible_agancy_code_1, supplier.code_list_responsible_agancy_code_1 ) else '9' end body.segment Eancom::Edifact::NAD.new( party_function_code_qualifier: 'SU', party_identifier: supplier.party_identifier, code_list_responsible_agancy_code_1: code_list_responsible_agency_code_1 ) end # Buyer if buyer = message.buyer code_list_responsible_agency_code_1 = if buyer.code_list_responsible_agancy_code_1 structure = Eancom.find_structure(tag: 'NAD') structure.dictionary_lookup( :code_list_responsible_agancy_code_1, buyer.code_list_responsible_agancy_code_1 ) else '9' end body.segment Eancom::Edifact::NAD.new( party_function_code_qualifier: 'BY', party_identifier: buyer.party_identifier, code_list_responsible_agancy_code_1: code_list_responsible_agency_code_1 ) end # Reference Currency if currency = message.currency body.segment Eancom::Edifact::CUX.new( currency_identification_code_1: currency.currency_identification_code_1, currency_type_code_qualifier_1: '10', currency_usage_code_qualifier_1: '2' ) end # Location if location = message.location code_list_responsible_agency_code = if location.code_list_responsible_agancy_code structure = Eancom.find_structure(tag: 'LOC') structure.dictionary_lookup( :code_list_responsible_agancy_code, location.code_list_responsible_agancy_code ) else '9' end body.segment Eancom::Edifact::LOC.new( code_list_identification_code: location.code_list_identification_code, code_list_responsible_agancy_code: code_list_responsible_agency_code, location_function_qualifier: '162', location_name_code: location.location_name_code ) end # Sales Date if date_time = message.sales_date_and_or_time_and_or_period.date_time body.segment Eancom::Edifact::DTM.new( type: '356', date_time: date_time, format: '102' ) end # Items total_quantity = 0 items = message.items items.each_with_index do |item, index| total_quantity += item.quantity.to_i body.segment Eancom::Edifact::LIN.new( line_item_identifier_1: "#{index + 1}", item_identifier: item.ean, item_type_identification_code: 'SRV' ) if transaction_reference_number = item.transaction_reference_number body.segment Eancom::Edifact::RFF.new( reference_code_qualifier: 'TN', reference_identifier: transaction_reference_number.reference_identifier ) end prices = item.prices prices.each do |price| if price = price.price structure = Eancom.find_structure(tag: 'PRI') body.segment Eancom::Edifact::PRI.new( price_amount: price.price_amount, price_code_qualifier: structure.dictionary_lookup(:price_code_qualifier, price.price_code_qualifier), price_specification_code: structure.dictionary_lookup(:price_specification_code, price.price_specification_code), price_type_code: price.price_type_code ) end end # Quantity if statistical_sales_quantitiy = item.statistical_sales_quantitiy body.segment Eancom::Edifact::QTY.new( quantity_type_code_qualifier: '153', quantity: statistical_sales_quantitiy.quantity ) end end body.segment Eancom::Edifact::UNT.new( number_of_segments_in_message: "#{document.total_segments + 2}", message_reference_number: config.header.message_reference_number, ) end document.footer do |footer| footer.segment Eancom::Edifact::UNZ.new( interchange_control_count: '1', interchange_control_reference: "#{config.header.interchange_control_reference}" ) end end end