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