Add cleaned flag
[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>Länge</b>: <span id="detail_laenge"></span><br>
11 <b>Gesamtkosten</b>: <span id="detail_gewaesserkosten"></span><br>
12 <b>Personalkosten</b>: <span id="detail_personalkosten"></span><br>
13 <b>Gerätekosten</b>: <span id="detail_geraetekosten"></span><br>
14 <b>Gewässer gereinigt</b>: <span id="detail_gereinigt"></span>
15 </div>
16 EOC;
17
18 $mask = array(
19               'table' => 'einsatz',
20               'title' => 'Kostenaufwand für Kostenstellen',
21               'join' => array(
22                               'einsatzpersonal ON einsatzpersonal.einsatz = einsatz.id',
23                               'einsatzgeraete ON einsatzgeraete.einsatz = einsatz.id',
24                               'personal ON einsatzpersonal.personal = personal.id',
25                               'gerate ON einsatzgeraete.geraet = gerate.id',
26                               'anbaugeraete ON einsatzgeraete.anbaugeraet = anbaugeraete.id',
27                               'arbeitsarten ON einsatz.arbeiten = arbeitsarten.id',
28                               'gebiet ON einsatz.gebiet = gebiet.id',
29                               'kostenstellen ON einsatz.kostenstelle = kostenstellen.id',
30                               ),
31               'where' => "arbeitsarten.arbeitsart <> 'Urlaub' AND arbeitsarten.arbeitsart <> 'Krank' AND arbeitsarten.arbeitsart <> 'Sonstige Fehltage'"
32                        . " AND date_part('year', datum) = " . $_SESSION['overview_kosten.year']
33                        . " GROUP BY einsatz.id,gebiet.gebiet,kostenstellen.kostenstelle,kostenstellen.id,personal.name,personal.vorname,gerate.geraet,laenge",
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                               'gebiet' => array(
52                                             'name' => 'Gebiet',
53                                             'sql' => "gebiet.gebiet",
54                                             'width' => 150,
55                                             'specs' => "filterUI: 's'",
56                                             ),
57                               'kostenstelle' => array(
58                                             'name' => 'Kostenstelle',
59                                             'sql' => "kostenstellen.kostenstelle",
60                                             'width' => 250,
61                                             'specs' => "filterUI: 's'",
62                                             ),
63                               'personal' => array(
64                                             'name' => 'Mitarbeiter',
65                                             'sql' => "personal.vorname || ' ' || personal.name",
66                                             'width' => 150,
67                                             'specs' => "filterUI: 's'",
68                                             ),
69                               'geraet' => array(
70                                             'name' => 'Gerät',
71                                             'sql' => "gerate.geraet",
72                                             'width' => 150,
73                                             'specs' => "filterUI: 's'",
74                                             ),
75                               'laenge' => array(
76                                             'name' => 'Länge',
77                                             'type' => 'number',
78                                             'specs' => "decPlaces: 2, ClassName: 'alignright', suffix: '&nbsp;', canSort: false",
79                                             'width' => 70,
80                                             ),
81                               'personalkosten' => array(
82                                             'name' => 'Mitarbeiterkosten',
83                                             'type' => 'number',
84                                             'specs' => "decPlaces: 2, ClassName: 'alignright', suffix: '&nbsp;', canSort: false",
85                                             'width' => 90,
86                                             'sql' => 'sum(einsatzpersonal.stunden * personal.persstdsatz)',
87                                             ),
88                               'geraetkosten' => array(
89                                             'name' => 'Gerätkosten',
90                                             'type' => 'number',
91                                             'specs' => "decPlaces: 2, ClassName: 'alignright', suffix: '&nbsp;', canSort: false",
92                                             'width' => 90,
93                                             'sql' => 'sum(einsatzgeraete.stunden * gerate.geraetkst_intern + ' .
94                                                      'einsatzgeraete.stunden * anbaugeraete.anbkst_intern)',
95                                             ),
96                               'gesamtkosten' => array(
97                                             'name' => 'Gesamtkosten',
98                                             'type' => 'number',
99                                             'specs' => "decPlaces: 2, ClassName: 'alignright', suffix: '&nbsp;', canSort: false",
100                                             'width' => 90,
101                                             'sql' => 'sum(einsatzpersonal.stunden * personal.persstdsatz + ' . 
102                                                      'einsatzgeraete.stunden * gerate.geraetkst_intern + ' .
103                                                      'einsatzgeraete.stunden * anbaugeraete.anbkst_intern)',
104                                             ),
105                               'prolfdm' => array(
106                                             'name' => 'pro lfdm',
107                                             'type' => 'number',
108                                             'specs' => "decPlaces: 2, ClassName: 'alignright', suffix: '&nbsp;', canSort: false",
109                                             'width' => 60,
110                                             'sql' => 'sum(einsatzpersonal.stunden * personal.persstdsatz + ' . 
111                                                      'einsatzgeraete.stunden * gerate.geraetkst_intern + ' .
112                                                      'einsatzgeraete.stunden * anbaugeraete.anbkst_intern) / laenge',
113                                             ),
114                               ),
115               'details' => array(
116                                  'html' => $details,
117                                  'list' => array(
118                                                  'gebiet' => array('fetch' => fetch_gebiet),
119                                                  'laenge' => array('fetch' => fetch_laenge),
120                                                  'gewaesserkosten' => array('fetch' => fetch_gewaesserkosten),
121                                                  'personalkosten' => array('fetch' => fetch_personalkosten),
122                                                  'geraetekosten' => array('fetch' => fetch_geraetekosten),
123                                                  'gereinigt' => array('fetch' => fetch_gereinigt),
124                                                  ),
125
126                               ),
127               );
128
129 function fetch_gebiet()
130 {
131   $sql = 'SELECT gebiet.gebiet FROM gebiet JOIN einsatz ON einsatz.gebiet = gebiet.id WHERE einsatz.id = ' . intval($_POST['id']);
132   $res = query_db($sql);
133   if ($res === false) return '';
134
135   return $res[0]['gebiet'];
136 }
137
138 function fetch_laenge()
139 {
140   $sql = 'SELECT laenge FROM kostenstellen JOIN einsatz ON einsatz.kostenstelle = kostenstellen.id WHERE einsatz.id = ' . intval($_POST['id']);
141   $res = query_db($sql);
142   if ($res === false) return '';
143
144   return $res[0]['laenge'] . ' m';
145 }
146
147 function fetch_gewaesserkosten()
148 {
149   $sql = <<<EOC
150   SELECT sum(einsatzpersonal.stunden * personal.persstdsatz +
151              einsatzgeraete.stunden * gerate.geraetkst_intern +
152              einsatzgeraete.stunden * anbaugeraete.anbkst_intern) AS gesamt
153   FROM einsatz
154   JOIN einsatzpersonal ON einsatzpersonal.einsatz = einsatz.id
155   JOIN einsatzgeraete ON einsatzgeraete.einsatz = einsatz.id
156   JOIN personal ON einsatzpersonal.personal = personal.id
157   JOIN gerate ON einsatzgeraete.geraet = gerate.id
158   JOIN anbaugeraete ON einsatzgeraete.anbaugeraet = anbaugeraete.id
159   WHERE einsatz.id = %d
160 EOC;
161
162   $sql = sprintf($sql, $_POST['id']);
163   $res = query_db($sql);
164   if ($res === false) return '';
165
166   return sprintf('%.2f &euro;', $res[0]['gesamt']);
167 }
168
169 function fetch_personalkosten()
170 {
171   $sql = <<<EOC
172   SELECT sum(einsatzpersonal.stunden * personal.persstdsatz) AS kosten
173   FROM einsatz
174   JOIN einsatzpersonal ON einsatzpersonal.einsatz = einsatz.id
175   JOIN personal ON einsatzpersonal.personal = personal.id
176   WHERE einsatz.id = %d
177 EOC;
178
179   $sql = sprintf($sql, $_POST['id']);
180   $res = query_db($sql);
181   if ($res === false) return '';
182
183   return sprintf('%.2f &euro;', $res[0]['kosten']);
184 }
185
186 function fetch_geraetekosten()
187 {
188   $sql = <<<EOC
189   SELECT sum(einsatzgeraete.stunden * gerate.geraetkst_intern +
190              einsatzgeraete.stunden * anbaugeraete.anbkst_intern) AS gesamt
191   FROM einsatz
192   JOIN einsatzgeraete ON einsatzgeraete.einsatz = einsatz.id
193   JOIN gerate ON einsatzgeraete.geraet = gerate.id
194   JOIN anbaugeraete ON einsatzgeraete.anbaugeraet = anbaugeraete.id
195   WHERE einsatz.id = %d
196 EOC;
197
198   $sql = sprintf($sql, $_POST['id']);
199   $res = query_db($sql);
200   if ($res === false) return '';
201
202   return sprintf('%.2f &euro;', $res[0]['gesamt']);
203 }
204
205 function fetch_gereinigt()
206 {
207   $sql = <<<EOC
208   SELECT count(*) AS count
209   FROM gereinigt
210   JOIN kostenstellen ON gereinigt.kostenstelle = kostenstellen.id
211   JOIN einsatz ON einsatz.kostenstelle = kostenstellen.id
212   WHERE jahr = %d AND einsatz.id = %d
213 EOC;
214
215   $sql = sprintf($sql, $_SESSION['overview_kosten.year'], $_POST['id']);
216
217   $res = query_db($sql);
218   if ($res === false) return '';
219
220   return $res[0]['count'] == 0 ? 'nein' : 'ja';
221 }
222
223 ?>