lohnausweis 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 2e972c3cb76bffb2728116a69cdf8b99d2cf2aee
4
+ data.tar.gz: f36f640f550c262ac2526cdd2d971e84e70ebdf8
5
+ SHA512:
6
+ metadata.gz: c401421476a17a8ec854e8748ba8be94b8cd225be83dfd744c1e36b3349f3883ba1a59154d6bc760999ebe9b3c99fdc431011cc936b6142a4c5fbe898dc41e96
7
+ data.tar.gz: afede2c96a459e6c148bd727a6a8dc645916e2ec7a3998ae39c4fbb03ffd7fe91bceb0ce1232ab3c212a3f322adc3b4fb45b735728616f0346535c23a880bdb8
data/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in lohnausweis.gemspec
4
+ gemspec
5
+
6
+ gem 'prawn', '~>1.0'
7
+ gem 'activesupport'
data/Gemfile.lock ADDED
@@ -0,0 +1,47 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ lohnausweis (0.0.1)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ activesupport (4.0.4)
10
+ i18n (~> 0.6, >= 0.6.9)
11
+ minitest (~> 4.2)
12
+ multi_json (~> 1.3)
13
+ thread_safe (~> 0.1)
14
+ tzinfo (~> 0.3.37)
15
+ atomic (1.1.16)
16
+ diff-lcs (1.2.5)
17
+ i18n (0.6.9)
18
+ minitest (4.7.5)
19
+ multi_json (1.9.2)
20
+ pdf-core (0.2.5)
21
+ prawn (1.0.0)
22
+ pdf-core (~> 0.2.2)
23
+ ttfunk (~> 1.1.1)
24
+ rake (10.1.1)
25
+ rspec (2.14.1)
26
+ rspec-core (~> 2.14.0)
27
+ rspec-expectations (~> 2.14.0)
28
+ rspec-mocks (~> 2.14.0)
29
+ rspec-core (2.14.8)
30
+ rspec-expectations (2.14.5)
31
+ diff-lcs (>= 1.1.3, < 2.0)
32
+ rspec-mocks (2.14.6)
33
+ thread_safe (0.3.1)
34
+ atomic (>= 1.1.7, < 2)
35
+ ttfunk (1.1.1)
36
+ tzinfo (0.3.39)
37
+
38
+ PLATFORMS
39
+ ruby
40
+
41
+ DEPENDENCIES
42
+ activesupport
43
+ bundler (~> 1.5)
44
+ lohnausweis!
45
+ prawn (~> 1.0)
46
+ rake
47
+ rspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 hrigu
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,29 @@
1
+ # Lohnausweis
2
+
3
+ TODO: Write a gem description
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'lohnausweis'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install lohnausweis
18
+
19
+ ## Usage
20
+
21
+ TODO: Write usage instructions here
22
+
23
+ ## Contributing
24
+
25
+ 1. Fork it ( http://github.com/<my-github-username>/lohnausweis/fork )
26
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
27
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
28
+ 4. Push to the branch (`git push origin my-new-feature`)
29
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,142 @@
1
+ module Planik
2
+ module Lohnausweis
3
+
4
+ class Daten
5
+
6
+ class Block
7
+ attr_reader :titel_leiste
8
+ attr_reader :eintraege
9
+
10
+ def initialize eintraege, titel_leiste = nil
11
+ @eintraege, @titel_leiste = eintraege, titel_leiste
12
+ end
13
+
14
+ def daten
15
+ d = []
16
+ d << titel_leiste unless titel_leiste.nil?
17
+
18
+ eintraege.each do |e|
19
+ x = []
20
+ x << e.name
21
+ x << e.menge_to_s
22
+ x << e.ansatz_to_s
23
+ x << e.betrag_gerundet_to_s
24
+ d << x
25
+ end
26
+ d
27
+ end
28
+
29
+ end
30
+
31
+
32
+ def initialize(rohdaten)
33
+ @rohdaten = rohdaten
34
+ bruttolohn_eintrag = create_lohn_block
35
+ create_abzuege_block(bruttolohn_eintrag)
36
+ create_ferien_block
37
+ create_arbeitszeit_block
38
+ end
39
+
40
+ def create_lohn_block
41
+ lohn_positiv = []
42
+ lohn_positiv << Fakt.new("Monatslohn", nil, nil, @rohdaten.monatslohn)
43
+ lohn_positiv << Zulage.new("Zulage Nacht", @rohdaten.zulage_nacht.menge, @rohdaten.zulage_nacht.ansatz)
44
+ lohn_positiv << Zulage.new("Zulage Wochenende", @rohdaten.zulage_wochenende.menge, @rohdaten.zulage_wochenende.ansatz)
45
+ lohn_positiv << Zulage.new("Kinderzulagen bis 12 Jahre", @rohdaten.kinderzulage.menge, @rohdaten.kinderzulage.ansatz) unless @rohdaten.kinderzulage.nil?
46
+ lohn_positiv << Fakt.new("Funktionszulage", nil, nil, @rohdaten.funktionszulage) unless @rohdaten.funktionszulage.nil?
47
+
48
+ @rohdaten.lohn_freifelder.each do |ff|
49
+ lohn_positiv << Fakt.new(ff.name, ff.menge, ff.ansatz, ff.betrag)
50
+ end
51
+
52
+ bruttolohn_eintrag = Rechnung.new("Bruttolohn", lohn_positiv, [])
53
+
54
+ lohnblock_eintraege = lohn_positiv + [bruttolohn_eintrag]
55
+
56
+ @lohnblock = Block.new(lohnblock_eintraege, ["Monatslohn", "Menge", "Ansatz / %", "Betrag"])
57
+ bruttolohn_eintrag
58
+ end
59
+
60
+ def create_abzuege_block(bruttolohn_eintrag)
61
+ lohn_abzuege = []
62
+ lohn_abzuege << Abzug.new("AHV, IV, EO", @rohdaten.monatslohn, @rohdaten.ahv)
63
+ lohn_abzuege << Abzug.new("ALV", @rohdaten.monatslohn, @rohdaten.alv)
64
+ lohn_abzuege << Abzug.new("NBU", @rohdaten.monatslohn, @rohdaten.nbu)
65
+ lohn_abzuege << Abzug.new("Krankentaggeld", @rohdaten.monatslohn, @rohdaten.krankentaggeld)
66
+ # lohn_abzuege << Fakt.new("Pensionskasse BVG", nil, nil, @rohdaten.pensionskasse)
67
+ @rohdaten.abzug_freifelder.each do |ff|
68
+ lohn_abzuege << Fakt.new(ff.name, ff.menge, ff.ansatz, ff.betrag)
69
+ end
70
+
71
+ nettolohn_eintrag = Rechnung.new("Nettolohn", [bruttolohn_eintrag], lohn_abzuege)
72
+ abzuege_eingtraege = lohn_abzuege + [nettolohn_eintrag]
73
+
74
+ @abzuege_block = Block.new(abzuege_eingtraege)
75
+ end
76
+
77
+
78
+ def create_ferien_block
79
+ eintraege = []
80
+ titel = ["Ferien", nil, nil, "Tage"]
81
+
82
+ eintraege << Fakt.new("Ferienguthaben #{jahr}", nil, nil, @rohdaten.ferien.guthaben, nil)
83
+ eintraege << Fakt.new("Bezogene Ferien bis #{end_datum}", nil, nil, @rohdaten.ferien.bezogen, nil)
84
+ eintraege << Rechnung.new("Ferienguthaben per #{end_datum}", [eintraege[0]], [eintraege[1]], nil)
85
+
86
+ @ferien_block = Block.new(eintraege, titel)
87
+ end
88
+
89
+ def create_arbeitszeit_block
90
+ eintraege = []
91
+ titel = ["Arbeitszeit", nil, nil, "Stunden"]
92
+
93
+ eintraege << Fakt.new("Stundensaldo Vormonat", nil, nil, @rohdaten.arbeitszeit.gleitzeit_vor, nil)
94
+ eintraege << Fakt.new("Sollstunden von #{start_datum} bis #{end_datum}", nil, nil, @rohdaten.arbeitszeit.soll_stunden, nil)
95
+ eintraege << Fakt.new("Geleistete Stunden von #{start_datum} bis #{end_datum}", nil, nil, @rohdaten.arbeitszeit.ist_stunden, nil)
96
+ eintraege << Rechnung.new("Saldo per #{end_datum}", [eintraege[0], eintraege[2]], [eintraege[1]], nil)
97
+
98
+ @arbeitszeit_block = Block.new(eintraege, titel)
99
+ end
100
+
101
+ def adresse
102
+ @rohdaten.adresse
103
+ end
104
+
105
+ def lohn_daten
106
+ @lohnblock.daten
107
+ end
108
+
109
+ def abzug_daten
110
+ @abzuege_block.daten
111
+
112
+ end
113
+
114
+ def ferien_daten
115
+ @ferien_block.daten
116
+ end
117
+
118
+ def arbeitszeit_daten
119
+ @arbeitszeit_block.daten
120
+ end
121
+
122
+ def start_datum
123
+ @rohdaten.start_datum.strftime("%d.%m.%Y")
124
+ end
125
+
126
+ def end_datum
127
+ @rohdaten.end_datum.strftime("%d.%m.%Y")
128
+ end
129
+
130
+ def jahr
131
+ @rohdaten.start_datum.strftime("%Y")
132
+ end
133
+
134
+ def monat
135
+ puts I18n.load_path
136
+ I18n.localize @rohdaten.start_datum, :format => "%B", :locale => :de
137
+ end
138
+
139
+ end
140
+ end
141
+ end
142
+
@@ -0,0 +1,136 @@
1
+ require 'mathn'
2
+ require 'active_support/number_helper'
3
+
4
+ module Planik
5
+ module Lohnausweis
6
+
7
+ # Abstrakte Klasse für alle Einträge in den Tabellen des Lohnausweises
8
+ # Ein Eintrag hat vier mögliche Spalten: Name, Menge, Ansatz und Betrag, von denen aber der einte oder andere nil sein kann.
9
+ class Eintrag
10
+ attr_reader :name, :menge, :ansatz, :einheit
11
+
12
+ def initialize(name, menge, ansatz, einheit = "Fr")
13
+ @name, @menge, @ansatz, @einheit= name, menge, ansatz, einheit
14
+ end
15
+
16
+ def betrag
17
+ raise "implement in subclass"
18
+ end
19
+
20
+ # Die Menge, gerundet auf zwei Kommastellen genau
21
+ def menge_to_s
22
+ menge.nil? ? nil : ActiveSupport::NumberHelper.number_to_rounded(menge, precision: 2)
23
+ end
24
+
25
+ # Default Wert ist nil
26
+ def ansatz_to_s
27
+ nil
28
+ end
29
+
30
+ def betrag_gerundet_to_s
31
+ value_gerundet_to_s betrag
32
+ end
33
+
34
+ private
35
+
36
+ def value_gerundet_to_s value
37
+ value = betrag_gerundet(value) if einheit == "Fr"
38
+ x = ActiveSupport::NumberHelper.number_to_rounded(value, precision: 2)
39
+ x = ActiveSupport::NumberHelper.number_to_delimited(x, delimiter: "'")
40
+ x = "#{einheit} #{x}" if einheit
41
+ x
42
+ end
43
+
44
+
45
+ def betrag_gerundet(_betrag)
46
+ (_betrag * 2).round(1) / 2.0
47
+ end
48
+
49
+ end
50
+
51
+
52
+ class Fakt < Eintrag
53
+ attr_reader :betrag
54
+
55
+ def initialize(name, menge, ansatz, betrag, einheit = "Fr")
56
+ super(name, menge, ansatz, einheit)
57
+ @betrag = betrag
58
+ end
59
+
60
+ def ansatz_to_s
61
+ ansatz
62
+ end
63
+
64
+ end
65
+
66
+ class IstStunden < Eintrag
67
+ def initialize(name, menge)
68
+ super(name, menge, nil)
69
+ end
70
+
71
+ def betrag;
72
+ 0;
73
+ end
74
+
75
+ # überschreibt
76
+ def betrag_gerundet_to_s
77
+ nil
78
+ end
79
+
80
+ end
81
+
82
+ class Zulage < Eintrag
83
+
84
+ def initialize(name, menge, ansatz)
85
+ super(name, menge, ansatz)
86
+ end
87
+
88
+ def betrag
89
+ menge * ansatz
90
+ end
91
+
92
+ def ansatz_to_s
93
+ value_gerundet_to_s(ansatz)
94
+ end
95
+
96
+ end
97
+
98
+ class Abzug < Eintrag
99
+ #ansatz = prozent
100
+ def initialize name, menge, ansatz
101
+ super(name, menge, ansatz)
102
+ end
103
+
104
+ def betrag
105
+ menge * (ansatz / 100)
106
+ end
107
+
108
+ def menge_to_s
109
+ menge.nil? ? nil : value_gerundet_to_s(menge)
110
+ end
111
+
112
+ def ansatz_to_s
113
+ x = ActiveSupport::NumberHelper.number_to_rounded(ansatz, precision: 2)
114
+ "#{x}%"
115
+ end
116
+
117
+ end
118
+
119
+ class Rechnung < Eintrag
120
+
121
+ def initialize name, positive, negative, einheit = "Fr"
122
+ super(name, nil, nil, einheit)
123
+ @positive, @negative = positive, negative
124
+ end
125
+
126
+ def betrag
127
+ v = 0
128
+ v = @positive.inject(v) { |v, x| v + x.betrag }
129
+ v = @negative.inject(v) { |v, x| v - x.betrag }
130
+ v
131
+ end
132
+ end
133
+
134
+
135
+ end
136
+ end
@@ -0,0 +1,129 @@
1
+ require "prawn"
2
+
3
+ module Planik
4
+ module Lohnausweis
5
+
6
+ # Generiert aus den Rohdaten das PDF
7
+ class PdfGenerator
8
+ WIDTH = 500
9
+ XPOS = 0
10
+
11
+ # Erstellt aus den Rohdaten das Daten Objekt mit den aufbereiteten Daten
12
+ def initialize(rohdaten)
13
+ daten = Daten.new(rohdaten)
14
+ @daten = daten
15
+ end
16
+
17
+ # Erstellt das PDF und liefert es zurück
18
+ def create_pdf
19
+ @pdf = Prawn::Document.new(page_size: "A4")
20
+ @pdf.stroke_axis # Die Masse auf den Achsen
21
+ @pdf.font("Helvetica", size: 8) #Default Font and size
22
+ @pdf.default_leading = 0
23
+ next_y = 750
24
+ next_y = header(next_y)
25
+ next_y = lohn_block(next_y)
26
+ next_y = ferien_block(next_y)
27
+ arbeitszeit_block(next_y)
28
+ footer()
29
+ @pdf
30
+ end
31
+
32
+
33
+ private
34
+
35
+ def header(ypos)
36
+
37
+ bb = @pdf.bounding_box([XPOS, ypos], width: WIDTH) do
38
+ @pdf.font("Helvetica", size: 12) do
39
+ parent = @pdf.bounds
40
+ xpos = parent.top_left[0] + 350
41
+ ypos = parent.height - 70
42
+ width = parent.top_right[0] - xpos
43
+
44
+ @pdf.bounding_box([350, ypos], width: width, height: 70) do
45
+ @pdf.text "#{@daten.adresse.voller_name}"
46
+ @pdf.text @daten.adresse.strasse_nr
47
+ @pdf.text "#{@daten.adresse.plz} <u> #{@daten.adresse.ort}</u>", inline_format: true
48
+ #@pdf.stroke_bounds
49
+ end
50
+ @pdf.text("Lohnabrechnung #{@daten.monat} #{@daten.jahr}", style: :bold)
51
+ end
52
+ #@pdf.stroke_bounds
53
+ end
54
+ bb.absolute_bottom
55
+ end
56
+
57
+ def lohn_block(ypos)
58
+ ypos = ypos - 50
59
+ bb = @pdf.bounding_box([XPOS, ypos], width: WIDTH) do
60
+ ypos = 0
61
+ make_table(XPOS, ypos, @daten.lohn_daten, true)
62
+ @pdf.move_down 10 # Abstand
63
+ make_table(XPOS, ypos, @daten.abzug_daten, false)
64
+ @pdf.stroke_bounds
65
+ end
66
+ bb.absolute_bottom
67
+ end
68
+
69
+ def ferien_block(ypos)
70
+ ypos = ypos - 50
71
+ #ypos = @pdf.bounds.absolute_bottom
72
+ bb = @pdf.bounding_box([XPOS, ypos], width: WIDTH) do
73
+ ypos = 0
74
+ make_table(XPOS, ypos, @daten.ferien_daten, true)
75
+ @pdf.stroke_bounds
76
+ end
77
+ bb.absolute_bottom
78
+ end
79
+
80
+ def arbeitszeit_block(ypos)
81
+ ypos = ypos - 50
82
+ @pdf.bounding_box([XPOS, ypos], width: WIDTH) do
83
+ ypos = 0
84
+ make_table(XPOS, ypos, @daten.arbeitszeit_daten, true)
85
+ @pdf.stroke_bounds
86
+ end
87
+ end
88
+
89
+ def footer
90
+ ypos = 18
91
+ @pdf.bounding_box([XPOS, ypos], width: WIDTH) do
92
+ @pdf.font("Helvetica", size: 8) do
93
+ @pdf.text("Wir bitten Sie, die Lohnabrechnung sofort zu prüfen und Unstimmigkeiten unverzüglich mitzuteilen.")
94
+ @pdf.text("Anhang: Arbeitszeit vom #{@daten.start_datum} bis #{@daten.end_datum}.")
95
+ end
96
+ end
97
+ end
98
+
99
+
100
+ def make_table(xpos, ypos, daten, title = false)
101
+ @pdf.bounding_box([xpos, ypos], width: WIDTH) do #height dynmaisch
102
+ p_width = @pdf.bounds.width
103
+ r1 = Rational(1, 2)
104
+ r2 = r1 * Rational(1, 3)
105
+ column_width = [p_width * r1, p_width * r2, p_width * r2, p_width * r2]
106
+ @pdf.table(daten, column_widths: column_width,
107
+ cell_style: {
108
+ borders: [], #keine Ränder
109
+ padding_top: 3, padding_bottom: 3
110
+
111
+ }
112
+ ) do |t|
113
+ if title
114
+ t.row(0).style(font_style: :bold) #Titel bold
115
+ t.row(0).background_color = "D8D8D8"
116
+ end
117
+ t.columns(1..3).style(align: :right)
118
+ t.cells[t.row_length-1, 0].font_style = :bold
119
+ t.cells[t.row_length-1, 3].borders = [:top]
120
+ t.cells[t.row_length-1, 3].font_style = :bold
121
+ end
122
+ # @pdf.stroke_bounds
123
+ end
124
+ end
125
+
126
+
127
+ end
128
+ end
129
+ end
@@ -0,0 +1,92 @@
1
+ module Planik
2
+ module Lohnausweis
3
+
4
+
5
+ # Die Rohdaten um einen Lohnausweis zu generieren
6
+ class Rohdaten
7
+
8
+ class MengeAnsatz
9
+ attr_accessor :menge, :ansatz
10
+
11
+ def initialize(menge, ansatz)
12
+ @menge, @ansatz = menge, ansatz;
13
+ end
14
+ end
15
+
16
+ class Arbeitszeit
17
+ attr_accessor :gleitzeit_vor, :soll_stunden, :ist_stunden
18
+
19
+ def initialize(gleitzeit_vor, soll_stunden, ist_stunden)
20
+ @gleitzeit_vor, @soll_stunden, @ist_stunden = gleitzeit_vor, soll_stunden, ist_stunden
21
+ end
22
+ end
23
+
24
+ class Adresse
25
+ attr_accessor :vorname, :name
26
+ attr_accessor :strasse, :nummer
27
+ attr_accessor :plz, :ort
28
+
29
+ def initialize (voname, name, strasse, nummer, plz, ort)
30
+ @vorname, @name, @strasse, @nummer, @plz, @ort = voname, name, strasse, nummer, plz, ort
31
+ end
32
+
33
+ def voller_name
34
+ "#{vorname} #{name}"
35
+ end
36
+
37
+ def plz_ort
38
+ "#{plz} #{ort}"
39
+ end
40
+
41
+ def strasse_nr
42
+ "#{strasse} #{nummer}"
43
+ end
44
+
45
+ end
46
+
47
+ class Ferien
48
+ attr_accessor :guthaben, :bezogen
49
+
50
+ def initialize(guthaben, bezogen)
51
+ @guthaben, @bezogen = guthaben, bezogen
52
+ end
53
+ end
54
+
55
+ class Freifeld
56
+ attr_accessor :name, :menge, :ansatz, :betrag
57
+
58
+ def initialize(name, menge, ansatz, betrag)
59
+ @name, @menge, @ansatz, @betrag = name, menge, ansatz, betrag
60
+ end
61
+ end
62
+
63
+ attr_accessor :start_datum, :end_datum
64
+ attr_accessor :monatslohn
65
+ attr_accessor :adresse
66
+ attr_accessor :arbeitszeit
67
+ attr_accessor :zulage_nacht, :zulage_wochenende, :kinderzulage
68
+ attr_accessor :funktionszulage
69
+ attr_accessor :ahv, :alv, :nbu, :krankentaggeld
70
+ #attr_accessor :pensionskasse
71
+ attr_accessor :ferien
72
+ attr_accessor :lohn_freifelder
73
+ attr_accessor :abzug_freifelder
74
+
75
+ def initialize
76
+ @lohn_freifelder = []
77
+ @abzug_freifelder = []
78
+ yield self
79
+
80
+ end
81
+
82
+ def add_lohn_freifeld freifeld
83
+ lohn_freifelder << freifeld
84
+ end
85
+ def add_abzug_freifeld freifeld
86
+ abzug_freifelder << freifeld
87
+ end
88
+ end
89
+ end
90
+ end
91
+
92
+
@@ -0,0 +1,5 @@
1
+ module Planik
2
+ module Lohnausweis
3
+ VERSION = "0.1.0"
4
+ end
5
+ end
@@ -0,0 +1,25 @@
1
+ require "lohnausweis/version"
2
+ require "lohnausweis/pdf_generator"
3
+ require "lohnausweis/rohdaten"
4
+ require "lohnausweis/daten_eintrag"
5
+ require "lohnausweis/daten"
6
+
7
+ module Planik
8
+ module Lohnausweis
9
+
10
+ file = __FILE__
11
+ dir = File.dirname(file)
12
+
13
+
14
+ # The base source directory for Prawn as installed on the system
15
+ #
16
+ #
17
+ BASEDIR = File.expand_path(File.join(dir, '..'))
18
+
19
+ locale_dir = BASEDIR+'/locale/*.yml'
20
+ I18n.load_path = Dir[locale_dir]
21
+ I18n.backend.load_translations
22
+
23
+ # Your code goes here...
24
+ end
25
+ end