xmlconv2 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. data/History.txt +6 -0
  2. data/LICENCE.txt +339 -0
  3. data/Manifest.txt +107 -0
  4. data/README.txt +25 -0
  5. data/Rakefile +28 -0
  6. data/bin/admin +65 -0
  7. data/bin/xmlconvd +19 -0
  8. data/data/grammar/i2.grammar +73 -0
  9. data/src/conversion/bdd_geh.rb +281 -0
  10. data/src/conversion/bdd_i2.rb +102 -0
  11. data/src/conversion/bdd_xml.rb +242 -0
  12. data/src/conversion/geh_bdd.rb +165 -0
  13. data/src/conversion/i2_bdd.rb +271 -0
  14. data/src/conversion/xml_bdd.rb +125 -0
  15. data/src/custom/lookandfeel.rb +47 -0
  16. data/src/i2/address.rb +33 -0
  17. data/src/i2/date.rb +37 -0
  18. data/src/i2/document.rb +26 -0
  19. data/src/i2/header.rb +24 -0
  20. data/src/i2/order.rb +44 -0
  21. data/src/i2/parser.rb +25 -0
  22. data/src/i2/position.rb +37 -0
  23. data/src/i2/record.rb +11 -0
  24. data/src/model/address.rb +20 -0
  25. data/src/model/agreement.rb +10 -0
  26. data/src/model/bdd.rb +26 -0
  27. data/src/model/bsr.rb +16 -0
  28. data/src/model/delivery.rb +15 -0
  29. data/src/model/delivery_item.rb +18 -0
  30. data/src/model/freetext_container.rb +26 -0
  31. data/src/model/id_container.rb +15 -0
  32. data/src/model/invoice.rb +18 -0
  33. data/src/model/invoice_item.rb +11 -0
  34. data/src/model/item.rb +19 -0
  35. data/src/model/item_container.rb +15 -0
  36. data/src/model/name.rb +27 -0
  37. data/src/model/part_info.rb +10 -0
  38. data/src/model/part_info_container.rb +15 -0
  39. data/src/model/party.rb +23 -0
  40. data/src/model/party_container.rb +20 -0
  41. data/src/model/price.rb +10 -0
  42. data/src/model/price_container.rb +18 -0
  43. data/src/model/transaction.rb +28 -0
  44. data/src/state/global.rb +28 -0
  45. data/src/state/global_predefine.rb +11 -0
  46. data/src/state/login.rb +38 -0
  47. data/src/state/transaction.rb +13 -0
  48. data/src/state/transactions.rb +130 -0
  49. data/src/util/application.rb +143 -0
  50. data/src/util/destination.rb +130 -0
  51. data/src/util/invoicer.rb +72 -0
  52. data/src/util/known_user.rb +16 -0
  53. data/src/util/polling_manager.rb +78 -0
  54. data/src/util/session.rb +23 -0
  55. data/src/util/transaction.rb +105 -0
  56. data/src/util/validator.rb +20 -0
  57. data/src/view/foot.rb +27 -0
  58. data/src/view/head.rb +13 -0
  59. data/src/view/login.rb +36 -0
  60. data/src/view/navigation.rb +30 -0
  61. data/src/view/navigationlink.rb +21 -0
  62. data/src/view/pager.rb +73 -0
  63. data/src/view/preformatted.rb +39 -0
  64. data/src/view/template.rb +17 -0
  65. data/src/view/transaction.rb +42 -0
  66. data/src/view/transactions.rb +90 -0
  67. data/test/mock.rb +149 -0
  68. data/test/suite.rb +16 -0
  69. data/test/test_conversion/bdd_geh.rb +533 -0
  70. data/test/test_conversion/bdd_i2.rb +314 -0
  71. data/test/test_conversion/bdd_xml.rb +556 -0
  72. data/test/test_conversion/geh_bdd.rb +372 -0
  73. data/test/test_conversion/i2_bdd.rb +804 -0
  74. data/test/test_conversion/xml_bdd.rb +203 -0
  75. data/test/test_i2/address.rb +88 -0
  76. data/test/test_i2/date.rb +49 -0
  77. data/test/test_i2/document.rb +62 -0
  78. data/test/test_i2/header.rb +39 -0
  79. data/test/test_i2/order.rb +94 -0
  80. data/test/test_i2/parser.rb +309 -0
  81. data/test/test_i2/position.rb +65 -0
  82. data/test/test_integration/geh_i2.rb +312 -0
  83. data/test/test_integration/i2_geh.rb +449 -0
  84. data/test/test_integration/i2_xml.rb +162 -0
  85. data/test/test_integration/xml_i2.rb +254 -0
  86. data/test/test_model/address.rb +35 -0
  87. data/test/test_model/agreement.rb +22 -0
  88. data/test/test_model/bdd.rb +55 -0
  89. data/test/test_model/bsr.rb +38 -0
  90. data/test/test_model/delivery.rb +79 -0
  91. data/test/test_model/delivery_item.rb +52 -0
  92. data/test/test_model/freetext_container.rb +45 -0
  93. data/test/test_model/invoice.rb +65 -0
  94. data/test/test_model/invoice_item.rb +41 -0
  95. data/test/test_model/name.rb +57 -0
  96. data/test/test_model/part_info.rb +24 -0
  97. data/test/test_model/party.rb +96 -0
  98. data/test/test_model/price.rb +24 -0
  99. data/test/test_util/application.rb +168 -0
  100. data/test/test_util/destination.rb +197 -0
  101. data/test/test_util/invoicer.rb +36 -0
  102. data/test/test_util/polling_manager.rb +111 -0
  103. data/test/test_util/transaction.rb +129 -0
  104. data/user-stories/UserStories_XmlConv2.txt +381 -0
  105. data/user-stories/doku/ABB.incoming.HTTP.invoice.xml +315 -0
  106. data/user-stories/doku/ABB.received.xml +259 -0
  107. data/user-stories/doku/BO_OrderProcessing.sxw +0 -0
  108. metadata +195 -0
@@ -0,0 +1,309 @@
1
+ #!/usr/bin/env ruby
2
+ # I2::TestParser -- xmlconv2 -- 28.06.2004 -- hwyss@ywesee.com
3
+
4
+ $: << File.dirname(__FILE__)
5
+ $: << File.expand_path('../../src', File.dirname(__FILE__))
6
+
7
+ require 'test/unit'
8
+ require 'i2/parser'
9
+
10
+ module XmlConv
11
+ module I2
12
+ class TestParser < Test::Unit::TestCase
13
+ def setup
14
+ @parser = XmlConv::I2.cached_parser
15
+ end
16
+ def test_parser_class
17
+ assert_instance_of(GeneralizedLrParser, @parser)
18
+ end
19
+ def test_parse_header
20
+ src = <<-EOS
21
+ "00" "Sender Identification" "Recipient Identification"
22
+ "20040628" "1159" "CONFIRM" "1"
23
+ EOS
24
+ ast = @parser.parse(src)
25
+ assert_instance_of(SyntaxTree, ast)
26
+ assert_instance_of(ArrayNode, ast.records)
27
+ header = ast.records.first
28
+ assert_instance_of(SyntaxTree, header)
29
+ assert_equal('Header', header.name)
30
+ rtype = header.rtype
31
+ assert_instance_of(SyntaxTree, rtype)
32
+ assert_equal('00', rtype.value)
33
+ sender = header.sender
34
+ assert_instance_of(SyntaxTree, sender)
35
+ assert_equal('Sender Identification', sender.value)
36
+ recipient = header.recipient
37
+ assert_instance_of(SyntaxTree, recipient)
38
+ assert_equal('Recipient Identification', recipient.value)
39
+ date = header.date
40
+ assert_instance_of(SyntaxTree, date)
41
+ assert_equal('20040628', date.value)
42
+ time = header.time
43
+ assert_instance_of(SyntaxTree, time)
44
+ assert_equal('1159', time.value)
45
+ mtype = header.mtype
46
+ assert_instance_of(SyntaxTree, mtype)
47
+ assert_equal('CONFIRM', mtype.value)
48
+ test = header.test
49
+ assert_instance_of(SyntaxTree, test)
50
+ assert_equal('1', test.value)
51
+ end
52
+ def test_parse_incomplete_header
53
+ src = <<-EOS
54
+ "00" "" "" "" "" "" ""
55
+ EOS
56
+ ast = nil
57
+ assert_nothing_raised {
58
+ ast = @parser.parse(src)
59
+ }
60
+ header = ast.records.first
61
+ assert_equal('Header', header.name)
62
+ end
63
+ def test_parse_commission
64
+ # commented fields are not in the current version
65
+ src = <<-EOS
66
+ "01" "456" "Receipt-Number" "20040627" "Order Number"
67
+ "Commission Number" "OC" "Employee"
68
+ EOS
69
+ ast = @parser.parse(src)
70
+ assert_instance_of(SyntaxTree, ast)
71
+ comm = ast.records.first
72
+ assert_instance_of(SyntaxTree, comm)
73
+ assert_equal('Commission', comm.name)
74
+ assert_equal('01', comm.rtype.value)
75
+ assert_equal('456', comm.btype.value)
76
+ assert_equal('Receipt-Number', comm.receipt.value)
77
+ assert_equal('20040627', comm.rdate.value)
78
+ #assert_equal('20040629', comm.ddate.value)
79
+ assert_equal('Order Number', comm.reference.value)
80
+ assert_equal('Commission Number', comm.commission.value)
81
+ assert_equal('OC', comm.contact.value)
82
+ assert_equal('Employee', comm.employee.value)
83
+ #assert_equal('TE', comm.medium.value)
84
+ #assert_equal('0041 1 350 85 87', comm.number.value)
85
+ end
86
+ def test_parse_incomplete_commission
87
+ src = <<-EOS
88
+ "01" "" "" "" "" "" "" ""
89
+ EOS
90
+ ast = nil
91
+ assert_nothing_raised {
92
+ ast = @parser.parse(src)
93
+ }
94
+ comm = ast.records.first
95
+ assert_equal('Commission', comm.name)
96
+ end
97
+ def test_parse_address
98
+ src = <<-EOS
99
+ "02" "BY" "Name1" "Name2" "Street" "City" "AddressCode" "Country"
100
+ EOS
101
+ ast = @parser.parse(src)
102
+ assert_instance_of(SyntaxTree, ast)
103
+ addr = ast.records.first
104
+ assert_instance_of(SyntaxTree, addr)
105
+ assert_equal('Address', addr.name)
106
+ assert_equal('02', addr.rtype.value)
107
+ assert_equal('BY', addr.atype.value)
108
+ assert_equal('Name1', addr.name1.value)
109
+ assert_equal('Name2', addr.name2.value)
110
+ assert_equal('Street', addr.street.value)
111
+ assert_equal('City', addr.city.value)
112
+ assert_equal('AddressCode', addr.code.value)
113
+ assert_equal('Country', addr.country.value)
114
+ end
115
+ def test_parse_incomplete_address
116
+ src = <<-EOS
117
+ "02" "" "" "" "" "" "" ""
118
+ EOS
119
+ ast = nil
120
+ assert_nothing_raised {
121
+ ast = @parser.parse(src)
122
+ }
123
+ addr = ast.records.first
124
+ assert_equal('Address', addr.name)
125
+ end
126
+ def test_parse_header_text
127
+ src = <<-EOS
128
+ "05" "A single Header-Text"
129
+ EOS
130
+ ast = @parser.parse(src)
131
+ assert_instance_of(SyntaxTree, ast)
132
+ text = ast.records.first
133
+ assert_instance_of(SyntaxTree, text)
134
+ assert_equal('HeaderText', text.name)
135
+ assert_equal('05', text.rtype.value)
136
+ assert_equal('A single Header-Text', text.text.value)
137
+ end
138
+ def test_parse_incomplete_header_text
139
+ src = <<-EOS
140
+ "05" ""
141
+ EOS
142
+ ast = nil
143
+ assert_nothing_raised {
144
+ ast = @parser.parse(src)
145
+ }
146
+ text = ast.records.first
147
+ assert_equal('HeaderText', text.name)
148
+ end
149
+ def test_parse_position__delivery
150
+ src = <<-EOS
151
+ "10" "PositionNr" "EAN13" "IdBuyer"
152
+ "Quantity" "DeliveryDate" "PriceNetto" "PriceNetto * Quantity" "Discount"
153
+ "Discount * Quantity" "Special Discount" "Special Discount * Quantity"
154
+ "PriceBrutto" "PriceBrutto * Quantity"
155
+ EOS
156
+ # commented fields are not in the current version
157
+ ast = @parser.parse(src)
158
+ assert_instance_of(SyntaxTree, ast)
159
+ position = ast.records.first
160
+ assert_instance_of(SyntaxTree, position)
161
+ assert_equal('Position', position.name)
162
+ assert_equal('10', position.rtype.value)
163
+ assert_equal('PositionNr', position.lineno.value)
164
+ assert_equal('EAN13', position.eancode.value)
165
+ #assert_equal('IdSeller', position.sellercode.value)
166
+ assert_equal('IdBuyer', position.buyercode.value)
167
+ #assert_equal('Description 1', position.description1.value)
168
+ #assert_equal('Description 2', position.description2.value)
169
+ assert_equal('Quantity', position.qty.value)
170
+ #assert_equal('Commission', position.commission.value)
171
+ assert_equal('DeliveryDate', position.ddate.value)
172
+ #assert_equal('QuantityUnit', position.qtyunit.value)
173
+ #assert_equal('PriceUnit', position.priceunit.value)
174
+ assert_equal('PriceNetto', position.pricenettopce.value)
175
+ assert_equal('PriceNetto * Quantity', position.pricenetto.value)
176
+ assert_equal('Discount', position.discountpce.value)
177
+ assert_equal('Discount * Quantity', position.discount.value)
178
+ assert_equal('Special Discount', position.extradiscountpce.value)
179
+ assert_equal('Special Discount * Quantity', position.extradiscount.value)
180
+ assert_equal('PriceBrutto', position.pricebruttopce.value)
181
+ assert_equal('PriceBrutto * Quantity', position.pricebrutto.value)
182
+ #assert_equal('VAT', position.vat.value)
183
+ #assert_equal('OriginCountry', position.origin.value)
184
+ #assert_equal('Customs', position.customs.value)
185
+ end
186
+ def test_parse_position__invoice
187
+ src = <<-EOS
188
+ "10" "PositionNr" "EAN13" "IdBuyer"
189
+ "Quantity" "PriceNetto" "PriceNetto * Quantity" "Discount"
190
+ "Discount * Quantity" "Special Discount" "Special Discount * Quantity"
191
+ "PriceBrutto" "PriceBrutto * Quantity" "OriginCountry" "Customs"
192
+ EOS
193
+ # commented fields are not in the current version
194
+ ast = @parser.parse(src)
195
+ assert_instance_of(SyntaxTree, ast)
196
+ position = ast.records.first
197
+ assert_instance_of(SyntaxTree, position)
198
+ assert_equal('Position', position.name)
199
+ assert_equal('10', position.rtype.value)
200
+ assert_equal('PositionNr', position.lineno.value)
201
+ assert_equal('EAN13', position.eancode.value)
202
+ #assert_equal('IdSeller', position.sellercode.value)
203
+ assert_equal('IdBuyer', position.buyercode.value)
204
+ #assert_equal('Description 1', position.description1.value)
205
+ #assert_equal('Description 2', position.description2.value)
206
+ assert_equal('Quantity', position.qty.value)
207
+ #assert_equal('Commission', position.commission.value)
208
+ #assert_equal('DeliveryDate', position.ddate.value)
209
+ #assert_equal('QuantityUnit', position.qtyunit.value)
210
+ #assert_equal('PriceUnit', position.priceunit.value)
211
+ assert_equal('PriceNetto', position.pricenettopce.value)
212
+ assert_equal('PriceNetto * Quantity', position.pricenetto.value)
213
+ assert_equal('Discount', position.discountpce.value)
214
+ assert_equal('Discount * Quantity', position.discount.value)
215
+ assert_equal('Special Discount', position.extradiscountpce.value)
216
+ assert_equal('Special Discount * Quantity', position.extradiscount.value)
217
+ assert_equal('PriceBrutto', position.pricebruttopce.value)
218
+ assert_equal('PriceBrutto * Quantity', position.pricebrutto.value)
219
+ #assert_equal('VAT', position.vat.value)
220
+ assert_equal('OriginCountry', position.origin.value)
221
+ assert_equal('Customs', position.customs.value)
222
+ end
223
+ def test_parse_incomplete_position
224
+ src = <<-EOS
225
+ "10" "" "" "" "" "" "" "" "" "" "" "" "" ""
226
+ EOS
227
+ ast = nil
228
+ assert_nothing_raised {
229
+ ast = @parser.parse(src)
230
+ }
231
+ position = ast.records.first
232
+ assert_instance_of(SyntaxTree, position)
233
+ assert_equal('Position', position.name)
234
+ end
235
+ def test_parse_position_text
236
+ src = <<-EOS
237
+ "15" "A single Position-Text"
238
+ EOS
239
+ ast = @parser.parse(src)
240
+ assert_instance_of(SyntaxTree, ast)
241
+ text = ast.records.first
242
+ assert_instance_of(SyntaxTree, text)
243
+ assert_equal('PositionText', text.name)
244
+ assert_equal('15', text.rtype.value)
245
+ assert_equal('A single Position-Text', text.text.value)
246
+ end
247
+ def test_parse_incomplete_position_text
248
+ src = <<-EOS
249
+ "15" ""
250
+ EOS
251
+ ast = nil
252
+ assert_nothing_raised {
253
+ ast = @parser.parse(src)
254
+ }
255
+ text = ast.records.first
256
+ assert_equal('PositionText', text.name)
257
+ end
258
+ def test_parse_total
259
+ src = <<-EOS
260
+ "90" "Price Netto" "VAT %" "VAT Amount" "Price Brutto" "Agreement"
261
+ EOS
262
+ ast = @parser.parse(src)
263
+ assert_instance_of(SyntaxTree, ast)
264
+ total = ast.records.first
265
+ assert_instance_of(SyntaxTree, total)
266
+ assert_equal('Footer', total.name)
267
+ assert_equal('90', total.rtype.value)
268
+ assert_equal('Price Netto', total.pricenetto.value)
269
+ assert_equal('VAT %', total.vatpercent.value)
270
+ assert_equal('VAT Amount', total.vatamount.value)
271
+ assert_equal('Price Brutto', total.pricebrutto.value)
272
+ assert_equal('Agreement', total.agreement.value)
273
+ end
274
+ def test_parse_incomplete_total
275
+ src = <<-EOS
276
+ "90" "" "" "" "" ""
277
+ EOS
278
+ ast = nil
279
+ assert_nothing_raised {
280
+ ast = @parser.parse(src)
281
+ }
282
+ total = ast.records.first
283
+ assert_equal('Footer', total.name)
284
+ end
285
+ def test_parse
286
+ src = <<-EOS
287
+ "00" "Plica" "Winterhalter&Fenner" "20040630" "1621" "INVOIC" "0"
288
+ "01" "000" "00112327" "20040630" "PLVH-087/PLVH-087627" "D-473010 L" "OC" "SAD"
289
+ "02" "SE" "PLICA AG ***** TEST *********" "" "ZUERCHERSTRASSE 350" "FRAUENFELD" "8500" "CH"
290
+ "02" "CU" "WINTERHALTER + FENNER AG" "" "BIRGISTRASSE 10" "WALLISELLEN" "8304" "CH"
291
+ "02" "EP" "RUSSO GIOVANNI" "" "" "" "" ""
292
+ "02" "BY" "WINTERHALTER + FENNER AG" "" "BIRGISTRASSE 10" "WALLISELLEN" "8304" "CH"
293
+ "02" "DP" "WINTERHALTER + FENNER AG" "FILIALE LITTAU" "GROSSMATTE 11 / POSTFACH" "LITTAU" "6014" "CH"
294
+ "10" "5" "" "121.763.703" "10" "0" "0" "0" "0" "0" "0" "0" "0" "" ""
295
+ "10" "10" "" "125.001.309" "600" "115" "690" "21.85" "131.1" "0" "0" "93.15" "558.9" "CZ" "Z08151515"
296
+ "10" "15" "" "125.001.509" "60" "275" "165" "27.5" "16.5" "0" "0" "247.5" "148.5" "" ""
297
+ "10" "20" "" "125.091.409" "180" "420" "756" "0" "0" "0" "0" "420" "756" "" ""
298
+ "10" "25" "" "125.293.400" "50" "371" "185.5" "129.9" "64.95" "0" "0" "241.1" "120.55" "" ""
299
+ "10" "30" "" "125.293.600" "100" "773" "773" "270.55" "270.55" "0" "0" "502.45" "502.45" "" ""
300
+ "10" "90" "" "125.293.700" "100" "1082" "1082" "378.7" "378.7" "0" "0" "703.3" "703.3" "" ""
301
+ "90" "2789.7" "7.60" "212" "3001.7" "10 Tage 3%, 30 Tage 2%, 60 Tage netto"
302
+ EOS
303
+ assert_nothing_raised {
304
+ @parser.parse(src)
305
+ }
306
+ end
307
+ end
308
+ end
309
+ end
@@ -0,0 +1,65 @@
1
+ #!/usr/bin/env ruby
2
+ # I2::TestPosition -- xmlconv2 -- 02.06.2004 -- hwyss@ywesee.com
3
+
4
+ $: << File.dirname(__FILE__)
5
+ $: << File.expand_path('../../src', File.dirname(__FILE__))
6
+
7
+ require 'test/unit'
8
+ require 'i2/position'
9
+ require 'mock'
10
+
11
+ module XmlConv
12
+ module I2
13
+ class TestPosition < Test::Unit::TestCase
14
+ class ToSMock < Mock
15
+ def is_a?(klass)
16
+ true
17
+ end
18
+ def to_s
19
+ true
20
+ end
21
+ end
22
+ def setup
23
+ @position = Position.new
24
+ end
25
+ def test_attr_accessors
26
+ assert_respond_to(@position, :number)
27
+ assert_respond_to(@position, :number=)
28
+ assert_respond_to(@position, :article_ean)
29
+ assert_respond_to(@position, :article_ean=)
30
+ assert_respond_to(@position, :qty)
31
+ assert_respond_to(@position, :qty=)
32
+ assert_respond_to(@position, :delivery_date)
33
+ assert_respond_to(@position, :delivery_date=)
34
+ end
35
+ def test_to_s
36
+ @position.number = '12345'
37
+ @position.article_ean = '7654321098765'
38
+ @position.qty = 123
39
+ date = ToSMock.new('Date')
40
+ date.__next(:code=) {}
41
+ @position.delivery_date = date
42
+ date.__next(:is_a?) { |klass|
43
+ assert_equal(I2::Date, klass)
44
+ true
45
+ }
46
+ date.__next(:to_s) { "540:A Date\n" }
47
+ expected = <<-EOS
48
+ 500:12345
49
+ 501:7654321098765
50
+ 520:123
51
+ 540:A Date
52
+ EOS
53
+ assert_equal(expected, @position.to_s)
54
+ end
55
+ def test_delivery_date_writer
56
+ date = Mock.new('DeliveryDate')
57
+ date.__next(:code=) { |code|
58
+ assert_equal(:delivery, code)
59
+ }
60
+ @position.delivery_date = date
61
+ date.__verify
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,312 @@
1
+ #!/usr/bin/env ruby
2
+ # Integration::TestGehI2 -- xmlconv2 -- 23.05.2006 -- hwyss@ywesee.com
3
+
4
+ $: << File.dirname(__FILE__)
5
+ $: << File.expand_path('../../src', File.dirname(__FILE__))
6
+
7
+ require 'test/unit'
8
+ require 'conversion/geh_bdd'
9
+ require 'conversion/bdd_i2'
10
+ require 'mock'
11
+
12
+ module XmlConv
13
+ module Integration
14
+ class TestGehI2 < Test::Unit::TestCase
15
+ def setup
16
+ @src = <<-EOS
17
+ <?xml version="1.0" encoding="UTF-8"?>
18
+ <OrderRequest>
19
+ <OrderRequestHeader>
20
+ <OrderRequestNumber>
21
+ <BuyerOrderRequestNumber>B-999999</BuyerOrderRequestNumber>
22
+ </OrderRequestNumber>
23
+ <OrderRequestIssueDate>20060511T13:30:35</OrderRequestIssueDate>
24
+ <Purpose>
25
+ <PurposeCoded>InformationOnly</PurposeCoded>
26
+ </Purpose>
27
+ <RequestedResponse>
28
+ <RequestedResponseCoded>NoAcknowledgementNeeded</RequestedResponseCoded>
29
+ </RequestedResponse>
30
+ <OrderRequestCurrency>
31
+ <Currency>
32
+ <CurrencyCoded>CHF</CurrencyCoded>
33
+ </Currency>
34
+ </OrderRequestCurrency>
35
+ <OrderRequestLanguage>
36
+ <Language>
37
+ <LanguageCoded>ge</LanguageCoded>
38
+ </Language>
39
+ </OrderRequestLanguage>
40
+ <OrderRequestParty>
41
+ <BuyerParty>
42
+ <Party>
43
+ <PartyID>
44
+ <Identifier>
45
+ <Ident>123456</Ident>
46
+ </Identifier>
47
+ </PartyID>
48
+ <NameAddress>
49
+ <Name1>Grossauer Elektro - Handels AG</Name1>
50
+ <Name2></Name2>
51
+ <Street>Thalerstrasse 1</Street>
52
+ <City>Heiden</City>
53
+ <PostalCode>9410</PostalCode>
54
+ </NameAddress>
55
+ <OrderContact>
56
+ <Contact>
57
+ <ContactName>Danilo Lanzafame</ContactName>
58
+ </Contact>
59
+ </OrderContact>
60
+ </Party>
61
+ </BuyerParty>
62
+ <SellerParty>
63
+ <Party>
64
+ <NameAddress>
65
+ <Name1>Test AG</Name1>
66
+ <Name2>TestName2</Name2>
67
+ <Street>Brunnengasse 3</Street>
68
+ <City>8302</City>
69
+ <PostalCode>Kloten</PostalCode>
70
+ </NameAddress>
71
+ </Party>
72
+ </SellerParty>
73
+ </OrderRequestParty>
74
+ <OrderTermsOfDelivery>
75
+ <TermsOfDelivery>
76
+ <TermsOfDeliveryFunctionCoded>Other</TermsOfDeliveryFunctionCoded>
77
+ <TermsOfDeliveryFunctionCodedOther>wird abgeholt</TermsOfDeliveryFunctionCodedOther>
78
+ <TransportTermsCoded>Other</TransportTermsCoded>
79
+ <TransportTermsCodedOther>Auto EK</TransportTermsCodedOther>
80
+ <ShipmentMethodOfPaymentCoded>Other</ShipmentMethodOfPaymentCoded>
81
+ <ShipmentMethodOfPaymentCodedOther>Franko Domizil</ShipmentMethodOfPaymentCodedOther>
82
+ <Location>
83
+ <NameAddress>
84
+ <Name1>GROSSAUER Elektro-Handels AG</Name1>
85
+ <Name2>
86
+ </Name2>
87
+ <Street>Thalerstrasse 1</Street>
88
+ <City>Heiden</City>
89
+ <PostalCode>9410</PostalCode>
90
+ </NameAddress>
91
+ </Location>
92
+ </TermsOfDelivery>
93
+ </OrderTermsOfDelivery>
94
+ </OrderRequestHeader>
95
+ <OrderRequestDetail>
96
+ <OrderDetail>
97
+ <ListOfItemDetail>
98
+ <ItemDetail>
99
+ <BaseItemDetail>
100
+ <LineItemNum>
101
+ <BuyerLineItemNum>10</BuyerLineItemNum>
102
+ </LineItemNum>
103
+ <ItemIdentifiers>
104
+ <PartNumbers>
105
+ <SellerPartNumber>
106
+ <PartNum>
107
+ <SellerPartNumberPartID>123123123</SellerPartNumberPartID>
108
+ </PartNum>
109
+ </SellerPartNumber>
110
+ <BuyerPartNumber>
111
+ <PartNum>
112
+ <BuyerPartNumberPartID>123 890 390</BuyerPartNumberPartID>
113
+ </PartNum>
114
+ </BuyerPartNumber>
115
+ </PartNumbers>
116
+ <CommodityCode>
117
+ <Identifier>
118
+ <Agency>
119
+ <AgencyCoded>EAN</AgencyCoded>
120
+ </Agency>
121
+ </Identifier>
122
+ </CommodityCode>
123
+ </ItemIdentifiers>
124
+ <TotalQuantity>
125
+ <Quantity>
126
+ <QuantityValue>3</QuantityValue>
127
+ <UnitOfMeasurement>
128
+ <UOMCoded>Other</UOMCoded>
129
+ <UOMCodedOther>Other</UOMCodedOther>
130
+ </UnitOfMeasurement>
131
+ </Quantity>
132
+ </TotalQuantity>
133
+ </BaseItemDetail>
134
+ <PricingDetail>
135
+ <ListOfPrice>
136
+ <Price>
137
+ <UnitPrice>
138
+ <UnitPriceValue>780.00</UnitPriceValue>
139
+ <Currency>
140
+ <CurrencyCoded>CHF</CurrencyCoded>
141
+ </Currency>
142
+ </UnitPrice>
143
+ <PriceBasisQuantity>
144
+ <Quantity>
145
+ <UnitOfMeasurement>
146
+ <UOMCoded>100</UOMCoded>
147
+ </UnitOfMeasurement>
148
+ </Quantity>
149
+ </PriceBasisQuantity>
150
+ <PriceMultiplier>
151
+ <PriceMultiplierCoded>DiscountMultiplier</PriceMultiplierCoded>
152
+ <Multiplier>.68</Multiplier>
153
+ </PriceMultiplier>
154
+ </Price>
155
+ </ListOfPrice>
156
+ <Tax>
157
+ <TaxFunctionQualifierCoded>Tax</TaxFunctionQualifierCoded>
158
+ <TaxAmount>1.17</TaxAmount>
159
+ </Tax>
160
+ </PricingDetail>
161
+ <DeliveryDetail>
162
+ <ListOfScheduleLine>
163
+ <ScheduleLine>
164
+ <Quantity>
165
+ <QuantityValue>3</QuantityValue>
166
+ <UnitOfMeasurement>
167
+ <UOMCoded>STK</UOMCoded>
168
+ </UnitOfMeasurement>
169
+ </Quantity>
170
+ <RequestedDeliveryDate>20060516T13:30:35</RequestedDeliveryDate>
171
+ </ScheduleLine>
172
+ </ListOfScheduleLine>
173
+ </DeliveryDetail>
174
+ <LineItemNote></LineItemNote>
175
+ </ItemDetail>
176
+ <ItemDetail>
177
+ <BaseItemDetail>
178
+ <LineItemNum>
179
+ <BuyerLineItemNum>20</BuyerLineItemNum>
180
+ </LineItemNum>
181
+ <ItemIdentifiers>
182
+ <PartNumbers>
183
+ <SellerPartNumber>
184
+ <PartNum>
185
+ <SellerPartNumberPartID>234236837482</SellerPartNumberPartID>
186
+ </PartNum>
187
+ </SellerPartNumber>
188
+ <BuyerPartNumber>
189
+ <PartNum>
190
+ <BuyerPartNumberPartID>283 222 011</BuyerPartNumberPartID>
191
+ </PartNum>
192
+ </BuyerPartNumber>
193
+ </PartNumbers>
194
+ <CommodityCode>
195
+ <Identifier>
196
+ <Agency>
197
+ <AgencyCoded>EAN</AgencyCoded>
198
+ </Agency>
199
+ </Identifier>
200
+ </CommodityCode>
201
+ </ItemIdentifiers>
202
+ <TotalQuantity>
203
+ <Quantity>
204
+ <QuantityValue>10</QuantityValue>
205
+ <UnitOfMeasurement>
206
+ <UOMCoded>Other</UOMCoded>
207
+ <UOMCodedOther>Other</UOMCodedOther>
208
+ </UnitOfMeasurement>
209
+ </Quantity>
210
+ </TotalQuantity>
211
+ </BaseItemDetail>
212
+ <PricingDetail>
213
+ <ListOfPrice>
214
+ <Price>
215
+ <UnitPrice>
216
+ <UnitPriceValue>330.00</UnitPriceValue>
217
+ <Currency>
218
+ <CurrencyCoded>CHF</CurrencyCoded>
219
+ </Currency>
220
+ </UnitPrice>
221
+ <PriceBasisQuantity>
222
+ <Quantity>
223
+ <UnitOfMeasurement>
224
+ <UOMCoded>100</UOMCoded>
225
+ </UnitOfMeasurement>
226
+ </Quantity>
227
+ </PriceBasisQuantity>
228
+ <PriceMultiplier>
229
+ <PriceMultiplierCoded>DiscountMultiplier</PriceMultiplierCoded>
230
+ <Multiplier>.68</Multiplier>
231
+ </PriceMultiplier>
232
+ </Price>
233
+ </ListOfPrice>
234
+ <Tax>
235
+ <TaxFunctionQualifierCoded>Tax</TaxFunctionQualifierCoded>
236
+ <TaxAmount>1.71</TaxAmount>
237
+ </Tax>
238
+ </PricingDetail>
239
+ <DeliveryDetail>
240
+ <ListOfScheduleLine>
241
+ <ScheduleLine>
242
+ <Quantity>
243
+ <QuantityValue>10</QuantityValue>
244
+ <UnitOfMeasurement>
245
+ <UOMCoded>STK</UOMCoded>
246
+ </UnitOfMeasurement>
247
+ </Quantity>
248
+ <RequestedDeliveryDate>20060516T13:30:35</RequestedDeliveryDate>
249
+ </ScheduleLine>
250
+ </ListOfScheduleLine>
251
+ </DeliveryDetail>
252
+ <LineItemNote></LineItemNote>
253
+ </ItemDetail>
254
+ </ListOfItemDetail>
255
+ </OrderDetail>
256
+ </OrderRequestDetail>
257
+ </OrderRequest>
258
+ EOS
259
+ @xml_doc = REXML::Document.new(@src)
260
+ end
261
+ def test_geh_i2
262
+ bdd = Conversion::GehBdd.convert(@xml_doc)
263
+ i2_doc = Conversion::BddI2.convert(bdd)
264
+ result = i2_doc.to_s.split("\n")
265
+ expected = <<-EOS
266
+ 001:EPIN_PL
267
+ 002:ORDERX
268
+ 003:220
269
+ 010:#{i2_doc.filename}
270
+ 100:123456
271
+ 101:B-999999
272
+ 201:EP
273
+ 220:Danilo Lanzafame
274
+ 201:BY
275
+ 202:123456
276
+ 220:Grossauer Elektro - Handels AG
277
+ 222:Thalerstrasse 1
278
+ 223:Heiden
279
+ 225:9410
280
+ 201:DP
281
+ 220:GROSSAUER Elektro-Handels AG
282
+ 222:Thalerstrasse 1
283
+ 223:Heiden
284
+ 225:9410
285
+ 237:61
286
+ 238:070
287
+ 300:4
288
+ 301:#{Date.today.strftime('%Y%m%d')}
289
+ 500:10
290
+ 501:123123123
291
+ 502:123 890 390
292
+ 520:3
293
+ 521:Other
294
+ 540:2
295
+ 541:20060516
296
+ 604:780.00
297
+ 500:20
298
+ 501:234236837482
299
+ 502:283 222 011
300
+ 520:10
301
+ 521:Other
302
+ 540:2
303
+ 541:20060516
304
+ 604:330.00
305
+ EOS
306
+ expected.split("\n").each_with_index { |line, index|
307
+ assert_equal(line, result[index])
308
+ }
309
+ end
310
+ end
311
+ end
312
+ end