Neue Stammdaten
[misc/hallinta-kostenrechnung] / overview_stunden.php
1 <?php
2
3 include_once($_SESSION['sys']['basedir'].'/lib/overview_utils.php');
4
5 if (empty($_SESSION['overview_stunden.year'])) $_SESSION['overview_stunden.year'] = 0;
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>Gesamtstunden</b>: <span id="detail_gewaesserstunden"></span><br>
13 <b>Personalstunden</b>: <span id="detail_personalstunden"></span><br>
14 <b>Gerätestunden</b>: <span id="detail_geraetestunden"></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' => 'Stundenübersicht nach Kostenstellen',
22               'join' => array(
23                               'arbeitsarten ON einsatz.arbeiten = arbeitsarten.id',
24                               'einsatzpersonal ON einsatzpersonal.einsatz = einsatz.id',
25                               'ordnungen ON einsatz.ordnung = ordnungen.id',
26                               'LEFT einsatzgeraete ON einsatzgeraete.einsatz = einsatz.id',
27                               'gebiet ON einsatz.gebiet = gebiet.id',
28                               'kostenstellen ON einsatz.kostenstelle = kostenstellen.id',
29                               'personal ON einsatzpersonal.personal = personal.id',
30                               'LEFT gerate ON einsatzgeraete.geraet = gerate.id',
31                               'LEFT anbaugeraete ON einsatzgeraete.anbaugeraet = anbaugeraete.id',
32                               ),
33 #             'where' => "arbeitsarten.arbeitsart <> 'Urlaub' AND arbeitsarten.arbeitsart <> 'Krank' AND arbeitsarten.arbeitsart <> 'Sonstige Fehltage'"
34 #                      . " AND date_part('year', datum) = " . $_SESSION['overview_stunden.year'],
35               'where' => "date_part('year', datum) = " . $_SESSION['overview_stunden.year'],
36               'select' => array(
37                                 'title' => 'Auswahl',
38                                 'options' => discover_years(),
39                                 'default' => 'Jahr wählen',
40                                 'selected' => $_SESSION['overview_stunden.year'],
41                                 'onchange' => "setvar(this,'year',select_year_calback,select_year_status)",
42                                 ),
43               'variables' => array(
44                                    'year' => array(),
45                                    ),
46               'list' => array(
47                               'id' => array(
48                                             'name' => 'ID',
49                                             'visible' => false,
50                                             'width' => 60,
51                                             'sql' => 'einsatz.id',
52                                             ),
53                               'datum' => array(
54                                             'name' => 'Datum',
55                                             'type' => 'date',
56                                             'width' => 70,
57                                             ),
58                               'akkord' => array(
59                                             'name' => 'Akkord',
60                                             'control' => "new Rico.TableColumn.checkbox('1','0','0',true)",
61                                             'width' => 50,
62                                             'specs' => "ClassName: 'aligncenter'",
63                                             ),
64                               'gebiet' => array(
65                                             'name' => 'Gebiet',
66                                             'sql' => "gebiet.gebiet",
67                                             'width' => 150,
68                                             'specs' => "filterUI: 's'",
69                                             ),
70                               'kostenstelle' => array(
71                                             'name' => 'Kostenstelle',
72                                             'sql' => "kostenstellen.kostenstelle",
73                                             'width' => 150,
74                                             'specs' => "filterUI: 's'",
75                                             ),
76                               'ordnung' => array(
77                                             'name' => 'Ordnung',
78                                             'sql' => "ordnungen.name",
79                                             'width' => 80,
80                                             'specs' => "filterUI: 's'",
81                                             'visible' => false,
82                                             ),
83                               'arbeitsarten' => array(
84                                             'name' => 'Arbeiten',
85                                             'sql' => "arbeitsarten.arbeitsart",
86                                             'width' => 150,
87                                             'specs' => "filterUI: 's'",
88                                             ),
89                               'personal' => array(
90                                             'name' => 'Mitarbeiter',
91                                             'sql' => "personal.name || ', ' || personal.vorname",
92                                             'width' => 150,
93                                             'specs' => "filterUI: 's'",
94                                             ),
95                               'stunden' => array(
96                                             'name' => 'Mitarbeiterstunden',
97                                             'type' => 'number',
98                                             'specs' => "decPlaces: 2, ClassName: 'alignrightpad', canSort: false",
99                                             'width' => 60,
100                                             'sql' => 'einsatzpersonal.stunden'
101                                             ),
102                               'geraet' => array(
103                                             'name' => 'Gerät',
104                                             'sql' => "gerate.geraet",
105                                             'width' => 150,
106                                             'specs' => "filterUI: 's'",
107                                             ),
108                               'anbaugeraet' => array(
109                                             'name' => 'Anbaugerät',
110                                             'sql' => "anbaugeraete.anbaugeraet",
111                                             'width' => 150,
112                                             'specs' => "filterUI: 's'",
113                                             ),
114                               'geraetstunden' => array(
115                                             'name' => 'Gerätstunden',
116                                             'type' => 'number',
117                                             'specs' => "decPlaces: 2, ClassName: 'alignrightpad', canSort: false",
118                                             'width' => 60,
119                                             'sql' => 'einsatzgeraete.stunden'
120                                             ),
121                               'gesamtstunden' => array(
122                                             'name' => 'Gesamtstunden',
123                                             'type' => 'number',
124                                             'specs' => "decPlaces: 2, ClassName: 'alignrightpad', canSort: false",
125                                             'width' => 60,
126                                             'sql' => 'einsatzpersonal.stunden + einsatzgeraete.stunden',
127                                             'visible' => false,
128                                             ),
129                               ),
130               'details' => array(
131                                  'html' => $details,
132                                  'list' => array(
133                                                  'gebiet' => array('fetch' => fetch_gebiet),
134                                                  'kostenstelle' => array('fetch' => fetch_kostenstelle),
135                                                  'laenge' => array('fetch' => fetch_laenge),
136                                                  'gewaesserstunden' => array('fetch' => fetch_gewaesserstunden),
137                                                  'personalstunden' => array('fetch' => fetch_personalstunden),
138                                                  'geraetestunden' => array('fetch' => fetch_geraetestunden),
139                                                  'gereinigt' => array('fetch' => fetch_gereinigt),
140                                                  ),
141
142                               ),
143               );
144
145 function fetch_gebiet()
146 {
147   $sql = 'SELECT gebiet.gebiet FROM gebiet JOIN einsatz ON einsatz.gebiet = gebiet.id WHERE einsatz.id = ' . intval($_POST['id']);
148   $res = query_db($sql);
149   if ($res === false) return '';
150
151   return $res[0]['gebiet'];
152 }
153
154 function fetch_kostenstelle()
155 {
156   $sql = 'SELECT kostenstellen.kostenstelle FROM kostenstellen JOIN einsatz ON einsatz.kostenstelle = kostenstellen.id WHERE einsatz.id = ' . intval($_POST['id']);
157   $res = query_db($sql);
158   if ($res === false) return '';
159
160   return $res[0]['kostenstelle'];
161 }
162
163 function fetch_laenge()
164 {
165   $sql = 'SELECT laenge FROM kostenstellen JOIN einsatz ON einsatz.kostenstelle = kostenstellen.id WHERE einsatz.id = ' . intval($_POST['id']);
166   $res = query_db($sql);
167   if ($res === false) return '';
168
169   return $res[0]['laenge'] . ' m';
170 }
171
172 function fetch_gewaesserstunden()
173 {
174   $sql = <<<EOC
175   SELECT sum(stunden) AS gesamt
176   FROM einsatzpersonal
177   WHERE einsatz IN
178     (SELECT id FROM einsatz WHERE date_part('year', datum) = %d AND kostenstelle =
179     (SELECT kostenstelle FROM einsatz WHERE id = %d))
180 EOC;
181
182   $sql = sprintf($sql, $_SESSION['overview_stunden.year'], $_POST['id']);
183   $pstunden = query_db($sql);
184   if ($pstunden === false) return '';
185
186   $sql = <<<EOC
187   SELECT sum(stunden) AS gesamt
188   FROM einsatzgeraete
189   WHERE einsatz IN
190     (SELECT id FROM einsatz WHERE date_part('year', datum) = %d AND kostenstelle =
191     (SELECT kostenstelle FROM einsatz WHERE id = %d))
192 EOC;
193
194   $sql = sprintf($sql, $_SESSION['overview_stunden.year'], $_POST['id']);
195   $gstunden = query_db($sql);
196   if ($gstunden === false) return '';
197
198   return sprintf('%.2f', $pstunden[0]['gesamt'] + $gstunden[0]['gesamt']);
199 }
200
201 function fetch_personalstunden()
202 {
203   $sql = <<<EOC
204   SELECT sum(stunden) AS gesamt
205   FROM einsatzpersonal
206   WHERE einsatz IN
207     (SELECT id FROM einsatz WHERE date_part('year', datum) = %d AND kostenstelle =
208     (SELECT kostenstelle FROM einsatz WHERE id = %d))
209 EOC;
210
211   $sql = sprintf($sql, $_SESSION['overview_stunden.year'], $_POST['id']);
212   $res = query_db($sql);
213   if ($res === false) return '';
214
215   return sprintf('%.2f', $res[0]['gesamt']);
216 }
217
218 function fetch_geraetestunden()
219 {
220   $sql = <<<EOC
221   SELECT sum(stunden) AS gesamt
222   FROM einsatzgeraete
223   WHERE einsatz IN
224     (SELECT id FROM einsatz WHERE date_part('year', datum) = %d AND kostenstelle =
225     (SELECT kostenstelle FROM einsatz WHERE id = %d))
226 EOC;
227
228   $sql = sprintf($sql, $_SESSION['overview_stunden.year'], $_POST['id']);
229   $res = query_db($sql);
230   if ($res === false) return '';
231
232   return sprintf('%.2f', $res[0]['gesamt']);
233 }
234
235 function fetch_gereinigt()
236 {
237   $sql = <<<EOC
238   SELECT count(*) AS count
239   FROM gereinigt
240   JOIN kostenstellen ON gereinigt.kostenstelle = kostenstellen.id
241   JOIN einsatz ON einsatz.kostenstelle = kostenstellen.id
242   WHERE jahr = %d AND einsatz.id = %d
243 EOC;
244
245   $sql = sprintf($sql, $_SESSION['overview_kosten.year'], $_POST['id']);
246
247   $res = query_db($sql);
248   if ($res === false) return '';
249
250   return $res[0]['count'] == 0 ? 'nein' : 'ja';
251 }
252
253 ?>