definitions/slsrpt/d01b.rb in eancom-1.6.3 vs definitions/slsrpt/d01b.rb in eancom-2.0.0
- old
+ new
@@ -1,19 +1,19 @@
Eancom::Definition.create(name: 'D01B', type: :slsrpt) do |document, config|
document.header do |header|
- header.segment Eancom::Edifact::UNA.new()
+ 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',
+ sender_identifiction_code_qualifier: '14',
interchange_recipient_identification: config.header.interchange_recipient_identification,
- recipient_identifiction_code_qualifier: config.header.recipient_identifiction_code_qualifier || '14',
+ recipient_identifiction_code_qualifier: '14',
date: config.header.date,
time: config.header.time,
- interchange_control_reference: config.header.interchange_control_reference,
+ 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,
@@ -23,180 +23,184 @@
association_assigned_code: config.header.association_assigned_code
)
end
document.body do |body|
-
- # Messages
messages = config.body.messages
messages.each do |message|
-
+ code_list_identification_code = if message.code_list_identification_code.nil?
+ ''
+ else
+ message.code_list_identification_code
+ end
body.segment Eancom::Edifact::BGM.new(
- document_name_code: '73E',
- code_list_identification_code: '',
+ document_name_code: message.document_name_code,
+ code_list_identification_code: code_list_identification_code,
code_list_responsible_agency_code: '9',
document_identifier: message.document_identifier,
- message_function_code: '9'
+ message_function_code: message.message_function_code
)
- # Document Date
- body.segment Eancom::Edifact::DTM.new(
- type: '137',
- date_time: message.document_message_date_time.date_time,
- format: '102'
- )
+ date_time_messages = message.date_time_messages
+ date_time_messages.each_with_index do |dtm, index|
+ next unless index == 0
- # Report Start Date
- if date_time = message.report_start_date.date_time
+ structure = Eancom.find_structure(tag: 'DTM')
+ key = dtm.identifier.intern.to_sym
body.segment Eancom::Edifact::DTM.new(
- type: '90',
- date_time: date_time,
+ type: structure.dictionary_lookup(:type, dtm.identifier),
+ date_time: dtm[key].date_time,
format: '102'
)
end
- # Report End Date
- if date_time = message.report_end_date.date_time
+ date_time_messages.each_with_index do |dtm, index|
+ next unless index == 1
+
+ structure = Eancom.find_structure(tag: 'DTM')
+ key = dtm.identifier.intern.to_sym
body.segment Eancom::Edifact::DTM.new(
- type: '91',
- date_time: date_time,
+ type: structure.dictionary_lookup(:type, dtm.identifier),
+ date_time: dtm[key].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
+ date_time_messages.each_with_index do |dtm, index|
+ next unless index == 2
+
+ structure = Eancom.find_structure(tag: 'DTM')
+ key = dtm.identifier.intern.to_sym
+ body.segment Eancom::Edifact::DTM.new(
+ type: structure.dictionary_lookup(:type, dtm.identifier),
+ date_time: dtm[key].date_time,
+ format: '102'
+ )
+ end
+
+ nads = message.nads
+ nads.each_with_index do |nad, index|
+ next unless index == 0
+
+ structure = Eancom.find_structure(tag: 'NAD')
+ key = nad.identifier.intern.to_sym
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
+ party_function_code_qualifier: structure.dictionary_lookup(:party_function_code_qualifier, nad.identifier),
+ party_identifier: nad[key].party_identifier,
+ code_list_responsible_agency_code_1: '9'
)
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
+ nads.each_with_index do |nad, index|
+ next unless index == 1
+
+ structure = Eancom.find_structure(tag: 'NAD')
+ key = nad.identifier.intern.to_sym
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
+ party_function_code_qualifier: structure.dictionary_lookup(:party_function_code_qualifier, nad.identifier),
+ party_identifier: nad[key].party_identifier,
+ code_list_responsible_agency_code_1: '9'
)
end
# Reference Currency
if currency = message.currency
+ structure = Eancom.find_structure(tag: 'CUX')
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'
+ currency_type_code_qualifier_1: structure.dictionary_lookup(:currency_type_code_qualifier_1,
+ currency.currency_type_code_qualifier_1),
+ currency_usage_code_qualifier_1: structure.dictionary_lookup(:currency_usage_code_qualifier_1,
+ currency.currency_usage_code_qualifier_1)
)
end
- item_counter = 0
+ # Location
+ if location = message.location
+ structure = Eancom.find_structure(tag: 'LOC')
+ body.segment Eancom::Edifact::LOC.new(
+ code_list_identification_code: location.code_list_identification_code,
+ code_list_responsible_agency_code: structure.dictionary_lookup(:code_list_responsible_agency_code, location.code_list_responsible_agency_code),
+ location_function_qualifier: structure.dictionary_lookup(:location_function_qualifier, location.location_function_qualifier),
+ location_name_code: location.location_name_code
+ )
+ end
- message.locations.each do |location_group|
- 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
+ # Sales Date
+ date_time_messages.each_with_index do |dtm, index|
+ next unless index == 3
- 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
+ structure = Eancom.find_structure(tag: 'DTM')
+ key = dtm.identifier.intern.to_sym
+ body.segment Eancom::Edifact::DTM.new(
+ type: structure.dictionary_lookup(:type, dtm.identifier),
+ date_time: dtm[key].date_time,
+ format: '102'
+ )
+ end
- # 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: '102'
+ total_quantity = 0
+
+ items = message.items
+
+ items.each_with_index do |item, index|
+ total_quantity += item.quantity.to_i
+
+ structure = Eancom.find_structure(tag: 'LIN')
+ body.segment Eancom::Edifact::LIN.new(
+ line_item_identifier_1: (index + 1).to_s,
+ item_identifier: item.ean,
+ item_type_identification_code: structure.dictionary_lookup(:item_type_identification_code, item.item_type_identification_code)
+ )
+
+ references = item.references
+ references.each_with_index do |rff, index|
+ structure = Eancom.find_structure(tag: 'RFF')
+ key = rff.identifier.intern.to_sym
+ body.segment Eancom::Edifact::RFF.new(
+ reference_code_qualifier: structure.dictionary_lookup(:reference_code_qualifier, rff.identifier),
+ reference_identifier: rff[key].reference_identifier
)
end
- # Items
- location_group.items.each do |item|
- item_counter += 1
+ prices = item.prices
+ prices.each do |price|
+ next unless price = price.price
- body.segment Eancom::Edifact::LIN.new(
- line_item_identifier_1: item_counter.to_s,
- item_identifier: item.ean,
- item_type_identification_code: 'SRV'
+ 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
- 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_group|
- if price = price_group.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
+ qty = item.quantities
+ qty.each_with_index do |qty, index|
+ structure = Eancom.find_structure(tag: 'QTY')
+ key = qty.identifier.intern.to_sym
+ body.segment Eancom::Edifact::QTY.new(
+ quantity_type_code_qualifier: structure.dictionary_lookup(:quantity_type_code_qualifier, qty.identifier),
+ quantity: qty[key].quantity
+ )
end
end
-
- body.segment Eancom::Edifact::UNS.new(
- section_identification: 'S'
- )
-
body.segment Eancom::Edifact::UNT.new(
- number_of_segments_in_message: "#{document.total_segments + 2}",
- message_reference_number: config.header.message_reference_number,
+ number_of_segments_in_message: (document.total_segments + 2).to_s,
+ message_reference_number: config.header.message_reference_number
)
end
+ end
- document.footer do |footer|
+ document.footer do |footer|
+ messages = config.body.messages
- footer.segment Eancom::Edifact::UNZ.new(
- interchange_control_count: '1',
- interchange_control_reference: "#{config.header.interchange_control_reference}"
- )
- end
+ footer.segment Eancom::Edifact::UNZ.new(
+ interchange_control_count: messages.size.to_s,
+ interchange_control_reference: config.header.interchange_control_reference.to_s
+ )
end
end