Add missing JOIN statements to SQL query
[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'] = 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>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                               'einsatzpersonal ON einsatzpersonal.einsatz = einsatz.id',
24                               'einsatzgeraete ON einsatzgeraete.einsatz = einsatz.id',
25                               'personal ON einsatzpersonal.personal = personal.id',
26                               'gerate ON einsatzgeraete.geraet = gerate.id',
27                               'anbaugeraete ON einsatzgeraete.anbaugeraet = anbaugeraete.id',
28                               'arbeitsarten ON einsatz.arbeiten = arbeitsarten.id',
29                               'gebiet ON einsatz.gebiet = gebiet.id',
30                               'kostenstellen ON einsatz.kostenstelle = kostenstellen.id',
31                               ),
32               'where' => "arbeitsarten.arbeitsart <> 'Urlaub' AND arbeitsarten.arbeitsart <> 'Krank' AND arbeitsarten.arbeitsart <> 'Sonstige Fehltage'"
33                        . " AND date_part('year', datum) = " . $_SESSION['overview_kosten.year'],
34               'select' => array(
35                                 'title' => 'Auswahl',
36                                 'options' => discover_years(),
37                                 'default' => 'Jahr wählen',
38                                 'selected' => $_SESSION['overview_kosten.year'],
39                                 'onchange' => "setvar(this,'year',select_year_calback,select_year_status)",
40                                 ),
41               'variables' => array(
42                                    'year' => array(),
43                                    ),
44               'list' => array(
45                               'id' => array(
46                                             'name' => 'ID',
47                                             'visible' => false,
48                                             'width' => 60,
49                                             'sql' => 'einsatz.id',
50                                             ),
51                               'datum' => array(
52                                             'name' => 'Datum',
53                                             'type' => 'date',
54                                             'width' => 70,
55                                             ),
56                               'gebiet' => array(
57                                             'name' => 'Gebiet',
58                                             'sql' => "gebiet.gebiet",
59                                             'width' => 150,
60                                             'specs' => "filterUI: 's'",
61                                             ),
62                               'kostenstelle' => array(
63                                             'name' => 'Kostenstelle',
64                                             'sql' => "kostenstellen.kostenstelle",
65                                             'width' => 250,
66                                             'specs' => "filterUI: 's'",
67                                             ),
68                               'arbeitsart' => array(
69                                             'name' => 'Arbeiten',
70                                             'sql' => "arbeitsarten.arbeitsart",
71                                             'width' => 250,
72                                             'specs' => "filterUI: 's'",
73                                             ),
74                               'personal' => array(
75                                             'name' => 'Mitarbeiter',
76                                             'sql' => "personal.name || ', ' || personal.vorname",
77                                             'width' => 150,
78                                             'specs' => "filterUI: 's'",
79                                             ),
80                               'geraet' => array(
81                                             'name' => 'Gerät',
82                                             'sql' => "gerate.geraet",
83                                             'width' => 150,
84                                             'specs' => "filterUI: 's'",
85                                             ),
86                               'laenge' => array(
87                                             'name' => 'Länge',
88                                             'type' => 'number',
89                                             'specs' => "decPlaces: 2, ClassName: 'alignright', suffix: '&nbsp;', canSort: false",
90                                             'width' => 70,
91                                             ),
92                               'personalkosten' => array(
93                                             'name' => 'Mitarbeiterkosten',
94                                             'type' => 'number',
95                                             'specs' => "decPlaces: 2, ClassName: 'alignright', suffix: '&nbsp;', canSort: false",
96                                             'width' => 90,
97                                             'sql' => 'einsatzpersonal.stunden * personal.persstdsatz',
98                                             ),
99                               'geraetkosten' => array(
100                                             'name' => 'Gerätkosten',
101                                             'type' => 'number',
102                                             'specs' => "decPlaces: 2, ClassName: 'alignright', suffix: '&nbsp;', canSort: false",
103                                             'width' => 90,
104                                             'sql' => 'einsatzgeraete.stunden * gerate.geraetkst_intern + ' .
105                                                      'einsatzgeraete.stunden * anbaugeraete.anbkst_intern',
106                                             ),
107                               'gesamtkosten' => array(
108                                             'name' => 'Gesamtkosten',
109                                             'type' => 'number',
110                                             'specs' => "decPlaces: 2, ClassName: 'alignright', suffix: '&nbsp;', canSort: false",
111                                             'width' => 90,
112                                             'sql' => 'einsatzpersonal.stunden * personal.persstdsatz + ' . 
113                                                      'einsatzgeraete.stunden * gerate.geraetkst_intern + ' .
114                                                      'einsatzgeraete.stunden * anbaugeraete.anbkst_intern',
115                                             ),
116                               'prolfdm' => array(
117                                             'name' => 'pro lfdm',
118                                             'type' => 'number',
119                                             'specs' => "decPlaces: 2, ClassName: 'alignright', suffix: '&nbsp;', canSort: false",
120                                             'width' => 60,
121                                             'sql' => '(einsatzpersonal.stunden * personal.persstdsatz + ' . 
122                                                      'einsatzgeraete.stunden * gerate.geraetkst_intern + ' .
123                                                      'einsatzgeraete.stunden * anbaugeraete.anbkst_intern) / laenge',
124                                             ),
125                               ),
126               'details' => array(
127                                  'html' => $details,
128                                  'list' => array(
129                                                  'gebiet' => array('fetch' => fetch_gebiet),
130                                                  'kostenstelle' => array('fetch' => fetch_kostenstelle),
131                                                  'laenge' => array('fetch' => fetch_laenge),
132                                                  'gewaesserkosten' => array('fetch' => fetch_gewaesserkosten),
133                                                  'personalkosten' => array('fetch' => fetch_personalkosten),
134                                                  'geraetekosten' => array('fetch' => fetch_geraetekosten),
135                                                  'gereinigt' => array('fetch' => fetch_gereinigt),
136                                                  ),
137
138                               ),
139               );
140
141 function fetch_gebiet()
142 {
143   $sql = 'SELECT gebiet.gebiet FROM gebiet JOIN einsatz ON einsatz.gebiet = gebiet.id WHERE einsatz.id = ' . intval($_POST['id']);
144   $res = query_db($sql);
145   if ($res === false) return '';
146
147   return $res[0]['gebiet'];
148 }
149
150 function fetch_kostenstelle()
151 {
152   $sql = 'SELECT kostenstellen.kostenstelle FROM kostenstellen JOIN einsatz ON einsatz.kostenstelle = kostenstellen.id WHERE einsatz.id = ' . intval($_POST['id']);
153   $res = query_db($sql);
154   if ($res === false) return '';
155
156   return $res[0]['kostenstelle'];
157 }
158
159 function fetch_laenge()
160 {
161   $sql = 'SELECT laenge FROM kostenstellen JOIN einsatz ON einsatz.kostenstelle = kostenstellen.id WHERE einsatz.id = ' . intval($_POST['id']);
162   $res = query_db($sql);
163   if ($res === false) return '';
164
165   return $res[0]['laenge'] . ' m';
166 }
167
168 function fetch_gewaesserkosten()
169 {
170   $sql = <<<EOC
171   SELECT sum(stunden * persstdsatz) AS gesamt
172   FROM einsatzpersonal
173   JOIN personal ON einsatzpersonal.personal = personal.id
174   WHERE einsatz IN
175     (SELECT id FROM einsatz WHERE date_part('year', datum) = %d AND kostenstelle =
176     (SELECT kostenstelle FROM einsatz WHERE id = %d))
177 EOC;
178
179   $sql = sprintf($sql, $_SESSION['overview_kosten.year'], $_POST['id']);
180   $pkosten = query_db($sql);
181   if ($pkosten === false) return '';
182
183   $sql = <<<EOC
184   SELECT sum(stunden * gerate.geraetkst_intern +
185              stunden * anbaugeraete.anbkst_intern) AS gesamt
186   FROM einsatzgeraete
187   JOIN gerate ON einsatzgeraete.geraet = gerate.id
188   JOIN anbaugeraete ON einsatzgeraete.anbaugeraet = anbaugeraete.id
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_kosten.year'], $_POST['id']);
195   $gkosten = query_db($sql);
196   if ($gkosten === false) return '';
197
198   return sprintf('%.2f &euro;', $pkosten[0]['gesamt'] + $gkosten[0]['gesamt']);
199 }
200
201 function fetch_personalkosten()
202 {
203   $sql = <<<EOC
204   SELECT sum(stunden * persstdsatz) AS gesamt
205   FROM einsatzpersonal
206   JOIN personal ON einsatzpersonal.personal = personal.id
207   WHERE einsatz IN
208     (SELECT id FROM einsatz WHERE date_part('year', datum) = %d AND kostenstelle =
209     (SELECT kostenstelle FROM einsatz WHERE id = %d))
210 EOC;
211
212   $sql = sprintf($sql, $_SESSION['overview_kosten.year'], $_POST['id']);
213   $res = query_db($sql);
214   if ($res === false) return '';
215
216   return sprintf('%.2f &euro;', $res[0]['gesamt']);
217 }
218
219 function fetch_geraetekosten()
220 {
221   $sql = <<<EOC
222   SELECT sum(stunden * gerate.geraetkst_intern +
223              stunden * anbaugeraete.anbkst_intern) AS gesamt
224   FROM einsatzgeraete
225   JOIN gerate ON einsatzgeraete.geraet = gerate.id
226   JOIN anbaugeraete ON einsatzgeraete.anbaugeraet = anbaugeraete.id
227   WHERE einsatz IN
228     (SELECT id FROM einsatz WHERE date_part('year', datum) = %d AND kostenstelle =
229     (SELECT kostenstelle FROM einsatz WHERE id = %d))
230 EOC;
231
232   $sql = sprintf($sql, $_SESSION['overview_kosten.year'], $_POST['id']);
233   $res = query_db($sql);
234   if ($res === false) return '';
235
236   return sprintf('%.2f &euro;', $res[0]['gesamt']);
237 }
238
239 function fetch_gereinigt()
240 {
241   $sql = <<<EOC
242   SELECT count(*) AS count
243   FROM gereinigt
244   JOIN kostenstellen ON gereinigt.kostenstelle = kostenstellen.id
245   JOIN einsatz ON einsatz.kostenstelle = kostenstellen.id
246   WHERE jahr = %d AND einsatz.id = %d
247 EOC;
248
249   $sql = sprintf($sql, $_SESSION['overview_kosten.year'], $_POST['id']);
250
251   $res = query_db($sql);
252   if ($res === false) return '';
253
254   return $res[0]['count'] == 0 ? 'nein' : 'ja';
255 }
256
257 ?>