Read start page from file
[misc/kostenrechnung] / masks / overview_kosten.php
1 <?php
2
3 include_once($_SESSION['sys']['basedir'].'/lib/overview_utils.php');
4
5 if (empty($_SESSION['overview_kosten.year'])) $_SESSION['overview_kosten.year'] = date('Y');
6
7 $details = <<<EOC
8 <div style="padding-left: 3px; margin-top: -10px;">
9 <b>Gebiet</b>: <span id="detail_gebiet"></span><br />
10 <b>Gewässer</b>: <span id="detail_kostenstelle"></span><br />
11 <b>Länge</b>: <span id="detail_laenge"></span><br />
12 <b>Gesamtkosten</b>: <span id="detail_gewaesserkosten"></span><br />
13 <b>Personalkosten</b>: <span id="detail_personalkosten"></span><br />
14 <b>Gerätekosten</b>: <span id="detail_geraetekosten"></span><br />
15 <b>Gewässer gereinigt</b>: <span id="detail_gereinigt"></span>
16 </div>
17 EOC;
18
19 $mask = array(
20               'table' => 'einsatz',
21               'title' => 'Kostenaufwand für Kostenstellen',
22               'join' => array(
23                               'arbeitsarten ON einsatz.arbeiten = arbeitsarten.id',
24                               'gebiet ON einsatz.gebiet = gebiet.id',
25                               'kostenstellen ON einsatz.kostenstelle = kostenstellen.id',
26                               ),
27               'where' => "arbeitsarten.arbeitsart <> 'Urlaub' AND arbeitsarten.arbeitsart <> 'Krank' AND arbeitsarten.arbeitsart <> 'Sonstige Fehltage'"
28                        . " AND date_part('year', datum) = " . $_SESSION['overview_kosten.year'],
29               'select' => array(
30                                 'title' => 'Auswahl',
31                                 'options' => discover_years(),
32                                 'default' => 'Jahr wählen',
33                                 'selected' => $_SESSION['overview_kosten.year'],
34                                 'onchange' => "setvar(this,'year',select_year_calback,select_year_status)",
35                                 ),
36               'variables' => array(
37                                    'year' => array(),
38                                    ),
39               'list' => array(
40                               'id' => array(
41                                             'name' => 'ID',
42                                             'visible' => false,
43                                             'width' => 60,
44                                             'sql' => 'einsatz.id',
45                                             ),
46                               'datum' => array(
47                                             'name' => 'Datum',
48                                             'type' => 'date',
49                                             'width' => 70,
50                                             ),
51                               'gebiet' => array(
52                                             'name' => 'Gebiet',
53                                             'sql' => "gebiet.gebiet",
54                                             'width' => 150,
55                                             'specs' => "filterUI: 's'",
56                                             ),
57                               'kostenstelle' => array(
58                                             'name' => 'Kostenstelle',
59                                             'sql' => "kostenstellen.kostenstelle",
60                                             'width' => 250,
61                                             'specs' => "filterUI: 's'",
62                                             ),
63                               'arbeitsart' => array(
64                                             'name' => 'Arbeiten',
65                                             'sql' => "arbeitsarten.arbeitsart",
66                                             'width' => 250,
67                                             'specs' => "filterUI: 's'",
68                                             ),
69                               'laenge' => array(
70                                             'name' => 'Länge',
71                                             'type' => 'number',
72                                             'specs' => "decPlaces: 2, ClassName: 'alignright', suffix: '&nbsp;', canSort: false",
73                                             'width' => 70,
74                                             ),
75                               'personalkosten' => array(
76                                             'name' => 'Mitarbeiterkosten',
77                                             'type' => 'number',
78                                             'specs' => "decPlaces: 2, ClassName: 'alignright', suffix: '&nbsp;', canSort: false",
79                                             'width' => 90,
80                                             'sql' => '
81 (SELECT sum(stunden * personal.persstdsatz) FROM einsatzpersonal
82 JOIN personal ON einsatzpersonal.personal = personal.id
83 WHERE einsatz = einsatz.id)
84 ',
85                                             ),
86                               'geraetkosten' => array(
87                                             'name' => 'Gerätkosten',
88                                             'type' => 'number',
89                                             'specs' => "decPlaces: 2, ClassName: 'alignright', suffix: '&nbsp;', canSort: false",
90                                             'width' => 90,
91                                             'sql' => '
92 (SELECT sum(stunden * gerate.geraetkst_intern + stunden * CASE WHEN anbaugeraete.anbkst_intern IS NULL THEN 0.0 ELSE anbaugeraete.anbkst_intern END)
93 FROM einsatzgeraete
94 JOIN gerate ON einsatzgeraete.geraet = gerate.id
95 LEFT JOIN anbaugeraete ON einsatzgeraete.anbaugeraet = anbaugeraete.id
96 WHERE einsatz = einsatz.id)
97 ',
98                                             ),
99                               'gesamtkosten' => array(
100                                             'name' => 'Gesamtkosten',
101                                             'type' => 'number',
102                                             'specs' => "decPlaces: 2, ClassName: 'alignright', suffix: '&nbsp;', canSort: false",
103                                             'width' => 90,
104                                             'sql' => '
105 (SELECT sum(stunden * personal.persstdsatz) FROM einsatzpersonal
106 JOIN personal ON einsatzpersonal.personal = personal.id
107 WHERE einsatz = einsatz.id)
108 +
109 CASE WHEN
110 (SELECT sum(stunden * gerate.geraetkst_intern + stunden * CASE WHEN anbaugeraete.anbkst_intern IS NULL THEN 0.0 ELSE anbaugeraete.anbkst_intern END)
111 FROM einsatzgeraete
112 JOIN gerate ON einsatzgeraete.geraet = gerate.id
113 LEFT JOIN anbaugeraete ON einsatzgeraete.anbaugeraet = anbaugeraete.id
114 WHERE einsatz = einsatz.id) IS NULL THEN 0.0
115 ELSE (SELECT sum(stunden * gerate.geraetkst_intern + stunden * CASE WHEN anbaugeraete.anbkst_intern IS NULL THEN 0.0 ELSE anbaugeraete.anbkst_intern END)
116 FROM einsatzgeraete
117 JOIN gerate ON einsatzgeraete.geraet = gerate.id
118 LEFT JOIN anbaugeraete ON einsatzgeraete.anbaugeraet = anbaugeraete.id
119 WHERE einsatz = einsatz.id) END
120 ',
121                                             ),
122                               'prolfdm' => array(
123                                             'name' => 'pro lfdm',
124                                             'type' => 'number',
125                                             'specs' => "decPlaces: 2, ClassName: 'alignright', suffix: '&nbsp;', canSort: false",
126                                             'width' => 60,
127                                             'sql' => '
128 ((SELECT sum(stunden * personal.persstdsatz) FROM einsatzpersonal
129 JOIN personal ON einsatzpersonal.personal = personal.id
130 WHERE einsatz = einsatz.id)
131 +
132 CASE WHEN
133 (SELECT sum(stunden * gerate.geraetkst_intern + stunden * CASE WHEN anbaugeraete.anbkst_intern IS NULL THEN 0.0 ELSE anbaugeraete.anbkst_intern END)
134 FROM einsatzgeraete
135 JOIN gerate ON einsatzgeraete.geraet = gerate.id
136 LEFT JOIN anbaugeraete ON einsatzgeraete.anbaugeraet = anbaugeraete.id
137 WHERE einsatz = einsatz.id) IS NULL THEN 0.0
138 ELSE (SELECT sum(stunden * gerate.geraetkst_intern + stunden * CASE WHEN anbaugeraete.anbkst_intern IS NULL THEN 0.0 ELSE anbaugeraete.anbkst_intern END)
139 FROM einsatzgeraete
140 JOIN gerate ON einsatzgeraete.geraet = gerate.id
141 LEFT JOIN anbaugeraete ON einsatzgeraete.anbaugeraet = anbaugeraete.id
142 WHERE einsatz = einsatz.id) END) / laenge
143 ',
144
145
146                                             ),
147                               ),
148               'details' => array(
149                                  'html' => $details,
150                                  'list' => array(
151                                                  'gebiet' => array('fetch' => fetch_gebiet),
152                                                  'kostenstelle' => array('fetch' => fetch_kostenstelle),
153                                                  'laenge' => array('fetch' => fetch_laenge),
154                                                  'gewaesserkosten' => array('fetch' => fetch_gewaesserkosten),
155                                                  'personalkosten' => array('fetch' => fetch_personalkosten),
156                                                  'geraetekosten' => array('fetch' => fetch_geraetekosten),
157                                                  'gereinigt' => array('fetch' => fetch_gereinigt),
158                                                  ),
159
160                               ),
161               );
162
163 function fetch_gebiet()
164 {
165   $sql = 'SELECT gebiet.gebiet FROM gebiet JOIN einsatz ON einsatz.gebiet = gebiet.id WHERE einsatz.id = ' . intval($_POST['id']);
166   $res = query_db($sql);
167   if ($res === false) return '';
168
169   return $res[0]['gebiet'];
170 }
171
172 function fetch_kostenstelle()
173 {
174   $sql = 'SELECT kostenstellen.kostenstelle FROM kostenstellen JOIN einsatz ON einsatz.kostenstelle = kostenstellen.id WHERE einsatz.id = ' . intval($_POST['id']);
175   $res = query_db($sql);
176   if ($res === false) return '';
177
178   return $res[0]['kostenstelle'];
179 }
180
181 function fetch_laenge()
182 {
183   $sql = 'SELECT laenge FROM kostenstellen JOIN einsatz ON einsatz.kostenstelle = kostenstellen.id WHERE einsatz.id = ' . intval($_POST['id']);
184   $res = query_db($sql);
185   if ($res === false) return '';
186
187   return $res[0]['laenge'] . ' m';
188 }
189
190 function fetch_gewaesserkosten()
191 {
192   $sql = <<<EOC
193   SELECT sum(stunden * persstdsatz) AS gesamt
194   FROM einsatzpersonal
195   JOIN personal ON einsatzpersonal.personal = personal.id
196   WHERE einsatz IN
197     (SELECT id FROM einsatz WHERE date_part('year', datum) = %d AND kostenstelle =
198     (SELECT kostenstelle FROM einsatz WHERE id = %d))
199 EOC;
200
201   $sql = sprintf($sql, $_SESSION['overview_kosten.year'], $_POST['id']);
202   $pkosten = query_db($sql);
203   if ($pkosten === false) return '';
204
205   $sql = <<<EOC
206   SELECT sum(stunden * gerate.geraetkst_intern +
207              stunden * anbaugeraete.anbkst_intern) AS gesamt
208   FROM einsatzgeraete
209   JOIN gerate ON einsatzgeraete.geraet = gerate.id
210   JOIN anbaugeraete ON einsatzgeraete.anbaugeraet = anbaugeraete.id
211   WHERE einsatz IN
212     (SELECT id FROM einsatz WHERE date_part('year', datum) = %d AND kostenstelle =
213     (SELECT kostenstelle FROM einsatz WHERE id = %d))
214 EOC;
215
216   $sql = sprintf($sql, $_SESSION['overview_kosten.year'], $_POST['id']);
217   $gkosten = query_db($sql);
218   if ($gkosten === false) return '';
219
220   return sprintf('%.2f &euro;', $pkosten[0]['gesamt'] + $gkosten[0]['gesamt']);
221 }
222
223 function fetch_personalkosten()
224 {
225   $sql = <<<EOC
226   SELECT sum(stunden * persstdsatz) AS gesamt
227   FROM einsatzpersonal
228   JOIN personal ON einsatzpersonal.personal = personal.id
229   WHERE einsatz IN
230     (SELECT id FROM einsatz WHERE date_part('year', datum) = %d AND kostenstelle =
231     (SELECT kostenstelle FROM einsatz WHERE id = %d))
232 EOC;
233
234   $sql = sprintf($sql, $_SESSION['overview_kosten.year'], $_POST['id']);
235   $res = query_db($sql);
236   if ($res === false) return '';
237
238   return sprintf('%.2f &euro;', $res[0]['gesamt']);
239 }
240
241 function fetch_geraetekosten()
242 {
243   $sql = <<<EOC
244   SELECT sum(stunden * gerate.geraetkst_intern +
245              stunden * anbaugeraete.anbkst_intern) AS gesamt
246   FROM einsatzgeraete
247   JOIN gerate ON einsatzgeraete.geraet = gerate.id
248   JOIN anbaugeraete ON einsatzgeraete.anbaugeraet = anbaugeraete.id
249   WHERE einsatz IN
250     (SELECT id FROM einsatz WHERE date_part('year', datum) = %d AND kostenstelle =
251     (SELECT kostenstelle FROM einsatz WHERE id = %d))
252 EOC;
253
254   $sql = sprintf($sql, $_SESSION['overview_kosten.year'], $_POST['id']);
255   $res = query_db($sql);
256   if ($res === false) return '';
257
258   return sprintf('%.2f &euro;', $res[0]['gesamt']);
259 }
260
261 function fetch_gereinigt()
262 {
263   $sql = <<<EOC
264   SELECT count(*) AS count
265   FROM gereinigt
266   JOIN kostenstellen ON gereinigt.kostenstelle = kostenstellen.id
267   JOIN einsatz ON einsatz.kostenstelle = kostenstellen.id
268   WHERE jahr = %d AND einsatz.id = %d
269 EOC;
270
271   $sql = sprintf($sql, $_SESSION['overview_kosten.year'], $_POST['id']);
272
273   $res = query_db($sql);
274   if ($res === false) return '';
275
276   return $res[0]['count'] == 0 ? 'nein' : 'ja';
277 }
278
279 ?>