Subversion Repositories public

Compare Revisions

Ignore whitespace Rev 3 → Rev 4

/pm/trunk/prplanhilf.php
0,0 → 1,620
<?
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');
?>