dtaus 0.1 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. data/README.markdown +6 -1
  2. data/lib/dtaus.rb +188 -188
  3. data/lib/dtaus/buchung.rb +45 -45
  4. metadata +8 -2
data/README.markdown CHANGED
@@ -5,7 +5,12 @@ This is a library specific to the german banking sector. Therefore the documenta
5
5
 
6
6
  Beim Datenträgeraustausch (DTA) werden Zahlungsverkehrsdaten - also Überweisungen und Lastschriften - als Datei an ein Geldinstitut übergeben. Dieser Gem stellt Klassen bereit solche Dateien zu erzeugen.
7
7
 
8
- How-To:
8
+ Download
9
+ -------------
10
+
11
+ Install via RubyGems: `gem install dtaus`
12
+
13
+ Usage
9
14
  -------------
10
15
 
11
16
  Ablauf:
data/lib/dtaus.rb CHANGED
@@ -1,210 +1,210 @@
1
1
  require 'dtaus/buchung'
2
2
  require 'dtaus/konto'
3
-
3
+
4
4
  #
5
5
  # :title:DTAUS-Datei erstellen
6
6
  #
7
- # =DTAUS-Datei für Sammellastschrift erstellen
8
- #
9
- # Quick How-To:
10
- # auftraggeber = DTAUS::Konto.new(1234567890, 12345670, 'Muster GmbH', 'Deutsche Bank', true)
11
- # kunde = DTAUS::Konto.new(1234567890, 12345670, 'Max Meier-Schulze', 'Sparkasse')
12
- # buchung = DTAUS::Buchung.new(auftraggeber, kunde, 39.99, 'Vielen Dank für ihren Einkauf vom 01.01.2010. Rechnungsnummer 12345')
13
- # dta = DTAUS.new(auftraggeber)
14
- # dta.add(buchung)
7
+ # =DTAUS-Datei für Sammellastschrift erstellen
8
+ #
9
+ # Quick How-To:
10
+ # auftraggeber = DTAUS::Konto.new(1234567890, 12345670, 'Muster GmbH', 'Deutsche Bank', true)
11
+ # kunde = DTAUS::Konto.new(1234567890, 12345670, 'Max Meier-Schulze', 'Sparkasse')
12
+ # buchung = DTAUS::Buchung.new(auftraggeber, kunde, 39.99, 'Vielen Dank für ihren Einkauf vom 01.01.2010. Rechnungsnummer 12345')
13
+ # dta = DTAUS.new(auftraggeber)
14
+ # dta.add(buchung)
15
15
  # dta.to_file
16
- #
16
+ #
17
17
  # Typ der Datei ist 'LK' (Lastschrift Kunde)
18
18
  #
19
19
  # Infos zu DTAUS: http://www.infodrom.org/projects/dtaus/dtaus.php3
20
- # DTAUS online check: http://www.xpecto.de/index.php?id=148,7
20
+ # DTAUS online check: http://www.xpecto.de/index.php?id=148,7
21
21
  #
22
- class DTAUS
23
-
24
- class DTAUSException < Exception
25
- end
26
-
27
- class IncorrectSize < DTAUSException
28
- end
29
-
30
- attr_reader :auftraggeber, :buchungen, :datum, :positiv
31
- alias :positiv? :positiv
32
-
33
- def initialize(auftraggeber, datum = Time.new)
34
- raise DTAUSException.new("Konto expected, got #{auftraggeber.class}") unless auftraggeber.is_a?(DTAUS::Konto)
35
- raise DTAUSException.new("Date or Time expected, got #{datum.class}") unless datum.is_a?(Date) or datum.is_a?(Time)
36
-
37
- @datum = datum
38
- @auftraggeber = auftraggeber
39
- @buchungen = []
40
- end
41
-
42
- # 2 Zeichen Art der Transaktionen
43
- # "LB" für Lastschriften Bankseitig
44
- # "LK" für Lastschriften Kundenseitig
45
- # "GB" für Gutschriften Bankseitig
46
- # "GK" für Gutschriften Kundenseitig
47
- #
48
- def typ
49
- 'LK'
50
- end
51
-
52
- # Eine Buchung hinzufügen.
53
- # Es wird geprüft, ob das Vorzeichen identisch mit den bisherigen Vorzeichen ist.
54
- #
55
- def add(buchung)
56
- raise DTAUSException.new("Buchung expected, got #{buchung.class}") unless buchung.is_a?(DTAUS::Buchung)
57
- # Die erste Buchung bestimmt, ob alle Beträge positiv oder negativ sind.
58
- if buchungen == []
59
- @positiv = buchung.positiv? # alle Beträge sind positiv. Variable wird mit erstem Eintrag geändert
60
- end
61
- raise DTAusException.new("Das Vorzeichen wechselte") if @positiv != buchung.positiv?
62
- @buchungen << buchung
63
- end
64
-
65
- # Gibt die DTAUS-Datei als String zurück
66
- #
67
- def to_dta
68
- raise DTAUSException.new("Keine Buchungen vorhanden") unless buchungen.size > 0
69
- temp = dataA
22
+ class DTAUS
23
+
24
+ class DTAUSException < Exception
25
+ end
26
+
27
+ class IncorrectSize < DTAUSException
28
+ end
29
+
30
+ attr_reader :auftraggeber, :buchungen, :datum, :positiv
31
+ alias :positiv? :positiv
32
+
33
+ def initialize(auftraggeber, datum = Time.new)
34
+ raise DTAUSException.new("Konto expected, got #{auftraggeber.class}") unless auftraggeber.is_a?(DTAUS::Konto)
35
+ raise DTAUSException.new("Date or Time expected, got #{datum.class}") unless datum.is_a?(Date) or datum.is_a?(Time)
36
+
37
+ @datum = datum
38
+ @auftraggeber = auftraggeber
39
+ @buchungen = []
40
+ end
41
+
42
+ # 2 Zeichen Art der Transaktionen
43
+ # "LB" für Lastschriften Bankseitig
44
+ # "LK" für Lastschriften Kundenseitig
45
+ # "GB" für Gutschriften Bankseitig
46
+ # "GK" für Gutschriften Kundenseitig
47
+ #
48
+ def typ
49
+ 'LK'
50
+ end
51
+
52
+ # Eine Buchung hinzufügen.
53
+ # Es wird geprüft, ob das Vorzeichen identisch mit den bisherigen Vorzeichen ist.
54
+ #
55
+ def add(buchung)
56
+ raise DTAUSException.new("Buchung expected, got #{buchung.class}") unless buchung.is_a?(DTAUS::Buchung)
57
+ # Die erste Buchung bestimmt, ob alle Beträge positiv oder negativ sind.
58
+ if buchungen == []
59
+ @positiv = buchung.positiv? # alle Beträge sind positiv. Variable wird mit erstem Eintrag geändert
60
+ end
61
+ raise DTAusException.new("Das Vorzeichen wechselte") if @positiv != buchung.positiv?
62
+ @buchungen << buchung
63
+ end
64
+
65
+ # Gibt die DTAUS-Datei als String zurück
66
+ #
67
+ def to_dta
68
+ raise DTAUSException.new("Keine Buchungen vorhanden") unless buchungen.size > 0
69
+ temp = dataA
70
70
  temp += buchungen.inject(''){|temp, buchung| temp += buchung.to_dta}
71
- temp += dataE
72
- raise IncorrectSize.new("Datensatzlänge ist nicht durch 128 teilbar: #{temp.size}") if temp.size % 128 != 0
73
- temp
74
- end
71
+ temp += dataE
72
+ raise IncorrectSize.new("Datensatzlänge ist nicht durch 128 teilbar: #{temp.size}") if temp.size % 128 != 0
73
+ temp
74
+ end
75
75
  alias :to_s :to_dta
76
-
77
- # Schreibt die DTAUS-Datei
78
- # Standarddateiname ist DTAUS0.TXT
79
- #
80
- def to_file(filename ='DTAUS0.TXT')
81
- File.open(filename, 'w') do |file|
82
- file << to_dta
76
+
77
+ # Schreibt die DTAUS-Datei
78
+ # Standarddateiname ist DTAUS0.TXT
79
+ #
80
+ def to_file(filename ='DTAUS0.TXT')
81
+ File.open(filename, 'w') do |file|
82
+ file << to_dta
83
+ end
84
+ end
85
+
86
+ # Zeichen umsetzen gemäss DTA-Norm
87
+ #
88
+ def self.convert_text(_text)
89
+ tmp = _text.to_s.dup
90
+ tmp = tmp.upcase()
91
+ tmp = tmp.gsub('Ä', 'AE')
92
+ tmp = tmp.gsub('Ü', 'UE')
93
+ tmp = tmp.gsub('Ö', 'OE')
94
+ tmp = tmp.gsub('ä', 'AE')
95
+ tmp = tmp.gsub('ü', 'UE')
96
+ tmp = tmp.gsub('ö', 'OE')
97
+ tmp = tmp.gsub('ß', 'SS')
98
+ tmp = tmp.strip
99
+ end
100
+
101
+ # Konvertiert einen String in einen Integer
102
+ # indem alle Nicht-Digits entfernt werden.
103
+ # Lässt Integer unberührt.
104
+ #
105
+ def self.convert_number(_number)
106
+ case _number
107
+ when Integer then _number
108
+ when String then _number.strip.gsub(/\D/, '').to_i
109
+ else raise DTAUSException.new("Cannot convert #{_number.class} to Integer")
83
110
  end
84
- end
85
-
86
- # Zeichen umsetzen gemäss DTA-Norm
87
- #
88
- def self.convert_text(_text)
89
- tmp = _text.to_s.dup
90
- tmp = tmp.upcase()
91
- tmp = tmp.gsub('Ä', 'AE')
92
- tmp = tmp.gsub('Ü', 'UE')
93
- tmp = tmp.gsub('Ö', 'OE')
94
- tmp = tmp.gsub('ä', 'AE')
95
- tmp = tmp.gsub('ü', 'UE')
96
- tmp = tmp.gsub('ö', 'OE')
97
- tmp = tmp.gsub('ß', 'SS')
98
- tmp = tmp.strip
99
- end
100
-
101
- # Konvertiert einen String in einen Integer
102
- # indem alle Nicht-Digits entfernt werden.
103
- # Lässt Integer unberührt.
104
- #
105
- def self.convert_number(_number)
106
- case _number
107
- when Integer then _number
108
- when String then _number.strip.gsub(/\D/, '').to_i
109
- else raise DTAUSException.new("Cannot convert #{_number.class} to Integer")
110
- end
111
- end
112
-
113
- private
114
-
115
- # Checksumme der Kontonummern
116
- #
117
- def checksum_konto
118
- @buchungen.inject(0){|sum, buchung| sum += buchung.konto.nummer}
119
- end
120
-
121
- # Checksumme der Bankleitzahlen
122
- #
123
- def checksum_blz
124
- @buchungen.inject(0){|sum, buchung| sum += buchung.konto.blz}
125
- end
126
-
127
- # Checksumme der Beträge
128
- #
129
- def checksum_betrag
130
- @buchungen.inject(0){|sum, buchung| sum += buchung.betrag}
131
- end
132
-
111
+ end
112
+
113
+ private
114
+
115
+ # Checksumme der Kontonummern
116
+ #
117
+ def checksum_konto
118
+ @buchungen.inject(0){|sum, buchung| sum += buchung.konto.nummer}
119
+ end
120
+
121
+ # Checksumme der Bankleitzahlen
122
+ #
123
+ def checksum_blz
124
+ @buchungen.inject(0){|sum, buchung| sum += buchung.konto.blz}
125
+ end
126
+
127
+ # Checksumme der Beträge
128
+ #
129
+ def checksum_betrag
130
+ @buchungen.inject(0){|sum, buchung| sum += buchung.betrag}
131
+ end
132
+
133
133
  # Erstellt A-Segment der DTAUS-Datei
134
- # Aufbau des Segments:
134
+ # Aufbau des Segments:
135
135
  #
136
- # Nr. Start Länge Beschreibung
137
- # 1 0 4 Zeichen Länge des Datensatzes, immer 128 Bytes, also immer "0128"
138
- # 2 4 1 Zeichen Datensatz-Typ, immer 'A'
139
- # 3 5 2 Zeichen Art der Transaktionen
140
- # "LB" für Lastschriften Bankseitig
141
- # "LK" für Lastschriften Kundenseitig
142
- # "GB" für Gutschriften Bankseitig
143
- # "GK" für Gutschriften Kundenseitig
144
- # 4 7 8 Zeichen Bankleitzahl des Auftraggebers
145
- # 5 15 8 Zeichen CST, "00000000", nur belegt, wenn Diskettenabsender Kreditinstitut
146
- # 6 23 27 Zeichen Name des Auftraggebers
147
- # 7 50 6 Zeichen aktuelles Datum im Format DDMMJJ
148
- # 8 56 4 Zeichen CST, " " (Blanks)
149
- # 9 60 10 Zeichen Kontonummer des Auftraggebers
150
- # 10 70 10 Zeichen Optionale Referenznummer
151
- # 11a 80 15 Zeichen Reserviert, 15 Blanks
152
- # 11b 95 8 Zeichen Ausführungsdatum im Format DDMMJJJJ. Nicht jünger als Erstellungsdatum (A7), jedoch höchstens 15 Kalendertage später. Sonst Blanks.
153
- # 11c 103 24 Zeichen Reserviert, 24 Blanks
154
- # 12 127 1 Zeichen Währungskennzeichen
155
- # " " = DM
156
- # "1" = Euro
136
+ # Nr. Start Länge Beschreibung
137
+ # 1 0 4 Zeichen Länge des Datensatzes, immer 128 Bytes, also immer "0128"
138
+ # 2 4 1 Zeichen Datensatz-Typ, immer 'A'
139
+ # 3 5 2 Zeichen Art der Transaktionen
140
+ # "LB" für Lastschriften Bankseitig
141
+ # "LK" für Lastschriften Kundenseitig
142
+ # "GB" für Gutschriften Bankseitig
143
+ # "GK" für Gutschriften Kundenseitig
144
+ # 4 7 8 Zeichen Bankleitzahl des Auftraggebers
145
+ # 5 15 8 Zeichen CST, "00000000", nur belegt, wenn Diskettenabsender Kreditinstitut
146
+ # 6 23 27 Zeichen Name des Auftraggebers
147
+ # 7 50 6 Zeichen aktuelles Datum im Format DDMMJJ
148
+ # 8 56 4 Zeichen CST, " " (Blanks)
149
+ # 9 60 10 Zeichen Kontonummer des Auftraggebers
150
+ # 10 70 10 Zeichen Optionale Referenznummer
151
+ # 11a 80 15 Zeichen Reserviert, 15 Blanks
152
+ # 11b 95 8 Zeichen Ausführungsdatum im Format DDMMJJJJ. Nicht jünger als Erstellungsdatum (A7), jedoch höchstens 15 Kalendertage später. Sonst Blanks.
153
+ # 11c 103 24 Zeichen Reserviert, 24 Blanks
154
+ # 12 127 1 Zeichen Währungskennzeichen
155
+ # " " = DM
156
+ # "1" = Euro
157
157
  #
158
- # Insgesamt 128 Zeichen
158
+ # Insgesamt 128 Zeichen
159
159
  #
160
- def dataA( )
161
- dta = '0128' # 4 Zeichen Länge des Datensatzes, immer 128 Bytes, also immer "0128"
162
- dta += 'A' # 1 Zeichen Datensatz-Typ, immer 'A'
163
- dta += typ # 2 Zeichen Art der Transaktionen
164
- dta += '%8i' % auftraggeber.blz # 8 Zeichen Bankleitzahl des Auftraggebers
165
- dta += '%08i' % 0 # 8 Zeichen CST, "00000000", nur belegt, wenn Diskettenabsender Kreditinstitut
166
- dta += '%-27.27s' % auftraggeber.name # 27 Zeichen Name des Auftraggebers
167
- dta += @datum.strftime("%d%m%y") # 6 Zeichen aktuelles Datum im Format DDMMJJ
168
- dta += ' ' * 4 # 4 Zeichen CST, " " (Blanks)
169
- dta += '%010i' % auftraggeber.nummer # 10 Zeichen Kontonummer des Auftraggebers
170
- dta += '%010i' % 0 # 10 Zeichen Optionale Referenznummer
171
- dta += ' ' * 15 # 15 Zeichen Reserviert, 15 Blanks
172
- dta += '%8s' % @datum.strftime("%d%m%Y") # 8 Zeichen Optionales Ausführungsdatum im Format DDMMJJJJ. Nicht jünger als Erstellungsdatum (A7), jedoch höchstens 15 Kalendertage später. Sonst Blanks.
173
- dta += ' ' * 24 # 24 Zeichen Reserviert, 24 Blanks
174
- dta += '1' # 1 Zeichen Währungskennzeichen ('1' = Euro)
175
- raise IncorrectSize.new("A-Segment: #{dta.size} Zeichen, 128 erwartet.") if dta.size != 128
176
- return dta
177
- end
160
+ def dataA( )
161
+ dta = '0128' # 4 Zeichen Länge des Datensatzes, immer 128 Bytes, also immer "0128"
162
+ dta += 'A' # 1 Zeichen Datensatz-Typ, immer 'A'
163
+ dta += typ # 2 Zeichen Art der Transaktionen
164
+ dta += '%8i' % auftraggeber.blz # 8 Zeichen Bankleitzahl des Auftraggebers
165
+ dta += '%08i' % 0 # 8 Zeichen CST, "00000000", nur belegt, wenn Diskettenabsender Kreditinstitut
166
+ dta += '%-27.27s' % auftraggeber.name # 27 Zeichen Name des Auftraggebers
167
+ dta += @datum.strftime("%d%m%y") # 6 Zeichen aktuelles Datum im Format DDMMJJ
168
+ dta += ' ' * 4 # 4 Zeichen CST, " " (Blanks)
169
+ dta += '%010i' % auftraggeber.nummer # 10 Zeichen Kontonummer des Auftraggebers
170
+ dta += '%010i' % 0 # 10 Zeichen Optionale Referenznummer
171
+ dta += ' ' * 15 # 15 Zeichen Reserviert, 15 Blanks
172
+ dta += '%8s' % @datum.strftime("%d%m%Y") # 8 Zeichen Optionales Ausführungsdatum im Format DDMMJJJJ. Nicht jünger als Erstellungsdatum (A7), jedoch höchstens 15 Kalendertage später. Sonst Blanks.
173
+ dta += ' ' * 24 # 24 Zeichen Reserviert, 24 Blanks
174
+ dta += '1' # 1 Zeichen Währungskennzeichen ('1' = Euro)
175
+ raise IncorrectSize.new("A-Segment: #{dta.size} Zeichen, 128 erwartet.") if dta.size != 128
176
+ return dta
177
+ end
178
178
 
179
179
  # Erstellt E-Segment (Prüfsummen) der DTAUS-Datei
180
- # Aufbau:
180
+ # Aufbau:
181
181
  #
182
- # Nr. Start Länge Beschreibung
183
- # 1 0 4 Zeichen Länge des Datensatzes, immer 128 Bytes, also immer "0128"
184
- # 2 4 1 Zeichen Datensatz-Typ, immer 'E'
185
- # 3 5 5 Zeichen 5 Blanks
186
- # 4 10 7 Zeichen Anzahl der Datensätze vom Typ C
187
- # 5 17 13 Zeichen Kontrollsumme Beträge
188
- # 6 30 17 Zeichen Kontrollsumme Kontonummern
189
- # 7 47 17 Zeichen Kontrollsumme Bankleitzahlen
190
- # 8 64 13 Zeichen Kontrollsumme Euro, nur belegt, wenn Euro als Währung angegeben wurde (A12, C17a)
191
- # 9 77 51 Zeichen 51 Blanks
182
+ # Nr. Start Länge Beschreibung
183
+ # 1 0 4 Zeichen Länge des Datensatzes, immer 128 Bytes, also immer "0128"
184
+ # 2 4 1 Zeichen Datensatz-Typ, immer 'E'
185
+ # 3 5 5 Zeichen 5 Blanks
186
+ # 4 10 7 Zeichen Anzahl der Datensätze vom Typ C
187
+ # 5 17 13 Zeichen Kontrollsumme Beträge
188
+ # 6 30 17 Zeichen Kontrollsumme Kontonummern
189
+ # 7 47 17 Zeichen Kontrollsumme Bankleitzahlen
190
+ # 8 64 13 Zeichen Kontrollsumme Euro, nur belegt, wenn Euro als Währung angegeben wurde (A12, C17a)
191
+ # 9 77 51 Zeichen 51 Blanks
192
192
  #
193
- # Insgesamt 128 Zeichen
193
+ # Insgesamt 128 Zeichen
194
194
  #
195
- def dataE()
196
- dta = '0128' # 4 Zeichen Länge des Datensatzes, immer 128 Bytes, also immer "0128"
197
- dta += 'E' # 1 Zeichen Datensatz-Typ, immer 'E'
198
- dta += ' ' * 5 # 5 Zeichen 5 Blanks
199
- dta += '%07i' % @buchungen.size # 7 Zeichen Anzahl der Datensätze vom Typ C
200
- dta += '0' * 13 # 13 Zeichen Kontrollsumme Beträge in DM
201
- dta += '%017i' % checksum_konto # 17 Zeichen Kontrollsumme Kontonummern
202
- dta += '%017i' % checksum_blz # 17 Zeichen Kontrollsumme Bankleitzahlen
203
- dta += '%013i' % checksum_betrag # 13 Zeichen Kontrollsumme Beträge in Euro
204
- dta += ' ' * 51 # 51 Zeichen 51 Blanks
205
- raise IncorrectSize.new("E-Segment: #{dta.size}, 128 erwartet") if dta.size != 128
206
- return dta
207
- end
208
-
209
- end
210
-
195
+ def dataE()
196
+ dta = '0128' # 4 Zeichen Länge des Datensatzes, immer 128 Bytes, also immer "0128"
197
+ dta += 'E' # 1 Zeichen Datensatz-Typ, immer 'E'
198
+ dta += ' ' * 5 # 5 Zeichen 5 Blanks
199
+ dta += '%07i' % @buchungen.size # 7 Zeichen Anzahl der Datensätze vom Typ C
200
+ dta += '0' * 13 # 13 Zeichen Kontrollsumme Beträge in DM
201
+ dta += '%017i' % checksum_konto # 17 Zeichen Kontrollsumme Kontonummern
202
+ dta += '%017i' % checksum_blz # 17 Zeichen Kontrollsumme Bankleitzahlen
203
+ dta += '%013i' % checksum_betrag # 13 Zeichen Kontrollsumme Beträge in Euro
204
+ dta += ' ' * 51 # 51 Zeichen 51 Blanks
205
+ raise IncorrectSize.new("E-Segment: #{dta.size}, 128 erwartet") if dta.size != 128
206
+ return dta
207
+ end
208
+
209
+ end
210
+
data/lib/dtaus/buchung.rb CHANGED
@@ -9,32 +9,32 @@ class DTAUS
9
9
  # auftraggeber_konto und kunden_konto müssen ein DTAUS::Konto sein
10
10
  # betrag muss ein Float sein
11
11
  #
12
- class Buchung
12
+ class Buchung
13
13
  attr_reader :betrag, :konto, :text, :positiv, :auftraggeber
14
14
  alias :positiv? :positiv
15
-
16
- def initialize(_auftraggeber, _konto, _betrag, _text = "")
17
- raise DTAusException.new("Konto expected, got #{_konto.class}") unless _konto.is_a?(Konto)
18
- raise DTAUSException.new("Betrag is a #{_betrag.class}, expected Float") unless _betrag.is_a?(Float)
15
+
16
+ def initialize(_auftraggeber, _konto, _betrag, _text = "")
17
+ raise DTAusException.new("Konto expected, got #{_konto.class}") unless _konto.is_a?(Konto)
18
+ raise DTAUSException.new("Betrag is a #{_betrag.class}, expected Float") unless _betrag.is_a?(Float)
19
19
  raise DTAUSException.new("Betrag ist 0.0") unless _betrag > 0
20
20
 
21
- @auftraggeber = _auftraggeber
22
- @konto = _konto
23
- @text = DTAUS.convert_text(_text)
21
+ @auftraggeber = _auftraggeber
22
+ @konto = _konto
23
+ @text = DTAUS.convert_text(_text)
24
24
 
25
25
  raise IncorrectSize.new("Zuviele Erweiterungen: #{erweiterungen.size}, maximal 15. Verwendungszweck zu lang?") if erweiterungen.size > 15
26
-
27
- @betrag = (_betrag * 100 ).to_i # Euro-Cent
28
- if betrag > 0
29
- @positiv = true
30
- else
31
- @betrag = -betrag # only store positive amounts
32
- @positiv = false
33
- end
34
- end
35
-
36
-
37
- # 5 Zeichen Art der Transaktion (7a: 2 Zeichen, 7b: 3 Zeichen)
26
+
27
+ @betrag = (_betrag * 100).round.to_i # Euro-Cent
28
+ if betrag > 0
29
+ @positiv = true
30
+ else
31
+ @betrag = -betrag # only store positive amounts
32
+ @positiv = false
33
+ end
34
+ end
35
+
36
+
37
+ # 5 Zeichen Art der Transaktion (7a: 2 Zeichen, 7b: 3 Zeichen)
38
38
  # "04000" Lastschrift des Abbuchungsauftragsverfahren
39
39
  # "05000" Lastschrift des Einzugsermächtigungsverfahren
40
40
  # "05005" Lastschrift aus Verfügung im elektronischen Cash-System
@@ -47,9 +47,9 @@ class DTAUS
47
47
  # Die im Textschlüssel mit XX bezeichnete Stelle ist 00 oder der Prozentsatz der Sparzulage.
48
48
  # Die im Textschlüssel mit J bezeichnete Stelle wird bei Übernahme in eine Zahlung automatisch mit der jeweils aktuellen Jahresendziffer (z.B. 7, wenn 97) ersetzt.
49
49
  #
50
- def zahlungsart
51
- '05000'
52
- end
50
+ def zahlungsart
51
+ '05000'
52
+ end
53
53
 
54
54
  def verwendungszweck_erweiterungen
55
55
  Erweiterung.from_string(:verwendungszweck, text)
@@ -73,10 +73,10 @@ class DTAUS
73
73
  #
74
74
  def dataC_erweiterungen
75
75
  dta = auftraggeber.name[0..26].ljust(27) # 27 Zeichen Name des Auftraggebers
76
- dta += text[0..26].ljust(27) # 27 Zeichen Verwendungszweck
76
+ dta += text[0..26].ljust(27) # 27 Zeichen Verwendungszweck
77
77
  dta += '1' # 1 Zeichen Währungskennzeichen ('1' = Euro)
78
- dta += ' ' # 2 Zeichen Reserviert, 2 Blanks
79
- dta += "%02i" % erweiterungen.size # 2 Zeichen Anzahl der Erweiterungsdatensätze, "00" bis "15"
78
+ dta += ' ' # 2 Zeichen Reserviert, 2 Blanks
79
+ dta += "%02i" % erweiterungen.size # 2 Zeichen Anzahl der Erweiterungsdatensätze, "00" bis "15"
80
80
  dta += erweiterungen[0..1].inject('') {|data, erweiterung| data += erweiterung.to_dta}
81
81
  dta = dta.ljust(128)
82
82
  if erweiterungen.size > 2
@@ -91,26 +91,26 @@ class DTAUS
91
91
 
92
92
  # Erstellt ein C-Segments für diese Buchung
93
93
  #
94
- def dataC
95
- dta = '%04i' % size # 4 Zeichen Länge des Datensatzes, 187 + x * 29 (x..Anzahl Erweiterungsteile)
96
- dta += 'C' # 1 Zeichen Datensatz-Typ, immer 'C'
97
- dta += '%08i' % 0 # 8 Zeichen Bankleitzahl des Auftraggebers (optional)
98
- dta += '%08i' % konto.blz # 8 Zeichen Bankleitzahl des Kunden
99
- dta += '%010i' % konto.nummer # 10 Zeichen Kontonummer des Kunden
100
- dta += '0%011i0' % konto.kunnr # 13 Zeichen Verschiedenes 1. Zeichen: "0" 2. - 12. Zeichen: interne Kundennummer oder Nullen 13. Zeichen: "0"
101
- dta += zahlungsart # 5 Zeichen Art der Transaktion (7a: 2 Zeichen, 7b: 3 Zeichen)
102
- dta += ' ' # 1 Zeichen Reserviert, " " (Blank)
103
- dta += '0' * 11 # 11 Zeichen Betrag
104
- dta += '%08i' % auftraggeber.blz # 8 Zeichen Bankleitzahl des Auftraggebers
105
- dta += '%010i' % auftraggeber.nummer # 10 Zeichen Kontonummer des Auftraggebers
106
- dta += '%011i' % betrag # 11 Zeichen Betrag in Euro einschließlich Nachkommastellen, nur belegt, wenn Euro als Währung angegeben wurde
107
- dta += ' ' * 3 # 3 Zeichen Reserviert, 3 Blanks
108
- dta += konto.name[0..26].ljust(27) # 27 Zeichen Name des Kunden
109
- dta += ' ' * 8 # 8 Zeichen Reserviert, 8 Blanks
94
+ def dataC
95
+ dta = '%04i' % size # 4 Zeichen Länge des Datensatzes, 187 + x * 29 (x..Anzahl Erweiterungsteile)
96
+ dta += 'C' # 1 Zeichen Datensatz-Typ, immer 'C'
97
+ dta += '%08i' % 0 # 8 Zeichen Bankleitzahl des Auftraggebers (optional)
98
+ dta += '%08i' % konto.blz # 8 Zeichen Bankleitzahl des Kunden
99
+ dta += '%010i' % konto.nummer # 10 Zeichen Kontonummer des Kunden
100
+ dta += '0%011i0' % konto.kunnr # 13 Zeichen Verschiedenes 1. Zeichen: "0" 2. - 12. Zeichen: interne Kundennummer oder Nullen 13. Zeichen: "0"
101
+ dta += zahlungsart # 5 Zeichen Art der Transaktion (7a: 2 Zeichen, 7b: 3 Zeichen)
102
+ dta += ' ' # 1 Zeichen Reserviert, " " (Blank)
103
+ dta += '0' * 11 # 11 Zeichen Betrag
104
+ dta += '%08i' % auftraggeber.blz # 8 Zeichen Bankleitzahl des Auftraggebers
105
+ dta += '%010i' % auftraggeber.nummer # 10 Zeichen Kontonummer des Auftraggebers
106
+ dta += '%011i' % betrag # 11 Zeichen Betrag in Euro einschließlich Nachkommastellen, nur belegt, wenn Euro als Währung angegeben wurde
107
+ dta += ' ' * 3 # 3 Zeichen Reserviert, 3 Blanks
108
+ dta += konto.name[0..26].ljust(27) # 27 Zeichen Name des Kunden
109
+ dta += ' ' * 8 # 8 Zeichen Reserviert, 8 Blanks
110
110
  raise IncorrectSize.new("C-Segement 1: #{dta.size} Zeichen, 128 erwartet (#{konto.name})") if dta.size != 128
111
- return dta
112
- end
111
+ return dta
112
+ end
113
113
 
114
- end
114
+ end
115
115
  end
116
116
 
metadata CHANGED
@@ -1,11 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dtaus
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 25
4
5
  prerelease: false
5
6
  segments:
6
7
  - 0
7
8
  - 1
8
- version: "0.1"
9
+ - 1
10
+ version: 0.1.1
9
11
  platform: ruby
10
12
  authors:
11
13
  - mikezter
@@ -42,23 +44,27 @@ rdoc_options: []
42
44
  require_paths:
43
45
  - lib
44
46
  required_ruby_version: !ruby/object:Gem::Requirement
47
+ none: false
45
48
  requirements:
46
49
  - - ">="
47
50
  - !ruby/object:Gem::Version
51
+ hash: 3
48
52
  segments:
49
53
  - 0
50
54
  version: "0"
51
55
  required_rubygems_version: !ruby/object:Gem::Requirement
56
+ none: false
52
57
  requirements:
53
58
  - - ">="
54
59
  - !ruby/object:Gem::Version
60
+ hash: 3
55
61
  segments:
56
62
  - 0
57
63
  version: "0"
58
64
  requirements: []
59
65
 
60
66
  rubyforge_project:
61
- rubygems_version: 1.3.6
67
+ rubygems_version: 1.3.7
62
68
  signing_key:
63
69
  specification_version: 3
64
70
  summary: DTAUS allows to easily create DTAUS files for the german banking sector