king_dtaus 1.0.1 → 1.0.2

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/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