fd107393a39bdda4efad75df4f8e5e9a6fc388fa
[misc/kostenrechnung] / masks / 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                                             ),
128                               ),
129               'details' => array(
130                                  'html' => $details,
131                                  'list' => array(
132                                                  'gebiet' => array('fetch' => fetch_gebiet),
133                                                  'kostenstelle' => array('fetch' => fetch_kostenstelle),
134                                                  'laenge' => array('fetch' => fetch_laenge),
135                                                  'gewaesserstunden' => array('fetch' => fetch_gewaesserstunden),
136                                                  'personalstunden' => array('fetch' => fetch_personalstunden),
137                                                  'geraetestunden' => array('fetch' => fetch_geraetestunden),
138                                                  'gereinigt' => array('fetch' => fetch_gereinigt),
139                                                  ),
140
141                               ),
142               );
143
144 function fetch_gebiet()
145 {
146   $sql = 'SELECT gebiet.gebiet FROM gebiet JOIN einsatz ON einsatz.gebiet = gebiet.id WHERE einsatz.id = ' . intval($_POST['id']);
147   $res = query_db($sql);
148   if ($res === false) return '';
149
150   return $res[0]['gebiet'];
151 }
152
153 function fetch_kostenstelle()
154 {
155   $sql = 'SELECT kostenstellen.kostenstelle FROM kostenstellen JOIN einsatz ON einsatz.kostenstelle = kostenstellen.id WHERE einsatz.id = ' . intval($_POST['id']);
156   $res = query_db($sql);
157   if ($res === false) return '';
158
159   return $res[0]['kostenstelle'];
160 }
161
162 function fetch_laenge()
163 {
164   $sql = 'SELECT laenge FROM kostenstellen JOIN einsatz ON einsatz.kostenstelle = kostenstellen.id WHERE einsatz.id = ' . intval($_POST['id']);
165   $res = query_db($sql);
166   if ($res === false) return '';
167
168   return $res[0]['laenge'] . ' m';
169 }
170
171 function fetch_gewaesserstunden()
172 {
173   $sql = <<<EOC
174   SELECT sum(stunden) AS gesamt
175   FROM einsatzpersonal
176   WHERE einsatz IN
177     (SELECT id FROM einsatz WHERE date_part('year', datum) = %d AND kostenstelle =
178     (SELECT kostenstelle FROM einsatz WHERE id = %d))
179 EOC;
180
181   $sql = sprintf($sql, $_SESSION['overview_stunden.year'], $_POST['id']);
182   $pstunden = query_db($sql);
183   if ($pstunden === false) return '';
184
185   $sql = <<<EOC
186   SELECT sum(stunden) AS gesamt
187   FROM einsatzgeraete
188   WHERE einsatz IN
189     (SELECT id FROM einsatz WHERE date_part('year', datum) = %d AND kostenstelle =
190     (SELECT kostenstelle FROM einsatz WHERE id = %d))
191 EOC;
192
193   $sql = sprintf($sql, $_SESSION['overview_stunden.year'], $_POST['id']);
194   $gstunden = query_db($sql);
195   if ($gstunden === false) return '';
196
197   return sprintf('%.2f', $pstunden[0]['gesamt'] + $gstunden[0]['gesamt']);
198 }
199
200 function fetch_personalstunden()
201 {
202   $sql = <<<EOC
203   SELECT sum(stunden) AS gesamt
204   FROM einsatzpersonal
205   WHERE einsatz IN
206     (SELECT id FROM einsatz WHERE date_part('year', datum) = %d AND kostenstelle =
207     (SELECT kostenstelle FROM einsatz WHERE id = %d))
208 EOC;
209
210   $sql = sprintf($sql, $_SESSION['overview_stunden.year'], $_POST['id']);
211   $res = query_db($sql);
212   if ($res === false) return '';
213
214   return sprintf('%.2f', $res[0]['gesamt']);
215 }
216
217 function fetch_geraetestunden()
218 {
219   $sql = <<<EOC
220   SELECT sum(stunden) AS gesamt
221   FROM einsatzgeraete
222   WHERE einsatz IN
223     (SELECT id FROM einsatz WHERE date_part('year', datum) = %d AND kostenstelle =
224     (SELECT kostenstelle FROM einsatz WHERE id = %d))
225 EOC;
226
227   $sql = sprintf($sql, $_SESSION['overview_stunden.year'], $_POST['id']);
228   $res = query_db($sql);
229   if ($res === false) return '';
230
231   return sprintf('%.2f', $res[0]['gesamt']);
232 }
233
234 function fetch_gereinigt()
235 {
236   $sql = <<<EOC
237   SELECT count(*) AS count
238   FROM gereinigt
239   JOIN kostenstellen ON gereinigt.kostenstelle = kostenstellen.id
240   JOIN einsatz ON einsatz.kostenstelle = kostenstellen.id
241   WHERE jahr = %d AND einsatz.id = %d
242 EOC;
243
244   $sql = sprintf($sql, $_SESSION['overview_kosten.year'], $_POST['id']);
245
246   $res = query_db($sql);
247   if ($res === false) return '';
248
249   return $res[0]['count'] == 0 ? 'nein' : 'ja';
250 }
251
252 ?>