Subversion Repositories public

Rev

Blame | Last modification | View Log | RSS feed

<?
require_once('version.inc');
require_once('dbaccess.inc');
require_once('language.inc');
require_once('header.inc');
require_once('helper.inc');
require_once('crypt.inc');
require_once('settings.inc');

$knopf = 0;
$func = $_REQUEST['func'];

# Auswertungsmenue
if (isset($_REQUEST['planung'])) { $knopf = 25; $headline = 29; }

$drm = array(true, false, false, false, false, true, false);

require_once('menu.inc');
require_once('knumber.inc');

# Folgende Funktion erlaubt die Auswahl einer Periode fuer die der Statusbericht
# erzeugt werden soll.
#
function Preselect() {
        global $periode;
        global $unum;
        global $menu;
        global $rstufe;

        $db = OpenDB();
?>
<form action="prplanhilf.php" method="post">
<input type="hidden" name="menu" value="<? echo "$menu"; ?>">
<input type="hidden" name="headline" value="29">
<input type="hidden" name="func" value="prplan">

<table border=0>
<?php
        # Auswahl eines Projekts
        echo "<tr><td>Projektauswahl:</td>\n";
        echo "<td>";

        $query = "select pl_num, pl_prnum, pl_lfd, pr_name from plan, project ";
        $query .= "where pr_num = pl_prnum and pl_status in (2,3,4) ";
        $query .= "order by pl_prnum, pl_lfd desc";

        $result = QueryDB($db, $query);

        if (!$result) {
           closeDB($db);
           return;
        }

        echo "<select name=\"pl_num\">\n";
        $numrows = numrowsDB($result);
        $rows = 0;

        while ($rows < $numrows) {
           $data = fetchDB($result, $rows);
           $pl_num = $data[0];
           $pl_prnum = $data[1];
           $pl_lfd = $data[2];
           $pr_name = $data[3];
           echo "<option value=\"$pl_num\">$pl_lfd: $pl_prnum $pr_name</option>\n";
           $rows++;
        }

        echo "</select>";
        echo "</td></tr>\n";
        echo "</table>\n";
        echo "<br><input type=\"submit\" name=\"submit\" value=\"Senden\"> <input type=\"reset\">\n";
        echo "</form>\n";
        closeDB($db);
}

function ShowPlanGesamt($print=false) {
        global $leneinheit;
        $pl_num = $_REQUEST['pl_num'];

        $db = OpenDB();
        # Tabelle Plan-Zusammenfassung
?>
<table width="40%" border=1>
   <tr>
      <td class="stbb">Gruppe</td>
      <td class="stbb">Jahr</td>
      <td class="stbb">Budget</td>
   </tr>
<?php
        # Plan auslesen (alle Tasks) und Aufwaende summieren
        $query = "select al_hours, al_pstart, kl_land from ";
        $query .= "allocation, mitarbeiter, task, key_land ";
        $query .= "where mi_num = al_ressource and kl_num = mi_land and ";
        $query .= "ta_num = al_task and ta_plnum = $pl_num ";
        $query .= "and ta_meeting = 0 ";
        $query .= "order by kl_land, al_pstart";
        $result = QueryDB($db, $query);

        if (!$result) {
           closeDB($db);
           return;
        }

        $numrows = numrowsDB($result);

        if ($numrows <= 0) {
           Error("Der von Ihnen gew&auml;hlte Plan $pl_num enth&auml;lt keine Tasks!");
           closeDB($db);
           return;
        }

        $rows = 0;
        $sum = 0.0;
        $total = 0.0;
        $j = 0;
        $r = 0;
        $oldland = "";

        while ($rows < $numrows) {
           $data = fetchDB($result, $rows);
           $al_hours = $data[0];
           $al_pstart = $data[1];
           $kl_land = $data[2];

           $jahr = gmdate("Y", $al_pstart);

           if ($rows == 0) {
              $j = $jahr;
              $oldland = $kl_land;
           }

           if ($j != $jahr || $oldland != $kl_land) {
              printf ("<tr><td>$oldland</td><td align=\"center\">$j</td><td align=\"right\">%s</td></tr>\n", FormatNum($sum, 3));
              $sum = 0;
              $j = $jahr;
              $oldland = $kl_land;
              $r = $rows;
           }

           $sum += $al_hours;
           $total += $al_hours;
           $rows++;
        }

        if ($r != $rows)
           printf ("<tr><td>$kl_land</td><td align=\"center\">$jahr</td><td align=\"right\">%s</td></tr>\n", FormatNum($sum, 3));

        # Anzeigen der Summe
        printf ("<tr><td colspan=2 class=\"stbb\">Summe:</td><td align=\"right\"><b>%s</b></td></tr>\n", FormatNum($total, 3));
        echo "</table>\n";
        closeDB($db);
}

function ShowPlanBasis($print=false) {
        global $leneinheit;
        global $phase;
        $pl_num = $_REQUEST['pl_num'];

        $db = OpenDB();
?>
<table width="80%" border=1>
   <tr>
<?
        if ($phase) {
           echo "<td class=\"stbb\">Phase</td>\n";
           echo "<td class=\"stbb\">Subphasen</td>\n";
        } else {
           echo "<td class=\"stbb\">Task</td>\n";
        }
?>
      <td class="stbb">Aktivit&auml;t/T&auml;tigkeit</td>
      <td class="stbb">Gruppe</td>
      <td class="stbb">Monat</td>
      <td class="stbb">Jahr</td>
      <td class="stbb">Basis</td>
   </tr>
<?php
        # Plan auslesen (alle Tasks) und Aufwaende summieren
        $query = "select al_hours, al_pstart, al_phase, ta_name, ta_notiz,";
        $query .= "kl_land, kp_phase from ";
        $query .= "allocation, mitarbeiter, task, key_land, key_phase ";
        $query .= "where mi_num = al_ressource and kl_num = mi_land and ";
        $query .= "ta_num = al_task and kp_num = al_phase and ta_plnum = $pl_num ";
        $query .= "and ta_meeting = 0 ";
        $query .= "order by al_phase, al_pstart, mi_land, ta_id";
        $result = QueryDB($db, $query);

        if (!$result) {
           closeDB($db);
           return;
        }

        $numrows = numrowsDB($result);

        if ($numrows <= 0) {
           Error("Der von Ihnen gew&auml;hlte Plan $pl_num enth&auml;lt keine Tasks!");
           closeDB($db);
           return;
        }

        $rows = 0;
        $sum = 0.0;
        $total = 0.0;
        $j = 0;
        $m = 0;
        $r = 0;
        $oldland = "";

        while ($rows < $numrows) {
           $data = fetchDB($result, $rows);
           $al_hours = $data[0];
           $al_pstart = $data[1];
           $al_phase = $data[2];
           $ta_name = $data[3];
           $ta_notiz = $data[4];
           $kl_land = $data[5];
           $kp_phase = $data[6];

           $jahr = gmdate("Y", $al_pstart);
           $mon = gmdate("n", $al_pstart);

           if ($rows == 0) {
              $old['jahr'] = $jahr;
              $old['mon'] = $mon;
              $old['land'] = $kl_land;
              $old['phase'] = $al_phase;
              $old['tphase'] = $kp_phase;
              $old['name'] = $ta_name;
              $oldnotiz = $ta_notiz;
           }

           if ($old['jahr'] != $jahr || $old['mon'] != $mon || $old['land'] != $kl_land || $old['phase'] != $al_phase || $old['name'] != $ta_name) {
              if ($phase)
                 echo "<tr><td>" . $old['phase'] . " " . $old['tphase'] . "</td>";
              else
                 echo "<tr>";

              echo "<td>" . $old['name'] . "</td>";
              echo "<td>$oldnotiz</td>";
              echo "<td>" . $old['land'] . "</td>";
              echo "<td align=\"center\">" . $old['mon'] . "</td>";
              echo "<td align=\"center\">" . $old['jahr'] . "</td>";
              printf ("<td align=\"right\">%s</td></tr>\n", FormatNum($sum, 3));
              $sum = 0;
              $old['jahr'] = $jahr;
              $old['mon'] = $mon;
              $old['land'] = $kl_land;
              $old['phase'] = $al_phase;
              $old['tphase'] = $kp_phase;
              $old['name'] = $ta_name;
              $oldnotiz = "";
              $r = $rows;
           }

           $sum += $al_hours;
           $total += $al_hours;

           if (strlen($ta_notiz)) {
              if (strlen($oldnotiz))
                 $oldnotiz .= "<br>";

              $oldnotiz .= $ta_notiz;
           }

           $rows++;
        }

        if ($r != $rows) {
           if ($phase)
              echo "<tr><td>$al_phase $kp_phase</td>";
           else
              echo "<tr>";

           echo "<td>$ta_name</td>";
           echo "<td>$ta_notiz</td>";
           echo "<td>$kl_land</td>";
           echo "<td align=\"center\">$mon</td>";
           echo "<td align=\"center\">$jahr</td>";
           printf ("<td align=\"right\">%s</td></tr>\n", FormatNum($sum, 3));
        }

        # Anzeigen der Summe
        if ($phase)
           $span = 6;
        else
           $span = 5;

        printf ("<tr><td colspan=$span class=\"stbb\">Summe:</td><td align=\"right\"><b>%s</b></td></tr>\n", FormatNum($total, 3));
        echo "</table>\n";
        closeDB($db);
}

function CreateTempPlan($db, $pl_num, $prnum) {
        global $leneinheit;

        # Als erstes erzeugen wir eine temporaere Tabelle in die wir die
        # einzelnen Daten unseres Plans zusammentragen und korrekt zuordnen.
        #
        $query = "create local temporary table TempPlan (";
        $query .= "tmp_lfd integer not null unique, tmp_miname integer,";
        $query .= "tmp_phase integer, tmp_periode integer, tmp_plan double precision,";
        $query .= "tmp_ist double precision, tmp_taname varchar(50), tmp_notiz varchar(8192),";
        $query .= "constraint \"tempplan_pkey\" primary key (\"tmp_lfd\"))";
        $result = QueryDB($db, $query);

        if (!$result)
           return false;

        # Nun erzeugen wir einen Plan, ausgehend von den Tasks. Das ist der
        # erste von insgesamt zwei Schritten!
        #
        $query = "select al_hours, al_pstart, al_phase, ta_name, ta_notiz,";
        $query .= "al_ressource from allocation, task where ";
        $query .= "ta_num = al_task and ta_plnum = $pl_num ";
        $query .= "and ta_meeting = 0";
        $result = QueryDB($db, $query);

        if (!$result)
           return false;

        $numrows = numrowsDB($result);

        if ($numrows <= 0) {
           Error("Der von Ihnen gew&auml;hlte Plan $pl_num enth&auml;lt keine Tasks!");
           return false;
        }

        $rows = 0;
        $zaehler = 1;

        while ($rows < $numrows) {
           $data = fetchDB($result, $rows);
           $al_hours = $data[0];
           $al_pstart = $data[1];
           $al_phase = $data[2];
           $ta_name = $data[3];
           $ta_notiz = $data[4];
           $al_ressource = $data[5];

           $mon = gmdate("n", $al_pstart);
           $year = gmdate("Y", $al_pstart);
           $al_pstart = gmmktime(0, 0, 0, $mon, 1, $year);

           $query = "insert into TempPlan (tmp_lfd, tmp_miname, tmp_phase,";
           $query .= "tmp_periode, tmp_plan, tmp_ist, tmp_taname, tmp_notiz) ";
           $query .= "values ($zaehler, $al_ressource, $al_phase, $al_pstart,";
           $query .= "$al_hours, 0, '$ta_name', '$ta_notiz')";

           if (!QueryDB($db, $query))
              return false;

           $rows++;
           $zaehler++;
        }

        # Nun suchen wir alle IST-Meldungen und ergaenzen die Daten, sofern
        # sie bereits vorhanden sind, oder fuegen einen neuen Datensatz ein.
        #
        $query = "select wd_minum, wd_datum, wd_hours / $leneinheit, wd_phase, ";
        $query .= "ta_name from wdone, task where ";
        $query .= "wd_prnum = $prnum and ta_num = wd_task";
        $result = QueryDB($db, $query);

        if (!$result)
           return false;

        $numrows = numrowsDB($result);

        if ($numrows <= 0) {
           Error("Der von Ihnen gew&auml;hlte Plan $pl_num enth&auml;lt keine IST-Buchungen!");
           return true;
        }

        $rows = 0;

        while ($rows < $numrows) {
           $data = fetchDB($result, $rows);
           $wd_minum = $data[0];
           $wd_datum = $data[1];
           $wd_ist = $data[2];
           $wd_phase = $data[3];
           $ta_name = $data[4];

           $mon = gmdate("n", $wd_datum);
           $year = gmdate("Y", $wd_datum);
           $per = gmmktime(0, 0, 0, $mon, 1, $year);
           $query = "select tmp_lfd, tmp_ist from TempPlan where ";
           $query .= "tmp_miname = $wd_minum and tmp_periode = $per ";
           $query .= "and tmp_taname = '$ta_name'";
           $result2 = QueryDB($db, $query);

           if (!$result2)
              return false;

           $nr = numrowsDB($result2);

           if ($nr > 0) {
              $data = fetchDB($result2, 0);
              $tmp_lfd = $data[0];
              $tmp_ist = $data[1];

              $wd_ist += $tmp_ist;

              $query = "update TempPlan set tmp_ist = $wd_ist ";
              $query .= "where tmp_lfd = $tmp_lfd";

              if (!QueryDB($db, $query))
                 return false;
           } else {
              $mon = gmdate("n", $wd_datum);
              $year = gmdate("Y", $wd_datum);
              $wd_datum = gmmktime(0, 0, 0, $mon, 1, $year);

              $query = "insert into TempPlan (tmp_lfd, tmp_miname, tmp_phase,";
              $query .= "tmp_periode, tmp_plan, tmp_ist, tmp_taname) ";
              $query .= "values ($zaehler, $wd_minum, $wd_phase, $wd_datum,";
              $query .= "0, $wd_ist, '$ta_name')";

              if (!QueryDB($db, $query))
                 return false;

              $zaehler++;
           }

           $rows++;
        }

        return true;
}

function ShowPlanDetail($print=false) {
        global $leneinheit;
        global $phase;
        $pl_num = $_REQUEST['pl_num'];

        $db = OpenDB();
        # Ermitteln der Projektnummer
        $query = "select pl_prnum from plan where pl_num = $pl_num";
        $result = QueryDB($db, $query);

        if (!$result) {
           closeDB($db);
           return;
        }

        $data = fetchDB($result, 0);
        $prnum = $data[0];

        # Folgende Funktion erzeugt uns einen Plan mit zugehoerigen IST-Werten,
        # wobei diese bereits innerhalb einer Periode aufsummiert wurden.
        #
        if (CreateTempPlan($db, $pl_num, $prnum) == false) {
           closeDB($db);
           return;
        }

        # Tabellenkopf
?>
<table width="99%" border=1>
   <tr>
<?
        if ($phase) {
           echo "<td class=\"stbb\">Phase</td>\n";
           echo "<td class=\"stbb\">Subphasen</td>\n";
        } else {
           echo "<td class=\"stbb\">Task</td>\n";
        }
?>
      <td class="stbb">Aktivit&auml;t/T&auml;tigkeit</td>
      <td class="stbb">Ressource</td>
      <td class="stbb">Gruppe</td>
      <td class="stbb">Monat</td>
      <td class="stbb">Jahr</td>
      <td class="stbb">Ist</td>
      <td class="stbb">Rest</td>
      <td class="stbb">RM&nbsp;aktuell</td>
   </tr>
<?php
        # Auslesen der zuvor temporaer erzeugten Tabelle und Darstellung
        # der Inhalte.
        #
        $query = "select tmp_miname, tmp_phase, tmp_periode, tmp_plan,";
        $query .= "tmp_ist, tmp_taname, tmp_notiz, mi_nname, mi_vname,";
        $query .= "kl_land, kp_phase from TempPlan, mitarbeiter, key_land,";
        $query .= "key_phase where mi_num = tmp_miname and kl_num = mi_land ";
        $query .= "and kp_num = tmp_phase ";
        $query .= "order by tmp_phase, tmp_periode, mi_nname, mi_vname";
        $result = QueryDB($db, $query);

        if (!$result) {
           closeDB($db);
           return;
        }

        $numrows = numrowsDB($result);

        if ($numrows <= 0) {
           Error("Der von Ihnen gew&auml;hlte Plan $pl_num enth&auml;lt keine Tasks!");
           closeDB($db);
           return;
        }

        $rows = 0;
        $sum = 0.0;
        $total = 0.0;
        $tothour = 0.0;

        while ($rows < $numrows) {
           $data = fetchDB($result, $rows);
           $tmp_miname = $data[0];
           $tmp_phase = $data[1];
           $tmp_periode = $data[2];
           $tmp_plan = $data[3];
           $tmp_ist = $data[4];
           $tmp_taname = $data[5];
           $tmp_notiz = $data[6];
           $mi_nname = $data[7];
           $mi_vname = $data[8];
           $kl_land = $data[9];
           $kp_phase = $data[10];

           $mon = gmdate("n", $tmp_periode);
           $jahr = gmdate("Y", $tmp_periode);

           # Schreiben der Zeile
           if ($phase)
              echo "<tr><td>$tmp_phase $kp_phase</td>";
           else
              echo "<tr>";

           echo "<td>$tmp_taname</td>";
           echo "<td>$tmp_notiz</td>";
           echo "<td>$mi_nname $mi_vname</td>";
           echo "<td>$kl_land</td>";
           echo "<td align=\"center\">$mon</td>";
           echo "<td align=\"center\">$jahr</td>";
           printf ("<td align=\"right\">%s</td>", FormatNum($tmp_ist, 3));
           $h = $tmp_plan - $tmp_ist;

           if ($h < 0)
              printf ("<td align=\"right\" class=\"five\">%s</td>", FormatNum($h, 3));
           else
              printf ("<td align=\"right\">%s</td>", FormatNum($h, 3));

           if ($tmp_ist == 0 && $tmp_plan > 0)
              printf ("<td align=\"right\" class=\"green\">%s</td></tr>\n", FormatNum($tmp_plan, 3));
           else
              printf ("<td align=\"right\">%s</td></tr>\n", FormatNum($tmp_plan, 3));

           $tothour += $tmp_plan;
           $total += $h;
           $sum += $tmp_ist;
           $rows++;
        }

        # Anzeigen der Summen
        if ($phase)
           $span = 7;
        else
           $span = 6;

        echo "<tr><td colspan=$span class=\"stbb\">Summe:</td>";
        printf("<td align=\"right\"><b>%s</b></td>", FormatNum($sum, 3));
        printf("<td align=\"right\"><b>%s</b></td>", FormatNum($total, 3));
        printf("<td align=\"right\"><b>%s</b></td></tr>\n", FormatNum($tothour, 3));
        echo "</table>\n";
        closeDB($db);
}

# Auswertung des Menues:
#
if ($knopf == 25)               // Planungshilfe
   Preselect();

# Auswertung der Funktionen
if ($func == "prplan") {
   $pl_num = $_REQUEST['pl_num'];

   # Ermitteln des Projektnamens und Anzeigen des selben.
   $db = OpenDB();
   $query = "select pl_prnum, pr_name from plan, project ";
   $query .= "where pr_num = pl_prnum and pl_num = $pl_num";
   $result = QueryDB($db, $query);
   $data = fetchDB($result, 0);
   $selpro = $data[0];
   $pr_name = $data[1];
   echo "<p class=\"cry\">Projekt: $selpro $pr_name</p>";
   echo "<br>\n";
   closeDB($db);

   echo "<a href=\"#\" onClick=\"javascript:open_mwindow('prplanhilf.php?pl_num=$pl_num&header=2&func=PrintPlan', 'Planungshilfe: $selpro $pr_name', 750, 550)\">";
   echo "<img src=\"image/print.png\" border=0 alt=\"Drucken\"></a>\n";

   ShowPlanGesamt();
   ShowPlanBasis();
   ShowPlanDetail();
}

if ($func == "PrintPlan") {
   $pl_num = $_REQUEST['pl_num'];

   # Ermitteln des Projektnamens und Anzeigen des selben.
   $db = OpenDB();
   $query = "select pl_prnum, pr_name from plan, project ";
   $query .= "where pr_num = pl_prnum and pl_num = $pl_num";
   $result = QueryDB($db, $query);
   $data = fetchDB($result, 0);
   $selpro = $data[0];
   $pr_name = $data[1];
   echo "<p class=\"cry\">Projekt: $selpro $pr_name</p>";
   echo "<br>\n";
   closeDB($db);

   ShowPlanGesamt(true);
   ShowPlanBasis(true);
   ShowPlanDetail(true);
}

require('footer.inc');
?>