king_dtaus 2.0.0 → 2.0.1.pre
Sign up to get free protection for your applications and to get access to all the features.
- data/.rvmrc +1 -0
- data/Gemfile +1 -5
- data/Gemfile.lock +38 -0
- data/README.rdoc +120 -0
- data/Rakefile +1 -7
- data/VERSION +1 -1
- data/king_dtaus.gemspec +11 -12
- data/lib/king_dta/account.rb +29 -30
- data/lib/king_dta/dta.rb +0 -10
- data/lib/king_dta/dtaus.rb +134 -125
- data/lib/king_dta/dtazv.rb +221 -183
- data/lib/king_dta/helper.rb +1 -3
- data/lib/king_dtaus.rb +0 -1
- data/spec/account_spec.rb +150 -64
- data/spec/booking_spec.rb +3 -1
- data/spec/dtaus_spec.rb +12 -35
- data/spec/dtazv_spec.rb +155 -54
- data/spec/dtazv_test.rb +105 -0
- data/spec/spec_helper.rb +65 -43
- metadata +38 -48
- data/.travis.yml +0 -3
- data/README.markdown +0 -128
- /data/{docs/example.output → example.output} +0 -0
data/.rvmrc
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
rvm use --create ree@dtazv
|
data/Gemfile
CHANGED
data/Gemfile.lock
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
king_dtaus (2.0.0.pre)
|
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
ADDED
@@ -0,0 +1,120 @@
|
|
1
|
+
= DTAUS & DTAZV always comes together
|
2
|
+
|
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
|
+
therefore supported in common banking programs too.
|
8
|
+
|
9
|
+
This gem saves you all the trouble when generating DTAUS- or DTAZV-text.
|
10
|
+
|
11
|
+
We love building payment applications
|
12
|
+
|
13
|
+
== Install
|
14
|
+
|
15
|
+
gem install king_dtaus
|
16
|
+
|
17
|
+
== Features
|
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? - just kidding
|
26
|
+
* some more edge-case tests needed
|
27
|
+
|
28
|
+
== Resources
|
29
|
+
|
30
|
+
* DTAZV-Viewer: http://www.meta-evolutions.de/pages/artikel-20070630-dtazv-datei-betrachter.html
|
31
|
+
* DTA/DTAZV PHP Pear: http://pear.php.net/package/Payment_DTA
|
32
|
+
* Ruby Kernel Module: http://www.ruby-doc.org/core/classes/Kernel.html
|
33
|
+
* Windata ZV-Tools: http://www.windata.de/Site/2Produkte2/ZVTools.aspx
|
34
|
+
* The Swift Codes: http://www.theswiftcodes.com/
|
35
|
+
* StarMoney: http://www.starmoney.de/index.php?id=starmoneybusiness_testen
|
36
|
+
* SalesKing: http://salesking.eu
|
37
|
+
|
38
|
+
== Examples
|
39
|
+
|
40
|
+
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.
|
41
|
+
|
42
|
+
=== DTA
|
43
|
+
|
44
|
+
# create a new dtaus object
|
45
|
+
dta = KingDta::Dtaus.new('LK')
|
46
|
+
# set sender account
|
47
|
+
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)
|
48
|
+
# the following should be done in a loop to add multiple bookings
|
49
|
+
# create receiving account
|
50
|
+
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)
|
51
|
+
# create booking
|
52
|
+
booking = KingDta::Booking.new(rec_acnt, 100.00 )
|
53
|
+
# set booking text if you want to
|
54
|
+
booking.text = "Thanks for your purchase"
|
55
|
+
# add booking
|
56
|
+
dta.add( booking )
|
57
|
+
# end loop
|
58
|
+
|
59
|
+
# create datausstring and do with it whatever fits your workflow
|
60
|
+
my_str = dta.create
|
61
|
+
|
62
|
+
=== DTAZV
|
63
|
+
|
64
|
+
@date = Date.today
|
65
|
+
@dudes_dtazv_export = KingDta::Dtazv.new(@date)
|
66
|
+
@dudes_konto = self.dudes_konto
|
67
|
+
@dalai_lamas_account = self.dalai_lamas_account
|
68
|
+
@dudes_dtazv_export.account = KingDta::Account.new(
|
69
|
+
:account_number => @dudes_konto.account_number,
|
70
|
+
:bank_number => @dudes_konto.bank_number,
|
71
|
+
:client_name => @dudes_konto.client_name,
|
72
|
+
:client_number => @dudes_konto.client_number,
|
73
|
+
:bank_street => @dudes_konto.account_street,
|
74
|
+
:bank_city => @dudes_konto.account_city,
|
75
|
+
:bank_zip_code => @dudes_konto.account_zip_code,
|
76
|
+
:bank_name => @dudes_konto.bank_name,
|
77
|
+
:client_street => @dudes_konto.client_street,
|
78
|
+
:client_city => @dudes_konto.client_city,
|
79
|
+
:client_zip_code => @dudes_konto.client_zip_code,
|
80
|
+
:bank_country_code => @dudes_konto.bank_country_code,
|
81
|
+
:client_country_code => @dudes_konto.client_country_code
|
82
|
+
)
|
83
|
+
|
84
|
+
@dalai_lamas_booking = KingDta::Booking.new(KingDta::Account.new(
|
85
|
+
:account_number => @dalai_lamas_account.account_number,
|
86
|
+
:bank_number => @dalai_lamas_account.bank_number,
|
87
|
+
:client_name => @dalai_lamas_account.client_name,
|
88
|
+
:client_number => @dalai_lamas_account.bank_name,
|
89
|
+
:bank_street => @dalai_lamas_account.account_street,
|
90
|
+
:bank_city => @dalai_lamas_account.account_city,
|
91
|
+
:bank_zip_code => @dalai_lamas_account.account_zip_code,
|
92
|
+
:bank_name => @dalai_lamas_account.bank_name,
|
93
|
+
:client_street => @dalai_lamas_account.client_street,
|
94
|
+
:client_city => @dalai_lamas_account.client_city,
|
95
|
+
:client_zip_code => @dalai_lamas_account.client_zip_code,
|
96
|
+
:bank_country_code => @dalai_lamas_account.bank_country_code,
|
97
|
+
:client_country_code => @dalai_lamas_account.client_country_code
|
98
|
+
), 220.25)
|
99
|
+
|
100
|
+
@dudes_dtazv_export.add(@dalai_lamas_booking)
|
101
|
+
@dudes_dtazv_export.create_file
|
102
|
+
|
103
|
+
# Output is DTAZV0.TXT
|
104
|
+
|
105
|
+
also make sure to read the specs
|
106
|
+
|
107
|
+
== Credits
|
108
|
+
|
109
|
+
Bugfixes and enhancements by
|
110
|
+
|
111
|
+
* Georg Ledermann - https://github.com/ledermann
|
112
|
+
* Kim Rudolph - https://github.com/krudolph
|
113
|
+
* Thorsten Böttger - https://github.com/alto
|
114
|
+
* Jan Kus - https://github.com/koos
|
115
|
+
|
116
|
+
This gem used https://rubygems.org/gems/DTAUS as a starting point.
|
117
|
+
It was disected, turned into a real class structure, bugs where fixed and
|
118
|
+
of course a full test suite ensures its functionality.
|
119
|
+
|
120
|
+
Copyright (c) 2009-2011 Georg Leciejewski (SalesKing), Jan Kus (Railslove), released under the MIT license
|
data/Rakefile
CHANGED
@@ -6,12 +6,6 @@ RSpec::Core::RakeTask.new
|
|
6
6
|
|
7
7
|
task :default => :spec
|
8
8
|
|
9
|
-
RSpec::Core::RakeTask.new(:coverage) do |t|
|
10
|
-
t.rcov = true
|
11
|
-
t.rcov_opts = %q[--exclude "spec"]
|
12
|
-
t.verbose = true
|
13
|
-
end
|
14
|
-
|
15
9
|
Dir["#{File.dirname(__FILE__)}/tasks/*.rake"].sort.each { |ext| load ext }
|
16
10
|
|
17
11
|
begin
|
@@ -22,7 +16,7 @@ begin
|
|
22
16
|
gem.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.}
|
23
17
|
gem.email = "gl@salesking.eu"
|
24
18
|
gem.homepage = "http://github.com/salesking/king_dtaus"
|
25
|
-
gem.authors = ["Georg Leciejewski", "Georg Ledermann"
|
19
|
+
gem.authors = ["Georg Leciejewski", "Georg Ledermann"]
|
26
20
|
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
27
21
|
end
|
28
22
|
Jeweler::GemcutterTasks.new
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.0.
|
1
|
+
2.0.1.pre
|
data/king_dtaus.gemspec
CHANGED
@@ -5,26 +5,27 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{king_dtaus}
|
8
|
-
s.version = "2.0.
|
8
|
+
s.version = "2.0.1.pre"
|
9
9
|
|
10
|
-
s.required_rubygems_version = Gem::Requirement.new("
|
11
|
-
s.authors = ["Georg Leciejewski", "Georg Ledermann"
|
12
|
-
s.date = %q{2011-
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Georg Leciejewski", "Georg Ledermann"]
|
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
|
-
"README.
|
16
|
+
"README.rdoc"
|
17
17
|
]
|
18
18
|
s.files = [
|
19
|
-
".
|
19
|
+
".rvmrc",
|
20
20
|
"Gemfile",
|
21
|
+
"Gemfile.lock",
|
21
22
|
"MIT-LICENSE",
|
22
|
-
"README.
|
23
|
+
"README.rdoc",
|
23
24
|
"Rakefile",
|
24
25
|
"VERSION",
|
25
26
|
"docs/dtazv.pdf",
|
26
27
|
"docs/dtazv_bank_bbk.pdf",
|
27
|
-
"
|
28
|
+
"example.output",
|
28
29
|
"king_dtaus.gemspec",
|
29
30
|
"lib/king_dta/account.rb",
|
30
31
|
"lib/king_dta/booking.rb",
|
@@ -38,12 +39,13 @@ Gem::Specification.new do |s|
|
|
38
39
|
"spec/booking_spec.rb",
|
39
40
|
"spec/dtaus_spec.rb",
|
40
41
|
"spec/dtazv_spec.rb",
|
42
|
+
"spec/dtazv_test.rb",
|
41
43
|
"spec/helper_spec.rb",
|
42
44
|
"spec/spec_helper.rb"
|
43
45
|
]
|
44
46
|
s.homepage = %q{http://github.com/salesking/king_dtaus}
|
45
47
|
s.require_paths = ["lib"]
|
46
|
-
s.rubygems_version = %q{1.
|
48
|
+
s.rubygems_version = %q{1.5.0}
|
47
49
|
s.summary = %q{Generate DTAUS strings and files}
|
48
50
|
|
49
51
|
if s.respond_to? :specification_version then
|
@@ -55,14 +57,12 @@ Gem::Specification.new do |s|
|
|
55
57
|
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
56
58
|
s.add_development_dependency(%q<simplecov>, [">= 0"])
|
57
59
|
s.add_development_dependency(%q<mocha>, [">= 0"])
|
58
|
-
s.add_development_dependency(%q<i18n>, [">= 0"])
|
59
60
|
else
|
60
61
|
s.add_dependency(%q<king_dtaus>, [">= 0"])
|
61
62
|
s.add_dependency(%q<rspec>, [">= 0"])
|
62
63
|
s.add_dependency(%q<jeweler>, [">= 0"])
|
63
64
|
s.add_dependency(%q<simplecov>, [">= 0"])
|
64
65
|
s.add_dependency(%q<mocha>, [">= 0"])
|
65
|
-
s.add_dependency(%q<i18n>, [">= 0"])
|
66
66
|
end
|
67
67
|
else
|
68
68
|
s.add_dependency(%q<king_dtaus>, [">= 0"])
|
@@ -70,7 +70,6 @@ Gem::Specification.new do |s|
|
|
70
70
|
s.add_dependency(%q<jeweler>, [">= 0"])
|
71
71
|
s.add_dependency(%q<simplecov>, [">= 0"])
|
72
72
|
s.add_dependency(%q<mocha>, [">= 0"])
|
73
|
-
s.add_dependency(%q<i18n>, [">= 0"])
|
74
73
|
end
|
75
74
|
end
|
76
75
|
|
data/lib/king_dta/account.rb
CHANGED
@@ -1,15 +1,11 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
module KingDta
|
3
|
-
#
|
4
|
-
# Kontodaten verwalten mit Name des Inhabers und Bank, Bankleitzahl und Kontonummer.
|
3
|
+
#Kontodaten verwalten mit Name des Inhabers und Bank, Bankleitzahl und Kontonummer.
|
5
4
|
class Account
|
6
5
|
include KingDta::Helper
|
7
|
-
|
8
|
-
attr_accessor :
|
9
|
-
|
10
|
-
:bank_bic,
|
11
|
-
:owner_name, :owner_number, :owner_street, :owner_city,
|
12
|
-
:owner_zip_code, :owner_country_code
|
6
|
+
# dta~ jeweilige Feld in DTAUS-Norm
|
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
|
13
9
|
|
14
10
|
# TODO test
|
15
11
|
def initialize(args={})
|
@@ -17,40 +13,43 @@ module KingDta
|
|
17
13
|
@bank_street = convert_text(args.delete(:bank_street))
|
18
14
|
@bank_city = convert_text(args.delete(:bank_city))
|
19
15
|
@bank_name = convert_text(args.delete(:bank_name))
|
20
|
-
@
|
21
|
-
@
|
22
|
-
@
|
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))
|
23
19
|
|
24
20
|
args.each do |key,value|
|
25
21
|
self.send("#{key}=",value)
|
26
22
|
end
|
27
23
|
|
28
|
-
raise ArgumentError.new('
|
29
|
-
raise ArgumentError.new(
|
30
|
-
raise ArgumentError.new(
|
31
|
-
raise ArgumentError.new("
|
32
|
-
|
33
|
-
raise ArgumentError.new('Bank account number too long, max 10 allowed') if @bank_account_number && "#{@bank_account_number}".length > 10
|
34
|
-
raise ArgumentError.new("Bank account number cannot be 0") if @bank_account_number && @bank_account_number == 0
|
35
|
-
raise ArgumentError.new("Bank iban wrong length: #{@bank_iban.length}, must be between 15-34") if @bank_iban && !@bank_iban.length.between?(15,34)
|
36
|
-
raise ArgumentError.new("Bank bic wrong length: #{@bank_bic.length} must be between 8-11") if @bank_bic && !@bank_bic.length.between?(8,11)
|
37
|
-
raise ArgumentError.new('Bank number too long, max 8 allowed') if @bank_number && "#{@bank_number}".length > 8
|
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
|
38
28
|
raise ArgumentError.new("Bank number cannot be 0") if @bank_number && @bank_number == 0
|
39
|
-
raise ArgumentError.new("
|
40
|
-
raise ArgumentError.new("
|
41
|
-
raise ArgumentError.new("Bank
|
42
|
-
raise ArgumentError.new("
|
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
|
43
38
|
|
44
|
-
|
39
|
+
def client_name_1
|
40
|
+
@client_name[0..35]
|
41
|
+
end
|
45
42
|
|
43
|
+
def client_name_2
|
44
|
+
@client_name[36..70]
|
46
45
|
end
|
47
46
|
|
48
|
-
def
|
49
|
-
"#{@
|
47
|
+
def zip_city
|
48
|
+
"#{@bank_zip_code} #{@bank_city}"
|
50
49
|
end
|
51
50
|
|
52
|
-
def
|
53
|
-
"#{@
|
51
|
+
def client_zip_city
|
52
|
+
"#{@client_zip_code} #{@client_city}"
|
54
53
|
end
|
55
54
|
|
56
55
|
end
|
data/lib/king_dta/dta.rb
CHANGED
@@ -4,16 +4,6 @@ module KingDta
|
|
4
4
|
include KingDta::Helper
|
5
5
|
attr_reader :default_text
|
6
6
|
|
7
|
-
# Create a new dta string.
|
8
|
-
# === Parameter #
|
9
|
-
# typ<Date>:: date when the the transfer is to be created
|
10
|
-
def initialize(date=Date.today )
|
11
|
-
raise ArgumentError.new("Wrong date format. Make it a Time or Date object with yyyy-mm-dd") unless date.respond_to?(:strftime)
|
12
|
-
@date = date
|
13
|
-
@value_pos = true #values are positive by default changed by first booking
|
14
|
-
@closed = false
|
15
|
-
@default_text = ''
|
16
|
-
end
|
17
7
|
# Set the sending account(you own)
|
18
8
|
# === Parameter
|
19
9
|
# account<Account>:: the sending account, must be an instance of class
|