lohnausweis 0.3.0 → 0.4.0
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.
- 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