eancom 1.5.6 → 1.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +2 -2
- data/definitions/segments/bgm.rb +8 -0
- data/definitions/segments/ftx.rb +8 -0
- data/definitions/segments/pri.rb +19 -11
- data/definitions/segments/qty.rb +4 -0
- data/definitions/segments/rff.rb +8 -0
- data/definitions/slsrpt/d01b.rb +59 -59
- data/definitions/slsrpt/d96a.rb +61 -59
- data/lib/eancom/edifact/body.rb +18 -37
- data/lib/eancom/edifact/document.rb +17 -21
- data/lib/eancom/edifact/item.rb +1 -1
- data/lib/eancom/edifact/location.rb +56 -0
- data/lib/eancom/edifact/message.rb +39 -7
- data/lib/eancom/edifact/segment.rb +4 -0
- data/lib/eancom/edifact/segments/loc.rb +4 -0
- data/lib/eancom/edifact/segments/uns.rb +1 -1
- data/lib/eancom/edifact.rb +1 -0
- data/lib/eancom/parser/document.rb +1 -1
- data/lib/eancom/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 10b8633addd1b19df008fcfbf0b33b75c2639cac939e2f2923d6518515c1e670
|
4
|
+
data.tar.gz: 26a096e4e9afa9c39a0e2184dc2bd60fdf7f2f95140e70dfc19a31d59262cd27
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 34f0152b2721cf4effa65f159642077d52a1e79653e22461a9deb558894c628687775265c1f0b1ced37dfc1a41e87b47af0e6239b53325bee11190845221dd26
|
7
|
+
data.tar.gz: 52974b80bc2d5bfb9b429c58f2ac01e3c1029e655c8cce924e7115c5ed4af483b56727ec18292871509f2961134683c1f7408e994fbcb7b811360820b1d1461a
|
data/Gemfile.lock
CHANGED
data/definitions/segments/bgm.rb
CHANGED
@@ -255,6 +255,14 @@ data = Eancom::Edifact::Data.new(
|
|
255
255
|
'42' => {
|
256
256
|
description: 'Confirmation_via_specific_means',
|
257
257
|
identifier: 'confirmation_via_specific_means'
|
258
|
+
},
|
259
|
+
'46' => {
|
260
|
+
description: 'Message content is provisional',
|
261
|
+
identifier: 'provisional'
|
262
|
+
},
|
263
|
+
'47' => {
|
264
|
+
description: 'Message content is definitive',
|
265
|
+
identifier: 'definitive'
|
258
266
|
}
|
259
267
|
},
|
260
268
|
description: 'Message function code',
|
data/definitions/segments/ftx.rb
CHANGED
@@ -43,6 +43,10 @@ data = Eancom::Edifact::Data.new(
|
|
43
43
|
'1' => {
|
44
44
|
description: 'Text for subsequent use',
|
45
45
|
identifier: 'text_for_subsequent_use'
|
46
|
+
},
|
47
|
+
'3' => {
|
48
|
+
description: 'Text for immediate use',
|
49
|
+
identifier: 'text_for_immediate_use'
|
46
50
|
}
|
47
51
|
},
|
48
52
|
description: "Free Text function code",
|
@@ -92,6 +96,10 @@ data = Eancom::Edifact::Data.new(
|
|
92
96
|
'246' => {
|
93
97
|
description: "GS1 Germany",
|
94
98
|
identifier: 'gs1_germany'
|
99
|
+
},
|
100
|
+
'ZZZ' => {
|
101
|
+
description: 'Mutually defined',
|
102
|
+
identifier: 'mutually_defined'
|
95
103
|
}
|
96
104
|
},
|
97
105
|
description: "Code list responsible agency code",
|
data/definitions/segments/pri.rb
CHANGED
@@ -115,26 +115,34 @@ data = Eancom::Edifact::Data.new(
|
|
115
115
|
description: 'Discount price',
|
116
116
|
identifier: 'discount_price',
|
117
117
|
},
|
118
|
-
'
|
119
|
-
description: '
|
120
|
-
identifier: '
|
118
|
+
'EUP' => {
|
119
|
+
description: 'Expected unit price',
|
120
|
+
identifier: 'expected_unit_price'
|
121
121
|
},
|
122
122
|
'LIU' => {
|
123
123
|
description: 'List price',
|
124
124
|
identifier: 'list_price',
|
125
125
|
},
|
126
|
-
'
|
127
|
-
description: '
|
128
|
-
identifier: '
|
126
|
+
'LBL' => {
|
127
|
+
description: 'Labelling price',
|
128
|
+
identifier: 'labelling_price'
|
129
129
|
},
|
130
|
-
'
|
131
|
-
description: '
|
132
|
-
identifier: '
|
130
|
+
'MRP' => {
|
131
|
+
description: 'Market retail price',
|
132
|
+
identifier: 'market_retail_price',
|
133
133
|
},
|
134
134
|
'NTP' => {
|
135
135
|
description: 'Net unit price',
|
136
136
|
identifier: 'net_unit_price',
|
137
|
-
}
|
137
|
+
},
|
138
|
+
'RTP' => {
|
139
|
+
description: 'Retail price',
|
140
|
+
identifier: 'retail_price',
|
141
|
+
},
|
142
|
+
'SRP' => {
|
143
|
+
description: 'Suggested retail price',
|
144
|
+
identifier: 'suggested_retail_price',
|
145
|
+
},
|
138
146
|
},
|
139
147
|
description: 'Price specification code',
|
140
148
|
required: false
|
@@ -153,7 +161,7 @@ price_information.add(:unit_price_basis_value, data)
|
|
153
161
|
data = Eancom::Edifact::Data.new(
|
154
162
|
type: String,
|
155
163
|
length: 0..3,
|
156
|
-
dictionary:
|
164
|
+
dictionary: {
|
157
165
|
'KGM' => {
|
158
166
|
description: 'Kilogram',
|
159
167
|
identifier: 'kilogram',
|
data/definitions/segments/qty.rb
CHANGED
@@ -40,6 +40,10 @@ data = Eancom::Edifact::Data.new(
|
|
40
40
|
description: 'Invoiced quantity',
|
41
41
|
identifier: 'invoiced_quantity'
|
42
42
|
},
|
43
|
+
'53' => {
|
44
|
+
description: 'Minimum order quantity',
|
45
|
+
identifier: 'minimum_order_quantity'
|
46
|
+
},
|
43
47
|
'59' => {
|
44
48
|
description: 'Numbers of consumer units in the traded unit',
|
45
49
|
identifier: 'numbers_or_consumer_units_in_the_traded_unit'
|
data/definitions/segments/rff.rb
CHANGED
@@ -49,6 +49,10 @@ data = Eancom::Edifact::Data.new(
|
|
49
49
|
description: 'Beneficiarys reference',
|
50
50
|
identifier: 'beneficiarys_reference'
|
51
51
|
},
|
52
|
+
'AJS' => {
|
53
|
+
description: 'Agreement number',
|
54
|
+
identifier: 'agreement_number'
|
55
|
+
},
|
52
56
|
'ALL' => {
|
53
57
|
description: 'Message Batch number',
|
54
58
|
identifier: 'message_batch_number'
|
@@ -137,6 +141,10 @@ data = Eancom::Edifact::Data.new(
|
|
137
141
|
description: 'VAT registration number',
|
138
142
|
identifier: 'vat_registration_number'
|
139
143
|
},
|
144
|
+
'XB8' => {
|
145
|
+
description: 'Agreement number',
|
146
|
+
identifier: 'agreement_number_old'
|
147
|
+
}
|
140
148
|
},
|
141
149
|
description: "Reference code quailifier",
|
142
150
|
required: true
|
data/definitions/slsrpt/d01b.rb
CHANGED
@@ -109,78 +109,78 @@ Eancom::Definition.create(name: 'D01B', type: :slsrpt) do |document, config|
|
|
109
109
|
)
|
110
110
|
end
|
111
111
|
|
112
|
-
|
113
|
-
if location = message.location
|
114
|
-
code_list_responsible_agency_code = if location.code_list_responsible_agancy_code
|
115
|
-
structure = Eancom.find_structure(tag: 'LOC')
|
116
|
-
structure.dictionary_lookup(
|
117
|
-
:code_list_responsible_agancy_code,
|
118
|
-
location.code_list_responsible_agancy_code
|
119
|
-
)
|
120
|
-
else
|
121
|
-
'9'
|
122
|
-
end
|
123
|
-
|
124
|
-
body.segment Eancom::Edifact::LOC.new(
|
125
|
-
code_list_identification_code: location.code_list_identification_code,
|
126
|
-
code_list_responsible_agancy_code: code_list_responsible_agency_code,
|
127
|
-
location_function_qualifier: '162',
|
128
|
-
location_name_code: location.location_name_code
|
129
|
-
)
|
130
|
-
end
|
112
|
+
item_counter = 0
|
131
113
|
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
114
|
+
message.locations.each do |location_group|
|
115
|
+
if location = location_group.location
|
116
|
+
code_list_responsible_agency_code = if location.code_list_responsible_agancy_code
|
117
|
+
structure = Eancom.find_structure(tag: 'LOC')
|
118
|
+
structure.dictionary_lookup(
|
119
|
+
:code_list_responsible_agancy_code,
|
120
|
+
location.code_list_responsible_agancy_code
|
121
|
+
)
|
122
|
+
else
|
123
|
+
'9'
|
124
|
+
end
|
143
125
|
|
144
|
-
|
126
|
+
body.segment Eancom::Edifact::LOC.new(
|
127
|
+
code_list_identification_code: location.code_list_identification_code,
|
128
|
+
code_list_responsible_agancy_code: code_list_responsible_agency_code,
|
129
|
+
location_function_qualifier: '162',
|
130
|
+
location_name_code: location.location_name_code
|
131
|
+
)
|
132
|
+
end
|
145
133
|
|
146
|
-
|
147
|
-
|
134
|
+
# Sales Date
|
135
|
+
if date_time = location_group.sales_date_and_or_time_and_or_period&.date_time
|
136
|
+
body.segment Eancom::Edifact::DTM.new(
|
137
|
+
type: '356',
|
138
|
+
date_time: date_time,
|
139
|
+
format: '102'
|
140
|
+
)
|
141
|
+
end
|
148
142
|
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
item_type_identification_code: 'SRV'
|
153
|
-
)
|
143
|
+
# Items
|
144
|
+
location_group.items.each do |item|
|
145
|
+
item_counter += 1
|
154
146
|
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
147
|
+
body.segment Eancom::Edifact::LIN.new(
|
148
|
+
line_item_identifier_1: item_counter.to_s,
|
149
|
+
item_identifier: item.ean,
|
150
|
+
item_type_identification_code: 'SRV'
|
159
151
|
)
|
160
|
-
end
|
161
152
|
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
body.segment Eancom::Edifact::PRI.new(
|
167
|
-
price_amount: price.price_amount,
|
168
|
-
price_code_qualifier: structure.dictionary_lookup(:price_code_qualifier, price.price_code_qualifier),
|
169
|
-
price_specification_code: structure.dictionary_lookup(:price_specification_code, price.price_specification_code),
|
170
|
-
price_type_code: price.price_type_code
|
153
|
+
if transaction_reference_number = item.transaction_reference_number
|
154
|
+
body.segment Eancom::Edifact::RFF.new(
|
155
|
+
reference_code_qualifier: 'TN',
|
156
|
+
reference_identifier: transaction_reference_number.reference_identifier
|
171
157
|
)
|
172
158
|
end
|
173
|
-
end
|
174
159
|
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
160
|
+
prices = item.prices
|
161
|
+
prices.each do |price_group|
|
162
|
+
if price = price_group.price
|
163
|
+
structure = Eancom.find_structure(tag: 'PRI')
|
164
|
+
body.segment Eancom::Edifact::PRI.new(
|
165
|
+
price_amount: price.price_amount,
|
166
|
+
price_code_qualifier: structure.dictionary_lookup(:price_code_qualifier, price.price_code_qualifier),
|
167
|
+
price_specification_code: structure.dictionary_lookup(:price_specification_code, price.price_specification_code),
|
168
|
+
price_type_code: price.price_type_code
|
169
|
+
)
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
# Quantity
|
174
|
+
if statistical_sales_quantitiy = item.statistical_sales_quantitiy
|
175
|
+
body.segment Eancom::Edifact::QTY.new(
|
176
|
+
quantity_type_code_qualifier: '153',
|
177
|
+
quantity: statistical_sales_quantitiy.quantity
|
178
|
+
)
|
179
|
+
end
|
181
180
|
end
|
182
181
|
end
|
183
182
|
|
183
|
+
|
184
184
|
body.segment Eancom::Edifact::UNS.new(
|
185
185
|
section_identification: 'S'
|
186
186
|
)
|
data/definitions/slsrpt/d96a.rb
CHANGED
@@ -106,78 +106,80 @@ Eancom::Definition.create(name: 'D96A', type: :slsrpt) do |document, config|
|
|
106
106
|
)
|
107
107
|
end
|
108
108
|
|
109
|
-
|
110
|
-
if location = message.location
|
111
|
-
code_list_responsible_agency_code = if location.code_list_responsible_agancy_code
|
112
|
-
structure = Eancom.find_structure(tag: 'LOC')
|
113
|
-
structure.dictionary_lookup(
|
114
|
-
:code_list_responsible_agancy_code,
|
115
|
-
location.code_list_responsible_agancy_code
|
116
|
-
)
|
117
|
-
else
|
118
|
-
'9'
|
119
|
-
end
|
120
|
-
body.segment Eancom::Edifact::LOC.new(
|
121
|
-
code_list_identification_code: location.code_list_identification_code,
|
122
|
-
code_list_responsible_agancy_code: code_list_responsible_agency_code,
|
123
|
-
location_function_qualifier: '150',
|
124
|
-
location_name_code: location.location_name_code
|
125
|
-
)
|
126
|
-
end
|
127
|
-
|
128
|
-
# Sales Date
|
129
|
-
if date_time = message.sales_date_and_or_time_and_or_period.date_time
|
130
|
-
body.segment Eancom::Edifact::DTM.new(
|
131
|
-
type: '356',
|
132
|
-
date_time: date_time,
|
133
|
-
format: '203'
|
134
|
-
)
|
135
|
-
end
|
109
|
+
item_counter = 0
|
136
110
|
|
137
|
-
|
138
|
-
total_quantity = 0
|
111
|
+
message.locations.each do |location_group|
|
139
112
|
|
140
|
-
|
113
|
+
# Location
|
114
|
+
if location = location_group.location
|
115
|
+
code_list_responsible_agency_code = if location.code_list_responsible_agancy_code
|
116
|
+
structure = Eancom.find_structure(tag: 'LOC')
|
117
|
+
structure.dictionary_lookup(
|
118
|
+
:code_list_responsible_agancy_code,
|
119
|
+
location.code_list_responsible_agancy_code
|
120
|
+
)
|
121
|
+
else
|
122
|
+
'9'
|
123
|
+
end
|
124
|
+
body.segment Eancom::Edifact::LOC.new(
|
125
|
+
code_list_identification_code: location.code_list_identification_code,
|
126
|
+
code_list_responsible_agancy_code: code_list_responsible_agency_code,
|
127
|
+
location_function_qualifier: '150',
|
128
|
+
location_name_code: location.location_name_code
|
129
|
+
)
|
130
|
+
end
|
141
131
|
|
142
|
-
|
143
|
-
|
132
|
+
# Sales Date
|
133
|
+
if date_time = location_group.sales_date_and_or_time_and_or_period&.date_time
|
134
|
+
body.segment Eancom::Edifact::DTM.new(
|
135
|
+
type: '356',
|
136
|
+
date_time: date_time,
|
137
|
+
format: '203'
|
138
|
+
)
|
139
|
+
end
|
144
140
|
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
item_type_identification_code: 'EN'
|
149
|
-
)
|
141
|
+
# Items
|
142
|
+
location_group.items.each do |item|
|
143
|
+
item_counter += 1
|
150
144
|
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
145
|
+
body.segment Eancom::Edifact::LIN.new(
|
146
|
+
line_item_identifier_1: item_counter.to_s,
|
147
|
+
item_identifier: item.ean,
|
148
|
+
item_type_identification_code: 'EN'
|
155
149
|
)
|
156
|
-
end
|
157
150
|
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
body.segment Eancom::Edifact::PRI.new(
|
163
|
-
price_amount: price.price_amount,
|
164
|
-
price_code_qualifier: structure.dictionary_lookup(:price_code_qualifier, price.price_code_qualifier),
|
165
|
-
price_specification_code: structure.dictionary_lookup(:price_specification_code, price.price_specification_code),
|
166
|
-
price_type_code: price.price_type_code
|
151
|
+
if transaction_reference_number = item.transaction_reference_number
|
152
|
+
body.segment Eancom::Edifact::RFF.new(
|
153
|
+
reference_code_qualifier: 'TN',
|
154
|
+
reference_identifier: transaction_reference_number.reference_identifier
|
167
155
|
)
|
168
156
|
end
|
169
|
-
end
|
170
157
|
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
158
|
+
prices = item.prices
|
159
|
+
prices.each do |price|
|
160
|
+
if price = price.price
|
161
|
+
structure = Eancom.find_structure(tag: 'PRI')
|
162
|
+
body.segment Eancom::Edifact::PRI.new(
|
163
|
+
price_amount: price.price_amount,
|
164
|
+
price_code_qualifier: structure.dictionary_lookup(:price_code_qualifier, price.price_code_qualifier),
|
165
|
+
price_specification_code: structure.dictionary_lookup(:price_specification_code, price.price_specification_code),
|
166
|
+
price_type_code: price.price_type_code
|
167
|
+
)
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
# Quantity
|
172
|
+
if minimum_production_batch = item.minimum_production_batch
|
173
|
+
body.segment Eancom::Edifact::QTY.new(
|
174
|
+
quantity_type_code_qualifier: '160',
|
175
|
+
quantity: minimum_production_batch.quantity,
|
176
|
+
measurement_unit_code: 'PCE'
|
177
|
+
)
|
178
|
+
end
|
178
179
|
end
|
179
180
|
end
|
180
181
|
|
182
|
+
|
181
183
|
body.segment Eancom::Edifact::UNT.new(
|
182
184
|
number_of_segments_in_message: "#{document.total_segments + 2}",
|
183
185
|
message_reference_number: config.header.message_reference_number,
|
data/lib/eancom/edifact/body.rb
CHANGED
@@ -1,8 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Eancom
|
2
4
|
module Edifact
|
3
5
|
class Body < DocumentElement
|
4
|
-
|
5
|
-
attr_accessor :hash, :items, :messages
|
6
|
+
attr_accessor :hash, :messages, :locations, :items
|
6
7
|
|
7
8
|
def initialize
|
8
9
|
super
|
@@ -11,52 +12,32 @@ module Eancom
|
|
11
12
|
end
|
12
13
|
|
13
14
|
def to_json_hash
|
14
|
-
@
|
15
|
-
start_message(segment) if segment.starts_message?
|
16
|
-
start_item(segment) if segment.starts_item?
|
17
|
-
if @item
|
18
|
-
@item << segment
|
19
|
-
else
|
20
|
-
@message << segment
|
21
|
-
end
|
22
|
-
end
|
23
|
-
@message.add_item(@item.to_json_hash)
|
24
|
-
@messages << @message.to_json_hash
|
25
|
-
hash.merge!({ messages: messages })
|
26
|
-
{ body: hash }
|
15
|
+
@to_json_hash ||= build_json_hash
|
27
16
|
end
|
28
17
|
|
29
|
-
def start_message
|
18
|
+
def start_message
|
30
19
|
if @message
|
31
20
|
@messages << @message.to_json_hash
|
32
|
-
if @item && !@item.empty?
|
33
|
-
@message.add_item(@item.to_json_hash)
|
34
|
-
end
|
35
|
-
@item = nil
|
36
|
-
end
|
37
|
-
@message = Eancom::Edifact::Message.new()
|
38
|
-
end
|
39
|
-
|
40
|
-
def start_item(segment)
|
41
|
-
if @item && !@item.empty?
|
42
|
-
@message.add_item(@item.to_json_hash)
|
43
21
|
end
|
44
|
-
@
|
22
|
+
@message = Eancom::Edifact::Message.new
|
45
23
|
end
|
46
24
|
|
47
25
|
private
|
48
26
|
|
49
|
-
def
|
50
|
-
|
51
|
-
hash[name] = [] if hash[name].nil?
|
52
|
-
hash[name] << segment.to_json_hash
|
53
|
-
else
|
54
|
-
hash.merge!(segment.to_json_hash)
|
55
|
-
end
|
27
|
+
def group_name(segment)
|
28
|
+
segment.group_name
|
56
29
|
end
|
57
30
|
|
58
|
-
def
|
59
|
-
|
31
|
+
def build_json_hash
|
32
|
+
@segments.each do |segment|
|
33
|
+
start_message if segment.starts_message?
|
34
|
+
@message << segment
|
35
|
+
end
|
36
|
+
messages << @message.to_json_hash
|
37
|
+
|
38
|
+
{
|
39
|
+
body: hash.merge({ messages: messages })
|
40
|
+
}
|
60
41
|
end
|
61
42
|
end
|
62
43
|
end
|
@@ -1,25 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Eancom
|
2
4
|
module Edifact
|
3
5
|
class Document
|
4
|
-
|
5
|
-
attr_accessor :header_element,
|
6
|
-
:body_element, :footer_element
|
6
|
+
attr_accessor :header_element, :body_element, :footer_element
|
7
7
|
|
8
8
|
def initialize
|
9
|
-
@header_element = Header.new
|
10
|
-
@body_element = Body.new
|
11
|
-
@footer_element = Footer.new
|
9
|
+
@header_element = Header.new
|
10
|
+
@body_element = Body.new
|
11
|
+
@footer_element = Footer.new
|
12
12
|
end
|
13
13
|
|
14
|
-
def header
|
14
|
+
def header
|
15
15
|
yield(@header_element)
|
16
16
|
end
|
17
17
|
|
18
|
-
def body
|
18
|
+
def body
|
19
19
|
yield(@body_element)
|
20
20
|
end
|
21
21
|
|
22
|
-
def footer
|
22
|
+
def footer
|
23
23
|
yield(@footer_element)
|
24
24
|
end
|
25
25
|
|
@@ -42,18 +42,14 @@ module Eancom
|
|
42
42
|
end
|
43
43
|
|
44
44
|
def to_s(debug: false)
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
hash = {}
|
54
|
-
hash.merge! @header_element.to_json_hash
|
55
|
-
hash.merge! @body_element.to_json_hash
|
56
|
-
hash.to_json
|
45
|
+
"#{@header_element.to_s(debug: debug)}#{@body_element.to_s(debug: debug)}#{@footer_element.to_s(debug: debug)}"
|
46
|
+
end
|
47
|
+
|
48
|
+
def to_json(_obj = nil)
|
49
|
+
{
|
50
|
+
**@header_element.to_json_hash,
|
51
|
+
**@body_element.to_json_hash
|
52
|
+
}.to_json
|
57
53
|
end
|
58
54
|
end
|
59
55
|
end
|
data/lib/eancom/edifact/item.rb
CHANGED
@@ -0,0 +1,56 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Eancom
|
4
|
+
module Edifact
|
5
|
+
class Location
|
6
|
+
attr_accessor :items, :hash
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
@items = []
|
10
|
+
@hash = {}
|
11
|
+
end
|
12
|
+
|
13
|
+
def add_item(item)
|
14
|
+
@items << item
|
15
|
+
end
|
16
|
+
|
17
|
+
def <<(segment)
|
18
|
+
start_item if segment.starts_item?
|
19
|
+
|
20
|
+
if @item
|
21
|
+
@item << segment
|
22
|
+
elsif name = group_name(segment)
|
23
|
+
@hash[name] = [] if @hash[name].nil?
|
24
|
+
@hash[name] << segment.to_json_hash
|
25
|
+
else
|
26
|
+
@hash.merge!(segment.to_json_hash)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def to_json_hash
|
31
|
+
if @item && !@item.empty?
|
32
|
+
add_item(@item.to_json_hash)
|
33
|
+
end
|
34
|
+
|
35
|
+
@hash.merge({ items: @items })
|
36
|
+
end
|
37
|
+
|
38
|
+
def empty?
|
39
|
+
@hash.empty?
|
40
|
+
end
|
41
|
+
|
42
|
+
def start_item
|
43
|
+
if @item && !@item.empty?
|
44
|
+
add_item(@item.to_json_hash)
|
45
|
+
end
|
46
|
+
@item = Eancom::Edifact::Item.new
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
def group_name(segment)
|
52
|
+
segment.item_group_name || segment.group_name
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -1,20 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Eancom
|
2
4
|
module Edifact
|
3
5
|
class Message
|
6
|
+
attr_accessor :locations, :items, :hash
|
4
7
|
|
5
|
-
|
6
|
-
|
7
|
-
def initialize()
|
8
|
+
def initialize
|
9
|
+
@locations = []
|
8
10
|
@items = []
|
9
11
|
@hash = {}
|
10
12
|
end
|
11
13
|
|
14
|
+
def add_location(location)
|
15
|
+
@locations << location
|
16
|
+
end
|
17
|
+
|
12
18
|
def add_item(item)
|
13
19
|
@items << item
|
14
20
|
end
|
15
21
|
|
16
|
-
def <<
|
17
|
-
if
|
22
|
+
def <<(segment)
|
23
|
+
start_location if segment.starts_location?
|
24
|
+
start_item if segment.starts_item?
|
25
|
+
|
26
|
+
if @location
|
27
|
+
@location << segment
|
28
|
+
elsif @item
|
29
|
+
@item << segment
|
30
|
+
elsif name = group_name(segment)
|
18
31
|
@hash[name] = [] if @hash[name].nil?
|
19
32
|
@hash[name] << segment.to_json_hash
|
20
33
|
else
|
@@ -23,10 +36,16 @@ module Eancom
|
|
23
36
|
end
|
24
37
|
|
25
38
|
def to_json_hash
|
39
|
+
if @location && !@location.empty?
|
40
|
+
add_location(@location.to_json_hash)
|
41
|
+
end
|
42
|
+
if @item && !@item.empty?
|
43
|
+
add_item(@item.to_json_hash)
|
44
|
+
end
|
26
45
|
message_hash = {}
|
27
|
-
items_hash = { items: @items }
|
28
46
|
message_hash.merge!(@hash)
|
29
|
-
message_hash.merge!(
|
47
|
+
message_hash.merge!({ locations: @locations }) if !@locations.empty?
|
48
|
+
message_hash.merge!({ items: @items }) if !@items.empty?
|
30
49
|
message_hash
|
31
50
|
end
|
32
51
|
|
@@ -36,6 +55,19 @@ module Eancom
|
|
36
55
|
segment.group_name
|
37
56
|
end
|
38
57
|
|
58
|
+
def start_location
|
59
|
+
if @location && !@location.empty?
|
60
|
+
add_location(@location.to_json_hash)
|
61
|
+
end
|
62
|
+
@location = Eancom::Edifact::Location.new
|
63
|
+
end
|
64
|
+
|
65
|
+
def start_item
|
66
|
+
if @item && !@item.empty?
|
67
|
+
add_item(@item.to_json_hash)
|
68
|
+
end
|
69
|
+
@item = Eancom::Edifact::Item.new
|
70
|
+
end
|
39
71
|
end
|
40
72
|
end
|
41
73
|
end
|
data/lib/eancom/edifact.rb
CHANGED
@@ -3,6 +3,7 @@ require 'eancom/edifact/segment'
|
|
3
3
|
require 'eancom/edifact/document_element'
|
4
4
|
require 'eancom/edifact/header'
|
5
5
|
require 'eancom/edifact/message'
|
6
|
+
require 'eancom/edifact/location'
|
6
7
|
require 'eancom/edifact/item'
|
7
8
|
require 'eancom/edifact/body'
|
8
9
|
require 'eancom/edifact/footer'
|
data/lib/eancom/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eancom
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fadendaten GmbH
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-05-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pry
|
@@ -190,6 +190,7 @@ files:
|
|
190
190
|
- lib/eancom/edifact/footer.rb
|
191
191
|
- lib/eancom/edifact/header.rb
|
192
192
|
- lib/eancom/edifact/item.rb
|
193
|
+
- lib/eancom/edifact/location.rb
|
193
194
|
- lib/eancom/edifact/message.rb
|
194
195
|
- lib/eancom/edifact/segment.rb
|
195
196
|
- lib/eancom/edifact/segments/alc.rb
|