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');

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

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

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

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

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

        $db = OpenDB();
        $query = "select wd_datum from wdone order by wd_datum";
        $result = QueryDB($db, $query);

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

        $numrows = numrowsDB($result);

        if ($numrows <= 0) {
           Error("Es gibt keine IST-Erfassungen!");
           closeDB($db);
           return;
        }

        $rows = 0;

        while ($rows < $numrows) {
           $data = fetchDB($result, $rows);
           $wd_datum = $data[0];

           if ($rows == 0)
              $fdate = $wd_datum;

           $rows++;
        }

        $ldate = $wd_datum;

        switch($periode) {
           case 1:              // Jahr
              $sper = GetPeriode($fdate);
              $eper = GetPeriode($ldate);
           break;

           case 2:              // Quartal
              $sper = 1;
              $eper = 4;
           break;

           case 3:              // Monat
              $sper = 1;
              $eper = 12;
           break;

           case 4:              // Woche
              $sper = 1;
              $eper = 52;
           break;

           case 5:              // Tag
              $sper = 1;
              $eper = ($ldate - $fdate) / 86400;
           break;
        }

        $fyear = gmdate("Y", $fdate);
        $eyear = gmdate("Y", $ldate);
?>
<form name="istbericht" action="istbericht.php" method="post">
<input type="hidden" name="menu" value="<? echo "$menu"; ?>">
<input type="hidden" name="headline" value="25">
<input type="hidden" name="func" value="IST">

<table class="input">
   <tr>
      <td>Periode:</td>
      <td><select name="per">
<?php
        $mon = gmdate("n", time());

        for ($i = $sper; $i <= $eper; $i++) {
           if ($i == $mon)
              echo "            <option selected value=\"$i\">$i</option>\n";
           else
              echo "            <option value=\"$i\">$i</option>\n";
        }
?>
         </select>
      </td>
   </tr>
<?php
        if ($periode != 1) {
?>
   <tr>
      <td>Jahr:</td>
      <td><select name="year">
<?php
           $y = gmdate("Y", time());

           for ($i = $fyear; $i <= $eyear; $i++) {
              if ($i == $y)
                 echo "<option selected value=\"$i\">$i</option>\n";
              else
                 echo "<option value=\"$i\">$i</option>\n";
           }
?>
          </select>
      </td>
   </tr>
<?php
        }

        if (($rstufe >= 0 && $rstufe < 3) || $rstufe == 4 || $rstufe == 6) {
?>
   <tr>
      <td>Mitarbeiter:</td>
      <td><select name="minum">
<?php
           $query = "select mi_num, mi_vname, mi_nname, kl_land from ";
           $query .= "mitarbeiter, key_land where kl_num = mi_land and ";
           $query .= "mi_plan = true ";
           $query .= "order by mi_nname, mi_vname";
           $result = QueryDB($db, $query);

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

           $numrows = numrowsDB($result);
           $rows = 0;

           while ($rows < $numrows) {
              $data = fetchDB($result, $rows);
              $mi_num = $data[0];
              $mi_vname = $data[1];
              $mi_nname = $data[2];
              $kl_land = $data[3];

              if ($mi_num == $unum)
                 echo "<option selected value=\"$mi_num\">$mi_nname $mi_vname ($kl_land)</option>\n";
              else
                 echo "<option value=\"$mi_num\">$mi_nname $mi_vname ($kl_land)</option>\n";

              $rows++;
           }
?>
          </select>
          &nbsp;&nbsp;Alle Mitarbeiter: <input type="checkbox" name="allmi" value="1" checked>
      </td>
   </tr>
<?php
        } else
           echo "<input type=\"hidden\" name=\"minum\" value=\"$unum\">\n";

        # Auswahl eines Projekts oder auch alle zugleich
        echo "<tr><td>Projektauswahl:</td>\n";
        echo "<td><table border=0 cellspacing=0 cellpadding=0>\n";
        echo "<tr><td><input type=\"radio\" name=\"project\" value=\"1\">Alle Projekte</td>\n";
        echo "<td><input type=\"radio\" name=\"project\" value=\"0\" checked>Projekt:";

        if ($rstufe == 2) {             // Projektleiter
           $query = "select distinct pr_num, pr_name from ";
           $query .= "project, plan, task, allocation ";
           $query .= "where pl_prnum = pr_num and ta_plnum = pl_num and ";
           $query .= "al_task = ta_num ";
           $query .= "and (pr_pl = $unum or al_ressource = $unum) ";
           $query .= "order by pr_num";
        } else if ($rstufe == 3) {      // Mitarbeiter
           $query = "select distinct wd_prnum, pr_name from ";
           $query .= "wdone, project where ";
           $query .= "pr_num = wd_prnum and wd_minum = $unum ";
           $query .= "order by wd_prnum";
        } else {
           $query = "select pr_num, pr_name from ";
           $query .= "project where pr_status = 0 order by pr_num";
        }

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

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

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

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

        echo "</select></td></tr></table>\n";
        echo "</td></tr>\n";
        echo "</table>\n";
        echo "<table class=\"indent\"><tr><td>";
        ButtonSubmit("Senden", "istbericht");
        echo "</td></tr></table>";
        echo "</form>\n";
        closeDB($db);
}

function ShowIstErfassung() {
        global $leneinheit;
        global $periode;
        global $rstufe;
        global $unum;

        $per = $_REQUEST['per'];
        $year = $_REQUEST['year'];
        $minum = $_REQUEST['minum'];
        $project = $_REQUEST['project'];
        $selpro = $_REQUEST['selpro'];
        $allmi = $_REQUEST ['allmi'];

        switch($periode) {
           case 1:              // Jahr
              $smon = 1;
              $sday = 1;
              $emon = 12;
              $eday = 31;
           break;

           case 2:              // Quartal
              $sday = 1;

              switch ($per) {
                 case 1:
                    $smon = 1;
                    $emon = 3;
                    $eday = 31;
                 break;

                 case 2:
                    $smon = 4;
                    $emon = 6;
                    $eday = 30;
                 break;

                 case 3:
                    $smon = 7;
                    $emon = 9;
                    $eday = 30;
                 break;

                 case 4:
                    $smon = 10;
                    $emon = 12;
                    $eday = 31;
                 break;
              }
           break;

           case 3:              // Monat
              $smon = $per;
              $sday = 1;
              $emon = $per;
              $eday = daysinmonth($per, $year);
           break;

           case 4:              // Woche
                # FIXME: Currently not implemented
           break;

           case 5:              // Tag
                # FIXME: Currently not implemented
           break;
        }

        $db = OpenDB();
        $anz = 0;

        if ($rstufe == 2) {     // Projektleiter
           $query = "select distinct pr_num from ";
           $query .= "project, plan, task, allocation ";
           $query .= "where pl_prnum = pr_num and ta_plnum = pl_num and ";
           $query .= "al_task = ta_num ";
           $query .= "and (pr_pl = $unum or al_ressource = $unum) ";
           $query .= "order by pr_num";
           $result = QueryDB($db, $query);

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

           $numrows = numrowsDB($result);
           $rows = 0;

           while ($rows < $numrows) {
              $data = fetchDB($result, $rows);
              $pnum[$rows] = $data[0];
              $rows++;
           }

           $anz = $numrows;
           unset($rows);
           unset($numrows);
        }

        $fdate = gmmktime(0, 0, 0, $smon, $sday, $year);
        $ldate = gmmktime(0, 0, 0, $emon, $eday, $year);

        $query = "select wd_prnum, wd_datum, wd_hours, wd_phase, wd_rk, ";
        $query .= "wd_minum, mi_nname, mi_vname, pr_name, kp_phase ";
        $query .= "from wdone, mitarbeiter, project, key_phase where ";
        $query .= "wd_datum between $fdate and $ldate and ";

        if (($rstufe > 2 && $rstufe < 4) || !isset($allmi) || $allmi != 1)
           $query .= "wd_minum = $minum and mi_num = $minum and ";
        else
           $query .= "mi_num = wd_minum and ";

        $query .= "pr_num = wd_prnum and kp_num = wd_phase and wd_hours > 0 ";

        if (!$project)
           $query .= " and wd_prnum = $selpro";
        else if ($rstufe == 2) {
           $query .= " and wd_prnum in (";

           for ($i = 0; $i < $anz; $i++) {
              if ($i > 0)
                 $query .= ",";

              $query .= "$pnum[$i]";
           }

           $query .= ") ";
           unset($pnum);
        }

        $query .= " order by wd_prnum, mi_nname, mi_vname, wd_phase, wd_datum";
        $result = QueryDB($db, $query);

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

        $numrows = numrowsDB($result);

        if ($numrows <= 0) {
           Error("F&uuml;r die Periode $per.$year und das gew&auml;hlte Projekt $selpro existiert keine IST-Erfassung!<br>");
           closeDB($db);
           return;
        }

        $rows = 0;
        $old_prnum = 0;
        $old_minum = 0;
        $old_phase = 0;
        $old_datum = 0;
        $pos = 1;
        $sum = 0;
        $total = 0;
        $all = 0;
        $flag = false;

        while ($rows < $numrows) {
           $data = fetchDB($result, $rows);
           $wd_prnum = $data[0];
           $wd_datum = $data[1];
           $wd_hours = $data[2];
           $wd_phase = $data[3];
           $wd_rk = $data[4];
           $wd_minum = $data[5];
           $mi_nname = $data[6];
           $mi_vname = $data[7];
           $pr_name = $data[8];
           $kp_phase = $data[9];

           if ($old_datum == $wd_datum) {
              $rows++;
              continue;
           } else
              $old_datum = $wd_datum;

           if ($old_prnum != $wd_prnum || $old_minum != $wd_minum) {
              # Die Summenzeile malen sofern es bereits eine gibt.
              if ($rows > 0) {

                 while ($pos <= 31) {
                    echo "<td class=\"sel\">&nbsp;</td>";
                    $pos++;
                 }

                 printf("<td class=\"selnum\">%s</td>\n", FormatNum($sum, 3));
                 printf("<td class=\"selnum\">%s</td></tr>\n", FormatNum($sum / $leneinheit, 3));
                 $sum = 0;
                 $pos = 1;
                 $old_phase = $wd_phase;
                 $pos = 1;
                 # Summenzeile
                 echo "<tr><td class=\"selnum\" colspan=33><b>Summen:</b></td>\n";
                 printf("<td class=\"selnum\"><b>%s</b></td><td class=\"selnum\"><b>%s</b></td></tr>\n",
                        FormatNum($total, 3), FormatNum($total / $leneinheit, 3));
                 printf("</table><p class=\"cry\">Zwischensumme: %s, PT: %s</p>\n", FormatNum($all, 3), FormatNum($all / $leneinheit, 3));
                 $total = 0;
                 $flag = true;
              }

              # Den Kopf malen
              echo "<table class=\"sel\" width=\"95%\">\n";
              echo "<tr><td class=\"sel\">Name:</td>\n";
              echo "<td style=\"color: #ff0000;\"><b>$mi_nname $mi_vname</b></td><td class=\"sel\"> </td>\n";
              echo "<td class=\"sel\" colspan=8>Jahr: <b>$year</b>&nbsp;&nbsp;&nbsp;Monat: <b>$per</b></td><td class=\"sel\"> </td>\n";
              echo "<td class=\"sel\" colspan=23>ProjektNr.: <font color=\"#ff0000\"><b>$wd_prnum</b></font>&nbsp;&nbsp;&nbsp;&nbsp;Projekt: <font color=\"ff0000\"><b>$pr_name</b></font></td></tr>\n";
              echo "<tr><td class=\"sel\" colspan=2> </td><td class=\"sel\">[Std]</td><td class=\"sel\" colspan=32> </td></tr>\n";
              echo "<tr><th class=\"sel\">Phase</th><th class=\"sel\">Aktivit&auml;t</th>";

              for ($i = 1; $i <= 31; $i++)
                 echo "<th class=\"sel\">$i</th>";

              echo "<th class=\"sel\">Summe<br>in Std</th><th class=\"sel\">Summe<br>in PT</th></tr>\n";
              $old_prnum = $wd_prnum;
              $old_minum = $wd_minum;
           }

           if ($rows > 0 && $old_phase != $wd_phase) {
              while ($pos <= 31) {
                 echo "<td>&nbsp;</td>";
                 $pos++;
              }

              printf("<td class=\"selnum\">%s</td>\n", FormatNum($sum, 3));
              printf("<td class=\"selnum\">%s</td></tr>\n", FormatNum($sum / $leneinheit, 3));
              $sum = 0;
              $pos = 1;
              echo "<tr><td class=\"selltgray\">Phase $wd_phase</td><td class=\"selltgray\">$kp_phase</td>\n";
              $old_phase = $wd_phase;
              $pos = 1;
           } else if ($rows == 0 || $flag) {
              echo "<tr><td class=\"selltgray\">Phase $wd_phase</td><td class=\"selltgray\">$kp_phase</td>\n";
              $old_phase = $wd_phase;
              $flag = false;
           }

           $p = gmdate("j", $wd_datum);

           while ($pos < $p) {
              echo "<td class=\"sel\">&nbsp;</td>";
              $pos++;
           }

           # Die tatsaechliche IST-Summe fuer den aktuellen Tag und Phase
           # berechnen.
           $query = "select sum(wd_hours) from wdone where ";
           $query .= "wd_phase = $wd_phase and wd_minum = $wd_minum and ";
           $query .= "wd_prnum = $wd_prnum and wd_datum = $wd_datum";

           if (!($reswd = QueryDB($db, $query))) {
              closeDB($db);
              return;
           }

           $data = fetchDB($reswd, 0);
           $wd_hours = $data[0];

           if ($wd_rk)
              printf("<td class=\"selnum\">%s<small><b>+<font color=\"#ff0000\">Rk</font></b></small></td>", FormatNum($wd_hours, 1));
           else
              printf("<td class=\"selnum\">%s</td>", FormatNum($wd_hours, 1));

           $sum += $wd_hours;
           $total += $wd_hours;
           $all += $wd_hours;
           $pos++;
           $rows++;
        }

        while ($pos <= 31) {
           echo "<td class=\"sel\">&nbsp;</td>";
           $pos++;
        }

        printf("<td class=\"selnum\">%s</td>\n", FormatNum($sum, 3));
        printf("<td class=\"selnum\">%s</td></tr>\n", FormatNum($sum / $leneinheit, 3));
        echo "<tr><td class=\"selnum\" colspan=33><b>Summen:</b></td>\n";
        printf("<td class=\"selnum\"><b>%s</b></td><td align=\"right\"><b>%s</b></td></tr>\n",
                FormatNum($total, 3), FormatNum($total / $leneinheit, 3));
        echo "</table>\n";
        printf("<p class=\"cry\">Gesamtsumme: %s, PT: %s</p>\n", FormatNum($all, 3), FormatNum($all / $leneinheit, 3));
        closeDB($db);
}

# Auswertung des Menues:
#
if ($knopf == 23)               // IST-Erfassung
   Preselect();

# Auswertung der Funktionen
if ($func == "IST") {
   $per = $_REQUEST['per'];
   $year = $_REQUEST['year'];
   $minum = $_REQUEST['minum'];
   $project = $_REQUEST['project'];
   $selpro = $_REQUEST['selpro'];
   $allmi = $_REQUEST ['allmi'];
   echo "<table class=\"indent\"><tr><td>";
   buttonPrint("Drucken", "istbericht.php", "selpro=$selpro&per=$per&year=$year&minum=$minum&project=$project&allmi=$allmi&header=2&func=PrintIST");
   echo "</td></tr></table>";
//   echo "<a href=\"#\" onClick=\"javascript:open_mwindow('istbericht.php?selpro=$selpro&per=$per&year=$year&minum=$minum&project=$project&allmi=$allmi&header=2&func=PrintIST', 'IST-Bericht', 1000, 650)\">";
//   echo "<img src=\"image/print.png\" border=0 alt=\"Drucken\"></a>\n";

   ShowIstErfassung();
}

if ($func == "PrintIST") {
   echo "<br>\n";
   ShowIstErfassung();
}

require('footer.inc');
?>