definitions/slsrpt/d96a.rb in eancom-1.5.7 vs definitions/slsrpt/d96a.rb in eancom-1.6.0

- old
+ new

@@ -104,80 +104,82 @@ 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: '150', - location_name_code: location.location_name_code - ) - end + item_counter = 0 - # 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: '203' - ) - end + message.locations.each do |location_group| - # Items - total_quantity = 0 + # Location + if location = location_group.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: '150', + location_name_code: location.location_name_code + ) + end - items = message.items + # Sales Date + if date_time = location_group.sales_date_and_or_time_and_or_period&.date_time + body.segment Eancom::Edifact::DTM.new( + type: '356', + date_time: date_time, + format: '203' + ) + end - items.each_with_index do |item, index| - total_quantity += item.quantity.to_i + # Items + location_group.items.each do |item| + item_counter += 1 - body.segment Eancom::Edifact::LIN.new( - line_item_identifier_1: "#{index + 1}", - item_identifier: item.ean, - item_type_identification_code: 'EN' - ) - - 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 + body.segment Eancom::Edifact::LIN.new( + line_item_identifier_1: item_counter.to_s, + item_identifier: item.ean, + item_type_identification_code: 'EN' ) - 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 + 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 - end - # Quantity - if minimum_production_batch = item.minimum_production_batch - body.segment Eancom::Edifact::QTY.new( - quantity_type_code_qualifier: '160', - quantity: minimum_production_batch.quantity, - measurement_unit_code: 'PCE' - ) + 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 minimum_production_batch = item.minimum_production_batch + body.segment Eancom::Edifact::QTY.new( + quantity_type_code_qualifier: '160', + quantity: minimum_production_batch.quantity, + measurement_unit_code: 'PCE' + ) + end 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, )