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,
)