king_dtaus 1.0.2 → 2.0.0.pre

Sign up to get free protection for your applications and to get access to all the features.
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