Support images
[misc/hallinta-kostenrechnung] / 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                               'ordnungen ON einsatz.ordnung = ordnungen.id',
27                               ),
28 #             'where' => "arbeitsarten.arbeitsart <> 'Urlaub' AND arbeitsarten.arbeitsart <> 'Krank' AND arbeitsarten.arbeitsart <> 'Sonstige Fehltage'"
29 #                      . " AND date_part('year', datum) = " . $_SESSION['overview_kosten.year'],
30               'where' => "date_part('year', datum) = " . $_SESSION['overview_kosten.year'],
31               'select' => array(
32                                 'title' => 'Auswahl',
33                                 'options' => discover_years(),
34                                 'default' => 'Jahr wählen',
35                                 'selected' => $_SESSION['overview_kosten.year'],
36                                 'onchange' => "setvar(this,'year',select_year_calback,select_year_status)",
37                                 ),
38               'variables' => array(
39                                    'year' => array(),
40                                    ),
41               'list' => array(
42                               'id' => array(
43                                             'name' => 'ID',
44                                             'visible' => false,
45                                             'width' => 60,
46                                             'sql' => 'einsatz.id',
47                                             ),
48                               'datum' => array(
49                                             'name' => 'Datum',
50                                             'type' => 'date',
51                                             'width' => 70,
52                                             ),
53                               'akkord' => array(
54                                             'name' => 'Akkord',
55                                             'control' => "new Rico.TableColumn.checkbox('1','0','0',true)",
56                                             'width' => 50,
57                                             'specs' => "ClassName: 'aligncenter'",
58                                             ),
59                               'gebiet' => array(
60                                             'name' => 'Gebiet',
61                                             'sql' => "gebiet.gebiet",
62                                             'width' => 150,
63                                             'specs' => "filterUI: 's'",
64                                             ),
65                               'kostenstelle' => array(
66                                             'name' => 'Kostenstelle',
67                                             'sql' => "kostenstellen.kostenstelle",
68                                             'width' => 250,
69                                             'specs' => "filterUI: 's'",
70                                             ),
71                               'ordnung' => array(
72                                             'name' => 'Ordnung',
73                                             'sql' => "ordnungen.name",
74                                             'width' => 80,
75                                             'specs' => "filterUI: 's'",
76                                             'visible' => false,
77                                             ),
78                               'arbeitsart' => array(
79                                             'name' => 'Arbeiten',
80                                             'sql' => "arbeitsarten.arbeitsart",
81                                             'width' => 250,
82                                             'specs' => "filterUI: 's'",
83                                             ),
84                               'laenge' => array(
85                                             'name' => 'Länge',
86                                             'type' => 'number',
87                                             'specs' => "decPlaces: 2, ClassName: 'alignrightpad', canSort: false",
88                                             'width' => 70,
89                                             ),
90                               'personalkosten' => array(
91                                             'name' => 'Mitarbeiterkosten',
92                                             'type' => 'number',
93                                             'specs' => "decPlaces: 2, ClassName: 'alignrightpad', canSort: false",
94                                             'width' => 90,
95                                             'sql' => '
96 (SELECT sum(stunden * personal.persstdsatz) FROM einsatzpersonal
97 JOIN personal ON einsatzpersonal.personal = personal.id
98 WHERE einsatz = einsatz.id)
99 ',
100                                             ),
101                               'geraetkosten' => array(
102                                             'name' => 'Gerätkosten',
103                                             'type' => 'number',
104                                             'specs' => "decPlaces: 2, ClassName: 'alignrightpad', canSort: false",
105                                             'width' => 90,
106                                             'sql' => '
107 (SELECT sum(stunden * gerate.geraetkst_intern + stunden * CASE WHEN anbaugeraete.anbkst_intern IS NULL THEN 0.0 ELSE anbaugeraete.anbkst_intern END)
108 FROM einsatzgeraete
109 JOIN gerate ON einsatzgeraete.geraet = gerate.id
110 LEFT JOIN anbaugeraete ON einsatzgeraete.anbaugeraet = anbaugeraete.id
111 WHERE einsatz = einsatz.id)
112 ',
113                                             ),
114                               'gesamtkosten' => array(
115                                             'name' => 'Gesamtkosten',
116                                             'type' => 'number',
117                                             'specs' => "decPlaces: 2, ClassName: 'alignrightpad', canSort: false",
118                                             'width' => 90,
119                                             'sql' => '
120 (SELECT sum(stunden * personal.persstdsatz) FROM einsatzpersonal
121 JOIN personal ON einsatzpersonal.personal = personal.id
122 WHERE einsatz = einsatz.id)
123 +
124 CASE WHEN
125 (SELECT sum(stunden * gerate.geraetkst_intern + stunden * CASE WHEN anbaugeraete.anbkst_intern IS NULL THEN 0.0 ELSE anbaugeraete.anbkst_intern END)
126 FROM einsatzgeraete
127 JOIN gerate ON einsatzgeraete.geraet = gerate.id
128 LEFT JOIN anbaugeraete ON einsatzgeraete.anbaugeraet = anbaugeraete.id
129 WHERE einsatz = einsatz.id) IS NULL THEN 0.0
130 ELSE (SELECT sum(stunden * gerate.geraetkst_intern + stunden * CASE WHEN anbaugeraete.anbkst_intern IS NULL THEN 0.0 ELSE anbaugeraete.anbkst_intern END)
131 FROM einsatzgeraete
132 JOIN gerate ON einsatzgeraete.geraet = gerate.id
133 LEFT JOIN anbaugeraete ON einsatzgeraete.anbaugeraet = anbaugeraete.id
134 WHERE einsatz = einsatz.id) END
135 ',
136                                             ),
137                               'prolfdm' => array(
138                                             'name' => 'pro lfdm',
139                                             'type' => 'number',
140                                             'specs' => "decPlaces: 2, ClassName: 'alignrightpad', canSort: false",
141                                             'width' => 60,
142                                             'sql' => '
143 ((SELECT sum(stunden * personal.persstdsatz) FROM einsatzpersonal
144 JOIN personal ON einsatzpersonal.personal = personal.id
145 WHERE einsatz = einsatz.id)
146 +
147 CASE WHEN
148 (SELECT sum(stunden * gerate.geraetkst_intern + stunden * CASE WHEN anbaugeraete.anbkst_intern IS NULL THEN 0.0 ELSE anbaugeraete.anbkst_intern END)
149 FROM einsatzgeraete
150 JOIN gerate ON einsatzgeraete.geraet = gerate.id
151 LEFT JOIN anbaugeraete ON einsatzgeraete.anbaugeraet = anbaugeraete.id
152 WHERE einsatz = einsatz.id) IS NULL THEN 0.0
153 ELSE (SELECT sum(stunden * gerate.geraetkst_intern + stunden * CASE WHEN anbaugeraete.anbkst_intern IS NULL THEN 0.0 ELSE anbaugeraete.anbkst_intern END)
154 FROM einsatzgeraete
155 JOIN gerate ON einsatzgeraete.geraet = gerate.id
156 LEFT JOIN anbaugeraete ON einsatzgeraete.anbaugeraet = anbaugeraete.id
157 WHERE einsatz = einsatz.id) END) / laenge
158 ',
159
160
161                                             ),
162                               ),
163               'details' => array(
164                                  'html' => $details,
165                                  'list' => array(
166                                                  'gebiet' => array('fetch' => fetch_gebiet),
167                                                  'kostenstelle' => array('fetch' => fetch_kostenstelle),
168                                                  'laenge' => array('fetch' => fetch_laenge),
169                                                  'gewaesserkosten' => array('fetch' => fetch_gewaesserkosten),
170                                                  'personalkosten' => array('fetch' => fetch_personalkosten),
171                                                  'geraetekosten' => array('fetch' => fetch_geraetekosten),
172                                                  'gereinigt' => array('fetch' => fetch_gereinigt),
173                                                  ),
174
175                               ),
176               );
177
178 function fetch_gebiet()
179 {
180   $sql = 'SELECT gebiet.gebiet FROM gebiet JOIN einsatz ON einsatz.gebiet = gebiet.id WHERE einsatz.id = ' . intval($_POST['id']);
181   $res = query_db($sql);
182   if ($res === false) return '';
183
184   return $res[0]['gebiet'];
185 }
186
187 function fetch_kostenstelle()
188 {
189   $sql = 'SELECT kostenstellen.kostenstelle FROM kostenstellen JOIN einsatz ON einsatz.kostenstelle = kostenstellen.id WHERE einsatz.id = ' . intval($_POST['id']);
190   $res = query_db($sql);
191   if ($res === false) return '';
192
193   return $res[0]['kostenstelle'];
194 }
195
196 function fetch_laenge()
197 {
198   $sql = 'SELECT laenge FROM kostenstellen JOIN einsatz ON einsatz.kostenstelle = kostenstellen.id WHERE einsatz.id = ' . intval($_POST['id']);
199   $res = query_db($sql);
200   if ($res === false) return '';
201
202   return $res[0]['laenge'] . ' m';
203 }
204
205 function fetch_gewaesserkosten()
206 {
207   $sql = <<<EOC
208   SELECT sum(stunden * persstdsatz) AS gesamt
209   FROM einsatzpersonal
210   JOIN personal ON einsatzpersonal.personal = personal.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   $pkosten = query_db($sql);
218   if ($pkosten === false) return '';
219
220   $sql = <<<EOC
221   SELECT sum(stunden * gerate.geraetkst_intern +
222              stunden * anbaugeraete.anbkst_intern) AS gesamt
223   FROM einsatzgeraete
224   JOIN gerate ON einsatzgeraete.geraet = gerate.id
225   JOIN anbaugeraete ON einsatzgeraete.anbaugeraet = anbaugeraete.id
226   WHERE einsatz IN
227     (SELECT id FROM einsatz WHERE date_part('year', datum) = %d AND kostenstelle =
228     (SELECT kostenstelle FROM einsatz WHERE id = %d))
229 EOC;
230
231   $sql = sprintf($sql, $_SESSION['overview_kosten.year'], $_POST['id']);
232   $gkosten = query_db($sql);
233   if ($gkosten === false) return '';
234
235   return sprintf('%.2f &euro;', $pkosten[0]['gesamt'] + $gkosten[0]['gesamt']);
236 }
237
238 function fetch_personalkosten()
239 {
240   $sql = <<<EOC
241   SELECT sum(stunden * persstdsatz) AS gesamt
242   FROM einsatzpersonal
243   JOIN personal ON einsatzpersonal.personal = personal.id
244   WHERE einsatz IN
245     (SELECT id FROM einsatz WHERE date_part('year', datum) = %d AND kostenstelle =
246     (SELECT kostenstelle FROM einsatz WHERE id = %d))
247 EOC;
248
249   $sql = sprintf($sql, $_SESSION['overview_kosten.year'], $_POST['id']);
250   $res = query_db($sql);
251   if ($res === false) return '';
252
253   return sprintf('%.2f &euro;', $res[0]['gesamt']);
254 }
255
256 function fetch_geraetekosten()
257 {
258   $sql = <<<EOC
259   SELECT sum(stunden * gerate.geraetkst_intern +
260              stunden * anbaugeraete.anbkst_intern) AS gesamt
261   FROM einsatzgeraete
262   JOIN gerate ON einsatzgeraete.geraet = gerate.id
263   JOIN anbaugeraete ON einsatzgeraete.anbaugeraet = anbaugeraete.id
264   WHERE einsatz IN
265     (SELECT id FROM einsatz WHERE date_part('year', datum) = %d AND kostenstelle =
266     (SELECT kostenstelle FROM einsatz WHERE id = %d))
267 EOC;
268
269   $sql = sprintf($sql, $_SESSION['overview_kosten.year'], $_POST['id']);
270   $res = query_db($sql);
271   if ($res === false) return '';
272
273   return sprintf('%.2f &euro;', $res[0]['gesamt']);
274 }
275
276 function fetch_gereinigt()
277 {
278   $sql = <<<EOC
279   SELECT count(*) AS count
280   FROM gereinigt
281   JOIN kostenstellen ON gereinigt.kostenstelle = kostenstellen.id
282   JOIN einsatz ON einsatz.kostenstelle = kostenstellen.id
283   WHERE jahr = %d AND einsatz.id = %d
284 EOC;
285
286   $sql = sprintf($sql, $_SESSION['overview_kosten.year'], $_POST['id']);
287
288   $res = query_db($sql);
289   if ($res === false) return '';
290
291   return $res[0]['count'] == 0 ? 'nein' : 'ja';
292 }
293
294 ?>