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.
- data/History.txt +6 -0
- data/LICENCE.txt +339 -0
- data/Manifest.txt +107 -0
- data/README.txt +25 -0
- data/Rakefile +28 -0
- data/bin/admin +65 -0
- data/bin/xmlconvd +19 -0
- data/data/grammar/i2.grammar +73 -0
- data/src/conversion/bdd_geh.rb +281 -0
- data/src/conversion/bdd_i2.rb +102 -0
- data/src/conversion/bdd_xml.rb +242 -0
- data/src/conversion/geh_bdd.rb +165 -0
- data/src/conversion/i2_bdd.rb +271 -0
- data/src/conversion/xml_bdd.rb +125 -0
- data/src/custom/lookandfeel.rb +47 -0
- data/src/i2/address.rb +33 -0
- data/src/i2/date.rb +37 -0
- data/src/i2/document.rb +26 -0
- data/src/i2/header.rb +24 -0
- data/src/i2/order.rb +44 -0
- data/src/i2/parser.rb +25 -0
- data/src/i2/position.rb +37 -0
- data/src/i2/record.rb +11 -0
- data/src/model/address.rb +20 -0
- data/src/model/agreement.rb +10 -0
- data/src/model/bdd.rb +26 -0
- data/src/model/bsr.rb +16 -0
- data/src/model/delivery.rb +15 -0
- data/src/model/delivery_item.rb +18 -0
- data/src/model/freetext_container.rb +26 -0
- data/src/model/id_container.rb +15 -0
- data/src/model/invoice.rb +18 -0
- data/src/model/invoice_item.rb +11 -0
- data/src/model/item.rb +19 -0
- data/src/model/item_container.rb +15 -0
- data/src/model/name.rb +27 -0
- data/src/model/part_info.rb +10 -0
- data/src/model/part_info_container.rb +15 -0
- data/src/model/party.rb +23 -0
- data/src/model/party_container.rb +20 -0
- data/src/model/price.rb +10 -0
- data/src/model/price_container.rb +18 -0
- data/src/model/transaction.rb +28 -0
- data/src/state/global.rb +28 -0
- data/src/state/global_predefine.rb +11 -0
- data/src/state/login.rb +38 -0
- data/src/state/transaction.rb +13 -0
- data/src/state/transactions.rb +130 -0
- data/src/util/application.rb +143 -0
- data/src/util/destination.rb +130 -0
- data/src/util/invoicer.rb +72 -0
- data/src/util/known_user.rb +16 -0
- data/src/util/polling_manager.rb +78 -0
- data/src/util/session.rb +23 -0
- data/src/util/transaction.rb +105 -0
- data/src/util/validator.rb +20 -0
- data/src/view/foot.rb +27 -0
- data/src/view/head.rb +13 -0
- data/src/view/login.rb +36 -0
- data/src/view/navigation.rb +30 -0
- data/src/view/navigationlink.rb +21 -0
- data/src/view/pager.rb +73 -0
- data/src/view/preformatted.rb +39 -0
- data/src/view/template.rb +17 -0
- data/src/view/transaction.rb +42 -0
- data/src/view/transactions.rb +90 -0
- data/test/mock.rb +149 -0
- data/test/suite.rb +16 -0
- data/test/test_conversion/bdd_geh.rb +533 -0
- data/test/test_conversion/bdd_i2.rb +314 -0
- data/test/test_conversion/bdd_xml.rb +556 -0
- data/test/test_conversion/geh_bdd.rb +372 -0
- data/test/test_conversion/i2_bdd.rb +804 -0
- data/test/test_conversion/xml_bdd.rb +203 -0
- data/test/test_i2/address.rb +88 -0
- data/test/test_i2/date.rb +49 -0
- data/test/test_i2/document.rb +62 -0
- data/test/test_i2/header.rb +39 -0
- data/test/test_i2/order.rb +94 -0
- data/test/test_i2/parser.rb +309 -0
- data/test/test_i2/position.rb +65 -0
- data/test/test_integration/geh_i2.rb +312 -0
- data/test/test_integration/i2_geh.rb +449 -0
- data/test/test_integration/i2_xml.rb +162 -0
- data/test/test_integration/xml_i2.rb +254 -0
- data/test/test_model/address.rb +35 -0
- data/test/test_model/agreement.rb +22 -0
- data/test/test_model/bdd.rb +55 -0
- data/test/test_model/bsr.rb +38 -0
- data/test/test_model/delivery.rb +79 -0
- data/test/test_model/delivery_item.rb +52 -0
- data/test/test_model/freetext_container.rb +45 -0
- data/test/test_model/invoice.rb +65 -0
- data/test/test_model/invoice_item.rb +41 -0
- data/test/test_model/name.rb +57 -0
- data/test/test_model/part_info.rb +24 -0
- data/test/test_model/party.rb +96 -0
- data/test/test_model/price.rb +24 -0
- data/test/test_util/application.rb +168 -0
- data/test/test_util/destination.rb +197 -0
- data/test/test_util/invoicer.rb +36 -0
- data/test/test_util/polling_manager.rb +111 -0
- data/test/test_util/transaction.rb +129 -0
- data/user-stories/UserStories_XmlConv2.txt +381 -0
- data/user-stories/doku/ABB.incoming.HTTP.invoice.xml +315 -0
- data/user-stories/doku/ABB.received.xml +259 -0
- data/user-stories/doku/BO_OrderProcessing.sxw +0 -0
- metadata +195 -0
data/src/i2/date.rb
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# I2::Date -- xmlconv2 -- 02.06.2004 -- hwyss@ywesee.com
|
|
3
|
+
|
|
4
|
+
require 'date'
|
|
5
|
+
|
|
6
|
+
module XmlConv
|
|
7
|
+
module I2
|
|
8
|
+
class Date < ::Date
|
|
9
|
+
attr_accessor :code
|
|
10
|
+
class << self
|
|
11
|
+
def from_date(date)
|
|
12
|
+
self.new(date.year, date.month, date.day)
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
def to_s
|
|
16
|
+
# NOTE
|
|
17
|
+
# DTSTTCPW here and now is to allow only two possibilities for
|
|
18
|
+
# I2::Date:
|
|
19
|
+
# Order-Date on the Order-Level (300:4\n301:strftime) and
|
|
20
|
+
# Delivery-Date on the Position-Level (540:2\n540:strftime)
|
|
21
|
+
# This code is likely to change.
|
|
22
|
+
fmtd = strftime("%Y%m%d")
|
|
23
|
+
if(@code == :delivery)
|
|
24
|
+
<<-EOS
|
|
25
|
+
540:2
|
|
26
|
+
541:#{fmtd}
|
|
27
|
+
EOS
|
|
28
|
+
else
|
|
29
|
+
<<-EOS
|
|
30
|
+
300:4
|
|
31
|
+
301:#{fmtd}
|
|
32
|
+
EOS
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
data/src/i2/document.rb
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# I2::Document -- xmlconv2 -- 02.06.2004 -- hwyss@ywesee.com
|
|
3
|
+
|
|
4
|
+
require 'i2/header'
|
|
5
|
+
require 'i2/order'
|
|
6
|
+
|
|
7
|
+
module XmlConv
|
|
8
|
+
module I2
|
|
9
|
+
class Document
|
|
10
|
+
attr_accessor :header
|
|
11
|
+
attr_reader :orders
|
|
12
|
+
def initialize
|
|
13
|
+
@orders = []
|
|
14
|
+
end
|
|
15
|
+
def add_order(order)
|
|
16
|
+
@orders.push(order)
|
|
17
|
+
end
|
|
18
|
+
def filename
|
|
19
|
+
@header.filename
|
|
20
|
+
end
|
|
21
|
+
def to_s
|
|
22
|
+
([@header] + @orders).join
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
data/src/i2/header.rb
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# I2::Header -- xmlconv2 -- 02.06.2004 -- hwyss@ywesee.com
|
|
3
|
+
|
|
4
|
+
module XmlConv
|
|
5
|
+
module I2
|
|
6
|
+
class Header
|
|
7
|
+
attr_accessor :recipient_id, :filename
|
|
8
|
+
def initialize
|
|
9
|
+
@recipient_id = 'EPIN_PL'
|
|
10
|
+
time = Time.now
|
|
11
|
+
msec = sprintf('%03i', (time.to_f * 1000).to_i % 100)
|
|
12
|
+
@filename = time.strftime("#{@recipient_id}_%Y%m%d%H%M%S#{msec}.dat")
|
|
13
|
+
end
|
|
14
|
+
def to_s
|
|
15
|
+
<<-EOS
|
|
16
|
+
001:#{@recipient_id}
|
|
17
|
+
002:ORDERX
|
|
18
|
+
003:220
|
|
19
|
+
010:#{@filename}
|
|
20
|
+
EOS
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
data/src/i2/order.rb
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# I2::Order -- xmlconv2 -- 02.06.2004 -- hwyss@ywesee.com
|
|
3
|
+
|
|
4
|
+
module XmlConv
|
|
5
|
+
module I2
|
|
6
|
+
class Order
|
|
7
|
+
I2_DELIVERY_CODES = {
|
|
8
|
+
:pickup => '070',
|
|
9
|
+
:delivery => '060',
|
|
10
|
+
:camion => '010',
|
|
11
|
+
}
|
|
12
|
+
attr_accessor :sender_id, :delivery_id, :terms_cond
|
|
13
|
+
attr_reader :addresses, :dates, :positions
|
|
14
|
+
def initialize
|
|
15
|
+
@addresses = []
|
|
16
|
+
@dates = []
|
|
17
|
+
@positions = []
|
|
18
|
+
end
|
|
19
|
+
def add_address(address)
|
|
20
|
+
@addresses.push(address)
|
|
21
|
+
end
|
|
22
|
+
def add_date(date)
|
|
23
|
+
@dates.push(date)
|
|
24
|
+
end
|
|
25
|
+
def add_position(position)
|
|
26
|
+
@positions.push(position)
|
|
27
|
+
end
|
|
28
|
+
def to_s
|
|
29
|
+
output = <<-EOS
|
|
30
|
+
100:#{@sender_id}
|
|
31
|
+
101:#{@delivery_id}
|
|
32
|
+
EOS
|
|
33
|
+
@addresses.each { |addr| output << addr.to_s }
|
|
34
|
+
output << "237:61\n"
|
|
35
|
+
if(terms = I2_DELIVERY_CODES[@terms_cond])
|
|
36
|
+
output << sprintf("238:%s\n", terms)
|
|
37
|
+
end
|
|
38
|
+
@dates.each { |date| output << date.to_s }
|
|
39
|
+
@positions.each { |pos| output << pos.to_s }
|
|
40
|
+
output
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
data/src/i2/parser.rb
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# I2::Parser -- xmlconv2 -- 28.06.2004 -- hwyss@ywesee.com
|
|
3
|
+
|
|
4
|
+
require 'rockit/rockit'
|
|
5
|
+
|
|
6
|
+
module XmlConv
|
|
7
|
+
module I2
|
|
8
|
+
GRAMMAR_DIR = File.expand_path('../../data/grammar',
|
|
9
|
+
File.dirname(__FILE__))
|
|
10
|
+
def cached_parser
|
|
11
|
+
grammar_path = File.expand_path('i2.grammar', GRAMMAR_DIR)
|
|
12
|
+
parser_path = File.expand_path('i2_parser.rb', GRAMMAR_DIR)
|
|
13
|
+
old_path = File.expand_path('i2.grammar.old', GRAMMAR_DIR)
|
|
14
|
+
src = File.read(grammar_path)
|
|
15
|
+
unless(File.exists?(old_path) && File.read(old_path) == src)
|
|
16
|
+
File.delete(old_path) if File.exists?(old_path)
|
|
17
|
+
Parse.generate_parser_from_file_to_file(grammar_path, parser_path, "make_i2_parser", 'XmlConv')
|
|
18
|
+
File.open(old_path, 'w') { |f| f << src }
|
|
19
|
+
end
|
|
20
|
+
require parser_path
|
|
21
|
+
XmlConv.make_i2_parser
|
|
22
|
+
end
|
|
23
|
+
module_function :cached_parser
|
|
24
|
+
end
|
|
25
|
+
end
|
data/src/i2/position.rb
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# I2::Position -- xmlconv2 -- 02.06.2004 -- hwyss@ywesee.com
|
|
3
|
+
|
|
4
|
+
require 'i2/date'
|
|
5
|
+
|
|
6
|
+
module XmlConv
|
|
7
|
+
module I2
|
|
8
|
+
class Position
|
|
9
|
+
attr_accessor :number, :article_ean, :qty, :customer_id, :price, :unit
|
|
10
|
+
attr_reader :delivery_date
|
|
11
|
+
def delivery_date=(date)
|
|
12
|
+
date.code = :delivery
|
|
13
|
+
@delivery_date = date
|
|
14
|
+
end
|
|
15
|
+
def to_s
|
|
16
|
+
output = <<-EOS
|
|
17
|
+
500:#{@number}
|
|
18
|
+
501:#{@article_ean}
|
|
19
|
+
EOS
|
|
20
|
+
if(@customer_id)
|
|
21
|
+
output << sprintf("502:%s\n", @customer_id)
|
|
22
|
+
end
|
|
23
|
+
output << sprintf("520:%s\n", @qty)
|
|
24
|
+
if(@unit)
|
|
25
|
+
output << sprintf("521:%s\n", @unit)
|
|
26
|
+
end
|
|
27
|
+
if(@delivery_date.is_a?(I2::Date))
|
|
28
|
+
output << @delivery_date.to_s
|
|
29
|
+
end
|
|
30
|
+
if(@price)
|
|
31
|
+
output << sprintf("604:%s\n", @price)
|
|
32
|
+
end
|
|
33
|
+
output
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
data/src/i2/record.rb
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# AddressLine -- xmlconv2 -- 01.06.2004 -- hwyss@ywesee.com
|
|
3
|
+
|
|
4
|
+
module XmlConv
|
|
5
|
+
module Model
|
|
6
|
+
class Address
|
|
7
|
+
attr_accessor :city, :zip_code, :country
|
|
8
|
+
attr_reader :lines
|
|
9
|
+
def initialize
|
|
10
|
+
@lines = []
|
|
11
|
+
end
|
|
12
|
+
def add_line(line)
|
|
13
|
+
lines.push(line)
|
|
14
|
+
end
|
|
15
|
+
def size
|
|
16
|
+
@lines.size
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
data/src/model/bdd.rb
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# Bdd -- xmlconv2 -- 01.06.2004 -- hwyss@ywesee.com
|
|
3
|
+
|
|
4
|
+
module XmlConv
|
|
5
|
+
module Model
|
|
6
|
+
class Bdd
|
|
7
|
+
attr_accessor :bsr
|
|
8
|
+
attr_reader :deliveries, :invoices
|
|
9
|
+
def initialize
|
|
10
|
+
@deliveries = []
|
|
11
|
+
@invoices = []
|
|
12
|
+
end
|
|
13
|
+
def add_delivery(delivery)
|
|
14
|
+
@deliveries.push(delivery)
|
|
15
|
+
end
|
|
16
|
+
def add_invoice(invoice)
|
|
17
|
+
@invoices.push(invoice)
|
|
18
|
+
end
|
|
19
|
+
def invoiced_amount
|
|
20
|
+
@invoices.inject(0) { |memo, invoice|
|
|
21
|
+
memo + invoice.get_price('SummePositionen').amount.to_f
|
|
22
|
+
}
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
data/src/model/bsr.rb
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# Bsr -- xmlconv2 -- 01.06.2004 -- hwyss@ywesee.com
|
|
3
|
+
|
|
4
|
+
require 'model/party_container'
|
|
5
|
+
|
|
6
|
+
module XmlConv
|
|
7
|
+
module Model
|
|
8
|
+
class Bsr
|
|
9
|
+
include PartyContainer
|
|
10
|
+
attr_accessor :timestamp, :noun, :verb
|
|
11
|
+
def bsr_id
|
|
12
|
+
@customer.party_id unless(@customer.nil?)
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# Delivery -- xmlconv -- 01.06.2004 -- hwyss@ywesee.com
|
|
3
|
+
|
|
4
|
+
require 'model/transaction'
|
|
5
|
+
|
|
6
|
+
module XmlConv
|
|
7
|
+
module Model
|
|
8
|
+
class Delivery < Transaction
|
|
9
|
+
attr_accessor :bsr
|
|
10
|
+
def bsr_id
|
|
11
|
+
@bsr.bsr_id unless(@bsr.nil?)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# DeliveryItem -- xmlconv2 -- 01.06.2004 -- hwyss@ywesee.com
|
|
3
|
+
|
|
4
|
+
require 'model/item'
|
|
5
|
+
|
|
6
|
+
module XmlConv
|
|
7
|
+
module Model
|
|
8
|
+
class DeliveryItem < Item
|
|
9
|
+
attr_accessor :delivery_date
|
|
10
|
+
def et_nummer_id
|
|
11
|
+
self.ids['ET-NUMMER']
|
|
12
|
+
end
|
|
13
|
+
def customer_id
|
|
14
|
+
self.ids['LIEFERANTENARTIKEL']
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# FreeTextContainer -- xmlconv2 -- 22.06.2004 -- hwyss@ywesee.com
|
|
3
|
+
|
|
4
|
+
module XmlConv
|
|
5
|
+
module Model
|
|
6
|
+
class FreeText < String
|
|
7
|
+
attr_accessor :type
|
|
8
|
+
def <<(other)
|
|
9
|
+
if(empty? || other.empty?)
|
|
10
|
+
super
|
|
11
|
+
else
|
|
12
|
+
super("\n" << other)
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
module FreeTextContainer
|
|
17
|
+
attr_reader :free_text
|
|
18
|
+
def add_free_text(type, text)
|
|
19
|
+
@free_text ||= FreeText.new
|
|
20
|
+
@free_text.type = type
|
|
21
|
+
@free_text << text.to_s
|
|
22
|
+
@free_text
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# IdContainer -- xmlconv2 -- 01.06.2004 -- hwyss@ywesee.com
|
|
3
|
+
|
|
4
|
+
module XmlConv
|
|
5
|
+
module Model
|
|
6
|
+
module IdContainer
|
|
7
|
+
def add_id(domain, value)
|
|
8
|
+
self.ids.store(domain, value)
|
|
9
|
+
end
|
|
10
|
+
def ids
|
|
11
|
+
@ids ||= {}
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# Model::Invoice -- xmlconv2 -- 22.06.2004 -- hwyss@ywesee.com
|
|
3
|
+
|
|
4
|
+
require 'model/transaction'
|
|
5
|
+
|
|
6
|
+
module XmlConv
|
|
7
|
+
module Model
|
|
8
|
+
class Invoice < Transaction
|
|
9
|
+
attr_reader :delivery_id, :invoice_id
|
|
10
|
+
def add_delivery_id(domain, idstr)
|
|
11
|
+
@delivery_id = [domain, idstr]
|
|
12
|
+
end
|
|
13
|
+
def add_invoice_id(domain, idstr)
|
|
14
|
+
@invoice_id = [domain, idstr]
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
data/src/model/item.rb
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# Model::Item -- xmlconv2 -- 23.06.2004 -- hwyss@ywesee.com
|
|
3
|
+
|
|
4
|
+
require 'model/id_container'
|
|
5
|
+
require 'model/freetext_container'
|
|
6
|
+
require 'model/part_info_container'
|
|
7
|
+
require 'model/price_container'
|
|
8
|
+
|
|
9
|
+
module XmlConv
|
|
10
|
+
module Model
|
|
11
|
+
class Item
|
|
12
|
+
attr_accessor :line_no, :qty, :unit
|
|
13
|
+
include IdContainer
|
|
14
|
+
include FreeTextContainer
|
|
15
|
+
include PartInfoContainer
|
|
16
|
+
include PriceContainer
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# Model::ItemContainer -- xmlconv2 -- 22.06.2004 -- hwyss@ywesee.com
|
|
3
|
+
|
|
4
|
+
module XmlConv
|
|
5
|
+
module Model
|
|
6
|
+
module ItemContainer
|
|
7
|
+
def add_item(item)
|
|
8
|
+
self.items.push(item)
|
|
9
|
+
end
|
|
10
|
+
def items
|
|
11
|
+
@items ||= []
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|