Display Akkord and don't exclude vacation etc.
[misc/kostenrechnung] / masks / overview_kosten.php
index f2c556d..ffdb20a 100644 (file)
@@ -2,15 +2,17 @@
 
 include_once($_SESSION['sys']['basedir'].'/lib/overview_utils.php');
 
-if (empty($_SESSION['overview_kosten.year'])) $_SESSION['overview_kosten.year'] = 0;
+if (empty($_SESSION['overview_kosten.year'])) $_SESSION['overview_kosten.year'] = date('Y');
 
 $details = <<<EOC
-<div style="padding-left: 3px;">
-<b>Gebiet</b>: <span id="detail_gebiet"></span><br>
-<b>Länge</b>: <span id="detail_laenge"></span><br>
-<b>Gesamtkosten</b>: <span id="detail_gewaesserkosten"></span><br>
-<b>Personalkosten</b>: <span id="detail_personalkosten"></span><br>
-<b>Gerätekosten</b>: <span id="detail_geraetekosten"></span>
+<div style="padding-left: 3px; margin-top: -10px;">
+<b>Gebiet</b>: <span id="detail_gebiet"></span><br />
+<b>Gewässer</b>: <span id="detail_kostenstelle"></span><br />
+<b>Länge</b>: <span id="detail_laenge"></span><br />
+<b>Gesamtkosten</b>: <span id="detail_gewaesserkosten"></span><br />
+<b>Personalkosten</b>: <span id="detail_personalkosten"></span><br />
+<b>Gerätekosten</b>: <span id="detail_geraetekosten"></span><br />
+<b>Gewässer gereinigt</b>: <span id="detail_gereinigt"></span>
 </div>
 EOC;
 
@@ -18,18 +20,13 @@ $mask = array(
              'table' => 'einsatz',
              'title' => 'Kostenaufwand für Kostenstellen',
              'join' => array(
-                             'einsatzpersonal ON einsatzpersonal.einsatz = einsatz.id',
-                             'einsatzgeraete ON einsatzgeraete.einsatz = einsatz.id',
-                             'personal ON einsatzpersonal.personal = personal.id',
-                             'gerate ON einsatzgeraete.geraet = gerate.id',
-                             'anbaugeraete ON einsatzgeraete.anbaugeraet = anbaugeraete.id',
                              'arbeitsarten ON einsatz.arbeiten = arbeitsarten.id',
                              'gebiet ON einsatz.gebiet = gebiet.id',
                              'kostenstellen ON einsatz.kostenstelle = kostenstellen.id',
                              ),
-             'where' => "arbeitsarten.arbeitsart <> 'Urlaub' AND arbeitsarten.arbeitsart <> 'Krank' AND arbeitsarten.arbeitsart <> 'Sonstige Fehltage'"
-                      . " AND date_part('year', datum) = " . $_SESSION['overview_kosten.year']
-                      . " GROUP BY einsatz.id,gebiet.gebiet,kostenstellen.kostenstelle,kostenstellen.id,personal.name,personal.vorname,gerate.geraet,laenge",
+#            'where' => "arbeitsarten.arbeitsart <> 'Urlaub' AND arbeitsarten.arbeitsart <> 'Krank' AND arbeitsarten.arbeitsart <> 'Sonstige Fehltage'"
+#                     . " AND date_part('year', datum) = " . $_SESSION['overview_kosten.year'],
+             'where' => "date_part('year', datum) = " . $_SESSION['overview_kosten.year'],
              'select' => array(
                                'title' => 'Auswahl',
                                'options' => discover_years(),
@@ -47,6 +44,17 @@ $mask = array(
                                            'width' => 60,
                                            'sql' => 'einsatz.id',
                                            ),
+                             'datum' => array(
+                                           'name' => 'Datum',
+                                           'type' => 'date',
+                                           'width' => 70,
+                                           ),
+                             'akkord' => array(
+                                           'name' => 'Akkord',
+                                           'control' => "new Rico.TableColumn.checkbox('1','0','0',true)",
+                                           'width' => 50,
+                                           'specs' => "ClassName: 'aligncenter'",
+                                           ),
                              'gebiet' => array(
                                            'name' => 'Gebiet',
                                            'sql' => "gebiet.gebiet",
@@ -59,16 +67,10 @@ $mask = array(
                                            'width' => 250,
                                            'specs' => "filterUI: 's'",
                                            ),
-                             'personal' => array(
-                                           'name' => 'Mitarbeiter',
-                                           'sql' => "personal.vorname || ' ' || personal.name",
-                                           'width' => 150,
-                                           'specs' => "filterUI: 's'",
-                                           ),
-                             'geraet' => array(
-                                           'name' => 'Gerät',
-                                           'sql' => "gerate.geraet",
-                                           'width' => 150,
+                             'arbeitsart' => array(
+                                           'name' => 'Arbeiten',
+                                           'sql' => "arbeitsarten.arbeitsart",
+                                           'width' => 250,
                                            'specs' => "filterUI: 's'",
                                            ),
                              'laenge' => array(
@@ -82,43 +84,84 @@ $mask = array(
                                            'type' => 'number',
                                            'specs' => "decPlaces: 2, ClassName: 'alignright', suffix: '&nbsp;', canSort: false",
                                            'width' => 90,
-                                           'sql' => 'sum(einsatzpersonal.stunden * personal.persstdsatz)',
+                                           'sql' => '
+(SELECT sum(stunden * personal.persstdsatz) FROM einsatzpersonal
+JOIN personal ON einsatzpersonal.personal = personal.id
+WHERE einsatz = einsatz.id)
+',
                                            ),
                              'geraetkosten' => array(
                                            'name' => 'Gerätkosten',
                                            'type' => 'number',
                                            'specs' => "decPlaces: 2, ClassName: 'alignright', suffix: '&nbsp;', canSort: false",
                                            'width' => 90,
-                                           'sql' => 'sum(einsatzgeraete.stunden * gerate.geraetkst_intern + ' .
-                                                    'einsatzgeraete.stunden * anbaugeraete.anbkst_intern)',
+                                           'sql' => '
+(SELECT sum(stunden * gerate.geraetkst_intern + stunden * CASE WHEN anbaugeraete.anbkst_intern IS NULL THEN 0.0 ELSE anbaugeraete.anbkst_intern END)
+FROM einsatzgeraete
+JOIN gerate ON einsatzgeraete.geraet = gerate.id
+LEFT JOIN anbaugeraete ON einsatzgeraete.anbaugeraet = anbaugeraete.id
+WHERE einsatz = einsatz.id)
+',
                                            ),
                              'gesamtkosten' => array(
                                            'name' => 'Gesamtkosten',
                                            'type' => 'number',
                                            'specs' => "decPlaces: 2, ClassName: 'alignright', suffix: '&nbsp;', canSort: false",
                                            'width' => 90,
-                                           'sql' => 'sum(einsatzpersonal.stunden * personal.persstdsatz + ' . 
-                                                    'einsatzgeraete.stunden * gerate.geraetkst_intern + ' .
-                                                    'einsatzgeraete.stunden * anbaugeraete.anbkst_intern)',
+                                           'sql' => '
+(SELECT sum(stunden * personal.persstdsatz) FROM einsatzpersonal
+JOIN personal ON einsatzpersonal.personal = personal.id
+WHERE einsatz = einsatz.id)
++
+CASE WHEN
+(SELECT sum(stunden * gerate.geraetkst_intern + stunden * CASE WHEN anbaugeraete.anbkst_intern IS NULL THEN 0.0 ELSE anbaugeraete.anbkst_intern END)
+FROM einsatzgeraete
+JOIN gerate ON einsatzgeraete.geraet = gerate.id
+LEFT JOIN anbaugeraete ON einsatzgeraete.anbaugeraet = anbaugeraete.id
+WHERE einsatz = einsatz.id) IS NULL THEN 0.0
+ELSE (SELECT sum(stunden * gerate.geraetkst_intern + stunden * CASE WHEN anbaugeraete.anbkst_intern IS NULL THEN 0.0 ELSE anbaugeraete.anbkst_intern END)
+FROM einsatzgeraete
+JOIN gerate ON einsatzgeraete.geraet = gerate.id
+LEFT JOIN anbaugeraete ON einsatzgeraete.anbaugeraet = anbaugeraete.id
+WHERE einsatz = einsatz.id) END
+',
                                            ),
                              'prolfdm' => array(
                                            'name' => 'pro lfdm',
                                            'type' => 'number',
                                            'specs' => "decPlaces: 2, ClassName: 'alignright', suffix: '&nbsp;', canSort: false",
                                            'width' => 60,
-                                           'sql' => 'sum(einsatzpersonal.stunden * personal.persstdsatz + ' . 
-                                                    'einsatzgeraete.stunden * gerate.geraetkst_intern + ' .
-                                                    'einsatzgeraete.stunden * anbaugeraete.anbkst_intern) / laenge',
+                                           'sql' => '
+((SELECT sum(stunden * personal.persstdsatz) FROM einsatzpersonal
+JOIN personal ON einsatzpersonal.personal = personal.id
+WHERE einsatz = einsatz.id)
++
+CASE WHEN
+(SELECT sum(stunden * gerate.geraetkst_intern + stunden * CASE WHEN anbaugeraete.anbkst_intern IS NULL THEN 0.0 ELSE anbaugeraete.anbkst_intern END)
+FROM einsatzgeraete
+JOIN gerate ON einsatzgeraete.geraet = gerate.id
+LEFT JOIN anbaugeraete ON einsatzgeraete.anbaugeraet = anbaugeraete.id
+WHERE einsatz = einsatz.id) IS NULL THEN 0.0
+ELSE (SELECT sum(stunden * gerate.geraetkst_intern + stunden * CASE WHEN anbaugeraete.anbkst_intern IS NULL THEN 0.0 ELSE anbaugeraete.anbkst_intern END)
+FROM einsatzgeraete
+JOIN gerate ON einsatzgeraete.geraet = gerate.id
+LEFT JOIN anbaugeraete ON einsatzgeraete.anbaugeraet = anbaugeraete.id
+WHERE einsatz = einsatz.id) END) / laenge
+',
+
+
                                            ),
                              ),
              'details' => array(
                                 'html' => $details,
                                 'list' => array(
                                                 'gebiet' => array('fetch' => fetch_gebiet),
+                                                'kostenstelle' => array('fetch' => fetch_kostenstelle),
                                                 'laenge' => array('fetch' => fetch_laenge),
                                                 'gewaesserkosten' => array('fetch' => fetch_gewaesserkosten),
                                                 'personalkosten' => array('fetch' => fetch_personalkosten),
                                                 'geraetekosten' => array('fetch' => fetch_geraetekosten),
+                                                'gereinigt' => array('fetch' => fetch_gereinigt),
                                                 ),
 
                              ),
@@ -133,6 +176,15 @@ function fetch_gebiet()
   return $res[0]['gebiet'];
 }
 
+function fetch_kostenstelle()
+{
+  $sql = 'SELECT kostenstellen.kostenstelle FROM kostenstellen JOIN einsatz ON einsatz.kostenstelle = kostenstellen.id WHERE einsatz.id = ' . intval($_POST['id']);
+  $res = query_db($sql);
+  if ($res === false) return '';
+
+  return $res[0]['kostenstelle'];
+}
+
 function fetch_laenge()
 {
   $sql = 'SELECT laenge FROM kostenstellen JOIN einsatz ON einsatz.kostenstelle = kostenstellen.id WHERE einsatz.id = ' . intval($_POST['id']);
@@ -145,59 +197,90 @@ function fetch_laenge()
 function fetch_gewaesserkosten()
 {
   $sql = <<<EOC
-  SELECT sum(einsatzpersonal.stunden * personal.persstdsatz +
-             einsatzgeraete.stunden * gerate.geraetkst_intern +
-             einsatzgeraete.stunden * anbaugeraete.anbkst_intern) AS gesamt
-  FROM einsatz
-  JOIN einsatzpersonal ON einsatzpersonal.einsatz = einsatz.id
-  JOIN einsatzgeraete ON einsatzgeraete.einsatz = einsatz.id
+  SELECT sum(stunden * persstdsatz) AS gesamt
+  FROM einsatzpersonal
   JOIN personal ON einsatzpersonal.personal = personal.id
+  WHERE einsatz IN
+    (SELECT id FROM einsatz WHERE date_part('year', datum) = %d AND kostenstelle =
+    (SELECT kostenstelle FROM einsatz WHERE id = %d))
+EOC;
+
+  $sql = sprintf($sql, $_SESSION['overview_kosten.year'], $_POST['id']);
+  $pkosten = query_db($sql);
+  if ($pkosten === false) return '';
+
+  $sql = <<<EOC
+  SELECT sum(stunden * gerate.geraetkst_intern +
+             stunden * anbaugeraete.anbkst_intern) AS gesamt
+  FROM einsatzgeraete
   JOIN gerate ON einsatzgeraete.geraet = gerate.id
   JOIN anbaugeraete ON einsatzgeraete.anbaugeraet = anbaugeraete.id
-  WHERE einsatz.id = %d
+  WHERE einsatz IN
+    (SELECT id FROM einsatz WHERE date_part('year', datum) = %d AND kostenstelle =
+    (SELECT kostenstelle FROM einsatz WHERE id = %d))
 EOC;
 
-  $sql = sprintf($sql, $_POST['id']);
-  $res = query_db($sql);
-  if ($res === false) return '';
+  $sql = sprintf($sql, $_SESSION['overview_kosten.year'], $_POST['id']);
+  $gkosten = query_db($sql);
+  if ($gkosten === false) return '';
 
-  return sprintf('%.2f &euro;', $res[0]['gesamt']);
+  return sprintf('%.2f &euro;', $pkosten[0]['gesamt'] + $gkosten[0]['gesamt']);
 }
 
 function fetch_personalkosten()
 {
   $sql = <<<EOC
-  SELECT sum(einsatzpersonal.stunden * personal.persstdsatz) AS kosten
-  FROM einsatz
-  JOIN einsatzpersonal ON einsatzpersonal.einsatz = einsatz.id
+  SELECT sum(stunden * persstdsatz) AS gesamt
+  FROM einsatzpersonal
   JOIN personal ON einsatzpersonal.personal = personal.id
-  WHERE einsatz.id = %d
+  WHERE einsatz IN
+    (SELECT id FROM einsatz WHERE date_part('year', datum) = %d AND kostenstelle =
+    (SELECT kostenstelle FROM einsatz WHERE id = %d))
 EOC;
 
-  $sql = sprintf($sql, $_POST['id']);
+  $sql = sprintf($sql, $_SESSION['overview_kosten.year'], $_POST['id']);
   $res = query_db($sql);
   if ($res === false) return '';
 
-  return sprintf('%.2f &euro;', $res[0]['kosten']);
+  return sprintf('%.2f &euro;', $res[0]['gesamt']);
 }
 
 function fetch_geraetekosten()
 {
   $sql = <<<EOC
-  SELECT sum(einsatzgeraete.stunden * gerate.geraetkst_intern +
-             einsatzgeraete.stunden * anbaugeraete.anbkst_intern) AS gesamt
-  FROM einsatz
-  JOIN einsatzgeraete ON einsatzgeraete.einsatz = einsatz.id
+  SELECT sum(stunden * gerate.geraetkst_intern +
+             stunden * anbaugeraete.anbkst_intern) AS gesamt
+  FROM einsatzgeraete
   JOIN gerate ON einsatzgeraete.geraet = gerate.id
   JOIN anbaugeraete ON einsatzgeraete.anbaugeraet = anbaugeraete.id
-  WHERE einsatz.id = %d
+  WHERE einsatz IN
+    (SELECT id FROM einsatz WHERE date_part('year', datum) = %d AND kostenstelle =
+    (SELECT kostenstelle FROM einsatz WHERE id = %d))
 EOC;
 
-  $sql = sprintf($sql, $_POST['id']);
+  $sql = sprintf($sql, $_SESSION['overview_kosten.year'], $_POST['id']);
   $res = query_db($sql);
   if ($res === false) return '';
 
   return sprintf('%.2f &euro;', $res[0]['gesamt']);
 }
 
+function fetch_gereinigt()
+{
+  $sql = <<<EOC
+  SELECT count(*) AS count
+  FROM gereinigt
+  JOIN kostenstellen ON gereinigt.kostenstelle = kostenstellen.id
+  JOIN einsatz ON einsatz.kostenstelle = kostenstellen.id
+  WHERE jahr = %d AND einsatz.id = %d
+EOC;
+
+  $sql = sprintf($sql, $_SESSION['overview_kosten.year'], $_POST['id']);
+
+  $res = query_db($sql);
+  if ($res === false) return '';
+
+  return $res[0]['count'] == 0 ? 'nein' : 'ja';
+}
+
 ?>