lohnausweis 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/lohnausweis/daten.rb +21 -0
- data/lib/lohnausweis/pdf_generator.rb +93 -6
- data/lib/lohnausweis/rohdaten.rb +14 -0
- data/lib/lohnausweis/version.rb +1 -1
- data/mit_weiss_nicht_was_alles.pdf +206 -725
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cbae455707f8739303c8c831adaa348b3bb26059
|
4
|
+
data.tar.gz: 14c2472b821667bd404b066c56c7ac456a5d1408
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c4f4f6af6f99ba4ac8c3577d19ea50337a38848cdb7d534f3942bec4bcddfa319ffceb14fc8838492f2ec16bc96c93c6ce6f46547add9524091ec61701c860e5
|
7
|
+
data.tar.gz: 72c569d4f04d174c05f418fe8920d608175073c71b8b90947274761e54f55f107c338cfaf0d4a995e0341b117301f9bf5e00d7382b2e6d247e819bda13558128
|
data/Gemfile.lock
CHANGED
data/lib/lohnausweis/daten.rb
CHANGED
@@ -32,12 +32,27 @@ module Planik
|
|
32
32
|
def initialize(rohdaten)
|
33
33
|
@rohdaten = rohdaten
|
34
34
|
bruttolohn_eintrag = create_lohn_block
|
35
|
+
create_zulagen_block
|
35
36
|
create_abzuege_block(bruttolohn_eintrag)
|
36
37
|
create_ferien_block
|
37
38
|
create_arbeitszeit_block
|
38
39
|
create_arbeitsliste
|
39
40
|
end
|
40
41
|
|
42
|
+
# Neu
|
43
|
+
# Aenderung für MEDPHONE März 2015: Nur Arbeitsliste, Arbeitszeit und Zulagen
|
44
|
+
def create_zulagen_block
|
45
|
+
zulagen = []
|
46
|
+
zulagen << Zulage.new("Zulage Nacht (#{monat_arbeit} #{jahr_arbeit})", @rohdaten.zulage_nacht.menge, @rohdaten.zulage_nacht.ansatz)
|
47
|
+
zulagen << Zulage.new("Zulage Wochenende (#{monat_arbeit} #{jahr_arbeit})", @rohdaten.zulage_wochenende.menge, @rohdaten.zulage_wochenende.ansatz)
|
48
|
+
summe = Rechnung.new("Summe", zulagen, [])
|
49
|
+
|
50
|
+
zulagen = zulagen + [summe]
|
51
|
+
|
52
|
+
@zulagen_block = Block.new(zulagen, ["Zulagen", "Menge", "Ansatz / %", "Betrag"])
|
53
|
+
end
|
54
|
+
|
55
|
+
|
41
56
|
def create_lohn_block
|
42
57
|
lohn_positiv = []
|
43
58
|
lohn_positiv << Fakt.new("Monatslohn", nil, nil, @rohdaten.monatslohn)
|
@@ -134,6 +149,12 @@ module Planik
|
|
134
149
|
@rohdaten.adresse
|
135
150
|
end
|
136
151
|
|
152
|
+
# Neu
|
153
|
+
# Aenderung für MEDPHONE März 2015: Nur Arbeitsliste, Arbeitszeit und Zulagen
|
154
|
+
def zulagen_daten
|
155
|
+
@zulagen_block.daten
|
156
|
+
end
|
157
|
+
|
137
158
|
def lohn_daten
|
138
159
|
@lohnblock.daten
|
139
160
|
end
|
@@ -14,8 +14,31 @@ module Planik
|
|
14
14
|
@daten = daten
|
15
15
|
end
|
16
16
|
|
17
|
-
|
17
|
+
|
18
|
+
# Neues Layout.
|
19
|
+
# Aenderung für MEDPHONE März 2015: Nur Arbeitsliste, Arbeitszeit und Zulagen
|
18
20
|
def create_pdf
|
21
|
+
@pdf = Prawn::Document.new(page_size: "A4")
|
22
|
+
#@pdf.stroke_axis # Die Masse auf den Achsen
|
23
|
+
@pdf.font("Helvetica", size: 8) #Default Font and size
|
24
|
+
@pdf.default_leading = 0
|
25
|
+
next_y = 750
|
26
|
+
next_y = header_new(next_y)
|
27
|
+
next_y -= 50
|
28
|
+
next_y = arbeitsliste_new(next_y)
|
29
|
+
next_y -= 50
|
30
|
+
next_y = arbeitszeit_block(next_y)
|
31
|
+
|
32
|
+
next_y -= 50
|
33
|
+
zulagen_block(next_y)
|
34
|
+
|
35
|
+
footer()
|
36
|
+
@pdf
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
# Erstellt das PDF und liefert es zurück
|
41
|
+
def create_pdf_old
|
19
42
|
@pdf = Prawn::Document.new(page_size: "A4")
|
20
43
|
#@pdf.stroke_axis # Die Masse auf den Achsen
|
21
44
|
@pdf.font("Helvetica", size: 8) #Default Font and size
|
@@ -38,6 +61,33 @@ module Planik
|
|
38
61
|
|
39
62
|
private
|
40
63
|
|
64
|
+
|
65
|
+
# Neu
|
66
|
+
# Aenderung für MEDPHONE März 2015: Nur Arbeitsliste, Arbeitszeit und Zulagen
|
67
|
+
def header_new(ypos)
|
68
|
+
|
69
|
+
bb = @pdf.bounding_box([XPOS, ypos], width: WIDTH) do
|
70
|
+
@pdf.font("Helvetica", size: 12) do
|
71
|
+
parent = @pdf.bounds
|
72
|
+
xpos = parent.top_left[0] + 350
|
73
|
+
ypos = parent.height - 70
|
74
|
+
width = parent.top_right[0] - xpos
|
75
|
+
|
76
|
+
@pdf.bounding_box([350, ypos], width: width, height: 70) do
|
77
|
+
@pdf.text "#{@daten.adresse.voller_name}"
|
78
|
+
@pdf.text @daten.adresse.strasse_nr
|
79
|
+
@pdf.text "#{@daten.adresse.plz} <u>#{@daten.adresse.ort}</u>", inline_format: true
|
80
|
+
#@pdf.stroke_bounds
|
81
|
+
end
|
82
|
+
@pdf.move_down(50)
|
83
|
+
@pdf.text("Arbeitszeiten #{@daten.monat} #{@daten.jahr}", style: :bold)
|
84
|
+
end
|
85
|
+
#@pdf.stroke_bounds
|
86
|
+
end
|
87
|
+
bb.absolute_bottom
|
88
|
+
end
|
89
|
+
|
90
|
+
|
41
91
|
def header(ypos)
|
42
92
|
|
43
93
|
bb = @pdf.bounding_box([XPOS, ypos], width: WIDTH) do
|
@@ -61,6 +111,19 @@ module Planik
|
|
61
111
|
bb.absolute_bottom
|
62
112
|
end
|
63
113
|
|
114
|
+
|
115
|
+
# Neu
|
116
|
+
# Aenderung für MEDPHONE März 2015: Nur Arbeitsliste, Arbeitszeit und Zulagen
|
117
|
+
def zulagen_block(ypos)
|
118
|
+
bb = @pdf.bounding_box([XPOS, ypos], width: WIDTH) do
|
119
|
+
inner_ypos = 0
|
120
|
+
make_table(XPOS, inner_ypos, @daten.zulagen_daten, true)
|
121
|
+
@pdf.stroke_bounds
|
122
|
+
end
|
123
|
+
bb.absolute_bottom
|
124
|
+
end
|
125
|
+
|
126
|
+
|
64
127
|
def lohn_block(ypos)
|
65
128
|
bb = @pdf.bounding_box([XPOS, ypos], width: WIDTH) do
|
66
129
|
inner_ypos = 0
|
@@ -82,11 +145,12 @@ module Planik
|
|
82
145
|
end
|
83
146
|
|
84
147
|
def arbeitszeit_block(ypos)
|
85
|
-
@pdf.bounding_box([XPOS, ypos], width: WIDTH) do
|
148
|
+
pp = @pdf.bounding_box([XPOS, ypos], width: WIDTH) do
|
86
149
|
ypos = 0
|
87
150
|
make_table(XPOS, ypos, @daten.arbeitszeit_daten, true)
|
88
151
|
@pdf.stroke_bounds
|
89
152
|
end
|
153
|
+
pp.absolute_bottom
|
90
154
|
end
|
91
155
|
|
92
156
|
def footer
|
@@ -94,7 +158,9 @@ module Planik
|
|
94
158
|
@pdf.bounding_box([XPOS, ypos], width: WIDTH) do
|
95
159
|
@pdf.font("Helvetica", size: 8) do
|
96
160
|
@pdf.text("Wir bitten Sie, die Lohnabrechnung sofort zu prüfen und Unstimmigkeiten unverzüglich mitzuteilen.")
|
97
|
-
|
161
|
+
# Neu
|
162
|
+
# Aenderung für MEDPHONE März 2015: Nur Arbeitsliste, Arbeitszeit und Zulagen
|
163
|
+
#@pdf.text("Anhang: Arbeitszeit von #{@daten.start_datum_for_arbeit} bis #{@daten.end_datum_for_arbeit}.")
|
98
164
|
@pdf.text("Generiert von Planik am #{Time.now.strftime("%d.%m.%Y um %H:%M Uhr")}", align: :right)
|
99
165
|
end
|
100
166
|
end
|
@@ -113,10 +179,31 @@ module Planik
|
|
113
179
|
end
|
114
180
|
end
|
115
181
|
|
182
|
+
#
|
183
|
+
# Neu
|
184
|
+
# Aenderung für MEDPHONE März 2015: Nur Arbeitsliste, Arbeitszeit und Zulagen
|
185
|
+
#
|
186
|
+
def arbeitsliste_new(ypos)
|
187
|
+
bb = @pdf.bounding_box([XPOS, ypos], width: WIDTH+30) do
|
188
|
+
#@pdf.start_new_page
|
189
|
+
@pdf.text("Arbeitszeit von #{@daten.start_datum_for_arbeit} bis #{@daten.end_datum_for_arbeit}", style: :bold)
|
190
|
+
arbeitsliste = @daten.arbeitsliste
|
191
|
+
inner_ypos = 10
|
192
|
+
make_arbeitsliste_table(XPOS, inner_ypos, arbeitsliste, true)
|
193
|
+
# ypos = 18
|
194
|
+
# @pdf.bounding_box([XPOS, ypos], width: WIDTH) do
|
195
|
+
# @pdf.font("Helvetica", size: 8) do
|
196
|
+
# @pdf.text("Generiert von Planik am #{Time.now.strftime("%d.%m.%Y um %H:%M Uhr")}", align: :right)
|
197
|
+
# end
|
198
|
+
# end
|
199
|
+
end
|
200
|
+
bb.absolute_bottom
|
201
|
+
|
202
|
+
end
|
116
203
|
|
117
204
|
|
118
205
|
def make_arbeitsliste_table(xpos, ypos, daten, title = false)
|
119
|
-
@pdf.bounding_box([xpos, ypos], width: WIDTH) do #height
|
206
|
+
@pdf.bounding_box([xpos, ypos], width: WIDTH+30) do #height dynamisch
|
120
207
|
p_width = @pdf.bounds.width
|
121
208
|
r1 = Rational(1, 6)
|
122
209
|
r2 = r1 * Rational(1, 2)
|
@@ -127,7 +214,7 @@ module Planik
|
|
127
214
|
@pdf.table(daten, column_widths: column_width,
|
128
215
|
cell_style: {
|
129
216
|
borders: [], #keine Ränder
|
130
|
-
padding_top: 3,
|
217
|
+
padding_top: 3, padding_bottom: 3
|
131
218
|
|
132
219
|
}
|
133
220
|
) do |t|
|
@@ -153,7 +240,7 @@ module Planik
|
|
153
240
|
@pdf.table(daten, column_widths: column_width,
|
154
241
|
cell_style: {
|
155
242
|
borders: [], #keine Ränder
|
156
|
-
padding_top: 3,
|
243
|
+
padding_top: 3, padding_bottom: 3
|
157
244
|
|
158
245
|
}
|
159
246
|
) do |t|
|
data/lib/lohnausweis/rohdaten.rb
CHANGED
@@ -5,6 +5,10 @@ module Planik
|
|
5
5
|
# Die Rohdaten um einen Lohnausweis zu generieren
|
6
6
|
class Rohdaten
|
7
7
|
|
8
|
+
#
|
9
|
+
# Entspricht einer lohnrelevanten Zeile im PDF,
|
10
|
+
# z.B. Kinderzulage: menge: 2, Ansatz: 260 Betrag wird ausgerechnet
|
11
|
+
#
|
8
12
|
class MengeAnsatz
|
9
13
|
attr_accessor :menge, :ansatz
|
10
14
|
|
@@ -13,6 +17,8 @@ module Planik
|
|
13
17
|
end
|
14
18
|
end
|
15
19
|
|
20
|
+
|
21
|
+
# Die Arbeitszeit in der Zeitspanne rohdaten#start_datum_for_arbeit bis rohdaten#end_datum_for_arbeit
|
16
22
|
class Arbeitszeit
|
17
23
|
attr_accessor :gleitzeit_vor, :soll_stunden, :ist_stunden
|
18
24
|
|
@@ -52,6 +58,10 @@ module Planik
|
|
52
58
|
end
|
53
59
|
end
|
54
60
|
|
61
|
+
#
|
62
|
+
# Entspricht einer Zeile im PDF.
|
63
|
+
# Z.B 13. Monatslohn: Freilfeld.new("13. Monatslohn, erste Hälfte", "Fr 4'500.00", "6 Monate", 2250)
|
64
|
+
# Ist entweder Lohnrelevant oder Abzugsrelevant, je nachdem zu welchem Array es hinzugefügt wurde.
|
55
65
|
class Freifeld
|
56
66
|
attr_accessor :name, :menge, :ansatz, :betrag
|
57
67
|
|
@@ -60,6 +70,9 @@ module Planik
|
|
60
70
|
end
|
61
71
|
end
|
62
72
|
|
73
|
+
#
|
74
|
+
# Ein Dienst, Termine mit Arbeitszeit oder "andere Arbeit". Erscheinen im Anhang des PDFs
|
75
|
+
#
|
63
76
|
class ArbeitsItem
|
64
77
|
attr_accessor :datum, :name, :typ, :zeit_von, :zeit_bis, :arbeitszeit
|
65
78
|
|
@@ -68,6 +81,7 @@ module Planik
|
|
68
81
|
end
|
69
82
|
end
|
70
83
|
|
84
|
+
|
71
85
|
attr_accessor :start_datum, :end_datum
|
72
86
|
attr_accessor :start_datum_for_arbeit, :end_datum_for_arbeit
|
73
87
|
attr_accessor :monatslohn
|
data/lib/lohnausweis/version.rb
CHANGED