king_dtaus 2.0.3.pre → 2.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,9 @@
1
+ nbproject/*
2
+ .rvmrc
3
+ coverage/*
4
+ rdoc/*
5
+ pkg/*
6
+ .DS_Store
7
+ DTAUS0.TXT
8
+ dta.txt
9
+ Gemfile.lock
data/Gemfile CHANGED
@@ -1,7 +1,2 @@
1
1
  source :rubygems
2
-
3
- gemspec
4
-
5
- group :test do
6
- gem "rcov"
7
- end
2
+ gemspec
data/README.markdown CHANGED
@@ -18,37 +18,35 @@ We love building payment applications.
18
18
 
19
19
  ## Features
20
20
 
21
- * Create DTAUS debit advice (Lastschrift)
22
- * Create DTAUS credit advice (Gutschrift)
23
- * Create DTAZV debit advice
24
- * High test coverage to ensure software quality
21
+ * Create DTAUS debit transfer (Lastschrift)
22
+ * Create DTAUS credit transfer (Gutschrift)
23
+ * Create DTAZV debit transfer
24
+ * 100% test coverage to ensure software quality
25
+ * works with ruby 1.8 & 1.9.2
25
26
 
26
- ## Beta Version Info
27
+ ## Version Info
27
28
 
28
- We are working on version 2 of the gem with some breaking changes!
29
+ Version 2 has breaking changes!
29
30
 
30
31
  * account attributes now passed in as hash
31
- * renamed of account attributes client_xy => owner_xy
32
- * renamed account.account_number to bank_account_number
32
+ * renamed account.client_xy => owner_xy
33
+ * renamed account.account_number => bank_account_number
33
34
  * added iban/bic to account
34
35
  * DTAZV added
35
36
 
36
- To try it use:
37
- gem install king_dtaus --pre
38
- # or add a pre version to your Gemfile
39
- gem 'king_dtaus', '2.0.3.pre'
37
+ If you want to stay with v1 just pin it in your Gemfile:
38
+
39
+ gem "king_dtaus", "<2"
40
40
 
41
41
  ## TODOs
42
42
 
43
- * first gem with no todo's - never seen it, huh? - just kidding
44
- * some more edge-case tests needed
43
+ * some more edge-case tests needed, we need your feedback here!
45
44
 
46
45
  ## Resources
47
46
 
48
47
  * SalesKing: http://salesking.eu
49
48
  * DTAZV-Viewer: http://www.meta-evolutions.de/pages/artikel-20070630-dtazv-datei-betrachter.html
50
49
  * DTA/DTAZV PHP Pear: http://pear.php.net/package/Payment_DTA
51
- * Ruby Kernel Module: http://www.ruby-doc.org/core/classes/Kernel.html
52
50
  * Windata ZV-Tools: http://www.windata.de/Site/2Produkte2/ZVTools.aspx
53
51
  * The Swift Codes: http://www.theswiftcodes.com/
54
52
  * StarMoney: http://www.starmoney.de/index.php?id=starmoneybusiness_testen
@@ -59,63 +57,68 @@ Here are some examples how to create a DTA- or DTAZV-File. Also check out the sp
59
57
 
60
58
  ### DTA
61
59
 
62
- # create a new dtaus object
63
- dta = KingDta::Dtaus.new('LK')
60
+ ```ruby
61
+ # create a new dtaus object
62
+ dta = KingDta::Dtaus.new('LK')
64
63
 
65
- # set sender account
66
- dta.account = KingDta::Account.new(
64
+ # set sender account
65
+ dta.account = KingDta::Account.new(
67
66
  :bank_account_number => "123456789",
68
67
  :bank_number => "69069096",
69
68
  :owner_name => "Return to Sender",
70
69
  :bank_name => "Money Burner Bank")
71
70
 
72
- # following should be done in a loop to add multiple bookings
73
- # create receiving account
74
- receiver = KingDta::Account.new(
71
+ # following should be done in a loop to add multiple bookings
72
+ # create receiving account
73
+ receiver = KingDta::Account.new(
75
74
  :bank_account_number => "987456123",
76
75
  :bank_number => "99099096",
77
76
  :owner_name => "Gimme More Lt.",
78
77
  :bank_name => "Banking Bandits")
79
- # create booking
80
- booking = KingDta::Booking.new(receiver, 100.00 )
78
+ # create booking
79
+ booking = KingDta::Booking.new(receiver, 100.00 )
81
80
 
82
- # set booking text if you want to
83
- booking.text = "Thanks for your purchase"
81
+ # set booking text if you want to
82
+ booking.text = "Thanks for your purchase"
84
83
 
85
- # add booking
86
- dta.add( booking )
87
- # end loop
84
+ # add booking
85
+ dta.add( booking )
86
+ # end loop
88
87
 
89
- # create datausstring and do with it whatever fits your workflow
90
- my_str = dta.create
88
+ # create datausstring and do with it whatever fits your workflow
89
+ my_str = dta.create
91
90
 
91
+ ```
92
92
  ### DTAZV
93
93
 
94
- @dtazv = KingDta::Dtazv.new(Date.today)
94
+ ```ruby
95
+ @dtazv = KingDta::Dtazv.new()
95
96
 
96
- # sender account
97
- @dtazv.account = KingDta::Account.new(
97
+ # sender account
98
+ @dtazv.account = KingDta::Account.new(
98
99
  :bank_account_number => "123456789",
99
100
  :bank_number => "40050100",
100
101
  :bank_name => "Greedy Fuckers Bank",
101
102
  :owner_name => "Sender name"
102
- )
103
+ )
103
104
 
104
- # receiver account
105
- receiver = KingDta::Account.new(
105
+ # receiver account
106
+ receiver = KingDta::Account.new(
106
107
  :bank_account_number => "987654321",
107
108
  :bank_iban => "PLsome-long-Iban",
108
109
  :bank_bic => "BicCode",
109
110
  :owner_name => "receivers name"
110
- )
111
- # add bookings, probably in a loop
112
- booking = KingDta::Booking.new(receiver, 220.25)
113
- @dtazv.add(booking)
111
+ )
114
112
 
115
- # get output as string
116
- @dtazv.create
113
+ # add bookings, probably in a loop
114
+ booking = KingDta::Booking.new(receiver, 220.25)
115
+ @dtazv.add(booking)
117
116
 
118
- also make sure to read the specs
117
+ # get output as string
118
+ @dtazv.create
119
+ ```
120
+
121
+ also make sure to read the code and the specs
119
122
 
120
123
  ## Credits
121
124
 
@@ -125,9 +128,6 @@ Bugfixes and enhancements by
125
128
  * Kim Rudolph - https://github.com/krudolph
126
129
  * Thorsten Böttger - https://github.com/alto
127
130
  * Jan Kus - https://github.com/koos
131
+ * used https://rubygems.org/gems/DTAUS as a starting point
128
132
 
129
- This gem used https://rubygems.org/gems/DTAUS as a starting point.
130
- It was disected, turned into a real class structure, bugs were fixed and
131
- of course a full test suite ensures its functionality.
132
-
133
- Copyright (c) 2009-2011 Georg Leciejewski (SalesKing), Jan Kus (Railslove), released under the MIT license
133
+ Copyright (c) 2009-2011 Georg Leciejewski (SalesKing), Jan Kus (Railslove), released under the MIT license
data/Rakefile CHANGED
@@ -1,31 +1,18 @@
1
1
  require 'rake'
2
+ require 'rspec'
2
3
  require 'rspec/core/rake_task'
3
-
4
+ require 'rdoc/task'
5
+ require 'bundler/gem_helper'
6
+ Bundler::GemHelper.install_tasks
4
7
  desc "Run specs"
5
8
  RSpec::Core::RakeTask.new
6
-
7
9
  task :default => :spec
8
10
 
9
- RSpec::Core::RakeTask.new(:coverage) do |t|
10
- t.rcov = true
11
- t.rcov_opts = %q[--exclude "spec"]
12
- t.verbose = true
13
- end
14
-
15
- Dir["#{File.dirname(__FILE__)}/tasks/*.rake"].sort.each { |ext| load ext }
16
-
17
- begin
18
- require 'jeweler'
19
- Jeweler::Tasks.new do |gem|
20
- gem.name = "king_dtaus"
21
- gem.summary = %Q{Generate DTAUS strings and files}
22
- gem.description = %Q{DTAUS is a text-based format, to create bank transfers for german banks. This gem helps with the creation of those transfer files.}
23
- gem.email = "gl@salesking.eu"
24
- gem.homepage = "http://github.com/salesking/king_dtaus"
25
- gem.authors = ["Georg Leciejewski", "Georg Ledermann", "Jan Kus"]
26
- # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
27
- end
28
- Jeweler::GemcutterTasks.new
29
- rescue LoadError
30
- puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
11
+ desc 'Generate documentation'
12
+ Rake::RDocTask.new(:rdoc) do |rdoc|
13
+ rdoc.rdoc_dir = 'docs/rdoc'
14
+ rdoc.title = 'KingPdf'
15
+ rdoc.options << '--line-numbers' << '--inline-source'
16
+ rdoc.rdoc_files.include('README')
17
+ rdoc.rdoc_files.include('lib/**/*.rb')
31
18
  end
data/king_dtaus.gemspec CHANGED
@@ -1,76 +1,34 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
1
  # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path('../lib', __FILE__)
3
+ require 'king_dta/version'
5
4
 
6
5
  Gem::Specification.new do |s|
7
6
  s.name = %q{king_dtaus}
8
- s.version = "2.0.3.pre"
7
+ s.version = KingDta::VERSION
9
8
 
10
- s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Georg Leciejewski", "Georg Ledermann", "Jan Kus"]
12
- s.date = %q{2011-09-03}
13
- s.description = %q{DTAUS is a text-based format, to create bank transfers for german banks. This gem helps with the creation of those transfer files.}
9
+ s.required_rubygems_version = Gem::Requirement.new('>= 0') if s.respond_to? :required_rubygems_version=
10
+ s.authors = ['Georg Leciejewski', 'Georg Ledermann', 'Jan Kus']
11
+ s.date = %q{2011-11-15}
12
+ s.summary = %q{Generate DTA/DTAUS and DTAZV bank transfer files .. the easy way}
13
+ s.description = %q{DTA/DTAUS and DTAZV are text-based formats to create bank transfers for german banks.
14
+ This gem creates DTA/DATAUS files for inner german credit and debit(Gutschrift/Lastschrift) transfers.
15
+ It is also capable of creating DTAZV credit-files for transfers from Germany to European SEPA region.}
14
16
  s.email = %q{gl@salesking.eu}
15
- s.extra_rdoc_files = [
16
- "README.markdown"
17
- ]
18
- s.files = [
19
- ".travis.yml",
20
- "Gemfile",
21
- "MIT-LICENSE",
22
- "README.markdown",
23
- "Rakefile",
24
- "VERSION",
25
- "docs/dtazv.pdf",
26
- "docs/dtazv_bank_bbk.pdf",
27
- "docs/example.output",
28
- "king_dtaus.gemspec",
29
- "lib/king_dta/account.rb",
30
- "lib/king_dta/booking.rb",
31
- "lib/king_dta/dta.rb",
32
- "lib/king_dta/dtaus.rb",
33
- "lib/king_dta/dtazv.rb",
34
- "lib/king_dta/exception.rb",
35
- "lib/king_dta/helper.rb",
36
- "lib/king_dtaus.rb",
37
- "spec/account_spec.rb",
38
- "spec/booking_spec.rb",
39
- "spec/dtaus_spec.rb",
40
- "spec/dtazv_spec.rb",
41
- "spec/helper_spec.rb",
42
- "spec/spec_helper.rb"
43
- ]
17
+ s.extra_rdoc_files = ['README.markdown']
18
+ s.executables = nil
19
+ s.files = `git ls-files`.split("\n").reject{|i| i[/^docs\//] }
20
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
21
+
44
22
  s.homepage = %q{http://github.com/salesking/king_dtaus}
45
- s.require_paths = ["lib"]
23
+ s.require_paths = ['lib']
46
24
  s.rubygems_version = %q{1.6.2}
47
- s.summary = %q{Generate DTAUS strings and files}
48
25
 
49
- if s.respond_to? :specification_version then
50
- s.specification_version = 3
26
+ s.add_runtime_dependency 'i18n'
27
+ s.add_development_dependency 'rdoc'
28
+ s.add_development_dependency 'rspec'
29
+ s.add_development_dependency 'simplecov'
30
+ s.add_development_dependency 'mocha'
31
+ s.add_development_dependency 'rake', '>= 0.9.2'
51
32
 
52
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
53
- s.add_runtime_dependency(%q<king_dtaus>, [">= 0"])
54
- s.add_development_dependency(%q<rspec>, [">= 0"])
55
- s.add_development_dependency(%q<jeweler>, [">= 0"])
56
- s.add_development_dependency(%q<simplecov>, [">= 0"])
57
- s.add_development_dependency(%q<mocha>, [">= 0"])
58
- s.add_development_dependency(%q<i18n>, [">= 0"])
59
- else
60
- s.add_dependency(%q<king_dtaus>, [">= 0"])
61
- s.add_dependency(%q<rspec>, [">= 0"])
62
- s.add_dependency(%q<jeweler>, [">= 0"])
63
- s.add_dependency(%q<simplecov>, [">= 0"])
64
- s.add_dependency(%q<mocha>, [">= 0"])
65
- s.add_dependency(%q<i18n>, [">= 0"])
66
- end
67
- else
68
- s.add_dependency(%q<king_dtaus>, [">= 0"])
69
- s.add_dependency(%q<rspec>, [">= 0"])
70
- s.add_dependency(%q<jeweler>, [">= 0"])
71
- s.add_dependency(%q<simplecov>, [">= 0"])
72
- s.add_dependency(%q<mocha>, [">= 0"])
73
- s.add_dependency(%q<i18n>, [">= 0"])
74
- end
75
33
  end
76
34
 
@@ -1,18 +1,18 @@
1
1
  # encoding: utf-8
2
2
  module KingDta
3
- # A bank account with name of the account owner,
4
- # Kontodaten verwalten mit Name des Inhabers und Bank, Bankleitzahl und Kontonummer.
3
+ # Bank account and owner information
5
4
  class Account
6
5
  include KingDta::Helper
7
-
8
- attr_accessor :bank_account_number, :bank_number, :bank_street, :bank_city,
6
+
7
+ attr_accessor :bank_street, :bank_city,
9
8
  :bank_zip, :bank_name, :bank_country_code, :bank_iban,
10
9
  :bank_bic,
11
10
  :owner_name, :owner_number, :owner_street, :owner_city,
12
11
  :owner_zip_code, :owner_country_code
12
+ attr_reader :bank_account_number, :bank_number
13
13
 
14
- # TODO test
15
14
  def initialize(args={})
15
+ args = args.dup
16
16
 
17
17
  @bank_street = convert_text(args.delete(:bank_street))
18
18
  @bank_city = convert_text(args.delete(:bank_city))
@@ -26,23 +26,44 @@ module KingDta
26
26
  end
27
27
 
28
28
  raise ArgumentError.new('Owner number too long, max 10 allowed') if @owner_number && "#{@owner_number}".length > 10
29
- raise ArgumentError.new("Owner street too long, max 35 allowed") if @owner_street && @owner_street.length > 35
30
- raise ArgumentError.new("Owner city too long, max 35 allowed") if @owner_city && @owner_city.length > 35
31
- raise ArgumentError.new("Owner country code too long, max 2 allowed") if @owner_country_code && @owner_country_code.length > 2
29
+ raise ArgumentError.new('Owner street too long, max 35 allowed') if @owner_street && @owner_street.length > 35
30
+ raise ArgumentError.new('Owner city too long, max 35 allowed') if @owner_city && @owner_city.length > 35
31
+ raise ArgumentError.new('Owner country code too long, max 2 allowed') if @owner_country_code && @owner_country_code.length > 2
32
+
32
33
 
33
- raise ArgumentError.new('Bank account number too long, max 35 allowed') if @bank_account_number && "#{@bank_account_number}".length > 35
34
- raise ArgumentError.new("Bank account number cannot be 0") if @bank_account_number && @bank_account_number == 0
35
- # raise ArgumentError.new('Bank iban too long, max 11 allowed') if @bank_iban && @bank_iban.between?(15,32)
34
+ raise ArgumentError.new("Bank iban wrong length: #{@bank_iban.length}, must be between 15-34") if @bank_iban && !@bank_iban.length.between?(15,34)
35
+ raise ArgumentError.new("Bank bic wrong length: #{@bank_bic.length} must be between 8-11") if @bank_bic && !@bank_bic.length.between?(8,11)
36
36
 
37
- raise ArgumentError.new("Bank bic wrong length,#{@bank_bic.length} must be between 8-11") if @bank_bic && !@bank_bic.length.between?(8,11)
37
+ raise ArgumentError.new('Bank street too long, max 35 allowed') if @bank_street && @bank_street.length > 35
38
+ raise ArgumentError.new('Bank city too long, max 35 allowed') if @bank_city && @bank_city.length > 35
39
+ raise ArgumentError.new('Bank name too long, max 35 allowed') if @bank_name && @bank_name.length > 35
40
+ raise ArgumentError.new('Bank country code too long, max 2 allowed') if @bank_country_code && @bank_country_code.length > 2
41
+
42
+ @owner_country_code = @bank_iban[0..1 ] if @bank_iban && !@owner_country_code
43
+ end
44
+
45
+ # Cast given account number to integer. Strips spaces and leading zeros
46
+ # from the bank account number.
47
+ # DTA relies on integers for checksums and field values.
48
+ # @param [String|Integer] number
49
+ def bank_account_number=(number)
50
+ nr_str = "#{number}".gsub(/\s/,'')
51
+ raise ArgumentError.new('Bank account number too long, max 10 allowed') if nr_str.length > 10
52
+ raise ArgumentError.new('Bank account number cannot be 0') if nr_str == '0'
53
+
54
+ @bank_account_number = nr_str.to_i
55
+ end
38
56
 
39
- raise ArgumentError.new('Bank number too long, max 11 allowed') if @bank_number && "#{@bank_number}".length > 11
40
- raise ArgumentError.new("Bank number cannot be 0") if @bank_number && @bank_number == 0
41
- raise ArgumentError.new("Bank street too long, max 35 allowed") if @bank_street && @bank_street.length > 35
42
- raise ArgumentError.new("Bank city too long, max 35 allowed") if @bank_city && @bank_city.length > 35
43
- raise ArgumentError.new("Bank name too long, max 35 allowed") if @bank_name && @bank_name.length > 35
44
- raise ArgumentError.new("Bank country code too long, max 2 allowed") if @bank_country_code && @bank_country_code.length > 2
57
+ # Cast given bank number to integer. Strips spaces and leading zeros
58
+ # from the bank account number.
59
+ # DTA relies on integers for checksums and field values.
60
+ # @param [String|Integer] number
61
+ def bank_number=(number)
62
+ nr_str = "#{number}".gsub(/\s/,'')
63
+ raise ArgumentError.new('Bank number too long, max 8 allowed') if nr_str.length > 8
64
+ raise ArgumentError.new('Bank number cannot be 0') if nr_str == '0'
45
65
 
66
+ @bank_number = nr_str.to_i
46
67
  end
47
68
 
48
69
  def bank_zip_city
@@ -36,8 +36,8 @@ module KingDta
36
36
  def set_checksums
37
37
  @sum_bank_account_numbers, @sum_bank_numbers, @sum_values = 0,0,0
38
38
  bookings.each do |b|
39
- @sum_bank_account_numbers += b.account.bank_account_number.to_i
40
- @sum_bank_numbers += b.account.bank_number.to_i
39
+ @sum_bank_account_numbers += b.account.bank_account_number
40
+ @sum_bank_numbers += b.account.bank_number
41
41
  @sum_values += b.value
42
42
  end
43
43
  end
@@ -63,7 +63,7 @@ module KingDta
63
63
  # 11b 95 8 Ausführungsdatum Format DDMMJJJJ. max A7 + 15 Tage. Default Blanks.
64
64
  # 11c 103 24 Reserviert, 24 Blanks
65
65
  # 12 127 1 Währungskennzeichen "1" = Euro
66
- #
66
+ #
67
67
  # Insgesamt 128 Zeichen
68
68
  def add_a
69
69
  data = '0128'
@@ -74,7 +74,7 @@ module KingDta
74
74
  data += '%-27.27s' % @account.owner_name
75
75
  data += @date.strftime("%d%m%y") # creation date - today
76
76
  data += ' ' * 4
77
- data += '%010i' % @account.bank_account_number.to_i
77
+ data += '%010i' % @account.bank_account_number
78
78
  data += '%010i' % 0
79
79
  data += ' ' * 15
80
80
  data += '%8s' % @date.strftime("%d%m%Y") #Ausführungsdatum - ja hier 8 Stellen
@@ -153,13 +153,13 @@ module KingDta
153
153
  data1 = 'C'
154
154
  data1 += '%08i' % 0
155
155
  data1 += '%-08i' % booking.account.bank_number
156
- data1 += '%010i' % booking.account.bank_account_number.to_i
156
+ data1 += '%010i' % booking.account.bank_account_number
157
157
  data1 += '0%011i0' % (booking.account.owner_number || 0) #interne Kundennummer
158
158
  data1 += zahlungsart
159
159
  data1 += ' '
160
160
  data1 += '0' * 11
161
161
  data1 += '%08i' % @account.bank_number
162
- data1 += '%010i' % @account.bank_account_number.to_i
162
+ data1 += '%010i' % @account.bank_account_number
163
163
  data1 += '%011i' % booking.value #Betrag in Euro einschl. Nachkomma
164
164
  data1 += ' ' * 3
165
165
  data1 += '%-27.27s' % booking.account.owner_name
@@ -172,7 +172,7 @@ module KingDta
172
172
  booking_txt = booking.text || default_text
173
173
  #Erste 27 Zeichen
174
174
  #if text < 26 fill with spaces
175
- data2 += booking_txt[0..26].ljust(27)
175
+ data2 += booking_txt[0..26].ljust(27)
176
176
  booking_txt = booking_txt[27..999]
177
177
  # cut text into 27 long pieces
178
178
  while booking_txt && booking_txt.size > 0 && exts.size < 13
@@ -184,7 +184,7 @@ module KingDta
184
184
  data2 += '1' #EUR
185
185
  data2 += ' ' * 2
186
186
  # Gesamte Satzlänge ermitteln ( data1(+4) + data2 + Erweiterungen )
187
- data1 = "%04i#{data1}" % ( data1.size + 4 + data2.size+ 2 + exts.size * 29 )
187
+ data1 = "%04i#{data1}" % ( data1.size + 4 + data2.size + 2 + exts.size * 29 )
188
188
  raise "DTAUS: Längenfehler C/1 #{data1.size} nicht 128, #{booking.account.owner_name}" unless data1.size == 128
189
189
  dta_string << data1
190
190
  #Anzahl Erweiterungen anfügen
@@ -35,9 +35,8 @@ module KingDta
35
35
  # Datensatz Q - kurze Variante
36
36
  # Die Bundesbank nimmt Q-Sätze in 2 Varianten entgegen. Die lange Variante ist identisch mit
37
37
  # den von den Auftraggebern gelieferten Q-Sätzen. In der kurzen Variante sind nur die Felder
38
- # enthalten, die von der Bundesbank bei der Bearbeitung der Meldungen benötigt werden; das in der
39
- # kurzen Variante nicht enthaltene Feld ist in der folgenden Tabelle durch Schattierung und Kursivschrift
40
- # kenntlich gemacht. Beide Varianten dürfen in einer Datei vorkommen.
38
+ # enthalten, die von der Bundesbank bei der Bearbeitung der Meldungen benötigt werden.
39
+ # Beide Varianten dürfen in einer Datei vorkommen.
41
40
  # [ Anmerk.: Bei der Kurzen Variante entfällt die Kundennummer ]
42
41
  #
43
42
  # === Fields
@@ -45,7 +44,7 @@ module KingDta
45
44
  # 1 1 4 Satzlänge numerisch bei Disketten und DFÜ
46
45
  # 2 5 1 Satzart Konstante "Q"
47
46
  # 3 6 8 BLZ Erstbeauftragtes Kreditinstitut
48
- # 4 14 10 Kundennummer Entfällt bei der kurzen Variante
47
+ # 4 14 10 Kontonummer Auftraggeber Entfällt bei der kurzen Variante
49
48
  # 5 24 4x35 Auftraggeberdaten Zeile 1 und 2: Name;
50
49
  # Zeile 3: Straße/Postfach; Zeile 4: Ort
51
50
  # 6 164 6 Erstellungsdatum Format: JJMMTT
@@ -67,7 +66,7 @@ module KingDta
67
66
  data1 += @date.strftime("%y%m%d") # Erstellungsdatum
68
67
  data1 += '01'
69
68
  data1 += @date.strftime("%y%m%d") # Ausführungstermin
70
- data1 += "N"
69
+ data1 += "N"
71
70
  data1 += "%02i" % 0
72
71
  data1 += '%08i' % 0
73
72
  data1 += '%068s' % ''
@@ -112,13 +111,11 @@ module KingDta
112
111
  # Pflicht, wenn T8 nicht belegt; nicht zu belegen bei Scheckziehungen,
113
112
  # 9b 68 4x35 Anschrift Bank des Zahlungsempfängers. Pflicht wenn T8 nicht belegt
114
113
  # Wenn Anschrift nicht bekannt„UNBEKANNT"
115
- # Zeile 1 und 2: Name Zeile 3: Straße Zeile 4: Ort
114
+ # Zeile 1 und 2: Name Zeile 3: Straße Zeile 4: Ort
116
115
  # Nicht zu belegen bei Scheckziehungen
117
116
  #
118
- # 10a 3 208 alpha Ländercode für Land des 2-stelliger ISO-alpha-Ländercode gemäß P P - P
119
- # Zahlungsempfängers bzw. Länderverzeichnis für die Zahlungsbilanzstatistik;
120
- # Scheckempfängers linksbündig zu belegen; 3. Stelle Leerzeichen
121
- # 10b 4x35 211 alpha Zahlungsempfänger bzw. Bei Zahlungsauftrag: Zahlungsempfänger Bei P P Angabe eines Scheckempfängers nicht P Angabe eines Scheck­ empfängers nicht möglich
117
+ # 10a 208 3 2-stelliger ISO-alpha-Ländercode des Zahlungsempfänger gemäß Länderverzeichnis für die Zahlungsbilanzstatistik; linksbündig zu belegen; 3. Stelle Leerzeichen
118
+ # 10b 211 4x35 alpha Zahlungsempfänger bzw. Bei Zahlungsauftrag: Zahlungsempfänger Bei P P Angabe eines Scheckempfängers nicht P Angabe eines Scheck­ empfängers nicht möglich
122
119
  # Scheckempfänger Scheckziehung: Scheckempfänger Zeile 1 und 2: möglich
123
120
  # Name Zeile 3 : Straße Zeile 4 : Ort/Land.
124
121
  # Entfällt bei der kurzen Variante NUR FUER DIE BEARBEITUNG DER MELDUNGEN--------------------------------------------------------------------------------------------------------
@@ -207,7 +204,7 @@ module KingDta
207
204
  data2 += '%08i' % 0 # KANN/PFLICHT 6 BLZ
208
205
  data2 += '%03s' % '' # KANN/PFLICHT 7a ISO-Währungscode
209
206
  data2 += '%010i' % 0 # KANN/PFLICHT 7b BLZ
210
- data2 += '%-011s' % booking.account.bank_bic
207
+ data2 += '%-011s' % booking.account.bank_bic
211
208
  data2 += '%-03s' % booking.account.bank_country_code # Pflichtfelder wenn T8 leer
212
209
  data2 += '%-070s' % booking.account.bank_name
213
210
  data2 += '%-035.35s' % booking.account.bank_street
@@ -0,0 +1,3 @@
1
+ module KingDta
2
+ VERSION='2.0.3'
3
+ end
data/spec/account_spec.rb CHANGED
@@ -8,45 +8,79 @@ describe KingDta::Account do
8
8
  end
9
9
 
10
10
  it "should initialize a new account" do
11
- lambda{
11
+ lambda{
12
12
  KingDta::Account.new(:bank_account_number => @ba.bank_account_number,
13
13
  :bank_number => @ba.bank_number,
14
14
  :owner_name => @ba.owner_name)
15
15
  }.should_not raise_error
16
16
  end
17
17
 
18
+ # KingDta::Acount.new tends to remove keys from supplied hashes, which breaks
19
+ # things when I create multiple DTAUS files at once.
20
+ it "should not remove data from hashes" do
21
+ sender = {:owner_street => "123 Random Street",
22
+ :bank_account_number => @ba.bank_account_number,
23
+ :bank_number => @ba.bank_number,
24
+ :owner_name => @ba.owner_name}
25
+
26
+ sender.keys.should include(:owner_street) # => true
27
+ KingDta::Account.new(sender)
28
+ sender.keys.should include(:owner_street) # => boom!
29
+ end
30
+
18
31
  it "should initialize a new dtazv account" do
19
- lambda{
32
+ lambda{
20
33
  KingDta::Account.new(sender_opts)
21
34
  }.should_not raise_error
22
35
  end
23
36
 
37
+ it "should convert bank_account_number to integer" do
38
+ opts = {:bank_account_number => '0123456',
39
+ :bank_number => @ba.bank_number,
40
+ :owner_name => @ba.owner_name}
41
+ anct = KingDta::Account.new(opts)
42
+ anct.bank_account_number.should == 123456
43
+
44
+ anct2 = KingDta::Account.new(opts.merge(:bank_account_number=>'012 345 6'))
45
+ anct2.bank_account_number.should == 123456
46
+ end
47
+
48
+ it "should convert bank_number to integer" do
49
+ opts = {:bank_account_number => @ba.bank_account_number,
50
+ :bank_number => '0123',
51
+ :owner_name => @ba.owner_name}
52
+ anct = KingDta::Account.new(opts)
53
+ anct.bank_number.should == 123
54
+
55
+ anct2 = KingDta::Account.new(opts.merge(:bank_number=>'012 34 5'))
56
+ anct2.bank_number.should == 12345
57
+ end
58
+
24
59
  it "should fail if bank account number is invalid" do
25
- # lambda{ KingDta::Account.new(0, @ba.bank_number, @ba.owner_name) }.should raise_error(ArgumentError)
26
- lambda{
60
+ lambda{
27
61
  KingDta::Account.new(:bank_account_number => 123456789011123456789011123456789011,
28
62
  :bank_number => @ba.bank_number,
29
63
  :owner_name => @ba.owner_name)
30
64
 
31
- }.should raise_error(ArgumentError, 'Bank account number too long, max 35 allowed')
65
+ }.should raise_error(ArgumentError, 'Bank account number too long, max 10 allowed')
32
66
  end
33
67
 
34
68
  it "should fail if bank number is invalid" do
35
- lambda{
69
+ lambda{
36
70
  KingDta::Account.new( :bank_account_number => @ba.bank_account_number,
37
71
  :bank_number => 0,
38
72
  :owner_name => @ba.owner_name)
39
73
  }.should raise_error(ArgumentError)
40
74
 
41
- lambda{
75
+ lambda{
42
76
  KingDta::Account.new( :bank_account_number => @ba.bank_account_number,
43
77
  :bank_number => 123456789101112,
44
78
  :owner_name => @ba.owner_name)
45
- }.should raise_error(ArgumentError, 'Bank number too long, max 11 allowed')
79
+ }.should raise_error(ArgumentError, 'Bank number too long, max 8 allowed')
46
80
  end
47
81
 
48
82
  it "should fail if owner number is too long" do
49
- lambda{
83
+ lambda{
50
84
  KingDta::Account.new( :bank_account_number => @ba.bank_account_number,
51
85
  :bank_number => @ba.bank_number,
52
86
  :owner_name => @ba.owner_name,
@@ -54,7 +88,7 @@ describe KingDta::Account do
54
88
  }.should raise_error(ArgumentError, 'Owner number too long, max 10 allowed')
55
89
  end
56
90
 
57
- it "should fail if street and/or Zip Code is too long" do
91
+ it "should fail if street and/or Zip Code is too long" do
58
92
  opts = sender_opts.merge( :bank_street => "Lorem ipsum dolor sit amet, consectetur")
59
93
  lambda{
60
94
  KingDta::Account.new(opts)
@@ -63,7 +97,7 @@ describe KingDta::Account do
63
97
 
64
98
  it "should fail if city is too long" do
65
99
  opts = sender_opts.merge( :bank_city => "Lorem ipsum dolor sit amet, consecte")
66
- lambda{
100
+ lambda{
67
101
  KingDta::Account.new opts
68
102
  }.should raise_error(ArgumentError, 'Bank city too long, max 35 allowed')
69
103
  end
@@ -90,12 +124,19 @@ describe KingDta::Account do
90
124
  end
91
125
 
92
126
  it "should return account street and zip" do
93
- konto = KingDta::Account.new( sender_opts )
94
- konto.bank_zip_city.should == "51063 BANK KOELN"
127
+ acnt = KingDta::Account.new( sender_opts )
128
+ acnt.bank_zip_city.should == "51063 BANK KOELN"
95
129
  end
96
130
 
97
131
  it "should return sender street and zip" do
98
- konto = KingDta::Account.new( sender_opts )
99
- konto.owner_zip_city.should == "51063 MEINE KOELN"
132
+ acnt = KingDta::Account.new( sender_opts )
133
+ acnt.owner_zip_city.should == "51063 MEINE KOELN"
134
+ end
135
+
136
+ it "should set owner country code from iban" do
137
+ opts = receiver_opts
138
+ opts[:owner_country_code] = nil
139
+ acnt = KingDta::Account.new( opts )
140
+ acnt.owner_country_code.should == "PL"
100
141
  end
101
- end
142
+ end
data/spec/dtaus_spec.rb CHANGED
@@ -90,6 +90,20 @@ describe KingDta::Dtaus do
90
90
  str.should == out
91
91
  end
92
92
 
93
+ it "should create c-sektion with long account owner name in extension" do
94
+ @dtaus.account = KingDta::Account.new(:bank_account_number => @kto1.bank_account_number, :bank_number => @kto1.bank_number,
95
+ :owner_name => 'A very long name exeeding 27 characters even longer 54 chars', :bank_name => @kto1.bank_name)
96
+
97
+ @dtaus.add(@booking)
98
+ @dtaus.bookings.first.text = 'SalesKing Monatsbeitrag 08/10 Freelancer Version'
99
+ @dtaus.add_c(@booking)
100
+ str = @dtaus.dta_string
101
+ str.length.should == 256
102
+ str.should include(@kto2.owner_name.upcase)
103
+ out = "0245C00000000370400440002787777000000000000005000 0000000000037040044782897003700000022025 PETER & MAY GMBH A VERY LONG NAME EXEEDING 2SALESKING MONATSBEITRAG 08/1 020210 FREELANCER VERSION 037 CHARACTERS EVEN LONGER 54 "
104
+ str.should == out
105
+ end
106
+
93
107
  it "should create c-sektion with default booking text" do
94
108
  @dtaus.default_text = 'Default verwendungszweck'
95
109
  @dtaus.add_c(@booking)
@@ -114,6 +128,15 @@ describe KingDta::Dtaus do
114
128
  str.should == out
115
129
  end
116
130
 
131
+ it "should create whole dta string with long texts exeeding extension" do
132
+ @dtaus.account = KingDta::Account.new(:bank_account_number => @kto1.bank_account_number, :bank_number => @kto1.bank_number,
133
+ :owner_name => 'A very long name exeeding 27 characters even longer 54 chars', :bank_name => @kto1.bank_name)
134
+ @dtaus.add(@booking)
135
+ @dtaus.bookings.first.text = 'Rgn R-3456-0102220 Monatsbeitrag 08/10 Freelancer Version Vielen Dank Ihre SalesKing GmbH' * 20
136
+ @dtaus.bookings.first.account.owner_name = 'A very long name exeeding 27 characters even longer 54 chars'
137
+ str = @dtaus.create ## should not raise error
138
+ end
139
+
117
140
  it "should create whole dta string with long booking text in extension" do
118
141
  @dtaus.add(@booking)
119
142
  @dtaus.bookings.first.text = 'Rgn R-3456-0102220 Monatsbeitrag 08/10 Freelancer Version Vielen Dank Ihre SalesKing GmbH'
data/spec/spec_helper.rb CHANGED
@@ -4,10 +4,10 @@ $:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
4
4
 
5
5
  require 'simplecov'
6
6
  SimpleCov.start 'rails'
7
- SimpleCov.coverage_dir 'coverage/rspec'
7
+ SimpleCov.coverage_dir 'coverage'
8
8
 
9
9
  require 'rubygems'
10
- require "king_dtaus"
10
+ require 'king_dtaus'
11
11
  require 'rspec'
12
12
  require 'ostruct'
13
13
  require 'date'
@@ -21,16 +21,16 @@ def sender_opts
21
21
  :bank_account_number => '1326049634',
22
22
  :bank_number => '37050299',
23
23
  :bank_name => 'Kreissparkasse Köln',
24
- :bank_street => "Bank Eine Straße 2",
25
- :bank_city => "Bank Köln",
26
- :bank_zip => "51063",
27
- :bank_country_code => "DE",
28
- :owner_number => "",
24
+ :bank_street => 'Bank Eine Straße 2',
25
+ :bank_city => 'Bank Köln',
26
+ :bank_zip => '51063',
27
+ :bank_country_code => 'DE',
28
+ :owner_number => '',
29
29
  :owner_name =>'Jan Kus',
30
- :owner_street => "Meine Eine Straße 2",
31
- :owner_city => "Meine Köln",
32
- :owner_zip_code => "51063",
33
- :owner_country_code => "DE"
30
+ :owner_street => 'Meine Eine Straße 2',
31
+ :owner_city => 'Meine Köln',
32
+ :owner_zip_code => '51063',
33
+ :owner_country_code => 'DE'
34
34
  }
35
35
  end
36
36
 
@@ -39,10 +39,10 @@ def receiver_opts
39
39
  :bank_iban => 'PL10105013151000002308622378',
40
40
  :bank_bic => 'COBADEFF366',
41
41
  :owner_name =>'Dalai Lama',
42
- :owner_street => "Bush-Avenue 55",
43
- :owner_city => "India",
44
- :owner_zip_code => "445555",
45
- :owner_country_code => "DE"
42
+ :owner_street => 'Bush-Avenue 55',
43
+ :owner_city => 'India',
44
+ :owner_zip_code => '445555',
45
+ :owner_country_code => 'DE' # actually wrong since iban is in poland
46
46
  # only needed if no bic present
47
47
  # :bank_name => 'Dalai Lamas Bank',
48
48
  # :bank_street => "5th avenue",
metadata CHANGED
@@ -1,128 +1,134 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: king_dtaus
3
- version: !ruby/object:Gem::Version
4
- hash: 961916008
5
- prerelease: 6
6
- segments:
7
- - 2
8
- - 0
9
- - 3
10
- - pre
11
- version: 2.0.3.pre
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.0.3
5
+ prerelease:
12
6
  platform: ruby
13
- authors:
7
+ authors:
14
8
  - Georg Leciejewski
15
9
  - Georg Ledermann
16
10
  - Jan Kus
17
11
  autorequire:
18
12
  bindir: bin
19
13
  cert_chain: []
20
-
21
- date: 2011-09-03 00:00:00 +02:00
22
- default_executable:
23
- dependencies:
24
- - !ruby/object:Gem::Dependency
25
- type: :runtime
26
- requirement: &id001 !ruby/object:Gem::Requirement
14
+ date: 2011-11-15 00:00:00.000000000 Z
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: i18n
18
+ requirement: !ruby/object:Gem::Requirement
27
19
  none: false
28
- requirements:
29
- - - ">="
30
- - !ruby/object:Gem::Version
31
- hash: 3
32
- segments:
33
- - 0
34
- version: "0"
35
- name: king_dtaus
36
- version_requirements: *id001
20
+ requirements:
21
+ - - ! '>='
22
+ - !ruby/object:Gem::Version
23
+ version: '0'
24
+ type: :runtime
37
25
  prerelease: false
38
- - !ruby/object:Gem::Dependency
26
+ version_requirements: !ruby/object:Gem::Requirement
27
+ none: false
28
+ requirements:
29
+ - - ! '>='
30
+ - !ruby/object:Gem::Version
31
+ version: '0'
32
+ - !ruby/object:Gem::Dependency
33
+ name: rdoc
34
+ requirement: !ruby/object:Gem::Requirement
35
+ none: false
36
+ requirements:
37
+ - - ! '>='
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
39
40
  type: :development
40
- requirement: &id002 !ruby/object:Gem::Requirement
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
41
43
  none: false
42
- requirements:
43
- - - ">="
44
- - !ruby/object:Gem::Version
45
- hash: 3
46
- segments:
47
- - 0
48
- version: "0"
44
+ requirements:
45
+ - - ! '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ - !ruby/object:Gem::Dependency
49
49
  name: rspec
50
- version_requirements: *id002
51
- prerelease: false
52
- - !ruby/object:Gem::Dependency
53
- type: :development
54
- requirement: &id003 !ruby/object:Gem::Requirement
50
+ requirement: !ruby/object:Gem::Requirement
55
51
  none: false
56
- requirements:
57
- - - ">="
58
- - !ruby/object:Gem::Version
59
- hash: 3
60
- segments:
61
- - 0
62
- version: "0"
63
- name: jeweler
64
- version_requirements: *id003
65
- prerelease: false
66
- - !ruby/object:Gem::Dependency
52
+ requirements:
53
+ - - ! '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
67
56
  type: :development
68
- requirement: &id004 !ruby/object:Gem::Requirement
57
+ prerelease: false
58
+ version_requirements: !ruby/object:Gem::Requirement
69
59
  none: false
70
- requirements:
71
- - - ">="
72
- - !ruby/object:Gem::Version
73
- hash: 3
74
- segments:
75
- - 0
76
- version: "0"
60
+ requirements:
61
+ - - ! '>='
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
64
+ - !ruby/object:Gem::Dependency
77
65
  name: simplecov
78
- version_requirements: *id004
79
- prerelease: false
80
- - !ruby/object:Gem::Dependency
66
+ requirement: !ruby/object:Gem::Requirement
67
+ none: false
68
+ requirements:
69
+ - - ! '>='
70
+ - !ruby/object:Gem::Version
71
+ version: '0'
81
72
  type: :development
82
- requirement: &id005 !ruby/object:Gem::Requirement
73
+ prerelease: false
74
+ version_requirements: !ruby/object:Gem::Requirement
83
75
  none: false
84
- requirements:
85
- - - ">="
86
- - !ruby/object:Gem::Version
87
- hash: 3
88
- segments:
89
- - 0
90
- version: "0"
76
+ requirements:
77
+ - - ! '>='
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
80
+ - !ruby/object:Gem::Dependency
91
81
  name: mocha
92
- version_requirements: *id005
93
- prerelease: false
94
- - !ruby/object:Gem::Dependency
82
+ requirement: !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
95
88
  type: :development
96
- requirement: &id006 !ruby/object:Gem::Requirement
89
+ prerelease: false
90
+ version_requirements: !ruby/object:Gem::Requirement
97
91
  none: false
98
- requirements:
99
- - - ">="
100
- - !ruby/object:Gem::Version
101
- hash: 3
102
- segments:
103
- - 0
104
- version: "0"
105
- name: i18n
106
- version_requirements: *id006
92
+ requirements:
93
+ - - ! '>='
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ - !ruby/object:Gem::Dependency
97
+ name: rake
98
+ requirement: !ruby/object:Gem::Requirement
99
+ none: false
100
+ requirements:
101
+ - - ! '>='
102
+ - !ruby/object:Gem::Version
103
+ version: 0.9.2
104
+ type: :development
107
105
  prerelease: false
108
- description: DTAUS is a text-based format, to create bank transfers for german banks. This gem helps with the creation of those transfer files.
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ none: false
108
+ requirements:
109
+ - - ! '>='
110
+ - !ruby/object:Gem::Version
111
+ version: 0.9.2
112
+ description: ! 'DTA/DTAUS and DTAZV are text-based formats to create bank transfers
113
+ for german banks.
114
+
115
+ This gem creates DTA/DATAUS files for inner german credit and debit(Gutschrift/Lastschrift)
116
+ transfers.
117
+
118
+ It is also capable of creating DTAZV credit-files for transfers from Germany to
119
+ European SEPA region.'
109
120
  email: gl@salesking.eu
110
121
  executables: []
111
-
112
122
  extensions: []
113
-
114
- extra_rdoc_files:
123
+ extra_rdoc_files:
115
124
  - README.markdown
116
- files:
125
+ files:
126
+ - .gitignore
117
127
  - .travis.yml
118
128
  - Gemfile
119
129
  - MIT-LICENSE
120
130
  - README.markdown
121
131
  - Rakefile
122
- - VERSION
123
- - docs/dtazv.pdf
124
- - docs/dtazv_bank_bbk.pdf
125
- - docs/example.output
126
132
  - king_dtaus.gemspec
127
133
  - lib/king_dta/account.rb
128
134
  - lib/king_dta/booking.rb
@@ -131,6 +137,7 @@ files:
131
137
  - lib/king_dta/dtazv.rb
132
138
  - lib/king_dta/exception.rb
133
139
  - lib/king_dta/helper.rb
140
+ - lib/king_dta/version.rb
134
141
  - lib/king_dtaus.rb
135
142
  - spec/account_spec.rb
136
143
  - spec/booking_spec.rb
@@ -138,41 +145,31 @@ files:
138
145
  - spec/dtazv_spec.rb
139
146
  - spec/helper_spec.rb
140
147
  - spec/spec_helper.rb
141
- has_rdoc: true
142
148
  homepage: http://github.com/salesking/king_dtaus
143
149
  licenses: []
144
-
145
150
  post_install_message:
146
151
  rdoc_options: []
147
-
148
- require_paths:
152
+ require_paths:
149
153
  - lib
150
- required_ruby_version: !ruby/object:Gem::Requirement
154
+ required_ruby_version: !ruby/object:Gem::Requirement
151
155
  none: false
152
- requirements:
153
- - - ">="
154
- - !ruby/object:Gem::Version
155
- hash: 3
156
- segments:
156
+ requirements:
157
+ - - ! '>='
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ segments:
157
161
  - 0
158
- version: "0"
159
- required_rubygems_version: !ruby/object:Gem::Requirement
162
+ hash: 1238598529649404855
163
+ required_rubygems_version: !ruby/object:Gem::Requirement
160
164
  none: false
161
- requirements:
162
- - - ">"
163
- - !ruby/object:Gem::Version
164
- hash: 25
165
- segments:
166
- - 1
167
- - 3
168
- - 1
169
- version: 1.3.1
165
+ requirements:
166
+ - - ! '>='
167
+ - !ruby/object:Gem::Version
168
+ version: '0'
170
169
  requirements: []
171
-
172
170
  rubyforge_project:
173
- rubygems_version: 1.6.2
171
+ rubygems_version: 1.8.24
174
172
  signing_key:
175
173
  specification_version: 3
176
- summary: Generate DTAUS strings and files
174
+ summary: Generate DTA/DTAUS and DTAZV bank transfer files .. the easy way
177
175
  test_files: []
178
-
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 2.0.3.pre
data/docs/dtazv.pdf DELETED
Binary file
Binary file
data/docs/example.output DELETED
@@ -1,7 +0,0 @@
1
- 0256P37040044 Commerzbank Köln 5th avenue 55323 los angeles1106080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
2
-
3
- 0256Q370400447828970037 GIMME YOUR MONEY AG 6th avenue 445555 los angeles11060801110608N000000000000000000000000000000000000000000000000000000000000000000000000000000
4
-
5
- 0572T37040044EUR782897003711060837040044EUR0037040044 MARKF1100 FIDEL CASTRO 0 GR1601101250000000012300695EUR00000000000220025 0 0 0 0 00013 0 00000000000000000000000000000000000000000000000000000 00
6
-
7
- 256Y000000000000000000000000000000000000000000000000000000000000000000000001 0