xmlconv 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (94) hide show
  1. data/.gemtest +0 -0
  2. data/History.txt +6 -0
  3. data/LICENSE +339 -0
  4. data/README.txt +29 -0
  5. data/Rakefile +37 -0
  6. data/bin/admin +68 -0
  7. data/bin/xmlconvd +38 -0
  8. data/data/grammar/i2.grammar +73 -0
  9. data/lib/xmlconv/config.rb +61 -0
  10. data/lib/xmlconv/custom/lookandfeel.rb +50 -0
  11. data/lib/xmlconv/i2/address.rb +35 -0
  12. data/lib/xmlconv/i2/date.rb +41 -0
  13. data/lib/xmlconv/i2/document.rb +27 -0
  14. data/lib/xmlconv/i2/header.rb +32 -0
  15. data/lib/xmlconv/i2/order.rb +61 -0
  16. data/lib/xmlconv/i2/parser.rb +23 -0
  17. data/lib/xmlconv/i2/position.rb +45 -0
  18. data/lib/xmlconv/i2/record.rb +11 -0
  19. data/lib/xmlconv/model/address.rb +20 -0
  20. data/lib/xmlconv/model/agreement.rb +10 -0
  21. data/lib/xmlconv/model/bdd.rb +37 -0
  22. data/lib/xmlconv/model/bsr.rb +16 -0
  23. data/lib/xmlconv/model/delivery.rb +15 -0
  24. data/lib/xmlconv/model/delivery_item.rb +24 -0
  25. data/lib/xmlconv/model/document.rb +25 -0
  26. data/lib/xmlconv/model/freetext_container.rb +26 -0
  27. data/lib/xmlconv/model/id_container.rb +22 -0
  28. data/lib/xmlconv/model/invoice.rb +18 -0
  29. data/lib/xmlconv/model/invoice_item.rb +11 -0
  30. data/lib/xmlconv/model/item.rb +19 -0
  31. data/lib/xmlconv/model/item_container.rb +15 -0
  32. data/lib/xmlconv/model/name.rb +27 -0
  33. data/lib/xmlconv/model/part_info.rb +10 -0
  34. data/lib/xmlconv/model/part_info_container.rb +15 -0
  35. data/lib/xmlconv/model/party.rb +20 -0
  36. data/lib/xmlconv/model/party_container.rb +20 -0
  37. data/lib/xmlconv/model/price.rb +10 -0
  38. data/lib/xmlconv/model/price_container.rb +18 -0
  39. data/lib/xmlconv/model/transaction.rb +28 -0
  40. data/lib/xmlconv/state/global.rb +28 -0
  41. data/lib/xmlconv/state/global_predefine.rb +11 -0
  42. data/lib/xmlconv/state/login.rb +39 -0
  43. data/lib/xmlconv/state/transaction.rb +13 -0
  44. data/lib/xmlconv/state/transactions.rb +130 -0
  45. data/lib/xmlconv/util/application.rb +142 -0
  46. data/lib/xmlconv/util/autoload.rb +35 -0
  47. data/lib/xmlconv/util/destination.rb +249 -0
  48. data/lib/xmlconv/util/invoicer.rb +71 -0
  49. data/lib/xmlconv/util/known_user.rb +16 -0
  50. data/lib/xmlconv/util/mail.rb +31 -0
  51. data/lib/xmlconv/util/polling_manager.rb +198 -0
  52. data/lib/xmlconv/util/session.rb +23 -0
  53. data/lib/xmlconv/util/transaction.rb +133 -0
  54. data/lib/xmlconv/util/validator.rb +20 -0
  55. data/lib/xmlconv/view/foot.rb +27 -0
  56. data/lib/xmlconv/view/head.rb +13 -0
  57. data/lib/xmlconv/view/login.rb +36 -0
  58. data/lib/xmlconv/view/navigation.rb +30 -0
  59. data/lib/xmlconv/view/navigationlink.rb +21 -0
  60. data/lib/xmlconv/view/pager.rb +73 -0
  61. data/lib/xmlconv/view/preformatted.rb +54 -0
  62. data/lib/xmlconv/view/template.rb +17 -0
  63. data/lib/xmlconv/view/transaction.rb +42 -0
  64. data/lib/xmlconv/view/transactions.rb +90 -0
  65. data/lib/xmlconv.rb +3 -0
  66. data/test/config.rb +12 -0
  67. data/test/mock.rb +149 -0
  68. data/test/suite.rb +16 -0
  69. data/test/test_i2/address.rb +88 -0
  70. data/test/test_i2/date.rb +50 -0
  71. data/test/test_i2/document.rb +62 -0
  72. data/test/test_i2/header.rb +39 -0
  73. data/test/test_i2/order.rb +94 -0
  74. data/test/test_i2/parser.rb +312 -0
  75. data/test/test_i2/position.rb +65 -0
  76. data/test/test_model/address.rb +35 -0
  77. data/test/test_model/agreement.rb +22 -0
  78. data/test/test_model/bdd.rb +55 -0
  79. data/test/test_model/bsr.rb +38 -0
  80. data/test/test_model/delivery.rb +79 -0
  81. data/test/test_model/delivery_item.rb +52 -0
  82. data/test/test_model/freetext_container.rb +45 -0
  83. data/test/test_model/invoice.rb +65 -0
  84. data/test/test_model/invoice_item.rb +41 -0
  85. data/test/test_model/name.rb +57 -0
  86. data/test/test_model/part_info.rb +24 -0
  87. data/test/test_model/party.rb +96 -0
  88. data/test/test_model/price.rb +24 -0
  89. data/test/test_util/application.rb +168 -0
  90. data/test/test_util/destination.rb +415 -0
  91. data/test/test_util/invoicer.rb +42 -0
  92. data/test/test_util/polling_manager.rb +299 -0
  93. data/test/test_util/transaction.rb +130 -0
  94. metadata +178 -0
@@ -0,0 +1,50 @@
1
+ #!/usr/bin/env ruby
2
+ # Custom::Lookandfeel -- xmlconv2 -- 09.06.2004 -- hwyss@ywesee.com
3
+
4
+ require 'sbsm/lookandfeel'
5
+
6
+ module XmlConv
7
+ module Custom
8
+ class Lookandfeel < SBSM::Lookandfeel
9
+ DICTIONARIES = {
10
+ 'de' => {
11
+ :copyright0 => '&copy;ywesee.com&nbsp;',
12
+ :copyright1 => '',
13
+ :home => 'Home',
14
+ :login => 'Anmelden',
15
+ :login_welcome => 'Willkommen bei XmlConv',
16
+ :logout => 'Abmelden',
17
+ :navigation_divider => '|',
18
+ :page_back => "&lt;&lt;",
19
+ :page_fwd => "&gt;&gt;",
20
+ :page_number0 => "Seite&nbsp;",
21
+ :page_number1 => "&nbsp;von&nbsp;",
22
+ :page_number2 => "",
23
+ :pass => 'Passwort',
24
+ :status_bbmb_ok => 'Bestellung via BBMB erfolgreich',
25
+ :status_empty => 'Leer',
26
+ :status_error => 'Fehler',
27
+ :status_http_ok => '&Uuml;bertragung erfolgreich',
28
+ :status_http_not_found => 'URI nicht gefunden',
29
+ :status_http_unauthorized => 'Keine Berechtigung',
30
+ :status_mail_ok => 'Mail&uuml;bertragung erfolgreich',
31
+ :status_open => 'Offen',
32
+ :status_pending_pickup => 'Bereit zum Abholen',
33
+ :status_picked_up => 'Abgeholt',
34
+ :th_commit_time => 'Zeit',
35
+ :th_error => 'Fehler',
36
+ :th_input => 'Input',
37
+ :th_uri_comparable => 'Empf�nger',
38
+ :th_filename => 'Filename',
39
+ :th_transaction_id => 'ID',
40
+ :th_origin => 'Absender',
41
+ :th_output => 'Output',
42
+ :th_status_comparable => 'Status',
43
+ }
44
+ }
45
+ RESOURCES = {
46
+ :css => 'xmlconv.css'
47
+ }
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env ruby
2
+ # I2::Address -- xmlconv2 -- 02.06.2004 -- hwyss@ywesee.com
3
+
4
+ module XmlConv
5
+ module I2
6
+ class Address
7
+ attr_accessor :code, :party_id
8
+ attr_accessor :name1, :name2, :street1, :city, :zip_code, :street2,
9
+ :country
10
+ I2_ADDR_CODES = {
11
+ :buyer => 'BY',
12
+ :delivery => 'DP',
13
+ :employee => 'EP',
14
+ :customer => 'CU',
15
+ }
16
+ def initialize
17
+ @code = :buyer
18
+ end
19
+ def to_s
20
+ output = []
21
+ numerals = [ 201, 202, 220, 221, 222, 223, 224, 225, 226 ]
22
+ [
23
+ I2_ADDR_CODES[@code],
24
+ @party_id, @name1, @name2, @street1,
25
+ @city, @country, @zip_code, @street2,
26
+ ].each_with_index { |value, idx|
27
+ unless(value.nil?)
28
+ output << "#{numerals[idx]}:#{value}"
29
+ end
30
+ }
31
+ output.join("\n") << "\n"
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,41 @@
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, :level
10
+ class << self
11
+ def from_date(date, level=nil, code=nil)
12
+ instance = self.new(date.year, date.month, date.day)
13
+ instance.code = code
14
+ instance.level = level
15
+ instance
16
+ end
17
+ end
18
+ def to_s
19
+ fmtd = strftime("%Y%m%d")
20
+ datecd = case @code
21
+ when :delivery
22
+ '2'
23
+ else
24
+ '4'
25
+ end
26
+ case @level
27
+ when :order
28
+ <<-EOS
29
+ 300:#{datecd}
30
+ 301:#{fmtd}
31
+ EOS
32
+ else
33
+ <<-EOS
34
+ 540:#{datecd}
35
+ 541:#{fmtd}
36
+ EOS
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env ruby
2
+ # I2::Document -- xmlconv2 -- 02.06.2004 -- hwyss@ywesee.com
3
+
4
+ require 'xmlconv/i2/header'
5
+ require 'xmlconv/i2/order'
6
+
7
+ module XmlConv
8
+ module I2
9
+ class Document
10
+ attr_accessor :header
11
+ attr_reader :orders
12
+ def initialize
13
+ @header = Header.new
14
+ @orders = []
15
+ end
16
+ def add_order(order)
17
+ @orders.push(order)
18
+ end
19
+ def filename
20
+ @header.filename
21
+ end
22
+ def to_s
23
+ ([@header] + @orders).join
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,32 @@
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, :prefix, :transaction_id
8
+ attr_reader :suffix
9
+ def initialize(recipient_id = 'EPIN_PL')
10
+ @recipient_id = recipient_id
11
+ @prefix = @recipient_id
12
+ time = Time.now
13
+ msec = sprintf('%03i', (time.to_f * 1000).to_i % 100)
14
+ @transaction_id = time.strftime("%Y%m%d%H%M%S#{msec}")
15
+ end
16
+ def suffix=(suffix)
17
+ @suffix = "_" << suffix.to_s
18
+ end
19
+ def filename
20
+ @filename || sprintf("%s%s_%s.dat", @prefix, @suffix, @transaction_id)
21
+ end
22
+ def to_s
23
+ <<-EOS
24
+ 001:#{@recipient_id}
25
+ 002:ORDERX
26
+ 003:220
27
+ 010:#{filename}
28
+ EOS
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,61 @@
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
+ ## janico
9
+ :pickup => '070',
10
+ :delivery => '060',
11
+ :camion => '010',
12
+ ## globopharm
13
+ :default => '1',
14
+ :before_9 => '3',
15
+ :before_21 => '4',
16
+ :before_16 => '5',
17
+ :extracted => '13',
18
+ }
19
+ attr_accessor :sender_id, :delivery_id, :terms_cond, :agent, :free_text,
20
+ :interface, :transport_cost, :ade_id
21
+ attr_reader :addresses, :dates, :positions
22
+ def initialize
23
+ @addresses = []
24
+ @dates = []
25
+ @positions = []
26
+ @interface = "61"
27
+ end
28
+ def add_address(address)
29
+ @addresses.push(address)
30
+ end
31
+ def add_date(date)
32
+ @dates.push(date)
33
+ end
34
+ def add_position(position)
35
+ @positions.push(position)
36
+ end
37
+ def to_s
38
+ output = <<-EOS
39
+ 100:#{@sender_id}
40
+ 101:#{@delivery_id}
41
+ EOS
42
+ @addresses.each { |addr| output << addr.to_s }
43
+ numerals = [ 231, 236, 237, 238, 242 ]
44
+ [
45
+ @agent, @free_text, @interface, I2_DELIVERY_CODES[@terms_cond],
46
+ @transport_cost,
47
+ ].each_with_index { |value, idx|
48
+ unless(value.nil?)
49
+ output << sprintf("%s:%s\n", numerals[idx], value)
50
+ end
51
+ }
52
+ if(@ade_id)
53
+ output << sprintf("250:ADE\n251:%s\n", @ade_id)
54
+ end
55
+ @dates.each { |date| output << date.to_s }
56
+ @positions.each { |pos| output << pos.to_s }
57
+ output
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,23 @@
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
+ def cached_parser
9
+ grammar_path = File.expand_path('i2.grammar', CONFIG.grammar_dir)
10
+ parser_path = File.expand_path('i2_parser.rb', CONFIG.grammar_dir)
11
+ old_path = File.expand_path('i2.grammar.old', CONFIG.grammar_dir)
12
+ src = File.read(grammar_path)
13
+ unless(File.exists?(old_path) && File.read(old_path) == src)
14
+ File.delete(old_path) if File.exists?(old_path)
15
+ Parse.generate_parser_from_file_to_file(grammar_path, parser_path, "make_i2_parser", 'XmlConv')
16
+ File.open(old_path, 'w') { |f| f << src }
17
+ end
18
+ require parser_path
19
+ XmlConv.make_i2_parser
20
+ end
21
+ module_function :cached_parser
22
+ end
23
+ end
@@ -0,0 +1,45 @@
1
+ #!/usr/bin/env ruby
2
+ # I2::Position -- xmlconv2 -- 02.06.2004 -- hwyss@ywesee.com
3
+
4
+ require 'xmlconv/i2/date'
5
+
6
+ module XmlConv
7
+ module I2
8
+ class Position
9
+ attr_accessor :number, :article_ean, :qty, :customer_id, :price, :unit,
10
+ :pharmacode, :free_text
11
+ attr_reader :delivery_date
12
+ def delivery_date=(date)
13
+ date.code = :delivery
14
+ @delivery_date = date
15
+ end
16
+ def to_s
17
+ output = <<-EOS
18
+ 500:#{@number}
19
+ 501:#{@article_ean}
20
+ EOS
21
+ [@customer_id, @pharmacode].compact.each { |id|
22
+ output << sprintf("502:%s\n", id)
23
+ }
24
+ output << sprintf("520:%s\n", @qty)
25
+ if(@unit)
26
+ output << sprintf("521:%s\n", @unit)
27
+ end
28
+ if(@delivery_date.is_a?(I2::Date))
29
+ output << @delivery_date.to_s
30
+ end
31
+ if(@price)
32
+ output << sprintf("604:%s\n", @price)
33
+ end
34
+ if(@free_text)
35
+ output << "605:RS\n"
36
+ txt = @free_text[0,280] ## upper limit: 40 lines of 70 chars
37
+ while(!txt.empty?)
38
+ output << sprintf("606:%s\n", txt.slice!(0,70))
39
+ end
40
+ end
41
+ output
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env ruby
2
+ # I2::Record -- xmlconv2 -- 02.06.2004 -- hwyss@ywesee.com
3
+
4
+ module XmlConv
5
+ module I2
6
+ class Record
7
+ def push(num, str)
8
+ end
9
+ end
10
+ end
11
+ end
@@ -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
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+ # Model::Agreement -- xmlconv2 -- 22.06.2004 -- hwyss@ywesee.com
3
+
4
+ module XmlConv
5
+ module Model
6
+ class Agreement
7
+ attr_accessor :terms_cond
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,37 @@
1
+ #!/usr/bin/env ruby
2
+ # Bdd -- xmlconv2 -- 01.06.2004 -- hwyss@ywesee.com
3
+
4
+ require 'odba'
5
+
6
+ module XmlConv
7
+ module Model
8
+ class Bdd
9
+ include ODBA::Persistable
10
+ ODBA_SERIALIZABLE = ['@deliveries', '@invoices', '@processing_logs']
11
+ attr_accessor :bsr
12
+ attr_reader :deliveries, :invoices, :processing_logs
13
+ def initialize
14
+ @deliveries = []
15
+ @invoices = []
16
+ @processing_logs = []
17
+ end
18
+ def add_delivery(delivery)
19
+ @deliveries.push(delivery)
20
+ end
21
+ def add_invoice(invoice)
22
+ @invoices.push(invoice)
23
+ end
24
+ def add_processing_log(log)
25
+ @processing_logs.push(log)
26
+ end
27
+ def empty?
28
+ @deliveries.empty? && @invoices.empty? && @processing_logs.empty?
29
+ end
30
+ def invoiced_amount
31
+ @invoices.inject(0) { |memo, invoice|
32
+ memo + invoice.get_price('SummePositionen').amount.to_f
33
+ }
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ # Bsr -- xmlconv2 -- 01.06.2004 -- hwyss@ywesee.com
3
+
4
+ require 'xmlconv/model/party_container'
5
+
6
+ module XmlConv
7
+ module Model
8
+ class Bsr
9
+ include PartyContainer
10
+ attr_accessor :timestamp, :noun, :verb, :interface
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 'xmlconv/model/transaction'
5
+
6
+ module XmlConv
7
+ module Model
8
+ class Delivery < Transaction
9
+ attr_accessor :bsr, :delivery_date
10
+ def bsr_id
11
+ @bsr.bsr_id unless(@bsr.nil?)
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,24 @@
1
+ #!/usr/bin/env ruby
2
+ # DeliveryItem -- xmlconv2 -- 01.06.2004 -- hwyss@ywesee.com
3
+
4
+ require 'xmlconv/model/item'
5
+
6
+ module XmlConv
7
+ module Model
8
+ class DeliveryItem < Item
9
+ attr_accessor :delivery_date
10
+ def customer_id
11
+ self.id_table['lieferantenartikel']
12
+ end
13
+ def ean13_id
14
+ self.id_table['ean13']
15
+ end
16
+ def et_nummer_id
17
+ self.id_table['et-nummer']
18
+ end
19
+ def pharmacode_id
20
+ self.id_table['pharmacode']
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env ruby
2
+ # Model::Document -- xmlconv -- 03.12.2007 -- hwyss@ywesee.com
3
+
4
+ module XmlConv
5
+ module Model
6
+ class Document < String
7
+ attr_accessor :recipient_id, :filename, :prefix, :transaction_id
8
+ def initialize(*args)
9
+ super
10
+ @recipient_id = recipient_id
11
+ @prefix = @recipient_id
12
+ time = Time.now
13
+ msec = sprintf('%03i', (time.to_f * 1000).to_i % 100)
14
+ @transaction_id = time.strftime("%Y%m%d%H%M%S#{msec}")
15
+ end
16
+ def filename
17
+ @filename || sprintf(XmlConv::CONFIG.default_filename,
18
+ @prefix, @suffix, @transaction_id)
19
+ end
20
+ def to_s
21
+ "" << self
22
+ end
23
+ end
24
+ end
25
+ 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_accessor :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,22 @@
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 acc_id
8
+ self.id_table['acc']
9
+ end
10
+ def add_id(domain, value)
11
+ self.id_table.store(domain.to_s.downcase, value)
12
+ self.ids.store(domain, value)
13
+ end
14
+ def ids
15
+ @ids ||= {}
16
+ end
17
+ def id_table
18
+ @id_table ||= {}
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env ruby
2
+ # Model::Invoice -- xmlconv2 -- 22.06.2004 -- hwyss@ywesee.com
3
+
4
+ require 'xmlconv/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
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env ruby
2
+ # Model::InvoiceItem -- xmlconv2 -- 23.06.2004 -- hwyss@ywesee.com
3
+
4
+ require 'xmlconv/model/item'
5
+
6
+ module XmlConv
7
+ module Model
8
+ class InvoiceItem < Item
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env ruby
2
+ # Model::Item -- xmlconv2 -- 23.06.2004 -- hwyss@ywesee.com
3
+
4
+ require 'xmlconv/model/id_container'
5
+ require 'xmlconv/model/freetext_container'
6
+ require 'xmlconv/model/part_info_container'
7
+ require 'xmlconv/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
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env ruby
2
+ # Name -- xmlconv2 -- 01.06.2004 -- hwyss@ywesee.com
3
+
4
+ module XmlConv
5
+ module Model
6
+ class Name
7
+ attr_reader :first, :last, :text
8
+ def first=(arg)
9
+ set_attr('@first', arg && arg.strip)
10
+ end
11
+ def last=(arg)
12
+ set_attr('@last', arg && arg.strip)
13
+ end
14
+ def text=(arg)
15
+ set_attr('@text', arg && arg.strip)
16
+ end
17
+ def to_s
18
+ [@first, @text, @last].compact.join(' ')
19
+ end
20
+ private
21
+ def set_attr(attr, arg)
22
+ str = arg.to_s
23
+ instance_variable_set(attr, str.empty? ? nil : str)
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+ # Model::PartInfo -- xmlconv2 -- 23.06.2004 -- hwyss@ywesee.com
3
+
4
+ module XmlConv
5
+ module Model
6
+ class PartInfo
7
+ attr_accessor :dimension, :value
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env ruby
2
+ # Model::PartInfoContainer -- xmlconv2 -- 23.06.2004 -- hwyss@ywesee.com
3
+
4
+ module XmlConv
5
+ module Model
6
+ module PartInfoContainer
7
+ def add_part_info(info)
8
+ self.part_infos.push(info)
9
+ end
10
+ def part_infos
11
+ @part_infos ||= []
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env ruby
2
+ # Party -- xmlconv2 -- 01.06.2004 -- hwyss@ywesee.com
3
+
4
+ require 'xmlconv/model/party_container'
5
+ require 'xmlconv/model/id_container'
6
+
7
+ module XmlConv
8
+ module Model
9
+ class Party
10
+ attr_accessor :role, :address, :name
11
+ include PartyContainer
12
+ include IdContainer
13
+ def party_id
14
+ sorted = self.ids.sort
15
+ domain, value = sorted.first
16
+ value
17
+ end
18
+ end
19
+ end
20
+ end