f2c556dd21b383966bc14f584eaee88f4d33fa88
[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;">
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>
14 </div>
15 EOC;
16
17 $mask = array(
18               'table' => 'einsatz',
19               'title' => 'Kostenaufwand für Kostenstellen',
20               'join' => array(
21                               'einsatzpersonal ON einsatzpersonal.einsatz = einsatz.id',
22                               'einsatzgeraete ON einsatzgeraete.einsatz = einsatz.id',
23                               'personal ON einsatzpersonal.personal = personal.id',
24                               'gerate ON einsatzgeraete.geraet = gerate.id',
25                               'anbaugeraete ON einsatzgeraete.anbaugeraet = anbaugeraete.id',
26                               'arbeitsarten ON einsatz.arbeiten = arbeitsarten.id',
27                               'gebiet ON einsatz.gebiet = gebiet.id',
28                               'kostenstellen ON einsatz.kostenstelle = kostenstellen.id',
29                               ),
30               'where' => "arbeitsarten.arbeitsart <> 'Urlaub' AND arbeitsarten.arbeitsart <> 'Krank' AND arbeitsarten.arbeitsart <> 'Sonstige Fehltage'"
31                        . " AND date_part('year', datum) = " . $_SESSION['overview_kosten.year']
32                        . " GROUP BY einsatz.id,gebiet.gebiet,kostenstellen.kostenstelle,kostenstellen.id,personal.name,personal.vorname,gerate.geraet,laenge",
33               'select' => array(
34                                 'title' => 'Auswahl',
35                                 'options' => discover_years(),
36                                 'default' => 'Jahr wählen',
37                                 'selected' => $_SESSION['overview_kosten.year'],
38                                 'onchange' => "setvar(this,'year',select_year_calback,select_year_status)",
39                                 ),
40               'variables' => array(
41                                    'year' => array(),
42                                    ),
43               'list' => array(
44                               'id' => array(
45                                             'name' => 'ID',
46                                             'visible' => false,
47                                             'width' => 60,
48                                             'sql' => 'einsatz.id',
49                                             ),
50                               'gebiet' => array(
51                                             'name' => 'Gebiet',
52                                             'sql' => "gebiet.gebiet",
53                                             'width' => 150,
54                                             'specs' => "filterUI: 's'",
55                                             ),
56                               'kostenstelle' => array(
57                                             'name' => 'Kostenstelle',
58                                             'sql' => "kostenstellen.kostenstelle",
59                                             'width' => 250,
60                                             'specs' => "filterUI: 's'",
61                                             ),
62                               'personal' => array(
63                                             'name' => 'Mitarbeiter',
64                                             'sql' => "personal.vorname || ' ' || personal.name",
65                                             'width' => 150,
66                                             'specs' => "filterUI: 's'",
67                                             ),
68                               'geraet' => array(
69                                             'name' => 'Gerät',
70                                             'sql' => "gerate.geraet",
71                                             'width' => 150,
72                                             'specs' => "filterUI: 's'",
73                                             ),
74                               'laenge' => array(
75                                             'name' => 'Länge',
76                                             'type' => 'number',
77                                             'specs' => "decPlaces: 2, ClassName: 'alignright', suffix: '&nbsp;', canSort: false",
78                                             'width' => 70,
79                                             ),
80                               'personalkosten' => array(
81                                             'name' => 'Mitarbeiterkosten',
82                                             'type' => 'number',
83                                             'specs' => "decPlaces: 2, ClassName: 'alignright', suffix: '&nbsp;', canSort: false",
84                                             'width' => 90,
85                                             'sql' => 'sum(einsatzpersonal.stunden * personal.persstdsatz)',
86                                             ),
87                               'geraetkosten' => array(
88                                             'name' => 'Gerätkosten',
89                                             'type' => 'number',
90                                             'specs' => "decPlaces: 2, ClassName: 'alignright', suffix: '&nbsp;', canSort: false",
91                                             'width' => 90,
92                                             'sql' => 'sum(einsatzgeraete.stunden * gerate.geraetkst_intern + ' .
93                                                      'einsatzgeraete.stunden * anbaugeraete.anbkst_intern)',
94                                             ),
95                               'gesamtkosten' => array(
96                                             'name' => 'Gesamtkosten',
97                                             'type' => 'number',
98                                             'specs' => "decPlaces: 2, ClassName: 'alignright', suffix: '&nbsp;', canSort: false",
99                                             'width' => 90,
100                                             'sql' => 'sum(einsatzpersonal.stunden * personal.persstdsatz + ' . 
101                                                      'einsatzgeraete.stunden * gerate.geraetkst_intern + ' .
102                                                      'einsatzgeraete.stunden * anbaugeraete.anbkst_intern)',
103                                             ),
104                               'prolfdm' => array(
105                                             'name' => 'pro lfdm',
106                                             'type' => 'number',
107                                             'specs' => "decPlaces: 2, ClassName: 'alignright', suffix: '&nbsp;', canSort: false",
108                                             'width' => 60,
109                                             'sql' => 'sum(einsatzpersonal.stunden * personal.persstdsatz + ' . 
110                                                      'einsatzgeraete.stunden * gerate.geraetkst_intern + ' .
111                                                      'einsatzgeraete.stunden * anbaugeraete.anbkst_intern) / laenge',
112                                             ),
113                               ),
114               'details' => array(
115                                  'html' => $details,
116                                  'list' => array(
117                                                  'gebiet' => array('fetch' => fetch_gebiet),
118                                                  'laenge' => array('fetch' => fetch_laenge),
119                                                  'gewaesserkosten' => array('fetch' => fetch_gewaesserkosten),
120                                                  'personalkosten' => array('fetch' => fetch_personalkosten),
121                                                  'geraetekosten' => array('fetch' => fetch_geraetekosten),
122                                                  ),
123
124                               ),
125               );
126
127 function fetch_gebiet()
128 {
129   $sql = 'SELECT gebiet.gebiet FROM gebiet JOIN einsatz ON einsatz.gebiet = gebiet.id WHERE einsatz.id = ' . intval($_POST['id']);
130   $res = query_db($sql);
131   if ($res === false) return '';
132
133   return $res[0]['gebiet'];
134 }
135
136 function fetch_laenge()
137 {
138   $sql = 'SELECT laenge FROM kostenstellen JOIN einsatz ON einsatz.kostenstelle = kostenstellen.id WHERE einsatz.id = ' . intval($_POST['id']);
139   $res = query_db($sql);
140   if ($res === false) return '';
141
142   return $res[0]['laenge'] . ' m';
143 }
144
145 function fetch_gewaesserkosten()
146 {
147   $sql = <<<EOC
148   SELECT sum(einsatzpersonal.stunden * personal.persstdsatz +
149              einsatzgeraete.stunden * gerate.geraetkst_intern +
150              einsatzgeraete.stunden * anbaugeraete.anbkst_intern) AS gesamt
151   FROM einsatz
152   JOIN einsatzpersonal ON einsatzpersonal.einsatz = einsatz.id
153   JOIN einsatzgeraete ON einsatzgeraete.einsatz = einsatz.id
154   JOIN personal ON einsatzpersonal.personal = personal.id
155   JOIN gerate ON einsatzgeraete.geraet = gerate.id
156   JOIN anbaugeraete ON einsatzgeraete.anbaugeraet = anbaugeraete.id
157   WHERE einsatz.id = %d
158 EOC;
159
160   $sql = sprintf($sql, $_POST['id']);
161   $res = query_db($sql);
162   if ($res === false) return '';
163
164   return sprintf('%.2f &euro;', $res[0]['gesamt']);
165 }
166
167 function fetch_personalkosten()
168 {
169   $sql = <<<EOC
170   SELECT sum(einsatzpersonal.stunden * personal.persstdsatz) AS kosten
171   FROM einsatz
172   JOIN einsatzpersonal ON einsatzpersonal.einsatz = einsatz.id
173   JOIN personal ON einsatzpersonal.personal = personal.id
174   WHERE einsatz.id = %d
175 EOC;
176
177   $sql = sprintf($sql, $_POST['id']);
178   $res = query_db($sql);
179   if ($res === false) return '';
180
181   return sprintf('%.2f &euro;', $res[0]['kosten']);
182 }
183
184 function fetch_geraetekosten()
185 {
186   $sql = <<<EOC
187   SELECT sum(einsatzgeraete.stunden * gerate.geraetkst_intern +
188              einsatzgeraete.stunden * anbaugeraete.anbkst_intern) AS gesamt
189   FROM einsatz
190   JOIN einsatzgeraete ON einsatzgeraete.einsatz = einsatz.id
191   JOIN gerate ON einsatzgeraete.geraet = gerate.id
192   JOIN anbaugeraete ON einsatzgeraete.anbaugeraet = anbaugeraete.id
193   WHERE einsatz.id = %d
194 EOC;
195
196   $sql = sprintf($sql, $_POST['id']);
197   $res = query_db($sql);
198   if ($res === false) return '';
199
200   return sprintf('%.2f &euro;', $res[0]['gesamt']);
201 }
202
203 ?>