king_dtaus 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.1
1
+ 1.0.2
data/king_dtaus.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{king_dtaus}
8
- s.version = "1.0.1"
8
+ s.version = "1.0.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Georg Leciejewski", "Georg Ledermann"]
12
- s.date = %q{2011-02-09}
12
+ s.date = %q{2011-02-10}
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 = [
@@ -4,18 +4,20 @@ 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, :kunnr, :dtakunnr
7
+ attr_reader :bank_account_number, :bank_number, :owner, :client_number
8
8
 
9
- def initialize( ban, bank_number, owner, kunnr="" )
10
- @bank_account_number = ban.kind_of?( Integer ) ? ban : ban.gsub(/\s/, '').to_i
11
- @bank_number = bank_number.kind_of?( Integer ) ? bank_number : bank_number.gsub(/\s/, '').to_i
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
12
14
  @owner= convert_text( owner )
13
- @kunnr = kunnr.gsub(/\s/, '').to_i
14
-
15
- raise Exception.new("Invalid bank account number #{ban}") if @bank_account_number == 0
16
- raise Exception.new("BLZnummer #{bank_number} ungültig") if @bank_number == 0
17
- raise Exception.new("Invalid account owner #{owner}") unless @owner.kind_of?(String) # not possible
18
- # @dtakunnr = convert_text( @kunnr )
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
19
21
  end
20
22
 
21
23
  end
@@ -10,7 +10,7 @@ module KingDta
10
10
  attr_reader :sum_bank_account_numbers, :sum_bank_numbers, :sum_values, :default_text
11
11
 
12
12
  # Create a new dtaus file/string.
13
- # ==== Parameter
13
+ # === Parameter
14
14
  # typ<String>:: valid strings are 'LK' (Lastschrift Kunde) and 'GK' (Gutschrift Kunde)
15
15
  # typ<Date>:: date when the the transfer is to be created
16
16
  def initialize( typ, date=Date.today )
@@ -110,11 +110,11 @@ module KingDta
110
110
  # 7 50 6 Zeichen aktuelles Datum im Format DDMMJJ
111
111
  # 8 56 4 Zeichen CST, " " (Blanks)
112
112
  # 9 60 10 Zeichen Kontonummer des Auftraggebers
113
- # 10 70 10 Zeichen Optionale Referenznummer
113
+ # 10 70 10 Zeichen Optionale Referenznummer
114
114
  # 11a 80 15 Zeichen Reserviert, 15 Blanks
115
115
  # 11b 95 8 Zeichen Ausführungsdatum im Format DDMMJJJJ. Nicht jünger als Erstellungsdatum (A7), jedoch höchstens 15 Kalendertage später. Sonst Blanks.
116
116
  # 11c 103 24 Zeichen Reserviert, 24 Blanks
117
- # 12 127 1 Zeichen Währungskennzeichen
117
+ # 12 127 1 Zeichen Währungskennzeichen
118
118
  # " " = DM
119
119
  # "1" = Euro
120
120
  # Insgesamt 128 Zeichen
@@ -163,33 +163,35 @@ module KingDta
163
163
  # Die im Textschlüssel mit J bezeichnete Stelle, wird bei Übernahme in eine Zahlung automatisch mit der jeweils aktuellen Jahresendziffer (7, wenn 97) ersetzt.
164
164
  # 8 49 1 Zeichen Reserviert, " " (Blank)
165
165
  # 9 50 11 Zeichen Betrag in DM
166
- # 10 61 8 Zeichen Bankleitzahl des Auftraggebers
167
- # 11 69 10 Zeichen Kontonummer des Auftraggebers
168
- # 12 79 11 Zeichen Betrag in Euro einschließlich Nachkommastellen, nur belegt, wenn Euro als Währung angegeben wurde (A12, C17a), sonst Nullen
169
- # 13 90 3 Zeichen Reserviert, 3 Blanks
166
+ # 10 61 8 Zeichen Bankleitzahl des Auftraggebers
167
+ # 11 69 10 Zeichen Kontonummer des Auftraggebers
168
+ # 12 79 11 Zeichen Betrag in Euro einschließlich Nachkommastellen, nur belegt, wenn Euro als Währung angegeben wurde (A12, C17a), sonst Nullen
169
+ # 13 90 3 Zeichen Reserviert, 3 Blanks
170
170
  # 14a 93 27 Zeichen Name des Kunden
171
171
  # 14b 120 8 Zeichen Reserviert, 8 Blanks
172
172
  # Insgesamt 128 Zeichen
173
173
  #
174
- # 15 128 27 Zeichen Name des Auftraggebers
175
- # 16 155 27 Zeichen Verwendungszweck
174
+ # 15 128 27 Zeichen Name des Auftraggebers
175
+ # 16 155 27 Zeichen Verwendungszweck
176
176
  # 17a 182 1 Zeichen Währungskennzeichen
177
177
  # " " = DM
178
178
  # "1" = Euro
179
179
  # 17b 183 2 Zeichen Reserviert, 2 Blanks
180
- # 18 185 2 Zeichen Anzahl der Erweiterungsdatensätze, "00" bis "15"
181
- # 19 187 2 Zeichen Typ (1. Erweiterungsdatensatz)
182
- # "01" Name des Kunden
183
- # "02" Verwendungszweck
184
- # "03" Name des Auftraggebers
185
- # 20 189 27 Zeichen Beschreibung gemäß Typ
186
- # 21 216 2 Zeichen wie C19, oder Blanks (2. Erweiterungsdatensatz)
187
- # 22 218 27 Zeichen wie C20, oder Blanks
188
- # 23 245 11 Zeichen 11 Blanks
180
+ # 18 185 2 Zeichen Anzahl der Erweiterungsdatensätze, "00" bis "15"
181
+ # 19 187 2 Zeichen Typ (1. Erweiterungsdatensatz)
182
+ # "01" Name des Kunden
183
+ # "02" Verwendungszweck
184
+ # "03" Name des Auftraggebers
185
+ # 20 189 27 Zeichen Beschreibung gemäß Typ
186
+ # 21 216 2 Zeichen wie C19, oder Blanks (2. Erweiterungsdatensatz)
187
+ # 22 218 27 Zeichen wie C20, oder Blanks
188
+ # 23 245 11 Zeichen 11 Blanks
189
189
  # Insgesamt 256 Zeichen, kann wiederholt werden (max 3 mal)
190
- # ==== Parameter
190
+ #
191
+ # === Parameter
191
192
  # booking<Object>::Booking object to be written to c-sektion
192
- # ==== Returns
193
+ #
194
+ # === Returns
193
195
  # <String>:: The current dta_string
194
196
  def add_c( booking )
195
197
  zahlungsart = if @typ == 'LK'
@@ -207,7 +209,7 @@ module KingDta
207
209
  data1 += '%08i' % 0 #freigestellt
208
210
  data1 += '%08i' % booking.account.bank_number
209
211
  data1 += '%010i' % booking.account.bank_account_number
210
- data1 += '0%011i0' % booking.account.kunnr #interne Kundennummer
212
+ data1 += '0%011i0' % booking.account.client_number #interne Kundennummer
211
213
  data1 += zahlungsart
212
214
  data1 += ' ' #bankintern
213
215
  data1 += '0' * 11 #Reserve
@@ -238,7 +240,7 @@ module KingDta
238
240
  data2 += ' ' * 2
239
241
  # Gesamte Satzlänge ermitteln ( data1(+4) + data2 + Erweiterungen )
240
242
  data1 = "%04i#{data1}" % ( data1.size + 4 + data2.size+ 2 + exts.size * 29 )
241
- raise "DTAUS: Längenfehler C/1 #{data1.size}, #{booking.account.name}" unless data1.size == 128
243
+ raise "DTAUS: Längenfehler C/1 #{data1.size} nicht 128, #{booking.account.owner}" unless data1.size == 128
242
244
  dta_string << data1
243
245
  #Anzahl Erweiterungen anfügen
244
246
  data2 += '%02i' % exts.size #Anzahl Erweiterungsteile
@@ -249,7 +251,7 @@ module KingDta
249
251
  exts[0..1].each{|e| data2 += "%2.2s%-27.27s" % format_ext(e[0], e[1]) }
250
252
  data2 += ' ' * 11
251
253
  # add the final piece of the second C section
252
- raise "DTAUS: Längenfehler C/2 #{data2.size}, #{booking.account.name}" if data2.size != 128
254
+ raise "DTAUS: Längenfehler C/2 #{data2.size} nicht 128, #{booking.account.owner}" unless data2.size == 128
253
255
  dta_string << data2
254
256
  #Erstellen der Texterweiterungen à vier Stück
255
257
  add_ext( exts[2..5] )
@@ -259,7 +261,7 @@ module KingDta
259
261
  end #dataC
260
262
 
261
263
  # Format an extension so it can be used in string substitution
262
- # ==== Returns
264
+ # === Returns
263
265
  # Array[String, String]::[Extesnsion type(01 02 03), 'text content ..']
264
266
  def format_ext(type, content)
265
267
  ext = ( type == '00' ) ? [' ', ' '] : [ type, convert_text(content) ]
@@ -269,7 +271,7 @@ module KingDta
269
271
  # Add a section-C extension, always containing the section type followed by
270
272
  # 4 segments with 27 chars and an ending seperator of 12 blanks
271
273
  # Only adds the segement if something is in there
272
- # ==== Parameter
274
+ # === Parameter
273
275
  # <Array[Array[String,String]]>:: two dim. ary containing: [extension type(01 02 03),string content]
274
276
  def add_ext( ext)
275
277
  raise "Nur #{ext.size} Erweiterungstexte, 4 benötigt" if ext.size != 4
data/spec/account_spec.rb CHANGED
@@ -3,19 +3,30 @@ require "#{File.dirname(__FILE__)}/spec_helper"
3
3
  describe KingDta::Account do
4
4
 
5
5
  before :each do
6
- @bank_account = test_kto2
6
+ @ba = test_kto2 # BankAccount mocked as open struct
7
7
  end
8
8
 
9
9
  it "should initialize a new account" do
10
- lambda{ KingDta::Account.new(@bank_account.nr, @bank_account.blz, @bank_account.name, @bank_account.bank) }.should_not raise_error
10
+ lambda{ KingDta::Account.new(@ba.nr, @ba.blz, @ba.name) }.should_not raise_error
11
11
  end
12
12
 
13
13
  it "should fail if bank account number is invalid" do
14
- lambda{ KingDta::Account.new(0, @bank_account.blz, @bank_account.name, @bank_account.bank) }.should raise_error(KingDta::Exception)
14
+ # not 0
15
+ lambda{ KingDta::Account.new(0, @ba.blz, @ba.name) }.should raise_error(ArgumentError)
16
+ # max 10
17
+ lambda{ KingDta::Account.new(123456789011, @ba.blz, @ba.name) }.should raise_error(ArgumentError, 'Bank account number too long, max 10 allowed')
15
18
  end
16
19
 
17
20
  it "should fail if bank number is invalid" do
18
- lambda{ KingDta::Account.new(@bank_account.nr, 0, @bank_account.name, @bank_account.bank) }.should raise_error(KingDta::Exception)
21
+ # not 0
22
+ lambda{ KingDta::Account.new(@ba.nr, 0, @ba.name) }.should raise_error(ArgumentError)
23
+ # max 8
24
+ lambda{ KingDta::Account.new(@ba.nr, 123456789, @ba.name) }.should raise_error(ArgumentError, 'Bank number too long, max 8 allowed')
25
+ end
26
+
27
+ it "should fail if clent number is too long" do
28
+ # max 10
29
+ lambda{ KingDta::Account.new(@ba.nr, @ba.blz, @ba.name, 12345678901) }.should raise_error(ArgumentError, 'Client number too long, max 10 allowed')
19
30
  end
20
31
 
21
32
  end
data/spec/dtaus_spec.rb CHANGED
@@ -52,10 +52,10 @@ describe KingDta::Dtaus do
52
52
  it "should create header" do
53
53
  str = @dtaus.add_a
54
54
  str.length.should == 128
55
- out = "0128ALK3704004400000000GIMME YOUR MONEY AG #{Date.today.strftime("%d%m%y")} 00028800370000000000 #{Date.today.strftime("%d%m%Y")} 1"
55
+ out = "0128ALK3704004400000000GIMME YOUR MONEY AG #{Date.today.strftime("%d%m%y")} 78289700370000000000 #{Date.today.strftime("%d%m%Y")} 1"
56
56
  str.should == out
57
- #60-70 kontonummer mit nullen aufgefüllt
58
- str[60...70].should == "000#{test_kto1.nr}"
57
+ #60-70 kontonummer mit nullen aufgefüllt - hier nicht da ktnr == 10 stellen
58
+ str[60...70].should == "#{test_kto1.nr}"
59
59
  str.should include(test_kto1.blz)
60
60
  end
61
61
 
@@ -74,7 +74,7 @@ describe KingDta::Dtaus do
74
74
  str = @dtaus.dta_string
75
75
  str.length.should == 256
76
76
  str.should include(@kto2.name.upcase)
77
- out = "0216C00000000370400440002787777000000000000005000 0000000000037040044000288003700000022025 PETER & MAY GMBH GIMME YOUR MONEY AGSALESKING MONATSBEITRAG 08/1 010210 FREELANCER VERSION "
77
+ out = "0216C00000000370400440002787777000000000000005000 0000000000037040044782897003700000022025 PETER & MAY GMBH GIMME YOUR MONEY AGSALESKING MONATSBEITRAG 08/1 010210 FREELANCER VERSION "
78
78
  str.should == out
79
79
  end
80
80
 
@@ -84,7 +84,7 @@ describe KingDta::Dtaus do
84
84
  str = @dtaus.dta_string
85
85
  str.length.should == 256
86
86
  str.should include(@kto2.name.upcase)
87
- out = "0187C00000000370400440002787777000000000000005000 0000000000037040044000288003700000022025 PETER & MAY GMBH GIMME YOUR MONEY AGDEFAULT VERWENDUNGSZWECK 1 00 "
87
+ out = "0187C00000000370400440002787777000000000000005000 0000000000037040044782897003700000022025 PETER & MAY GMBH GIMME YOUR MONEY AGDEFAULT VERWENDUNGSZWECK 1 00 "
88
88
  str.should == out
89
89
  end
90
90
 
@@ -96,8 +96,8 @@ describe KingDta::Dtaus do
96
96
  str.should include(@kto1.name.upcase)
97
97
  str.should include(@kto2.name.upcase)
98
98
  str.should include(@dtaus.default_text.upcase)
99
- out = "0128ALK3704004400000000GIMME YOUR MONEY AG #{Date.today.strftime("%d%m%y")} 00028800370000000000 #{Date.today.strftime("%d%m%Y")} 1"+
100
- "0187C00000000370400440002787777000000000000005000 0000000000037040044000288003700000022025 PETER & MAY GMBH GIMME YOUR MONEY AGDEFAULT VERWENDUNGSZWECK 1 00 "+
99
+ out = "0128ALK3704004400000000GIMME YOUR MONEY AG #{Date.today.strftime("%d%m%y")} 78289700370000000000 #{Date.today.strftime("%d%m%Y")} 1"+
100
+ "0187C00000000370400440002787777000000000000005000 0000000000037040044782897003700000022025 PETER & MAY GMBH GIMME YOUR MONEY AGDEFAULT VERWENDUNGSZWECK 1 00 "+
101
101
  "0128E 0000001000000000000000000000002787777000000000370400440000000022025 "
102
102
  str.should == out
103
103
  end
@@ -108,8 +108,8 @@ describe KingDta::Dtaus do
108
108
  str = @dtaus.create
109
109
  str.length.should == 640
110
110
  str.should include(@kto2.name.upcase)
111
- out = "0128ALK3704004400000000GIMME YOUR MONEY AG #{Date.today.strftime("%d%m%y")} 00028800370000000000 #{Date.today.strftime("%d%m%Y")} 1"+
112
- "0274C00000000370400440002787777000000000000005000 0000000000037040044000288003700000022025 PETER & MAY GMBH GIMME YOUR MONEY AGRGN R-3456-0102220 MONATSBE1 0302ITRAG 08/10 FREELANCER VERS02ION VIELEN DANK IHRE SALESK 02ING GMBH "+
111
+ out = "0128ALK3704004400000000GIMME YOUR MONEY AG #{Date.today.strftime("%d%m%y")} 78289700370000000000 #{Date.today.strftime("%d%m%Y")} 1"+
112
+ "0274C00000000370400440002787777000000000000005000 0000000000037040044782897003700000022025 PETER & MAY GMBH GIMME YOUR MONEY AGRGN R-3456-0102220 MONATSBE1 0302ITRAG 08/10 FREELANCER VERS02ION VIELEN DANK IHRE SALESK 02ING GMBH "+
113
113
  "0128E 0000001000000000000000000000002787777000000000370400440000000022025 "
114
114
  str.should == out
115
115
  end
@@ -122,13 +122,13 @@ describe KingDta::Dtaus do
122
122
  str.should include(@kto1.name.upcase)
123
123
  str.should include(@kto2.name.upcase)
124
124
  str.should include(@dtaus.default_text.upcase)
125
- out = "0128ALK3704004400000000GIMME YOUR MONEY AG #{Date.today.strftime("%d%m%y")} 00028800370000000000 #{Date.today.strftime("%d%m%Y")} 1"+
126
- "0187C00000000370400440002787777000000000000005000 0000000000037040044000288003700000022025 PETER & MAY GMBH GIMME YOUR MONEY AGDEFAULT VERWENDUNGSZWECK 1 00 "+
127
- "0187C00000000370400440002787777000000000000005000 0000000000037040044000288003700000022025 PETER & MAY GMBH GIMME YOUR MONEY AGDEFAULT VERWENDUNGSZWECK 1 00 "+
128
- "0187C00000000370400440002787777000000000000005000 0000000000037040044000288003700000022025 PETER & MAY GMBH GIMME YOUR MONEY AGDEFAULT VERWENDUNGSZWECK 1 00 "+
129
- "0187C00000000370400440002787777000000000000005000 0000000000037040044000288003700000022025 PETER & MAY GMBH GIMME YOUR MONEY AGDEFAULT VERWENDUNGSZWECK 1 00 "+
130
- "0187C00000000370400440002787777000000000000005000 0000000000037040044000288003700000022025 PETER & MAY GMBH GIMME YOUR MONEY AGDEFAULT VERWENDUNGSZWECK 1 00 "+
131
- "0187C00000000370400440002787777000000000000005000 0000000000037040044000288003700000022025 PETER & MAY GMBH GIMME YOUR MONEY AGDEFAULT VERWENDUNGSZWECK 1 00 "+
125
+ out = "0128ALK3704004400000000GIMME YOUR MONEY AG #{Date.today.strftime("%d%m%y")} 78289700370000000000 #{Date.today.strftime("%d%m%Y")} 1"+
126
+ "0187C00000000370400440002787777000000000000005000 0000000000037040044782897003700000022025 PETER & MAY GMBH GIMME YOUR MONEY AGDEFAULT VERWENDUNGSZWECK 1 00 "+
127
+ "0187C00000000370400440002787777000000000000005000 0000000000037040044782897003700000022025 PETER & MAY GMBH GIMME YOUR MONEY AGDEFAULT VERWENDUNGSZWECK 1 00 "+
128
+ "0187C00000000370400440002787777000000000000005000 0000000000037040044782897003700000022025 PETER & MAY GMBH GIMME YOUR MONEY AGDEFAULT VERWENDUNGSZWECK 1 00 "+
129
+ "0187C00000000370400440002787777000000000000005000 0000000000037040044782897003700000022025 PETER & MAY GMBH GIMME YOUR MONEY AGDEFAULT VERWENDUNGSZWECK 1 00 "+
130
+ "0187C00000000370400440002787777000000000000005000 0000000000037040044782897003700000022025 PETER & MAY GMBH GIMME YOUR MONEY AGDEFAULT VERWENDUNGSZWECK 1 00 "+
131
+ "0187C00000000370400440002787777000000000000005000 0000000000037040044782897003700000022025 PETER & MAY GMBH GIMME YOUR MONEY AGDEFAULT VERWENDUNGSZWECK 1 00 "+
132
132
  "0128E 0000006000000000000000000000016726662000000002222402640000000132150 "
133
133
  str.should == out
134
134
  end
data/spec/spec_helper.rb CHANGED
@@ -22,7 +22,7 @@ require "#{File.dirname(__FILE__)}/../lib/king_dtaus"
22
22
  # bankplz:0815
23
23
  # bankort:Felsblock
24
24
  def test_kto1
25
- opts = { :nr => '2880037', :blz => '37040044', :name =>'Gimme your Money AG',
25
+ opts = { :nr => '7828970037', :blz => '37040044', :name =>'Gimme your Money AG',
26
26
  :bank => 'Commerzbank Köln', :zweck => 'Monatsbeitrag' }
27
27
  TestKonto.new(opts)
28
28
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: king_dtaus
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
4
+ hash: 19
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
8
  - 0
9
- - 1
10
- version: 1.0.1
9
+ - 2
10
+ version: 1.0.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Georg Leciejewski
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2011-02-09 00:00:00 +01:00
19
+ date: 2011-02-10 00:00:00 +01:00
20
20
  default_executable:
21
21
  dependencies: []
22
22