ABO 0.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/ABO.gemspec +30 -0
- data/CHANGES.rdoc +11 -0
- data/Manifest +6 -0
- data/README.rdoc +11 -0
- data/Rakefile +14 -0
- data/init.rb +1 -0
- data/lib/abo.rb +199 -0
- metadata +75 -0
data/ABO.gemspec
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = %q{ABO}
|
5
|
+
s.version = "0.0.2"
|
6
|
+
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = ["Josef \305\240im\303\241nek"]
|
9
|
+
s.date = %q{2010-03-18}
|
10
|
+
s.description = %q{RUBY ABO banking format library}
|
11
|
+
s.email = %q{retro@ballgag.cz}
|
12
|
+
s.extra_rdoc_files = ["README.rdoc", "lib/abo.rb"]
|
13
|
+
s.files = ["CHANGES.rdoc", "Manifest", "README.rdoc", "Rakefile", "init.rb", "lib/abo.rb", "ABO.gemspec"]
|
14
|
+
s.homepage = %q{http://github.com/hexmotive/ABO}
|
15
|
+
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "ABO", "--main", "README.rdoc"]
|
16
|
+
s.require_paths = ["lib"]
|
17
|
+
s.rubyforge_project = %q{abo}
|
18
|
+
s.rubygems_version = %q{1.3.6}
|
19
|
+
s.summary = %q{RUBY ABO banking format library}
|
20
|
+
|
21
|
+
if s.respond_to? :specification_version then
|
22
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
23
|
+
s.specification_version = 3
|
24
|
+
|
25
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
26
|
+
else
|
27
|
+
end
|
28
|
+
else
|
29
|
+
end
|
30
|
+
end
|
data/CHANGES.rdoc
ADDED
data/Manifest
ADDED
data/README.rdoc
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
== Preface
|
2
|
+
|
3
|
+
Format ABO is commonly used in the Czech Republic and Slovak for financial reporting.
|
4
|
+
|
5
|
+
== Specification
|
6
|
+
|
7
|
+
{Format specification (Czech)}[http://www.csas.cz/banka/content/inet/internet/cs/ABO_format.pdf]
|
8
|
+
|
9
|
+
== Installation
|
10
|
+
|
11
|
+
$ sudo gem install ABO
|
data/Rakefile
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
require 'echoe'
|
4
|
+
|
5
|
+
Echoe.new('ABO', '0.0.2') do |p|
|
6
|
+
p.description = "RUBY ABO banking format library"
|
7
|
+
p.url = "http://github.com/hexmotive/ABO"
|
8
|
+
p.author = "Josef Šimánek"
|
9
|
+
p.email = "retro@ballgag.cz"
|
10
|
+
p.ignore_pattern = ["tmp/*", "script/*"]
|
11
|
+
p.development_dependencies = []
|
12
|
+
end
|
13
|
+
|
14
|
+
Dir["#{File.dirname(__FILE__)}/tasks/*.rake"].sort.each { |ext| load ext }
|
data/init.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'ABO'
|
data/lib/abo.rb
ADDED
@@ -0,0 +1,199 @@
|
|
1
|
+
module ABO
|
2
|
+
|
3
|
+
class WrongFormatError < StandardError; end
|
4
|
+
|
5
|
+
class Writer
|
6
|
+
#záznam UHL1
|
7
|
+
attr_accessor :record
|
8
|
+
|
9
|
+
#Hlavička účetního souboru
|
10
|
+
attr_accessor :file_header
|
11
|
+
|
12
|
+
#Hlavička skupiny
|
13
|
+
attr_accessor :group_header
|
14
|
+
|
15
|
+
#Položka jednotlivého příkazu
|
16
|
+
attr_accessor :payment_order
|
17
|
+
|
18
|
+
class Record
|
19
|
+
|
20
|
+
#datum
|
21
|
+
attr_accessor :date
|
22
|
+
|
23
|
+
#název klienta
|
24
|
+
attr_accessor :client_name
|
25
|
+
|
26
|
+
#číslo klienta
|
27
|
+
attr_accessor :client_number
|
28
|
+
|
29
|
+
#interval účetních souborů, začátek
|
30
|
+
attr_accessor :interval_start
|
31
|
+
|
32
|
+
#interval účetních souborů, konec
|
33
|
+
attr_accessor :interval_stop
|
34
|
+
|
35
|
+
#kód pevná část
|
36
|
+
attr_accessor :public_code
|
37
|
+
|
38
|
+
#kód tajná část
|
39
|
+
attr_accessor :secret_code
|
40
|
+
|
41
|
+
def date=(value)
|
42
|
+
raise ABO::WrongFormatError, "Record#date=" unless value.instance_of?(Date)
|
43
|
+
@date = value
|
44
|
+
end
|
45
|
+
|
46
|
+
def date
|
47
|
+
raise ABO::WrongFormatError, "Record#date" unless @date.instance_of?(Date)
|
48
|
+
@date.strftime("%d%m%y")
|
49
|
+
end
|
50
|
+
|
51
|
+
def client_name
|
52
|
+
raise ABO::WrongFormatError, "Record#client_name" unless @client_name.instance_of?(String)
|
53
|
+
@client_name.rjust(20)
|
54
|
+
end
|
55
|
+
|
56
|
+
def client_number
|
57
|
+
raise ABO::WrongFormatError, "Record#client_number" unless @client_number.instance_of?(String)
|
58
|
+
@client_number.rjust(10)
|
59
|
+
end
|
60
|
+
|
61
|
+
def interval_start
|
62
|
+
raise ABO::WrongFormatError, "Record#interval_start" unless @interval_start.instance_of?(Fixnum)
|
63
|
+
"%03d" % @interval_start
|
64
|
+
end
|
65
|
+
|
66
|
+
def interval_stop
|
67
|
+
raise ABO::WrongFormatError, "Record#interval_stop" unless @interval_stop.instance_of?(Fixnum)
|
68
|
+
"%03d" % @interval_stop
|
69
|
+
end
|
70
|
+
|
71
|
+
def to_abo
|
72
|
+
"UHL1#{date}#{client_name}#{client_number}#{interval_start}#{interval_stop}#{public_code}#{secret_code}\n"
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
class FileHeader
|
77
|
+
|
78
|
+
PAYMENT = "1501"
|
79
|
+
INKASO = "1502"
|
80
|
+
|
81
|
+
#druh dat
|
82
|
+
attr_accessor :date_type
|
83
|
+
|
84
|
+
#číslo účetního souboru
|
85
|
+
attr_accessor :file_number
|
86
|
+
|
87
|
+
#směrový kód banky
|
88
|
+
attr_accessor :bank_code
|
89
|
+
|
90
|
+
def end_block
|
91
|
+
"5 +\n"
|
92
|
+
end
|
93
|
+
|
94
|
+
def to_abo
|
95
|
+
"1 #{date_type} #{file_number} #{bank_code}\n"
|
96
|
+
end
|
97
|
+
|
98
|
+
end
|
99
|
+
|
100
|
+
class GroupHeader
|
101
|
+
|
102
|
+
#číslo účtu příkazce
|
103
|
+
attr_accessor :payers_account_number
|
104
|
+
|
105
|
+
#celková částka skupiny
|
106
|
+
attr_accessor :group_amount
|
107
|
+
|
108
|
+
#datum splatnosti
|
109
|
+
attr_accessor :due_date
|
110
|
+
|
111
|
+
def due_date=(value)
|
112
|
+
raise ABO::WrongFormatError unless value.instance_of?(Date)
|
113
|
+
@due_date = value
|
114
|
+
end
|
115
|
+
|
116
|
+
def due_date
|
117
|
+
raise ABO::WrongFormatError unless @due_date.instance_of?(Date)
|
118
|
+
@due_date.strftime("%d%m%y")
|
119
|
+
end
|
120
|
+
|
121
|
+
def end_block
|
122
|
+
"3 +\n"
|
123
|
+
end
|
124
|
+
|
125
|
+
def to_abo
|
126
|
+
"2 #{payers_account_number} #{group_amount} #{due_date}\n"
|
127
|
+
end
|
128
|
+
|
129
|
+
end
|
130
|
+
|
131
|
+
class PaymentOrder
|
132
|
+
|
133
|
+
#číslo účtu kredit
|
134
|
+
attr_accessor :credit_account_number
|
135
|
+
|
136
|
+
#částka
|
137
|
+
attr_accessor :amount
|
138
|
+
|
139
|
+
#variabilní symbol
|
140
|
+
attr_accessor :variable_symbol
|
141
|
+
|
142
|
+
#konstantní symbol
|
143
|
+
attr_accessor :constant_symbol
|
144
|
+
|
145
|
+
def amount
|
146
|
+
"%012d" % @amount
|
147
|
+
end
|
148
|
+
|
149
|
+
def variable_symbol
|
150
|
+
"%010d" % @variable_symbol.to_i
|
151
|
+
end
|
152
|
+
|
153
|
+
def constant_symbol
|
154
|
+
"%010d" % @constant_symbol.to_i
|
155
|
+
end
|
156
|
+
|
157
|
+
def to_abo
|
158
|
+
"#{credit_account_number} #{amount} #{variable_symbol} #{constant_symbol}\n"
|
159
|
+
end
|
160
|
+
|
161
|
+
end
|
162
|
+
|
163
|
+
def initialize
|
164
|
+
@record = Record.new
|
165
|
+
@record.interval_start = 1
|
166
|
+
@record.interval_stop = 1
|
167
|
+
@file_header = FileHeader.new
|
168
|
+
@group_header = GroupHeader.new
|
169
|
+
@payment_orders = []
|
170
|
+
end
|
171
|
+
|
172
|
+
def to_abo
|
173
|
+
prepare
|
174
|
+
string = ""
|
175
|
+
string << @record.to_abo
|
176
|
+
string << @file_header.to_abo
|
177
|
+
string << @group_header.to_abo
|
178
|
+
@payment_orders.each do |p|
|
179
|
+
string << p.to_abo
|
180
|
+
end
|
181
|
+
string << @group_header.end_block
|
182
|
+
string << @file_header.end_block
|
183
|
+
|
184
|
+
string
|
185
|
+
end
|
186
|
+
|
187
|
+
private
|
188
|
+
|
189
|
+
def prepare
|
190
|
+
@group_header.group_amount = sum_amounts
|
191
|
+
end
|
192
|
+
|
193
|
+
def sum_amounts
|
194
|
+
@payment_orders.inject(0){|p,c| p + c.amount.to_i}
|
195
|
+
end
|
196
|
+
|
197
|
+
end
|
198
|
+
|
199
|
+
end
|
metadata
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ABO
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 2
|
9
|
+
version: 0.0.2
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- "Josef \xC5\xA0im\xC3\xA1nek"
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-03-18 00:00:00 +01:00
|
18
|
+
default_executable:
|
19
|
+
dependencies: []
|
20
|
+
|
21
|
+
description: RUBY ABO banking format library
|
22
|
+
email: retro@ballgag.cz
|
23
|
+
executables: []
|
24
|
+
|
25
|
+
extensions: []
|
26
|
+
|
27
|
+
extra_rdoc_files:
|
28
|
+
- README.rdoc
|
29
|
+
- lib/abo.rb
|
30
|
+
files:
|
31
|
+
- CHANGES.rdoc
|
32
|
+
- Manifest
|
33
|
+
- README.rdoc
|
34
|
+
- Rakefile
|
35
|
+
- init.rb
|
36
|
+
- lib/abo.rb
|
37
|
+
- ABO.gemspec
|
38
|
+
has_rdoc: true
|
39
|
+
homepage: http://github.com/hexmotive/ABO
|
40
|
+
licenses: []
|
41
|
+
|
42
|
+
post_install_message:
|
43
|
+
rdoc_options:
|
44
|
+
- --line-numbers
|
45
|
+
- --inline-source
|
46
|
+
- --title
|
47
|
+
- ABO
|
48
|
+
- --main
|
49
|
+
- README.rdoc
|
50
|
+
require_paths:
|
51
|
+
- lib
|
52
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
segments:
|
57
|
+
- 0
|
58
|
+
version: "0"
|
59
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
segments:
|
64
|
+
- 1
|
65
|
+
- 2
|
66
|
+
version: "1.2"
|
67
|
+
requirements: []
|
68
|
+
|
69
|
+
rubyforge_project: abo
|
70
|
+
rubygems_version: 1.3.6
|
71
|
+
signing_key:
|
72
|
+
specification_version: 3
|
73
|
+
summary: RUBY ABO banking format library
|
74
|
+
test_files: []
|
75
|
+
|