king_dtaus 1.0.2 → 2.0.0.pre

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/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm use --create ree@dtazv
data/DTAUS0.TXT ADDED
@@ -0,0 +1 @@
1
+ 0256Q370502991326049634JAN KUS MEINE EINE STRASSE 2 51063 MEINE KOELN 11060801110608N0000000000 0768T37050299EUR132604963411060800000000 0000000000MARKF1100 DE FIDEL CASTRO BUSH-AVENUE 55 445555 KUBA /GR1601101250000000012300695 EUR00000000000220250 00000000 0013 0 000256Z000000000000220000000000000001
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source :rubygems
2
+
3
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,38 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ king_dtaus (1.0.2)
5
+ king_dtaus
6
+
7
+ GEM
8
+ remote: http://rubygems.org/
9
+ specs:
10
+ diff-lcs (1.1.2)
11
+ git (1.2.5)
12
+ jeweler (1.6.2)
13
+ bundler (~> 1.0)
14
+ git (>= 1.2.5)
15
+ rake
16
+ mocha (0.9.12)
17
+ rake (0.9.1)
18
+ rspec (2.6.0)
19
+ rspec-core (~> 2.6.0)
20
+ rspec-expectations (~> 2.6.0)
21
+ rspec-mocks (~> 2.6.0)
22
+ rspec-core (2.6.3)
23
+ rspec-expectations (2.6.0)
24
+ diff-lcs (~> 1.1.2)
25
+ rspec-mocks (2.6.0)
26
+ simplecov (0.4.2)
27
+ simplecov-html (~> 0.4.4)
28
+ simplecov-html (0.4.5)
29
+
30
+ PLATFORMS
31
+ ruby
32
+
33
+ DEPENDENCIES
34
+ jeweler
35
+ king_dtaus!
36
+ mocha
37
+ rspec
38
+ simplecov
data/README.rdoc CHANGED
@@ -1,32 +1,52 @@
1
- = Dtaus
1
+ = DTAUS & DTAZV always comes together
2
2
 
3
- DTAUS is a format for German bank transfers and is short for
4
- "Datenträgeraustausch". The format itself totally sucks because it was
5
- established in the last century, to be used on floppy disks. Still almost
6
- all German banks use it(they only seem innovative at robbing), and it is
3
+ DTAUS & DTAZV are formats for German bank transfers and is short for
4
+ "Datenträgeraustausch". The format itself totally sucks because it was
5
+ established in the last century, to be used on floppy disks. Still almost
6
+ all German banks use it (they only seem innovative at robbing), and it is
7
7
  therefore supported in common banking programs too.
8
8
 
9
- This gem saves you all the trouble when generating dtaus-text.
9
+ This gem saves you all the trouble when generating DTAUS- or DTAZV-text.
10
+
11
+ We love building payment applications
10
12
 
11
13
  == Install
12
14
 
13
15
  gem install king_dtaus
14
16
 
15
17
  == Features
16
-
17
- * create lastschrift
18
- * create gutschrift
19
18
 
19
+ * create DTAUS debit advice (Lastschrift)
20
+ * create DTAUS credit advice (Gutschrift)
21
+ * create DTAZV debit advice
22
+
23
+ == TODOs
24
+
25
+ * first gem with no todo's - never seen it, huh?
26
+
27
+ == Resources
28
+
29
+ * DTAZV-Viewer: http://www.meta-evolutions.de/pages/artikel-20070630-dtazv-datei-betrachter.html
30
+ * DTA/DTAZV PHP Pear: http://pear.php.net/package/Payment_DTA
31
+ * Ruby Kernel Module: http://www.ruby-doc.org/core/classes/Kernel.html
32
+ * Windata ZV-Tools: http://www.windata.de/Site/2Produkte2/ZVTools.aspx
33
+ * The Swift Codes: http://www.theswiftcodes.com/
34
+ * StarMoney: http://www.starmoney.de/index.php?id=starmoneybusiness_testen
35
+ * SalesKing: http://salesking.eu
36
+
37
+ == Examples
38
+
39
+ Here are some examples how to create a DTA- or DTAZV-File. Also check out the spec/dtazv_test.rb to have a running Example of an Export.
40
+
41
+ === DTA
20
42
 
21
- == Example
22
-
23
- #create a new dtaus object
43
+ # create a new dtaus object
24
44
  dta = KingDta::Dtaus.new('LK')
25
45
  # set sender account
26
- dta.account = KingDta::Account.new( "bank_account_number", "bank_number", "bank_owner")
46
+ dta.account = KingDta::Account.new(:account_number => @kto1.account_number, :bank_number => @kto1.bank_number, :client_name => @kto1.client_name, :bank_name => @kto1.bank_name)
27
47
  # the following should be done in a loop to add multiple bookings
28
48
  # create receiving account
29
- rec_acnt = KingDta::Account.new( "bank_account_number", "bank_number", "bank_owner" )
49
+ rec_acnt = KingDta::Account.new(:account_number => @kto1.account_number, :bank_number => @kto1.bank_number, :client_name => @kto1.client_name, :bank_name => @kto1.bank_name)
30
50
  # create booking
31
51
  booking = KingDta::Booking.new(rec_acnt, 100.00 )
32
52
  # set booking text if you want to
@@ -38,15 +58,62 @@ This gem saves you all the trouble when generating dtaus-text.
38
58
  # create datausstring and do with it whatever fits your workflow
39
59
  my_str = dta.create
40
60
 
41
- also make sure to read the specs
61
+ === DTAZV
62
+
63
+ @date = Date.today
64
+ @dudes_dtazv_export = KingDta::Dtazv.new(@date)
65
+ @dudes_konto = self.dudes_konto
66
+ @dalai_lamas_account = self.dalai_lamas_account
67
+ @dudes_dtazv_export.account = KingDta::Account.new(
68
+ :account_number => @dudes_konto.account_number,
69
+ :bank_number => @dudes_konto.bank_number,
70
+ :client_name => @dudes_konto.client_name,
71
+ :client_number => @dudes_konto.client_number,
72
+ :bank_street => @dudes_konto.account_street,
73
+ :bank_city => @dudes_konto.account_city,
74
+ :bank_zip_code => @dudes_konto.account_zip_code,
75
+ :bank_name => @dudes_konto.bank_name,
76
+ :client_street => @dudes_konto.client_street,
77
+ :client_city => @dudes_konto.client_city,
78
+ :client_zip_code => @dudes_konto.client_zip_code,
79
+ :bank_country_code => @dudes_konto.bank_country_code,
80
+ :client_country_code => @dudes_konto.client_country_code
81
+ )
82
+
83
+ @fidel_castros_booking = KingDta::Booking.new(KingDta::Account.new(
84
+ :account_number => @dalai_lamas_account.account_number,
85
+ :bank_number => @dalai_lamas_account.bank_number,
86
+ :client_name => @dalai_lamas_account.client_name,
87
+ :client_number => @dalai_lamas_account.bank_name,
88
+ :bank_street => @dalai_lamas_account.account_street,
89
+ :bank_city => @dalai_lamas_account.account_city,
90
+ :bank_zip_code => @dalai_lamas_account.account_zip_code,
91
+ :bank_name => @dalai_lamas_account.bank_name,
92
+ :client_street => @dalai_lamas_account.client_street,
93
+ :client_city => @dalai_lamas_account.client_city,
94
+ :client_zip_code => @dalai_lamas_account.client_zip_code,
95
+ :bank_country_code => @dalai_lamas_account.bank_country_code,
96
+ :client_country_code => @dalai_lamas_account.client_country_code
97
+ ), 220.25)
98
+
99
+ @dudes_dtazv_export.add(@fidel_castros_booking)
100
+ @dudes_dtazv_export.create_file
42
101
 
102
+ # Output is DTAZV0.TXT
103
+
104
+ also make sure to read the specs
43
105
 
44
106
  == Credits
45
107
 
46
- This gem used https://rubygems.org/gems/DTAUS as a starting point.
47
- It was disected, turned into a real class structure, bugs where fixed and
108
+ Bugfixes and enhancements by
109
+
110
+ * Georg Ledermann - https://github.com/ledermann
111
+ * Kim Rudolph - https://github.com/krudolph
112
+ * Thorsten Böttger - https://github.com/alto
113
+ * Jan Kus - https://github.com/koos
114
+
115
+ This gem used https://rubygems.org/gems/DTAUS as a starting point.
116
+ It was disected, turned into a real class structure, bugs where fixed and
48
117
  of course a full test suite ensures its functionality.
49
118
 
50
- Copyright (c) 2009-2010 Georg Leciejewski,
51
- Bugfixes and enhancements by Georg Ledermann
52
- released under the MIT license
119
+ Copyright (c) 2009-2011 Georg Leciejewski (SalesKing), Jan Kus (Railslove), released under the MIT license
data/Rakefile CHANGED
@@ -1,33 +1,13 @@
1
1
  require 'rake'
2
- require 'rake/rdoctask'
3
- require 'spec/rake/spectask'
4
-
5
- desc 'Default: run specs.'
6
- task :default => :spec
7
-
8
- spec_files = Rake::FileList["spec/**/*_spec.rb"]
2
+ require 'rdoc/task'
3
+ require 'rspec/core/rake_task'
9
4
 
10
5
  desc "Run specs"
11
- Spec::Rake::SpecTask.new do |t|
12
- t.spec_files = spec_files
13
- t.spec_opts = ["-c"]
14
- end
6
+ RSpec::Core::RakeTask.new
15
7
 
16
- desc "Generate code coverage"
17
- Spec::Rake::SpecTask.new(:coverage) do |t|
18
- t.spec_files = spec_files
19
- t.rcov = true
20
- t.rcov_opts = ['--exclude', 'spec,/var/lib/gems']
21
- end
8
+ task :default => :spec
22
9
 
23
- desc 'Generate documentation'
24
- Rake::RDocTask.new(:rdoc) do |rdoc|
25
- rdoc.rdoc_dir = 'rdoc'
26
- rdoc.title = 'dtaus'
27
- rdoc.options << '--line-numbers' << '--inline-source'
28
- rdoc.rdoc_files.include('README')
29
- rdoc.rdoc_files.include('lib/**/*.rb')
30
- end
10
+ Dir["#{File.dirname(__FILE__)}/tasks/*.rake"].sort.each { |ext| load ext }
31
11
 
32
12
  begin
33
13
  require 'jeweler'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.2
1
+ 2.0.0.pre
data/docs/dtazv.pdf ADDED
Binary file
Binary file
data/example.output ADDED
@@ -0,0 +1,7 @@
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
data/king_dtaus.gemspec CHANGED
@@ -5,53 +5,73 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{king_dtaus}
8
- s.version = "1.0.2"
8
+ s.version = "2.0.0.pre"
9
9
 
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
10
+ s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Georg Leciejewski", "Georg Ledermann"]
12
- s.date = %q{2011-02-10}
12
+ s.date = %q{2011-06-15}
13
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.}
14
14
  s.email = %q{gl@salesking.eu}
15
15
  s.extra_rdoc_files = [
16
16
  "README.rdoc"
17
17
  ]
18
18
  s.files = [
19
+ ".rvmrc",
20
+ "DTAUS0.TXT",
21
+ "Gemfile",
22
+ "Gemfile.lock",
19
23
  "MIT-LICENSE",
20
24
  "README.rdoc",
21
25
  "Rakefile",
22
26
  "VERSION",
27
+ "docs/dtazv.pdf",
28
+ "docs/dtazv_bank_bbk.pdf",
29
+ "example.output",
23
30
  "king_dtaus.gemspec",
24
31
  "lib/king_dta/account.rb",
25
32
  "lib/king_dta/booking.rb",
33
+ "lib/king_dta/dta.rb",
26
34
  "lib/king_dta/dtaus.rb",
35
+ "lib/king_dta/dtazv.rb",
27
36
  "lib/king_dta/exception.rb",
28
37
  "lib/king_dta/helper.rb",
29
38
  "lib/king_dtaus.rb",
30
39
  "spec/account_spec.rb",
31
40
  "spec/booking_spec.rb",
32
41
  "spec/dtaus_spec.rb",
42
+ "spec/dtazv_spec.rb",
43
+ "spec/dtazv_test.rb",
33
44
  "spec/helper_spec.rb",
34
45
  "spec/spec_helper.rb"
35
46
  ]
36
47
  s.homepage = %q{http://github.com/salesking/king_dtaus}
37
48
  s.require_paths = ["lib"]
38
- s.rubygems_version = %q{1.4.1}
49
+ s.rubygems_version = %q{1.3.7}
39
50
  s.summary = %q{Generate DTAUS strings and files}
40
- s.test_files = [
41
- "spec/account_spec.rb",
42
- "spec/booking_spec.rb",
43
- "spec/dtaus_spec.rb",
44
- "spec/helper_spec.rb",
45
- "spec/spec_helper.rb"
46
- ]
47
51
 
48
52
  if s.respond_to? :specification_version then
53
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
49
54
  s.specification_version = 3
50
55
 
51
56
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
57
+ s.add_runtime_dependency(%q<king_dtaus>, [">= 0"])
58
+ s.add_development_dependency(%q<rspec>, [">= 0"])
59
+ s.add_development_dependency(%q<jeweler>, [">= 0"])
60
+ s.add_development_dependency(%q<simplecov>, [">= 0"])
61
+ s.add_development_dependency(%q<mocha>, [">= 0"])
52
62
  else
63
+ s.add_dependency(%q<king_dtaus>, [">= 0"])
64
+ s.add_dependency(%q<rspec>, [">= 0"])
65
+ s.add_dependency(%q<jeweler>, [">= 0"])
66
+ s.add_dependency(%q<simplecov>, [">= 0"])
67
+ s.add_dependency(%q<mocha>, [">= 0"])
53
68
  end
54
69
  else
70
+ s.add_dependency(%q<king_dtaus>, [">= 0"])
71
+ s.add_dependency(%q<rspec>, [">= 0"])
72
+ s.add_dependency(%q<jeweler>, [">= 0"])
73
+ s.add_dependency(%q<simplecov>, [">= 0"])
74
+ s.add_dependency(%q<mocha>, [">= 0"])
55
75
  end
56
76
  end
57
77
 
@@ -4,21 +4,54 @@ module KingDta
4
4
  class Account
5
5
  include KingDta::Helper
6
6
  # dta~ jeweilige Feld in DTAUS-Norm
7
- attr_reader :bank_account_number, :bank_number, :owner, :client_number
8
-
9
- def initialize( ban, bank_number, owner, client_number="" )
10
-
11
- @bank_account_number = ban.kind_of?( Integer ) ? ban : ban.gsub(/\s/, '').to_i
12
- @bank_number = bank_number.kind_of?( Integer ) ? bank_number : bank_number.gsub(/\s/, '').to_i
13
- @client_number = client_number.kind_of?( Integer ) ? client_number : client_number.gsub(/\s/, '').to_i
14
- @owner= convert_text( owner )
15
-
16
- raise ArgumentError.new('Bank account number too long, max 10 allowed') if "#{@bank_account_number}".length > 10
17
- raise ArgumentError.new('Bank number too long, max 8 allowed') if "#{@bank_number}".length > 8
18
- raise ArgumentError.new('Client number too long, max 10 allowed') if "#{@client_number}".length > 10
19
- raise ArgumentError.new("Bank account number cannot be 0") if @bank_account_number == 0
20
- raise ArgumentError.new("Bank number cannot be 0") if @bank_number == 0
7
+ attr_accessor :account_number, :bank_number, :client_number, :bank_street, :bank_city, :bank_zip_code, :bank_name,
8
+ :client_name, :client_street, :client_city, :client_zip_code, :bank_country_code, :client_country_code
9
+
10
+ # TODO test
11
+ def initialize(args={})
12
+
13
+ @bank_street = convert_text(args.delete(:bank_street))
14
+ @bank_city = convert_text(args.delete(:bank_city))
15
+ @bank_name = convert_text(args.delete(:bank_name))
16
+ @client_name = convert_text(args.delete(:client_name))
17
+ @client_street = convert_text(args.delete(:client_street))
18
+ @client_city = convert_text(args.delete(:client_city))
19
+
20
+ args.each do |key,value|
21
+ self.send("#{key}=",value)
22
+ end
23
+
24
+ raise ArgumentError.new('Account number too long, max 35 allowed') if @account_number && "#{@account_number}".length > 35
25
+ raise ArgumentError.new('Bank number too long, max 11 allowed') if @bank_number && "#{@bank_number}".length > 11
26
+ raise ArgumentError.new('Client number too long, max 10 allowed') if @client_number && "#{@client_number}".length > 10
27
+ raise ArgumentError.new("Bank account number cannot be 0") if @account_number && @account_number == 0
28
+ raise ArgumentError.new("Bank number cannot be 0") if @bank_number && @bank_number == 0
29
+ raise ArgumentError.new("Street and/or Zip Code too long, max 35 allowed") if @bank_street && @bank_zip_code && "#{@bank_street} #{@bank_zip_code}".length > 35
30
+ raise ArgumentError.new("City too long, max 35 allowed") if @bank_city && @bank_city.length > 35
31
+ raise ArgumentError.new("Bank Name too long, max 35 allowed") if @bank_name && @bank_name.length > 35
32
+ raise ArgumentError.new("Client Street and/or Zip Code too long, max 35 allowed") if @client_street && @client_zip_code && "#{@client_street} #{@client_zip_code}".length > 35
33
+ raise ArgumentError.new("Client City too long, max 35 allowed") if @client_city && @client_city.length > 35
34
+ raise ArgumentError.new("Bank Country code too long, max 2 allowed") if @bank_country_code && @bank_country_code.length > 2
35
+ raise ArgumentError.new("Client Country code too long, max 2 allowed") if @client_country_code && @client_country_code.length > 2
36
+
37
+ end
38
+
39
+ # TODO test
40
+ def client_firstname
41
+ @client_name.split(' ')[0]
21
42
  end
22
-
43
+
44
+ def client_surname
45
+ @client_name.split(' ')[1]
46
+ end
47
+
48
+ def zip_city
49
+ "#{@bank_zip_code} #{@bank_city}"
50
+ end
51
+
52
+ def client_zip_city
53
+ "#{@client_zip_code} #{@client_city}"
54
+ end
55
+
23
56
  end
24
57
  end
@@ -8,17 +8,17 @@ module KingDta
8
8
  LASTSCHRIFT_EINZUGSERMAECHTIGUNG = '05000'
9
9
  UEBERWEISUNG_GUTSCHRIFT = '51000'
10
10
 
11
- attr_reader :value, :account, :text, :schluessel
11
+ attr_accessor :value, :account, :text, :account_key
12
12
  #Eine Buchung ist definiert durch:
13
13
  #- Konto (siehe Klasse Konto
14
14
  #- Betrag
15
15
  # Der Betrag kann , oder . als Dezimaltrenner enthalten.
16
16
  #- optional Buchungstext
17
- def initialize( account, value, text=nil, schluessel=nil )
17
+ def initialize( account, value, text=nil, account_key=nil )
18
18
  raise Exception.new("Hey, a booking should have an Account") unless account.kind_of?( Account )
19
19
  @account = account
20
20
  @text = text ? convert_text( text ) : text
21
- @schluessel = schluessel
21
+ @account_key = account_key
22
22
  if value.is_a?(String)
23
23
  value = BigDecimal.new value.sub(',', '.')
24
24
  elsif value.is_a?(Numeric)
@@ -37,7 +37,7 @@ module KingDta
37
37
  @pos = false
38
38
  end
39
39
  end
40
-
40
+
41
41
  def text=(text)
42
42
  @text = convert_text( text )
43
43
  end
@@ -0,0 +1,53 @@
1
+ # encoding: utf-8
2
+ module KingDta
3
+ class Dta
4
+ include KingDta::Helper
5
+ attr_reader :default_text
6
+
7
+ # Set the sending account(you own)
8
+ # === Parameter
9
+ # account<Account>:: the sending account, must be an instance of class
10
+ # KingDta::Account
11
+ def account=( account )
12
+ raise Exception.new("Come on, i need an Account object") unless account.kind_of?( Account )
13
+ @account = account
14
+ end
15
+
16
+ # The dtaus format as string. All data is appended to it during creation
17
+ def dta_string
18
+ @dta_string ||= ''
19
+ end
20
+ # Array of bookings
21
+ def bookings
22
+ @bookings ||= []
23
+ end
24
+ # default text used on all bookings with emtpy text
25
+ def default_text=(text='')
26
+ @default_text = convert_text( text )
27
+ end
28
+
29
+ # Add a booking. The prefix (pos/neg) is beeing checked if it is identical
30
+ # with the last one
31
+ # === Parameter
32
+ # booking<Booking>:: KingDta::Booking object
33
+ # === Raises
34
+ # error if the prefix within the bookings has changed
35
+ def add ( booking )
36
+ raise Exception.new("The file has alreay been closed, cannot add new booking") if @closed
37
+ #the first booking decides wether all values are po or negative
38
+ @value_pos = booking.pos? if bookings.empty?
39
+ raise Exception.new("The prefix within bookings changed from #{@value_pos} to #{booking.pos?}") if @value_pos != booking.pos?
40
+ bookings << booking
41
+ end
42
+
43
+ # Create a DTA-File, from current dta information
44
+ # === Parameter
45
+ # filename<String>:: defaults to dta.txt
46
+ def create_file(filename ='dta.txt')
47
+ file = open( filename, 'w')
48
+ file << create
49
+ file.close()
50
+ end
51
+
52
+ end
53
+ end
@@ -5,9 +5,8 @@
5
5
  #Infos zu DTAUS: http://www.infodrom.org/projects/dtaus/dtaus.php3
6
6
 
7
7
  module KingDta
8
- class Dtaus
9
- include KingDta::Helper
10
- attr_reader :sum_bank_account_numbers, :sum_bank_numbers, :sum_values, :default_text
8
+ class Dtaus < KingDta::Dta
9
+ attr_reader :sum_bank_account_numbers, :sum_bank_numbers, :sum_values
11
10
 
12
11
  # Create a new dtaus file/string.
13
12
  # === Parameter
@@ -23,42 +22,6 @@ module KingDta
23
22
  @default_text = '' # default verwendungzweck
24
23
  end
25
24
 
26
- # Set the sending account(you own)
27
- # === Parameter
28
- # account<Account>:: the sending account, must be an instance of class
29
- # KingDta::Account
30
- def account=( account )
31
- raise Exception.new("Come on, i need an Account object") unless account.kind_of?( Account )
32
- @account = account
33
- end
34
-
35
- # The dtaus format as string. All data is appended to it during creation
36
- def dta_string
37
- @dta_string ||= ''
38
- end
39
- # Array of bookings
40
- def bookings
41
- @bookings ||= []
42
- end
43
- # default text used on all bookings with emtpy text
44
- def default_text=(text='')
45
- @default_text = convert_text( text )
46
- end
47
-
48
- # Add a booking. The prefix (pos/neg) is beeing checked if it is identical
49
- # with the last one
50
- # === Parameter
51
- # booking<Booking>:: KingDta::Booking object
52
- # === Raises
53
- # error if the prefix within the bookings has changed
54
- def add ( booking )
55
- raise Exception.new("The file has alreay been closed, cannot add new booking") if @closed
56
- #the first booking decides wether all values are po or negative
57
- @value_pos = booking.pos? if bookings.empty?
58
- raise Exception.new("The prefix within bookings changed from #{@value_pos} to #{booking.pos?}") if @value_pos != booking.pos?
59
- bookings << booking
60
- end
61
-
62
25
  # Creates the whole dta string(in the right order) and returns it
63
26
  # === Raises
64
27
  # error if there are no bookings
@@ -74,26 +37,16 @@ module KingDta
74
37
  dta_string
75
38
  end
76
39
 
40
+ # TODO do it works? the .to_i stuff
77
41
  def set_checksums
78
42
  @sum_bank_account_numbers, @sum_bank_numbers, @sum_values = 0,0,0
79
43
  bookings.each do |b|
80
- @sum_bank_account_numbers += b.account.bank_account_number
81
- @sum_bank_numbers += b.account.bank_number
44
+ @sum_bank_account_numbers += b.account.account_number.to_i
45
+ @sum_bank_numbers += b.account.bank_number.to_i
82
46
  @sum_values += b.value
83
47
  end
84
48
  end
85
49
 
86
- # Create a DTA-File, from current dta information
87
- # === Parameter
88
- # filename<String>:: defaults to DTAUS0.TXT
89
- def create_file(filename ='DTAUS0.TXT')
90
- file = open( filename, 'w')
91
- file << create
92
- file.close()
93
- print "#{filename} created containing #{@bookings.size} bookings\n"
94
- end
95
-
96
-
97
50
  #Erstellen A-Segment der DTAUS-Datei
98
51
  #Aufbau des Segments:
99
52
  # Nr. Start Länge Beschreibung
@@ -124,10 +77,10 @@ module KingDta
124
77
  data += @typ #Lastschriften Kunde
125
78
  data += '%8i' % @account.bank_number #.rjust(8) #bank_number
126
79
  data += '%08i' % 0 #belegt, wenn Bank
127
- data += '%-27.27s' % @account.owner
80
+ data += '%-27.27s' % @account.client_name
128
81
  data += @date.strftime("%d%m%y") #aktuelles Datum im Format DDMMJJ
129
82
  data += ' ' * 4 #bankinternes Feld
130
- data += '%010i' % @account.bank_account_number
83
+ data += '%010i' % @account.account_number
131
84
  data += '%010i' % 0 #Referenznummer
132
85
  data += ' ' * 15 #Reserve
133
86
  data += '%8s' % @date.strftime("%d%m%Y") #Ausführungsdatum (ja hier 8 Stellen, Erzeugungsdat. hat 6 Stellen)
@@ -195,11 +148,9 @@ module KingDta
195
148
  # <String>:: The current dta_string
196
149
  def add_c( booking )
197
150
  zahlungsart = if @typ == 'LK'
198
- booking.schluessel || Booking::LASTSCHRIFT_EINZUGSERMAECHTIGUNG
151
+ booking.account_key || Booking::LASTSCHRIFT_EINZUGSERMAECHTIGUNG
199
152
  elsif @typ == 'GK'
200
- booking.schluessel || Booking::UEBERWEISUNG_GUTSCHRIFT
201
- else
202
- raise 'Wrong booking type'
153
+ booking.account_key || Booking::UEBERWEISUNG_GUTSCHRIFT
203
154
  end
204
155
  #Extended segments Long name & booking texts
205
156
  exts = [] #('xx', 'inhalt') xx: 01=Name 02=Verwendung 03=Name
@@ -208,22 +159,25 @@ module KingDta
208
159
  data1 = 'C'
209
160
  data1 += '%08i' % 0 #freigestellt
210
161
  data1 += '%08i' % booking.account.bank_number
211
- data1 += '%010i' % booking.account.bank_account_number
212
- data1 += '0%011i0' % booking.account.client_number #interne Kundennummer
162
+ data1 += '%010i' % booking.account.account_number
163
+ # RUBY 1.9 workaround => || 0
164
+ # Ruby 1.9 '0%011i0' % nil => Exception
165
+ # Ruby 1.8 '0%011i0' % nil => "00000000000"
166
+ data1 += '0%011i0' % (booking.account.client_number || 0) #interne Kundennummer
213
167
  data1 += zahlungsart
214
168
  data1 += ' ' #bankintern
215
169
  data1 += '0' * 11 #Reserve
216
170
  data1 += '%08i' % @account.bank_number
217
- data1 += '%010i' % @account.bank_account_number
171
+ data1 += '%010i' % @account.account_number
218
172
  data1 += '%011i' % booking.value #Betrag in Euro einschl. Nachkomma
219
173
  data1 += ' ' * 3
220
- data1 += '%-27.27s' % booking.account.owner #Name Begünstigter/Zahlungspflichtiger
221
- exts << ['01', booking.account.owner[27..999] ] if booking.account.owner.size > 27
174
+ data1 += '%-27.27s' % booking.account.client_name #Name Begünstigter/Zahlungspflichtiger
175
+ exts << ['01', booking.account.client_name[27..999] ] if booking.account.client_name.size > 27
222
176
  data1 += ' ' * 8
223
177
  #Einfügen erst möglich, wenn Satzlänge bekannt
224
178
 
225
179
  # 2. Satzabschnitt
226
- data2 = "%27.27s" % @account.owner
180
+ data2 = "%27.27s" % @account.client_name
227
181
  zweck = booking.text || default_text
228
182
  #Erste 27 Zeichen
229
183
  #Wenn text < 26 Zeichen, dann mit spaces auffüllen.
@@ -234,13 +188,13 @@ module KingDta
234
188
  exts << ['02', zweck.ljust(27) ]
235
189
  zweck = zweck[27..999]
236
190
  end
237
- exts << ['03', @account.owner[27..999] ] if @account.owner.size > 27
191
+ exts << ['03', @account.client_name[27..999] ] if @account.client_name.size > 27
238
192
 
239
193
  data2 += '1' #Währungskennzeichen
240
194
  data2 += ' ' * 2
241
195
  # Gesamte Satzlänge ermitteln ( data1(+4) + data2 + Erweiterungen )
242
196
  data1 = "%04i#{data1}" % ( data1.size + 4 + data2.size+ 2 + exts.size * 29 )
243
- raise "DTAUS: Längenfehler C/1 #{data1.size} nicht 128, #{booking.account.owner}" unless data1.size == 128
197
+ raise "DTAUS: Längenfehler C/1 #{data1.size} nicht 128, #{booking.account.client_name}" unless data1.size == 128
244
198
  dta_string << data1
245
199
  #Anzahl Erweiterungen anfügen
246
200
  data2 += '%02i' % exts.size #Anzahl Erweiterungsteile
@@ -251,7 +205,7 @@ module KingDta
251
205
  exts[0..1].each{|e| data2 += "%2.2s%-27.27s" % format_ext(e[0], e[1]) }
252
206
  data2 += ' ' * 11
253
207
  # add the final piece of the second C section
254
- raise "DTAUS: Längenfehler C/2 #{data2.size} nicht 128, #{booking.account.owner}" unless data2.size == 128
208
+ raise "DTAUS: Längenfehler C/2 #{data2.size} nicht 128, #{booking.account.client_name}" unless data2.size == 128
255
209
  dta_string << data2
256
210
  #Erstellen der Texterweiterungen à vier Stück
257
211
  add_ext( exts[2..5] )
@@ -313,6 +267,6 @@ module KingDta
313
267
  raise "DTAUS: Längenfehler E #{str.size} <> 128" if str.size != 128
314
268
  dta_string << str
315
269
  end
316
-
270
+
317
271
  end #class dtaus
318
272
  end