0,0 → 1,5474 |
<? |
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, true, true, true); |
|
$knopf = 0; |
$func = $_REQUEST['func']; |
$editplan = $_REQUEST['editplan']; |
$viewplan = $_REQUEST['viewplan']; |
$deleteplan = $_REQUEST['deleteplan']; |
$editcopy = $_REQUEST['editcopy']; |
$taskadd = $_REQUEST['taskadd']; |
$deletetask = $_REQUEST['deletetask']; |
$edittask = $_REQUEST['edittask']; |
$addmi = $_REQUEST['addmi']; |
$addmidel = $_REQUEST['addmidel']; |
$addmiadd = $_REQUEST['addmiadd']; |
$moveup = $_REQUEST['moveup']; |
$movedown = $_REQUEST['movedown']; |
|
if (isset($editplan)) { |
$headline = 20; |
$pl_num = $editplan; |
} else { |
$pl_num = 0; |
} |
|
if (isset($deleteplan)) { |
$headline = 21; |
} |
|
if (isset($_REQUEST['no'])) { |
$headline = 9; |
} |
|
# Planungsmenue |
//if (isset($_REQUEST['plan'])) { $knopf = 2; $headline = 9; $menu = 2; } |
if (isset($_REQUEST['plan'])) { $knopf = 2; $headline = 20; $menu = 2; } |
|
if (isset($_REQUEST['plneu'])) { $knopf = 10; $headline = 19; } |
if (isset($_REQUEST['plchange'])) { $knopf = 11; $headline = 20; } |
if (isset($_REQUEST['plumplan'])) { $knopf = 12; } |
|
require_once('menu.inc'); |
require_once('knumber.inc'); |
require_once('class_tasknum.inc'); |
|
$ab_datum = 0; |
|
# Folgende Funktion zeigt in einer Tabelle die Planstammdaten an, welche |
# mit Hilfe der Buttons in der ersten Spalte bearbeitet werden koennen. |
# |
# Es handelt sich dabei um die Liste der Plaene, die zur Betrachtung oder |
# auch zur Bearbeitung stehen. Der Projektleiter sieht alle Plaene, bei |
# denen er Projektleiter ist und der Administrator sieht immer alle |
# Plaene. |
# |
function ShowPlan($rstufe, $menu, $unum, $plnum=0) { |
global $rstufe; |
global $unum; |
global $phase; |
global $pmlight; |
global $statusbericht; |
global $menu; |
global $headline; |
global $func; |
global $pj_lock; |
global $dtformatshort; |
|
# Als erstes wird eine Auswahlbox angezeigt, in der der User die |
# Anzeige ein wenig individualisieren kann. |
$ps_1 = $_REQUEST['ps_1']; |
$ps_2 = $_REQUEST['ps_2']; |
$ps_3 = $_REQUEST['ps_3']; |
$ps_4 = $_REQUEST['ps_4']; |
$ps_5 = $_REQUEST['ps_5']; |
$ps_6 = $_REQUEST['ps_6']; |
$sx_prnum = $_REQUEST['sx_prnum']; |
$sx_prname = $_REQUEST['sx_prname']; |
|
if ($func != "SHOWPLAN") { |
$ps_1 = 1; |
$ps_2 = 1; |
$ps_4 = 1; |
} |
|
$db = OpenDB(); |
?> |
<form name="stati" method="post" action="plan.php" onChange="javascript:this.submit()"> |
<input type="hidden" name="menu" value="<? echo "$menu"; ?>"> |
<input type="hidden" name="headline" value="<? echo "$headline"; ?>"> |
<input type="hidden" name="plchange" value="1"> |
<input type="hidden" name="func" value="SHOWPLAN"> |
<table class="input"> |
<tr> |
<th class="sel" colspan=2><? Output($db, 23, "Pläne mit folgendem Status anzeigen"); ?></th> |
<th class="sel" colspan=2><? Output($db, 24, "Projektsuche"); ?></th> |
</tr> |
<tr> |
<td><? Output($db, 25, "In Erstellung:"); ?></td> |
<td><input type="checkbox" name="ps_1" value="1" <? if ($ps_1) echo "checked"; ?>></td> |
<td class="input_l">Projektnummer:</td> |
<td><input type="text" name="sx_prnum" value="<? echo "$sx_prnum"; ?>" size=8 maxlength=16></td> |
</tr> |
<? |
if (!$pmlight) { |
?> |
<tr> |
<td><? Output($db, 26, "Freigegeben:"); ?></td> |
<td><input type="checkbox" name="ps_2" value="1" <? if ($ps_2) echo "checked"; ?>></td> |
<td rowspan=4 class="input_l">Projektname:</td> |
<td rowspan=4 valign="top"><input type="text" name="sx_prname" value="<? echo "$sx_prname"; ?>" size=20 mxlength=100></td> |
</tr> |
<? |
} |
?> |
<tr> |
<td><? Output($db, 27, "Aktiv:"); ?></td> |
<td><input type="checkbox" name="ps_4" value="1" <? if ($ps_4) echo "checked"; ?>></td> |
<? |
if ($pmlight) { |
?> |
<td rowspan=3 class="input_l"><? Output($db, 28, "Projektname:"); ?></td> |
<td rowspan=3 valign="top"><input type="text" name="sx_prname" value="<? echo "$sx_prname"; ?>" size=20 mxlength=100></td> |
<? |
} |
?> |
</tr> |
<tr> |
<td><? Output($db, 29, "Inaktiv:"); ?></td> |
<td><input type="checkbox" name="ps_5" value="1" <? if ($ps_5) echo "checked"; ?>></td> |
</tr> |
<tr> |
<td><? Output($db, 30, "Abgeschlossen:"); ?></td> |
<td><input type="checkbox" name="ps_6" value="1" <? if ($ps_6) echo "checked"; ?>></td> |
</tr> |
<tr> |
<td class="sel" colspan = 4><center> |
<? |
Button(GetMessage($db, 31, "Selektion durchführen"), "stati"); |
?> |
</center></td> |
</tr> |
</table> |
</form> |
<? |
if (!isset($ps_1) && !isset($ps_2) && !isset($ps_3) && !isset($ps_4) && !isset($ps_5) && !isset($ps_6)) { |
echo "<p class=\"cry\">" . Output($db, 32, "Es wurden keine Pläne gefunden!") . "</p>\n"; |
return; |
} |
|
$old_prnum = 0; |
$db = OpenDB(); |
$dtdb = GetDBDateFormat(true); |
$query = "select pl_num, pl_lfd, pl_prnum, pl_status, pr_name, "; |
$query .= "pr_status, to_char(pl_date, '$dtdb'), pl_comment "; |
$query .= "from plan, project where pr_num = pl_prnum "; |
|
if ($rstufe == 2) |
$query .= "and pr_pl = $unum "; |
|
if (isset($sx_prnum) && strlen($sx_prnum) > 0) |
$query .= "and pr_num = $sx_prnum "; |
else if (isset($sx_prname) && strlen($sx_prname) > 0) |
$query .= "and pr_name ilike '$sx_prname%' "; |
|
$query .= "and pr_status = 0 and pl_status in ("; |
$komma = false; |
|
if ($ps_1) { |
$query .= "1"; |
$komma = true; |
} |
|
if ($ps_2) { |
if ($komma) |
$query .= ","; |
|
$query .= "2"; |
$komma = true; |
} |
|
if ($ps_3) { |
if ($komma) |
$query .= ","; |
|
$query .= "3"; |
$komma = true; |
} |
|
if ($ps_4) { |
if ($komma) |
$query .= ","; |
|
$query .= "4"; |
$komma = true; |
} |
|
if ($ps_5) { |
if ($komma) |
$query .= ","; |
|
$query .= "5"; |
$komma = true; |
} |
|
if ($ps_6) { |
if ($komma) |
$query .= ","; |
|
$query .= "6"; |
$komma = true; |
} |
|
$query .= ") "; |
$query .= "order by pl_prnum asc, pl_lfd desc"; |
$result = QueryDB($db, $query); |
|
if (!$result) { |
include('footer.inc'); |
return; |
} |
|
$numrows = numrowsDB($result); |
$nav = "menu=$menu&headline=9&ps_1=$ps_1&ps_2=$ps_2&ps_3=$ps_3&ps_4=$ps_4&ps_5=$ps_5&ps_6=$ps_6"; |
|
if ($numrows > 0) { |
echo "<form name=\"plan\" action=\"plan.php\" method=\"post\">\n"; |
echo "<input type=\"hidden\" name=\"pl_num\" value=\"$plnum\">\n"; |
echo "<input type=\"hidden\" name=\"menu\" value=\"$menu\">\n"; |
echo "<input type=\"hidden\" name=\"headline\" value=\"9\">\n"; |
echo "<input type=\"hidden\" name=\"ps_1\" value=\"$ps_1\">\n"; |
echo "<input type=\"hidden\" name=\"ps_2\" value=\"$ps_2\">\n"; |
echo "<input type=\"hidden\" name=\"ps_3\" value=\"$ps_3\">\n"; |
echo "<input type=\"hidden\" name=\"ps_4\" value=\"$ps_4\">\n"; |
echo "<input type=\"hidden\" name=\"ps_5\" value=\"$ps_5\">\n"; |
echo "<input type=\"hidden\" name=\"ps_6\" value=\"$ps_6\">\n"; |
|
if ($plnum > 0) { |
echo "<input type=\"hidden\" name=\"func\" value=\"UpdatePlan\">\n"; |
} |
?> |
<table class="sel"> |
<tr> |
<th class="sel"><? Output($db, 33, "Aktion"); ?></th> |
<th class="sel"><? Output($db, 34, "Lfd.Nr."); ?></th> |
<th class="sel"><? Output($db, 35, "Proj.Nr."); ?></th> |
<th class="sel"><? Output($db, 36, "Projektbezeichnung"); ?></th> |
<th class="sel"><? Output($db, 37, "Planstatus"); ?></th> |
<th class="sel"><? Output($db, 403, "Abg. bis"); ?></th> |
<? |
if ($statusbericht) { |
echo " <th class=\"sel\">" . GetMessage($db, 38, "Statusbericht") . "</th>"; |
} else { |
echo " <th class=\"sel\">" . GetMessage($db, 39, "Beschreibung") . "</th>"; |
} |
?> |
</tr> |
<?php |
$old_plnum = 0; |
$oo_prnum = 0; |
$row = 0; |
$inp_com = false; |
|
while ($row < $numrows) { |
$data = fetchDB($result, $row); |
$pl_num = $data[0]; |
$pl_lfd = $data[1]; |
$pl_prnum = $data[2]; |
$pl_status = $data[3]; |
$pr_name = $data[4]; |
$ks_status = $data[5]; |
$pl_date = $data[6]; |
$pl_comment = $data[7]; |
|
if ($oo_prnum != $pl_prnum) |
$old_pllfd = $pl_lfd; |
|
# Pruefen, ob bereits IST-Buchungen vorgenommen wurden. Wenn ja, |
# dann darf der Plan nicht mehr geloescht werden koennen! |
# |
$query = "select wd_num from wdone, task where "; |
$query .= "wd_prnum = $pl_prnum and ta_num = wd_task and "; |
$query .= "ta_plnum = $pl_num"; |
|
if (!($resta = QueryDB($db, $query))) |
return; |
|
if (numrowsDB($resta) <= 0) |
$del = true; |
else |
$del = false; |
|
echo "<tr><td class=\"selakt\"><table border=0 cellspacing=0 cellpadding=0><tr>"; |
|
if ($pl_status < 3 && $old_prnum != $pl_prnum) { |
echo "<td><a href=\"#\" onClick=\"javascript:MoveTo('plan.php','editplan=$pl_num&$nav')\"><img src=\"image/edit.png\" border=0 alt=\"Edit\"></a></td>"; |
$old_prnum = $pl_prnum; |
$inp_com = true; |
} else { |
echo "<td><a href=\"#\" onClick=\"javascript:MoveTo('plan.php','viewplan=$pl_num&$nav')\"><img src=\"image/view.png\" width=15 height=15 border=0 alt=\"View\"></a></td>"; |
} |
|
if ($del && $pl_status < 4 && ($rstufe == 1 || $rstufe == 2)) |
echo "<td><a href=\"#\" onClick=\"javascript:MoveTo('plan.php','deleteplan=$pl_num&$nav')\"><img src=\"image/editdelete.png\" border=0 alt=\"Delete\"></a></td>"; |
|
if ($pl_status > 1 && $pl_status < 5) { |
echo "<td><a href=\"#\" onClick=\"javascript:MoveTo('plan.php','editcopy=$pl_num&pl_prnum=$pl_prnum&pl_status=1&$nav')\"><img src=\"image/editcopy.png\" border=0 alt=\"Copy\"></a></td>"; |
|
if (!$pj_lock) |
echo "<td><a href=\"#\" onClick=\"javascript:MoveTo('plan.php','func=LockM&pl_num=$pl_num&pl_prnum=$pl_prnum&pl_status=$pl_status&$nav')\"><img src=\"image/month.png\" border=0 alt=\"Copy\"></a></td>"; |
} |
|
echo "</tr></table>"; |
echo "</td>\n<td class=\"selnum\">$pl_lfd</td>\n<td class=\"selnum\">$pl_prnum</td>\n"; |
|
if ($inp_com) { |
echo "<td class=\"sel\">"; |
echo "<a href=\"#\" onClick=\"javascript:MoveTo('plan.php','editplan=$pl_num&$nav')\">"; |
echo "$pr_name</a></td>\n"; |
$inp_com = false; |
} else |
echo "<td class=\"sel\">$pr_name</td>\n"; |
|
if ($plnum == $pl_num) { |
echo "<td sel=\"sel\"><select name=\"pl_status\">\n"; |
$status = $_REQUEST['pl_status']; |
|
if ($status == 3) |
$j = 4; |
else |
$j = 1; |
|
for ($i = $j; $i <= 6; $i++) { |
if (($i == 2 && $pmlight) || $i == 3 || $i == 5) |
continue; |
|
if ($rstufe == 2 && $status == 6 && $i == 1) |
continue; |
|
if ($status == $i) |
echo "<option value=\"$i\" selected>"; |
else |
echo "<option value=\"$i\">"; |
|
switch ($i) { |
case 1: Output($db, 40, "In Erstellung (änderbar, nicht bebuchbar)"); break; |
case 2: Output($db, 41, "Freigegeben (änderbar, bebuchbar)"); break; |
// case 3: echo "Wartet auf Genehmigung"; break; |
case 4: Output($db, 42, "Aktiv (nicht änderbar, bebuchbar)"); break; |
case 5: Output($db, 43, "Inaktiv (nicht änderbar, nicht bebuchbar)"); break; |
case 6: Output($db, 44, "Abgeschlossen (Projekt ist abgeschlossen)"); break; |
// default: echo "In Erstellung"; |
} |
|
echo "</option>\n"; |
} |
|
echo "</select>"; |
Button(GetMessage($db, 45, "Speichern"), "plan"); |
echo "</td>\n"; |
} else if ($oo_prnum != $pl_prnum && $old_pllfd >= $pl_lfd) { |
echo "<td class=\"sel\">"; |
|
// if ($pl_status < 4 || $rstufe == 1 || $rstufe == 4) { |
echo "<a href=\"#\" onClick="; |
echo "\"javascript:MoveTo('plan.php','pl_num=$pl_num&pl_status=$pl_status&func=EditPlStatus&$nav')\">\n"; |
// } |
|
switch ($pl_status) { |
case 1: Output($db, 85, "In Erstellung"); break; |
case 2: Output($db, 86, "Freigegeben"); break; |
case 3: echo "Wartet auf Genehmigung"; break; |
case 4: Output($db, 87, "Aktiv"); break; |
case 5: Output($db, 88, "Inaktiv"); break; |
case 6: Output($db, 89, "Abgeschlossen"); break; |
default: Output($db, 85, "In Erstellung"); |
} |
|
// if ($pl_status < 4) |
echo "</a>"; |
|
echo "</td>"; |
$oo_prnum = $pl_prnum; |
$inp_com = true; |
} else { |
echo "<td class=\"sel\">\n"; |
|
switch ($pl_status) { |
case 1: Output($db, 85, "In Erstellung"); break; |
case 2: Output($db, 86, "Freigegeben"); break; |
case 3: echo "Wartet auf Genehmigung"; break; |
case 4: Output($db, 87, "Aktiv"); break; |
case 5: Output($db, 88, "Inaktiv"); break; |
case 6: Output($db, 89, "Abgeschlossen"); break; |
default: Output($db, 85, "In Erstellung"); |
} |
|
echo "</td>\n"; |
} |
|
# Letzter Teilprojektabschluss |
$query = "select ab_datum from abschluss where "; |
$query .= "ab_prnum = $pl_prnum order by ab_datum desc"; |
|
if (!($resab = QueryDB($db, $query))) { |
closeDB($db); |
return; |
} |
|
if (numrowsDB($resab) > 0) { |
$data = fetchDB($resab, 0); |
$ab_datum = $data[0]; |
$dt = gmdate($dtformatshort, $ab_datum); |
} else |
$dt = ""; |
|
echo "<td class=\"selnum\">$dt</td>\n"; |
|
# Kommentar / Beschreibung / Statusbericht |
if ($statusbericht) { |
$query = "select ps_prstat from planstatus where "; |
$query .= "ps_prnum = $pl_prnum and ps_status = true and "; |
$query .= "ps_plnum = $pl_num "; |
$query .= "order by ps_lfd desc"; |
|
if (!($resps = QueryDB($db, $query))) { |
closeDB($db); |
return; |
} |
|
$anzps = numrowsDB($resps); |
|
if ($anzps > 0) { |
$data = fetchDB($resps, 0); |
$ps_prstat = $data[0]; |
} else |
$ps_prstat = 3; |
|
echo "<td class=\"sel\">$pl_date <img src=\""; |
|
switch ($ps_prstat) { |
case 0: echo "image/cool.gif\" alt=\"Gruen"; break; |
case 1: echo "image/shocked.gif\" alt=\"Gelb"; break; |
case 2: echo "image/sad.gif\" alt=\"Rot"; break; |
default: echo "image/huh.gif\" alt=\"Undefiniert"; |
} |
|
echo "\" width=17 height=17>"; |
|
if ($inp_com && $pl_status > 1 && $pl_status < 5) { |
echo " <a href=\"#\" "; |
echo "onClick=\"javascript:MoveTo('plan.php','func=PLANSTATUS&pr_num=$pl_prnum&pl_num=$pl_num&$nav')\">"; |
echo "<img src=\"image/edit.png\" border=0 alt=\"Statusbericht\"></a>"; |
} else if ($pl_status > 4) { |
echo " <a href=\"#\" "; |
echo "onClick=\"javascript:MoveTo('plan.php','func=PLANSTATUS&lock=1&pr_num=$pl_prnum&pl_num=$pl_num&$nav')\">"; |
echo "<img src=\"image/view.png\" border=0 alt=\"Statusbericht ansehen\" width=15 height=15></a>"; |
} |
|
echo "</td>\n"; |
$inp_com = false; |
} else { |
echo "<td class=\"sel\"><table border=0 cellspacing=0 cellpadding=0><tr><td>$pl_date </td><td>"; |
$inp_com = false; |
echo substr($pl_comment, 0, 30); |
echo "</td></tr></table></td>\n"; |
} |
|
echo "</tr>\n"; |
$row++; |
} |
|
echo "</table>\n"; |
|
if ($plnum > 0) |
echo "</form>\n"; |
} else { |
echo "<p class=\"cry\">" . GetMessage($db, 32, "Es wurden keine Pläne gefunden!") . "</p>\n"; |
} |
|
closeDB($db); |
} |
|
function AskClosePlan($anz) { |
$headline = $_REQUEST['headline']; |
$menu = $_REQUEST['menu']; |
$pl_num = $_REQUEST['pl_num']; |
$pl_status = $_REQUEST['pl_status']; |
$nav = "pl_num=$pl_num&pl_status=$pl_status&menu=$menu&func=WriteStatus&headline=21"; |
?> |
<br> |
<form action="plan.php" method="post"> |
<table border=2 class="alarm"> |
<tr><td colspan=2><big><? Output(-1, 46, "Warnung!"); ?></big><br><br> |
<? Output(-1, 47, " |
Es existieren noch %d Tasks, die noch nicht zu Ende sind.<br> |
Wenn Sie diesen Plan nun abschliessen, können Sie keine |
IST-Buchungen mehr auf dieses Projekt vornehmen. Sobald ein Plan |
abgeschlossen ist, ist das gesamte Projekt abgeschlossen! |
<br><br> |
Wollen Sie wirklich dieses Projekt abschliessen?", $anz); |
?> |
</td> |
</tr> |
<tr> |
<td><center><input type="button" name="yes" value="<? Output(-1, 48, "Projekt Abschliessen"); ?>" onClick="javascript:MoveTo('plan.php','yes=yes&<? echo "$nav"; ?>')"></center></td> |
<td><center><input type="button" name="no" value="<? Output(-1, 49, "Abbruch"); ?>" onClick="javascript:MoveTo('plan.php','no=no&<? echo "$nav"; ?>')"></center></td> |
</tr> |
</table> |
</form> |
<?php |
} |
|
# Folgende Funktion schreibt den (eventuell) geaenderten Status eines Plans |
# in die Datenbank. |
# |
function UpdatePlan($write=false) { |
global $rstufe; |
global $phase; |
global $pmlight; |
global $language; |
global $unum; |
|
if ($rstufe != 1 && $rstufe != 2) { |
Error(GetMessage(-1, 50, "Berechtigungsfehler!")); |
return false; |
} |
|
$pl_num = $_REQUEST['pl_num']; |
$pl_status = $_REQUEST['pl_status']; |
|
if (!isset($pl_num) || $pl_num <= 0) { |
Error(GetMessage(-1, 341, "Interner Fehler: Plannummer fehlt!")); |
return false; |
} |
|
if (!isset($pl_status) || $pl_status < 1 || $pl_status > 6) { |
Error(GetMessage(-1, 379, "Interner Fehler: Fehlender oder ungültiger Status!")); |
return false; |
} |
|
$db = OpenDB(); |
|
# Bevor wir den Planstatus von 6 tatsaechlich schreiben pruefen wir, ob |
# nicht noch ein Task des Plans offen ist. Ist dem so, warnen wir den |
# User und weisen ihn auf die Konsequenzen hin. |
if (!$write && $pl_status == 6) { |
$today = time(); |
$query = "select count(*) from task where "; |
$query .= "ta_plnum = $pl_num and ta_start+(ta_duration*86400) > $today and "; |
$query .= "ta_level > 1"; |
|
if (!($result = QueryDB($db, $query))) |
return false; |
|
$data = fetchDB($result, 0); |
$anz = $data[0]; |
|
if ($anz > 0) { |
AskClosePlan($anz); |
return true; |
} |
} |
|
# Handelt es sich um den Planstatus 1 pruefen wir, ob der Plan |
# zuvor nicht bereits einen anderen Status hatte und wenn ja, ob |
# IST-Buchungen vorgenommen wurden. Trifft das zu, darf der Status |
# nicht auf 1 gesetzt werden. |
if ($pl_status == 1) { |
$query = "select count(*) from wdone, task where "; |
$query .= "ta_plnum = $pl_num and wd_task = ta_num"; |
|
if (!($result = QueryDB($db, $query))) |
return false; |
|
$data = fetchDB($result, 0); |
$anz = $data[0]; |
|
if ($anz > 0) { |
Error(GetMessage($db, 380, "Auf diesem Plan sind bereits IST-Buchungen vorhanden! Der Planstatus kann daher nicht auf \"In Erstellung\" zurück gesetzt werden!")); |
return false; |
} |
} |
|
# In der strikten Periodensicht ($pmlight == true), darf der Status nur |
# dann auf > 1 gesetzt werden, wenn es einen Kommentar zum Plan gibt. |
# Falls es also keinen Kommentar gibt, wird dieser automatisch erzeugt. |
# |
if ($pmlight && $pl_status > 1) { |
$query = "select pl_comment from plan where pl_num = $pl_num"; |
|
if (!($result = QueryDB($db, $query))) |
return false; |
|
$data = fetchDB($result, 0); |
$pl_comment = $data[0]; |
|
if (!isset($pl_comment) || strlen($pl_comment) <= 0) { |
$query = "select mi_nname, mi_vname from mitarbeiter where mi_num = $unum"; |
|
if (!($resmi = QueryDB($db, $query))) |
return false; |
|
$data = fetchDB($resmi, 0); |
$mi_nname = $data[0]; |
$mi_vname = $data[0]; |
|
$query = "update plan set pl_comment = '"; |
$query .= GetMessageLang($db, $language, 381, "Statusänderung durch %s", "$mi_nname $mi_vname"); |
$query .= "' where pl_num = $pl_num"; |
|
if (!QueryDB($db, $query)) |
return false; |
|
Error(GetMessage($db, 382, "Der fehlende Kommentar zum Plan wurde automatisch eingefügt!")); |
} |
} |
|
$query = "update plan set pl_status = $pl_status "; |
|
if ($pl_status == 4) |
$query .= ", pl_date = current_timestamp "; |
|
$query .= "where pl_num = $pl_num"; |
|
if (!TQueryDB($db, $query)) { |
closeDB($db); |
return false; |
} |
|
# Handelt es sich nicht um den ersten Plan eines Projekts, |
# muessen alle aelteren Instanzen auf Inaktiv gesetzt werden. |
# Ausgenommen sind Plaene die Abgeschlossen sind (Status = 6). |
# Status 1 darf nur dann gesetzt werden koennen, wenn der |
# Plan noch keine IST-Buchungen hat. Ein neuerliches setzen |
# von Status 1 bewirkt, dass der folgende Plan auf 4 gesetzt |
# wird. |
$query = "select pl_prnum from plan where pl_num = $pl_num"; |
|
if (!($result = QueryDB($db, $query))) |
return false; |
|
$data = fetchDB($result, 0); |
$pl_prnum = $data[0]; |
|
$query = "select pl_num, pl_status from plan where "; |
$query .= "pl_prnum = $pl_prnum and pl_num != $pl_num "; |
$query .= "order by pl_lfd desc"; |
// $query .= "and pl_status != 6 order by pl_lfd desc"; |
|
if (!($result = QueryDB($db, $query))) |
return false; |
|
$numrows = numrowsDB($result); |
$status = ($pl_status == 6) ? 6 : 5; |
|
if ($numrows > 0) { |
QueryDB($db, "begin"); |
$j = 0; |
|
while ($j < $numrows) { |
$data = fetchDB($result, $j); |
$pl_num = $data[0]; |
$pst = $data[1]; |
|
if ($j == 0 && $status != 6 && $pl_status == 1) |
$query = "update plan set pl_status = 4, pl_date = current_timestamp "; |
else |
$query = "update plan set pl_status = $status "; |
|
$query .= "where pl_num = $pl_num"; |
|
if ($pst != $status || ($j == 0 && $status != 6 && $pl_status == 1)) { |
if (!QueryDB($db, $query)) { |
QueryDB($db, "rollback"); |
closeDB($db); |
return false; |
} |
} |
|
$j++; |
} |
|
QueryDB($db, "commit"); |
} |
|
closeDB($db); |
return true; |
} |
|
# Folgende Funktion speichert die zuvor erfassten Planstammdaten. Da die |
# Erfassung ohnehin nur mittels ComboBox (select) moeglich ist, kann eine |
# Plausibilitaetspruefung entfallen. |
# |
function SaveNewPlan() { |
global $phase; |
global $unum; |
|
$pl_prnum = $_REQUEST['pl_prnum']; |
$pl_status = $_REQUEST['pl_status']; |
$te_num = $_REQUEST['te_num']; |
|
$db = OpenDB(); |
# |
# Zunaechst muessen wir die laufende Nummer (pl_lfd) ermitteln... |
# |
$query = "select pl_lfd, pl_status, pl_num from plan where "; |
$query .= "pl_prnum = $pl_prnum order by pl_lfd desc"; |
|
if (!($respl = QueryDB($db, $query))) { |
closeDB($db); |
return 0; |
} |
|
$numrows = numrowsDB($respl); |
|
if ($numrows > 0) { |
$data = fetchDB($respl, 0); |
$pl_lfd = $data[0] + 1; |
} else { |
$pl_lfd = 1; |
} |
|
$query = "select co_plan from counter"; |
$result = QueryDB($db, $query); |
$data = fetchDB($result, 0); |
$pl_num = $data[0] + 1; |
|
QueryDB($db, "begin"); |
$query = "insert into plan (pl_num, pl_lfd, pl_prnum, pl_status) "; |
$query .= "values ($pl_num, $pl_lfd, $pl_prnum, $pl_status)"; |
|
if (!QueryDB($db, $query)) { |
QueryDB($db, "rollback"); |
closeDB($db); |
return 0; |
} |
|
$query = "update counter set co_plan = $pl_num"; |
|
if (!QueryDB($db, $query)) { |
QueryDB($db, "rollback"); |
closeDB($db); |
return 0; |
} |
|
# Handelt es sich nicht um den ersten Plan eines Projekts, |
# muessen alle aelteren Instanzen auf Inaktiv gesetzt werden. |
# Ausgenommen sind Plaene die Abgeschlossen sind (Status = 6) |
if ($numrows > 0 && $pl_status > 1) { |
$j = 0; |
|
while ($j < $numrows) { |
$data = fetchDB($respl, $j); |
$plstatus = $data[1]; |
$plnum = $data[2]; |
|
if ($plstatus != 6) { |
$query = "update plan set pl_status = 5, pl_date = current_timestamp "; |
$query .= "where pl_num = $plnum"; |
|
if (!QueryDB($db, $query)) { |
QueryDB($db, "rollback"); |
closeDB($db); |
return 0; |
} |
} |
|
$j++; |
} |
} |
|
QueryDB($db, "commit"); |
|
# Wenn ein Template ausgewaehlt wurde, muss es ausgelesen werden |
# und als Plan angelegt werden. |
if (isset($te_num) && $te_num > 0) { |
$query = "select co_task from counter"; |
$result = QueryDB($db, $query); |
|
if (!$result) { |
closeDB($db); |
return 0; |
} |
|
$data = fetchDB($result, 0); |
$co_task = $data[0]; |
|
$query = "select pt_lfd, pt_level, pt_name, pt_color, pt_meeting, "; |
$query .= "pt_phase from ptemp where pt_tnum = $te_num "; |
$query .= "order by pt_lfd"; |
$result = QueryDB($db, $query); |
|
if (!$result) { |
closeDB($db); |
return 0; |
} |
|
$numrows = numrowsDB($result); |
$row = 0; |
QueryDB($db, "begin"); |
|
while ($row < $numrows) { |
$data = fetchDB($result, $row); |
$pt_lfd = $data[0]; |
$pt_level = $data[1]; |
$pt_name = addslashes($data[2]); |
$pt_color = $data[3]; |
$pt_meeting = $data[4]; |
$pt_phase = $data[5]; |
|
if ($pt_meeting == "t") |
$pt_meeting = 1; |
else |
$pt_meeting = 0; |
|
$ta_start = time(); |
$co_task++; |
$query = "insert into task (ta_num, ta_plnum, ta_id, ta_name, "; |
$query .= "ta_color, ta_shape, ta_meeting, ta_start, "; |
$query .= "ta_duration, ta_complete, ta_priority, ta_level, "; |
$query .= "ta_phase) values ($co_task, $pl_num, $pt_lfd, "; |
$query .= "'$pt_name', $pt_color, '0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0',"; |
$query .= "$pt_meeting, $ta_start, 1, 0, 1, $pt_level, $pt_phase)"; |
|
if (!QueryDB($db, $query)) { |
QueryDB($db, "rollback"); |
closeDB($db); |
return 0; |
} |
|
$row++; |
} |
|
$query = "update counter set co_task = $co_task"; |
|
if (!QueryDB($db, $query)) { |
QueryDB($db, "rollback"); |
closeDB($db); |
return 0; |
} |
|
QueryDB($db, "commit"); |
} |
|
Journal(300, "plan.php: SaveNewPlan: plan=$pl_num", $db); |
closeDB($db); |
return $pl_num; |
} |
|
# Folgende Funktion zeigt die Erfassungsmaske fuer einen Task an. Es muss |
# die interne Datensatznummer des Plans uebergeben werden auf die sich der |
# Task bezieht und die ID, also die laufende Nummer. Diese laufende Nummer |
# stellt sicher, das die Tasks immer in der richtigen Reihenfolge angezeigt |
# werden. |
# |
function AddTask($ta_plnum, $ta_id) { |
$menu = $_REQUEST['menu']; |
global $unum; |
global $rstufe; |
global $phase; |
global $VisualDate; |
global $pmlight; |
global $verrmodul; |
|
if (!isset($ta_plnum) || $ta_plnum <= 0) { |
Error(GetMessage(-1, 22, "Error: Interner Fehler!<br>Funktion AddTask fehlt Parameter 1!")); |
return; |
} |
|
$db = OpenDB(); |
# Projektnummer und Projektname ermitteln |
$query = "select plan.pl_prnum, project.pr_name from plan, project "; |
$query .= "where plan.pl_num = $ta_plnum and "; |
$query .= "project.pr_num = plan.pl_prnum"; |
$result = QueryDB($db, $query); |
$data = fetchDB($result, 0); |
$pl_prnum = $data[0]; |
$pr_name = $data[1]; |
|
# Finden des vorhergehenden Tasks um den Level vorzuschlagen. |
$query = "select ta_level, ta_meeting, ta_phase from task where ta_plnum = $ta_plnum and "; |
$query .= "ta_id < $ta_id order by ta_id desc"; |
|
if (!($result = QueryDB($db, $query))) { |
closeDB($db); |
return; |
} |
|
if (numrowsDB($result) > 0) { |
$data = fetchDB($result, 0); |
$level = $data[0]; |
$ta_meeting = $data[1]; |
$ta_phase = $data[2]; |
|
if ($level == 1) |
$level = 2; |
} else { |
$level = 1; |
$ta_meeting = 0; |
$ta_phase = 0; |
} |
?> |
<br> |
<form name="Task" action="plan.php" method="post"> |
<input type="hidden" name="ta_plnum" value="<? echo "$ta_plnum"; ?>"> |
<input type="hidden" name="headline" value="20"> |
<input type="hidden" name="menu" value="<? echo "$menu"; ?>"> |
<input type="hidden" name="ta_id" value="<? echo "$ta_id"; ?>"> |
<input type="hidden" name="func" value="SaveTask"> |
<? |
if (!$verrmodul) |
echo "<input type=\"hidden\" name=\"ta_risiko\" value=\"0\">\n"; |
?> |
<table class="input"> |
<tr> |
<th class="sel" colspan=2><? Output($db, 1, "Projekt:"); echo "$pl_prnum $pr_name"; ?></th> |
</tr> |
<tr> |
<td>Level:</td> |
<td> |
<? |
echo "<input type=\"text\" class=\"inputmust\" name=\"ta_level\" value=\"$level\" "; |
|
if ($ta_meeting) |
echo "onBlur=\"NumRange(this,1,$level)\" "; |
else |
echo "onBlur=\"NumRange(this,1,99)\" "; |
|
echo "size=2 maxlength=2>"; |
?> |
</td> |
</tr> |
<tr> |
<td><? Output($db, 2, "Taskname:"); ?></td> |
<td><input type="text" class="inputmust" name="ta_name" size=40 maxlength=50></td> |
</tr> |
<? |
if (!$pmlight) { ?> |
<tr> |
<td><? Output($db, 3, "Farbe:"); ?></td> |
<td><input type="text" class="inputmust" name="ta_color" value="ffffcc" size=8 maxlength=6> |
<?php |
echo "<button type=\"button\" onClick=\"javascript:open_window('plan.php?unum=$unum&rstufe=$rstufe&header=1&func=GetColor', 'Farbwahl', 217, 57)\">"; |
echo "<img src=\"image/coloredit.png\" border=0 width=15 height=15 alt=\"Farbwahl\"></button>"; |
echo "</td>\n</tr>\n"; |
} else { |
echo "<input type=\"hidden\" name=\"ta_color\" value=\"ffffcc\">\n"; |
} |
?> |
<tr> |
<td><? Output($db, 4, "Meilenstein:"); ?></td> |
<td><input type="checkbox" name="ta_meeting" value="1" onChange="javascript:if (this.checked == true) {document.Task.ende.value = document.Task.start.value;}"></td> |
</tr> |
<?php |
if ($phase == 1) { |
echo "<tr><td>" . GetMessage($db, 5, "Phase:") . "</td>\n<td>"; |
$query = "select kp_num, kp_phase from key_phase order by kp_num"; |
$result = QueryDB($db, $query); |
|
if (!result) |
return; |
|
$numrows = numrowsDB($result); |
$row = 0; |
echo "<select name=\"ta_phase\">\n"; |
|
while ($row < $numrows) { |
$data = fetchDB($result, $row); |
$kp_num = $data[0]; |
$kp_phase = $data[1]; |
|
if ($kp_num == $ta_phase) |
echo "<option value=\"$kp_num\" selected>$kp_num. $kp_phase</option>\n"; |
else |
echo "<option value=\"$kp_num\">$kp_num. $kp_phase</option>\n"; |
|
$row++; |
} |
|
echo "</td></tr>\n"; |
} else { |
$ta_phase = 0; |
} |
?> |
<tr> |
<td><? Output($db, 6, "Startdatum (%s):", $VisualDate); ?></td> |
<td><input type="text" class="inputmust" name="start" onChange="javascript:CheckDate(this, false)" onBlur="javascript:if (document.Task.ta_meeting.checked == true) {document.Task.ende.value = this.value;}" size=10 maxlength=10> |
<input type="button" value="..." onClick="javascript:open_window('calendar.php?header=1&target=window.opener.document.Task.start', 'Calendar', 200, 250)"> |
</td> |
</tr> |
<tr> |
<td><? Output($db, 7, "Endedatum (%s):", $VisualDate); ?></td> |
<td><input type="text" class="inputmust" name="ende" onChange="javascript:var stat = CheckDate(this, false);if (stat == true) {CheckDateOrder(document.Task.start, this);}" size=10 maxlength=10> |
<input type="button" value="..." onClick="javascript:open_window('calendar.php?header=1&target=window.opener.document.Task.ende', 'Calendar', 200, 250)"> |
</td> |
</tr> |
<? |
if ($verrmodul) { |
?> |
<tr> |
<td><? Output($db, 8, "Risikoaufschlag:"); ?></td> |
<td><input type="text" name="ta_risiko" value="0" onBlur="javascript:NumRange(this,0,100)" size="3" maxlength=3>%</td> |
</tr> |
<? |
} |
?> |
<tr> |
<td><? Output($db, 9, "Bereits erledigt:"); ?></td> |
<td><input type="text" name="ta_complete" value="0" size=3 maxlength=3>%</td> |
</tr> |
<tr> |
<td><? Output($db, 10, "Priorität:"); ?></td> |
<td><select name="ta_priority"> |
<option value="0"><? Output($db, 11, "Niedrig"); ?></option> |
<option value="1" selected><? Output($db, 12, "Normal"); ?></option> |
<option value="2"><? Output($db, 13, "Hoch"); ?></option> |
</select> |
</td> |
</tr> |
<tr> |
<td><? Output($db, 14, "Abhängigkeit:"); ?></td> |
<td><select name="ta_depend"> |
<option selected></option> |
<?php |
SelectTask($ta_plnum, true); |
closeDB($db); |
?> |
</select> |
<select name="ta_deptype"> |
<option value="2"><? Output(-1, 15, "Ende-Beginn"); ?></option> |
<option value="3"><? Output(-1, 16, "Ende-Ende"); ?></option> |
<option value="4"><? Output(-1, 17, "Beginn-Ende"); ?></option> |
<option value="1"><? Output(-1, 18, "Beginn-Beginn"); ?></option> |
</select> |
</td> |
</tr> |
<tr> |
<td valign="top"><? Output(-1, 19, "Kommentar:"); ?></td> |
<td><textarea name="ta_notiz" rows=5 cols=60></textarea></td> |
</tr> |
<tr> |
<td class="selnf" colspan=2> |
<table border=0 cellspacing=0 cellpadding=0><tr><td> |
<? |
Button(GetMessage(-1, 20, "Task Speichern"), "Task"); |
echo "</td><td> </td><td>"; |
ButtonLink(GetMessage(-1, 21, "Zurück"), "plan.php", "editplan=$ta_plnum&menu=$menu&headline=20"); |
?> |
</td></tr></table> |
</td> |
</tr> |
</table> |
<br> |
<?php |
echo "</form>\n"; |
} |
|
# Folgende Funktion zeigt die Erfassungsmaske fuer einen Task an. Es muss |
# die interne Datensatznummer des Plans uebergeben werden auf die sich der |
# Task bezieht. |
# |
function EditTask($ta_num) { |
global $dtformatshort; |
global $VisualDate; |
global $verrmodul; |
global $ab_datum; |
|
$menu = $_REQUEST['menu']; |
global $unum; |
global $rstufe; |
global $phase; |
global $numphase; |
global $pmlight; |
|
$db = OpenDB(); |
$query = "select ta_plnum, ta_id, ta_depend, ta_deptype, ta_name, "; |
$query .= "ta_color, ta_meeting, ta_start, ta_duration, ta_complete, "; |
$query .= "ta_priority, ta_level, ta_phase, ta_notiz, ta_risiko from task "; |
$query .= "where ta_num = $ta_num"; |
|
$result = QueryDB($db, $query); |
$numrows = numrowsDB($result); |
|
if ($numrows != 1) { |
Error(GetMessage($db, 340, "Interner Fehler: Task \"%d\" existiert nicht!", $ta_num)); |
return; |
} |
|
$data = fetchDB($result, 0); |
$ta_plnum = $data[0]; |
$ta_id = $data[1]; |
$ta_depend = $data[2]; |
$ta_deptype = $data[3]; |
$ta_name = $data[4]; |
$ta_color = $data[5]; |
$ta_meeting = $data[6]; |
$ta_start = $data[7]; |
$ta_duration = $data[8]; |
$ta_complete = $data[9]; |
$ta_priority = $data[10]; |
$ta_level = $data[11]; |
$ta_phase = $data[12]; |
$ta_notiz = $data[13]; |
$ta_risiko = $data[14]; |
$color = dechex($ta_color); |
$len = strlen($color); |
|
while ($len < 6) { |
$color = "0" . $color; |
$len++; |
} |
|
# Ermitteln, ob der Task bereits Mitarbeiter zugewiesen hat. In |
# diesem Fall darf der Level nicht geaendert werden und es darf |
# kein Meilenstein werden. |
$query = "select count(*) from allocation where al_task = $ta_num"; |
|
if (!($result = QueryDB($db, $query))) { |
closeDB($db); |
return; |
} |
|
$data = fetchDB($result, 0); |
$anz = $data[0]; |
|
$query = "select plan.pl_prnum, project.pr_name from plan, project "; |
$query .= "where plan.pl_num = $ta_plnum and "; |
$query .= "project.pr_num = plan.pl_prnum"; |
$result = QueryDB($db, $query); |
$data = fetchDB($result, 0); |
$pl_prnum = $data[0]; |
$pr_name = $data[1]; |
echo "<p class=\"cry\">" . GetMessage($db, 1, "Projekt:") . " $pl_prnum $pr_name</p>"; |
# Datum des letzten Teilprojektabschluss ermitteln |
$query = "select ab_datum from abschluss where "; |
$query .= "ab_prnum = $pl_prnum order by ab_datum desc"; |
|
if (!($result = QueryDB($db, $query))) { |
closeDB($db); |
return; |
} |
|
if (numrowsDB($result) > 0) { |
$data = fetchDB($result, 0); |
$ab_datum = $data[0]; |
} else |
$ab_datum = 0; |
|
# Start des Tasks ermitteln. Gibt es breits IST-Buchungen auf |
# diesen Plan, dann darf der Start des Tasks nicht nach die erste |
# IST-Buchung geschoben werden. |
$query = "select wd_datum from wdone where "; |
$query .= "wd_task = $ta_num and wd_datum <= $ta_start "; |
$query .= "order by wd_datum"; |
|
if (!($reswd = QueryDB($db, $query))) |
return; |
|
$rows = numrowsDB($reswd); |
|
if ($rows > 0) { |
$data = fetchDB($reswd, 0); |
$wd_datum = $data[0]; |
} |
# Finden der folgenden Tasks um im Falle eines Ordners automatisch |
# das richtige Beginn- und Endedatum zu setzen. |
$query = "select ta_level, ta_meeting, ta_start,"; |
$query .= "ta_start+ta_duration*86400 from task where "; |
$query .= "ta_plnum = $ta_plnum and ta_id > $ta_id order by ta_id"; |
|
if (!($result = QueryDB($db, $query))) { |
closeDB($db); |
return; |
} |
|
$tstart = 0; |
$tend = 0; |
|
if (($rows = numrowsDB($result)) > 0) { |
$j = 0; |
|
while ($j < $rows) { |
$data = fetchDB($result, $j); |
$xlevel = $data[0]; |
$xmeeting = $data[1]; |
$xstart = $data[2]; |
$xend = $data[3]; |
|
if ($xlevel <= $ta_level) |
break; |
|
if ($tstart == 0 || $tstart > $xstart) |
$tstart = $xstart; |
|
if ($tend < $xend) { |
if ($xmeeting) { |
if ($tend < $xstart) |
$tend = $xstart; |
} else |
$tend = $xend; |
} |
|
$j++; |
} |
} |
?> |
<br> |
<form name="Task" action="plan.php" method="post"> |
<input type="hidden" name="ta_num" value="<? echo "$ta_num"; ?>"> |
<input type="hidden" name="ta_plnum" value="<? echo "$ta_plnum"; ?>"> |
<input type="hidden" name="headline" value="20"> |
<input type="hidden" name="menu" value="<? echo "$menu"; ?>"> |
<input type="hidden" name="ta_id" value="<? echo "$ta_id"; ?>"> |
<input type="hidden" name="folder" value="0"> |
<? |
if ($tstart > 0) { |
echo "<input type=\"hidden\" name=\"start\" value=\"". gmdate($dtformatshort, $tstart) . "\">\n"; |
echo "<input type=\"hidden\" name=\"folder\" value=\"1\">\n"; |
} else |
echo "<input type=\"hidden\" name=\"folder\" value=\"0\">\n"; |
|
if ($tend > 0) |
echo "<input type=\"hidden\" name=\"ende\" value=\"". gmdate($dtformatshort, $tend) . "\">\n"; |
|
if ($anz > 0 || $tstart > 0 || $tend > 0) |
echo "<input type=\"hidden\" name=\"ta_level\" value=\"$ta_level\">\n"; |
|
if (!$verrmodul) |
echo "<input type=\"hidden\" name=\"ta_risiko\" value=\"0\">\n"; |
?> |
<input type="hidden" name="func" value="SaveTask"> |
|
<table class="input"> |
<tr> |
<td>Level:</td> |
<? |
if ($anz > 0 || $tstart > 0 || $tend > 0) { |
?> |
<td><b><? echo "$ta_level"; ?></b></td> |
<? } else { ?> |
<td><input type="text" class="inputmust" name="ta_level" value="<? echo "$ta_level"; ?>" onBlur="NumRange(this,1,99)" size=2 maxlength=2></td> |
<? } ?> |
</tr> |
<tr> |
<td>Taskname:</td> |
<td><input type="text" class="inputmust" name="ta_name" value="<? echo htmlentities($ta_name); ?>" size=40 maxlength=50></td> |
</tr> |
<? |
if (!$pmlight) { ?> |
<tr> |
<td>Farbe:</td> |
<td><input type="text" name="ta_color" value="<? echo "$color"; ?>" size=8 maxlength=6> |
<?php |
echo "<button type=\"button\" onClick=\"javascript:open_window('plan.php?header=1&func=GetColor', 'Farbwahl', 217, 57)\">"; |
echo "<img src=\"image/coloredit.png\" border=0 width=15 height=15 alt=\"Farbwahl\"></button>"; |
echo "</td></tr>\n"; |
} else { |
echo "<input type=\"hidden\" name=\"ta_color\" value=\"ffffcc\">\n"; |
} |
?> |
<tr> |
<td>Meilenstein:</td> |
<?php |
if ($ta_meeting) { |
echo "<td><input type=\"checkbox\" name=\"ta_meeting\" value=\"1\" checked "; |
} else { |
echo "<td><input type=\"checkbox\" name=\"ta_meeting\" value=\"1\" "; |
} |
|
echo "onChange=\"javascript:if (this.checked == true) {document.Task.ende.value = document.Task.start.value;}\" "; |
|
if ($anz > 0 || $tstart > 0 || $tend > 0) |
echo "disabled"; |
|
echo "></td>\n"; |
?> |
</tr> |
<?php |
if ($phase == 1) { |
echo "<tr><td>Phase:</td>\n<td>"; |
$query = "select kp_num, kp_phase from key_phase order by kp_num"; |
$result = QueryDB($db, $query); |
|
if (!$result) |
return; |
|
$numrows = numrowsDB($result); |
$row = 0; |
echo "<select name=\"ta_phase\">\n"; |
|
while ($row < $numrows) { |
$data = fetchDB($result, $row); |
$kp_num = $data[0]; |
$kp_phase = $data[1]; |
|
if ($ta_phase == $kp_num) |
echo "<option value=\"$kp_num\" selected>$kp_num. $kp_phase</option>\n"; |
else |
echo "<option value=\"$kp_num\">$kp_num. $kp_phase</option>\n"; |
|
$row++; |
} |
|
echo "</td></tr>\n"; |
} |
?> |
<tr> |
<td><? Output($db, 6, "Startdatum (%s):", $VisualDate); ?></td> |
<?php |
# Wenn $tstart > 0 ist, dann handelt es sich um einen Ordner! |
if ($tstart > 0) |
$tm = gmdate($dtformatshort, $tstart); |
else |
$tm = gmdate($dtformatshort, $ta_start); |
|
echo " <td><input type=\"text\" class=\"inputmust\" "; |
|
if ($tstart > 0 || ($tstart > 0 && $tstart <= $ab_datum) || ($tstart <= 0 && $ta_start <= $ab_datum)) { |
echo "disabled "; |
$disabled = true; |
} else { |
echo "onChange=\"javascript:var stat = CheckDate(this, false);if (stat == true && document.Task.ta_meeting.checked == true) {document.Task.ende.value = this.value;}\" "; |
$disabled = false; |
} |
|
echo "name=\"start\" value=\"$tm\" size=10 maxlength=10>\n"; |
|
if ($tend > 0) |
$te = $tend; |
else |
$te = $ta_start + ($ta_duration * 86400); |
|
$tem = gmdate($dtformatshort, $te); |
|
if ($tstart == 0 && !$disabled) { |
?> |
<input type="button" value="..." onClick="javascript:open_window('calendar.php?header=1&edit=<? echo "$ta_start"; ?>&target=window.opener.document.Task.start', 'Calendar', 200, 250); document.Task.start.focus()"> |
<? |
} else if ($tstart == 0) { |
?> |
<input type="hidden" name="start" value="<? echo "$tm"; ?>"> |
<? |
} |
?> |
</td> |
</tr> |
<tr> |
<td><? Output($db, 7, "Endedatum (%s):", $VisualDate); ?></td> |
<td><input type="text" class="inputmust" name="ende" value="<? echo "$tem"; ?>" <? if ($tend > 0) echo "disabled"; ?> onChange="javascript:erg = CheckDate(this, false);if (erg == true) {CheckDateOrder(document.Task.start, this);}" size=10 maxlength=10> |
<? |
if ($tend == 0) { |
?> |
<input type="button" value="..." onClick="javascript:open_window('calendar.php?header=1&target=window.opener.document.Task.ende', 'Calendar', 200, 250); document.Task.ende.focus()"> |
<? |
} else { |
?> |
<input type="hidden" name="ende" value="<? echo "$tem"; ?>"> |
<? |
} |
?> |
</td> |
</tr> |
<? |
if ($verrmodul) { |
?> |
<tr> |
<td>Risikoaufschlag:</td> |
<td><input type="text" name="ta_risiko" value="<? echo "$ta_risiko"; ?>" onBlur="javascript:NumRange(this,0,100)" size="3" maxlength=3>%</td> |
</tr> |
<? |
} |
?> |
<tr> |
<td>Bereits erledigt:</td> |
<td><input type="text" name="ta_complete" value="<? echo "$ta_complete"; ?>" size=3 maxlength=3>%</td> |
</tr> |
<tr> |
<td>Priorität:</td> |
<td><select name="ta_priority"> |
<option value="0" <? if ($ta_priority == 0) echo "selected"; ?>>Niedrig</option> |
<option value="1" <? if ($ta_priority == 1) echo "selected"; ?>>Normal</option> |
<option value="2" <? if ($ta_priority == 2) echo "selected"; ?>>Hoch</option> |
</select> |
</td> |
</tr> |
<tr> |
<td>Abhängigkeit:</td> |
<td colspan=2><select name="ta_depend"> |
<?php |
if (strlen($ta_depend) == 0 || $ta_depend == 0) { |
echo "<option selected></option>\n"; |
} else { |
echo "<option></option>\n"; |
} |
|
$query = "select ta_num, ta_name, ta_id, ta_level, ta_depend, ta_meeting, ta_phase from task where ta_plnum = $ta_plnum order by ta_id"; |
$result = QueryDB($db, $query); |
$numrows = numrowsDB($result); |
$row = 0; |
$snum = "1"; |
$olevel = 0; |
$db2 = OpenDB(); |
|
while ($row < $numrows) { |
$data = fetchDB($result, $row); |
$num = $data[0]; |
$name = $data[1]; |
$id = $data[2]; |
$level = $data[3]; |
$depend = $data[4]; |
$meeting = $data[5]; |
$tphase = $data[6]; |
|
$query = "select ta_level from task where ta_plnum = $ta_plnum and ta_id > $id order by ta_id"; |
$result2 = QueryDB($db2, $query); |
$nr = numrowsDB($result2); |
|
if ($nr > 0) { |
$data = fetchDB($result2, 0); |
$xlevel = $data[0]; |
} else { |
$xlevel = $ta_level; |
} |
|
if ($olevel == 0) { |
$lev = 0; |
$olevel = $level; |
$dir = -3; |
} else if ($olevel < $level) { |
$lev = $level - 1; |
$olevel = $level; |
$dir = -3; |
} else if ($olevel == $level) { |
$lev = $level - 1; |
$dir = 0; |
} else if ($olevel > $level) { |
$lev = $level - 1; |
$olevel = $level; |
$dir = -1; |
} |
|
$snum = kNumber($snum, $lev, $dir); |
|
if ($phase == 1 && $numphase == 1) { |
$sarr = explode(".", $snum); |
$sarr[0] = $tphase; |
$snum = implode(".", $sarr); |
} |
|
if ($ta_depend > 0 && $ta_depend == $id) { |
echo "<option value=\"$id\" selected>$snum $name</option>\n"; |
} else { |
if (!$meeting && $level > 1 && $xlevel <= $level) |
echo "<option value=\"$id\">$snum $name</option>\n"; |
} |
|
$row++; |
} |
?> |
</select> |
<select name="ta_deptype"> |
<option value="2" <? if ($ta_deptype == 2) echo "selected"; ?>>Ende-Beginn</option> |
<option value="3" <? if ($ta_deptype == 3) echo "selected"; ?>>Ende-Ende</option> |
<option value="4" <? if ($ta_deptype == 4) echo "selected"; ?>>Beginn-Ende</option> |
<option value="1" <? if ($ta_deptype == 1) echo "selected"; ?>>Beginn-Beginn</option> |
</select> |
</td> |
</tr> |
<tr> |
<td valign="top">Kommentar:</td> |
<td colspan=2><textarea name="ta_notiz" rows=5 cols=60><? echo htmlentities($ta_notiz); ?></textarea></td> |
</tr> |
<tr> |
<td class="selnf" colspan=2> |
<table border=0 cellspacing=0 cellpadding=0><tr><td> |
<? |
Button("Task Speichern", "Task"); |
echo "</td><td> </td><td>"; |
ButtonLink("Zurück", "plan.php", "editplan=$ta_plnum&menu=$menu&headline=20"); |
?> |
</td></tr></table> |
</td> |
</tr> |
</table> |
<br> |
<?php |
echo "</form>\n"; |
closeDB($db); |
} |
|
# Folgende Funktion laesst die Auswahl einer Farbe zu, die dann in ein |
# bestimmtes Feld der Maske "Task" geschrieben wird (function AddTask). |
# Die Funktion wird ueber ein Java Script innerhalb eines eigenen Fensters |
# aufgerufen. Neben einer Farbtafel enthaelt das Fenster noch einen Button |
# ueber den es sich schliessen laesst. |
# |
function GetColor() { |
?> |
<map name="farbe"> |
<area shape="rect" coords="1,1,26,10" href="javascript:Farb('255','128','128')"> |
<area shape="rect" coords="28,1,53,10" href="javascript:Farb('255','255','128')"> |
<area shape="rect" coords="55,1,80,10" href="javascript:Farb('128','255','128')"> |
<area shape="rect" coords="82,1,107,10" href="javascript:Farb('0','255','128')"> |
<area shape="rect" coords="109,1,134,10" href="javascript:Farb('128','255','255')"> |
<area shape="rect" coords="136,1,161,10" href="javascript:Farb('0','128','255')"> |
<area shape="rect" coords="163,1,188,10" href="javascript:Farb('255','128','192')"> |
<area shape="rect" coords="190,1,215,10" href="javascript:Farb('255','128','255')"> |
<area shape="rect" coords="1,12,26,21" href="javascript:Farb('255','0','0')"> |
<area shape="rect" coords="28,12,53,21" href="javascript:Farb('255','255','0')"> |
<area shape="rect" coords="55,12,80,21" href="javascript:Farb('128','255','0')"> |
<area shape="rect" coords="82,12,107,21" href="javascript:Farb('0','255','64')"> |
<area shape="rect" coords="109,12,134,21" href="javascript:Farb('0','255','255')"> |
<area shape="rect" coords="136,12,161,21" href="javascript:Farb('0','128','192')"> |
<area shape="rect" coords="163,12,188,21" href="javascript:Farb('128','128','192')"> |
<area shape="rect" coords="190,12,215,21" href="javascript:Farb('255','0','255')"> |
<area shape="rect" coords="1,23,26,32" href="javascript:Farb('128','64','64')"> |
<area shape="rect" coords="28,23,53,32" href="javascript:Farb('255','128','64')"> |
<area shape="rect" coords="55,23,80,32" href="javascript:Farb('0','255','0')"> |
<area shape="rect" coords="82,23,107,32" href="javascript:Farb('0','128','128')"> |
<area shape="rect" coords="109,23,134,32" href="javascript:Farb('0','64','128')"> |
<area shape="rect" coords="136,23,161,32" href="javascript:Farb('128','128','255')"> |
<area shape="rect" coords="163,23,188,32" href="javascript:Farb('128','0','64')"> |
<area shape="rect" coords="190,23,215,32" href="javascript:Farb('255','0','128')"> |
<area shape="rect" coords="1,34,26,43" href="javascript:Farb('128','0','0')"> |
<area shape="rect" coords="28,34,53,43" href="javascript:Farb('255','128','0')"> |
<area shape="rect" coords="55,34,80,43" href="javascript:Farb('0','128','0')"> |
<area shape="rect" coords="82,34,107,43" href="javascript:Farb('0','128','64')"> |
<area shape="rect" coords="109,34,134,43" href="javascript:Farb('0','0','255')"> |
<area shape="rect" coords="136,34,161,43" href="javascript:Farb('0','0','160')"> |
<area shape="rect" coords="163,34,188,43" href="javascript:Farb('128','0','128')"> |
<area shape="rect" coords="190,34,215,43" href="javascript:Farb('128','0','255')"> |
<area shape="rect" coords="1,45,26,54" href="javascript:Farb('64','0','0')"> |
<area shape="rect" coords="28,45,53,54" href="javascript:Farb('128','64','0')"> |
<area shape="rect" coords="55,45,80,54" href="javascript:Farb('0','64','0')"> |
<area shape="rect" coords="82,45,107,54" href="javascript:Farb('0','64','64')"> |
<area shape="rect" coords="109,45,134,54" href="javascript:Farb('0','0','128')"> |
<area shape="rect" coords="136,45,161,54" href="javascript:Farb('0','0','64')"> |
<area shape="rect" coords="163,45,188,54" href="javascript:Farb('64','0','64')"> |
<area shape="rect" coords="190,45,215,54" href="javascript:Farb('64','0','128')"> |
<area shape="rect" coords="1,56,26,65" href="javascript:Farb('0','0','0')"> |
<area shape="rect" coords="28,56,53,65" href="javascript:Farb('128','128','0')"> |
<area shape="rect" coords="55,56,80,65" href="javascript:Farb('128','128','64')"> |
<area shape="rect" coords="82,56,107,65" href="javascript:Farb('128','128','128')"> |
<area shape="rect" coords="109,56,134,65" href="javascript:Farb('64','128','128')"> |
<area shape="rect" coords="136,56,161,65" href="javascript:Farb('192','192','192')"> |
<area shape="rect" coords="163,56,188,65" href="javascript:Farb('64','64','64')"> |
<area shape="rect" coords="190,56,215,65" href="javascript:Farb('255','255','255')"> |
</map> |
<img src="image/farben.png" width="217" height="67" border="0" vspace="3" alt="" usemap="#farbe"> |
<form name="schliessen"> |
<? |
ButtonProg("Schliessen", "self.close()"); |
// <input type="button" name="close" value="Schliessen" onClick="javascript:self.close()"> |
echo "</form>\n"; |
} |
|
# Die folgenden zwei Funktionen loeschen einen bestehenden Plan |
# und alle damit verknpften Tasks. Neben dem Superuser darf das auch |
# vom Projektleiter durchgefuehrt werden. |
# |
function AskDelete($pl_num) { |
global $phase; |
|
$headline = $_REQUEST['headline']; |
$menu = $_REQUEST['menu']; |
$nav = "pl_num=$pl_num&menu=$menu&func=DeletePlan&headline=21"; |
?> |
<br> |
<form action="plan.php" method="post"> |
<table border=2 class="alarm"> |
<tr><td colspan=2><big>Warnung!</big><br><br> |
Sie sind im Begriff alle erfassten Tasks dieses Plans zu |
löschen!<br><br> |
Wollen Sie wirklich diesen Plan mit allen Daten |
unwiederbringlich löschen?<br> |
</td> |
</tr> |
<tr> |
<td><center><input type="button" name="yes" value="Löschen" onClick="javascript:MoveTo('plan.php','yes=yes&<? echo "$nav"; ?>')"></center></td> |
<td><center><input type="button" name="no" value="Abbruch" onClick="javascript:MoveTo('plan.php','no=no&<? echo "$nav"; ?>')"></center></td> |
</tr> |
</table> |
</form> |
<?php |
} |
|
function DeletePlan() { |
global $phase; |
|
$pl_num = $_REQUEST['pl_num']; |
$db = OpenDB(); |
QueryDB($db, "begin"); |
$query = "select ta_num from task where ta_plnum = $pl_num"; |
$result = QueryDB($db, $query); |
|
if (!result) { |
QueryDB($db, "rollback"); |
closeDB($db); |
return false; |
} |
|
$numrows = numrowsDB($result); |
$row = 0; |
|
while ($row < $numrows) { |
$data = fetchDB($result, $row); |
$ta_num = $data[0]; |
$query = "delete from allocation where al_task = $ta_num"; |
|
if (!QueryDB($db, $query)) { |
QueryDB($db, "rollback"); |
closeDB($db); |
return false; |
} |
|
$row++; |
} |
|
$query = "delete from task where ta_plnum = $pl_num"; |
|
if (!QueryDB($db, $query)) { |
QueryDB($db, "rollback"); |
closeDB($db); |
return false; |
} |
|
$query = "delete from plan where pl_num = $pl_num"; |
|
if (!QueryDB($db, $query)) { |
QueryDB($db, "rollback"); |
closeDB($db); |
return false; |
} |
|
QueryDB($db, "commit"); |
Journal(101, "plan.php: DeletePlan: pl_num=$pl_num", $db); |
closeDB($db); |
return true; |
} |
|
# Die folgenden zwei Funktionen loeschen einen bestehenden Task |
# und alle damit verknpften Mitarbeiter. Neben dem Superuser darf das auch |
# vom Projektleiter durchgefuehrt werden. |
# |
function AskDeleteTask($ta_num) { |
global $phase; |
|
$headline = $_REQUEST['headline']; |
$menu = $_REQUEST['menu']; |
$ta_plnum = $_REQUEST['ta_plnum']; |
$nav = "ta_num=$ta_num&ta_plnum=$ta_plnum&func=DeleteTask&menu=$menu&headline=21"; |
|
$db = OpenDB(); |
$query = "select plan.pl_prnum, project.pr_name from plan, project "; |
$query .= "where plan.pl_num = $ta_plnum and project.pr_num = plan.pl_prnum"; |
$result = QueryDB($db, $query); |
$data = fetchDB($result, 0); |
$pl_prnum = $data[0]; |
$pr_name = $data[1]; |
echo "<p class=\"cry\">Projekt: $pl_prnum $pr_name</p>"; |
closeDB($db); |
?> |
<br> |
<form action="plan.php" method="post"> |
<table border=2 class="alarm"> |
<tr><td colspan=2><big>Warnung!</big><br><br> |
Sie sind im Begriff einen Task mit allen seinen Abhängigkeiten |
zu löschen!<br><br> |
Wollen Sie wirklich diesen Task unwiederbringlich löschen?<br> |
</td> |
</tr> |
<tr> |
<td><center><input type="button" name="yes" value="Löschen" onClick="javascript:MoveTo('plan.php','yes=yes&<? echo "$nav"; ?>')"></center></td> |
<td><center><input type="button" name="no" value="Abbruch" onClick="javascript:MoveTo('plan.php','no=no&<? echo "$nav"; ?>')"></center></td> |
</tr> |
</table> |
</form> |
<?php |
} |
|
function DeleteTask() { |
global $phase; |
|
$ta_num = $_REQUEST['ta_num']; |
|
if (!isset($ta_num) || $ta_num < 1) { |
Error("Interner Fehler: DeleteTask: Tasknummer fehlt oder ist ungültig!"); |
return false; |
} |
|
$db = OpenDB(); |
# Fuer das E-Journal brauchen wir die Plan- und Projektnummer! |
$query = "select pl_num, pl_prnum, ta_name from task, plan where "; |
$query .= "pl_num = ta_plnum and ta_num = $ta_num"; |
|
if (!($result = QueryDB($db, $query))) { |
closeDB($db); |
return false; |
} |
|
$data = fetchDB($result, 0); |
$pl_num = $data[0]; |
$pl_prnum = $data[1]; |
$ta_name = $data[2]; |
|
QueryDB($db, "begin"); |
$query = "delete from allocation where al_task = $ta_num"; |
$result = QueryDB($db, $query); |
|
if (!$result) { |
QueryDB($db, "rollback"); |
Error("SQL-Error: $query"); |
closeDB($db); |
return false; |
} |
|
$query = "delete from task where ta_num = $ta_num"; |
|
if (!QueryDB($db, $query)) { |
QueryDB($db, "rollback"); |
Error("SQL-Error: $query"); |
closeDB($db); |
return false; |
} |
|
QueryDB($db, "commit"); |
Journal(100, "plan.php: DeleteTask: ta_num=$ta_num $ta_name, pl_num=$pl_num, Projekt: $pl_prnum", $db); |
closeDB($db); |
return true; |
} |
|
# Die folgenden zwei Funktionen loeschen einen bestehenden Task |
# und alle damit verknpften Mitarbeiter. Neben dem Superuser darf das auch |
# vom Projektleiter durchgefuehrt werden. |
# |
function AskDeleteMa() { |
global $phase; |
global $dtformatshort; |
|
$headline = $_REQUEST['headline']; |
$menu = $_REQUEST['menu']; |
$pl_num = $_REQUEST['pl_num']; |
$al_task = $_REQUEST['al_task']; |
$ressource = $_REQUEST['ressource']; |
$nav = "al_task=$al_task&pl_num=$pl_num&ressource=$ressource&func=DeleteMa&menu=$menu&headline=$headline"; |
|
$db = OpenDB(); |
$query = "select plan.pl_prnum, project.pr_name from plan, project "; |
$query .= "where plan.pl_num = $pl_num and project.pr_num = plan.pl_prnum"; |
$result = QueryDB($db, $query); |
$data = fetchDB($result, 0); |
$pl_prnum = $data[0]; |
$pr_name = $data[1]; |
echo "<p class=\"cry\">Projekt: $pl_prnum $pr_name</p>"; |
|
$query = "select ta_name, ta_start, ta_duration from task "; |
$query .= "where ta_num = $al_task"; |
$result = QueryDB($db, $query); |
$data = fetchDB($result, 0); |
$ta_name = $data[0]; |
$ta_start = $data[1]; |
$ta_duration = $data[2]; |
|
$query = "select am_hours, am_role, am_nname, am_vname "; |
$query .= "from allocmi where am_task = $al_task and am_ressource = $ressource"; |
$result = QueryDB($db, $query); |
$rows = 0; |
$numrows = numrowsDB($result); |
|
?> |
<br> |
<form action="plan.php" method="post"> |
<table border=2 class="alarm"> |
<tr><td colspan=2><big>Warnung!</big><br><br> |
Sie sind im Begriff einen Mitarbeiter von einem Task |
zu löschen!<br> |
<center><table border=1><tr> |
<td class="tbhead">Taskname</td> |
<td class="tbhead">Dauer</td> |
<td class="tbhead">Start</td></tr> |
<?php |
echo "<tr><td>$ta_name</td>\n"; |
echo "<td>$ta_duration</td>\n"; |
$dt = gmdate($dtformatshort, $ta_start); |
echo "<td>$dt</td></tr>\n"; |
echo "</table></center>\n"; |
|
echo "<center><p>"; |
|
while ($rows < $numrows) { |
$data = fetchDB($result, $rows); |
$am_hours = $data[0]; |
$am_role = $data[1]; |
$am_nname = $data[2]; |
$am_vname = $data[3]; |
|
if ($rows == 0) { |
echo "$am_nname $am_vname, $am_role: "; |
printf("%s", FormatNum($am_hours, 3)); |
} |
else |
printf(", %s", FormatNum($am_hours, 3)); |
|
$rows++; |
} |
|
echo "</p></center>\n"; |
closeDB($db); |
?> |
Wollen Sie wirklich diesen Mitarbeiter unwiederbringlich löschen?<br> |
</td> |
</tr> |
<tr> |
<td><center><input type="button" name="yes" value="Löschen" onClick="javascript:MoveTo('plan.php','yes=yes&<? echo "$nav"; ?>')"></center></td> |
<td><center><input type="button" name="no" value="Abbruch" onClick="javascript:MoveTo('plan.php','no=no&<? echo "$nav"; ?>')"></center></td> |
</tr> |
</table> |
</form> |
<?php |
} |
|
function DeleteMa() { |
$al_task = $_REQUEST['al_task']; |
$ressource = $_REQUEST['ressource']; |
|
$db = OpenDB(); |
QueryDB($db, "begin"); |
$query = "delete from allocation where al_task = $al_task and "; |
$query .= "al_ressource = $ressource"; |
$result = QueryDB($db, $query); |
|
if (!result) { |
QueryDB($db, "rollback"); |
closeDB($db); |
return false; |
} |
|
QueryDB($db, "commit"); |
Journal(105, "plan.php: DeleteMa: ressource=$ressource; task=$al_task", $db); |
closeDB($db); |
return true; |
} |
|
# Folgende Funktion wird von SaveTask() aufgerufen. |
# Der Aufruf erfolgt, wenn bei einem Task das Startdatum so geaendert |
# wurde, dass es gegenueber dem Alten in der Vergangenheit liegt. Ist das |
# der Fall, koennen die betroffenen Perioden der zugeordneten Mitarbeiter |
# geloescht werden. |
# |
function AskObsoleteMA() { |
global $menu; |
global $headline; |
global $phase; |
|
$ta_num = $_REQUEST['ta_num']; |
$ta_plnum = $_REQUEST['ta_plnum']; |
$ta_id = $_REQUEST['ta_id']; |
$ta_level = $_REQUEST['ta_level']; |
$ta_name = $_REQUEST['ta_name']; |
$ta_color = $_REQUEST['ta_color']; |
$ta_meeting = $_REQUEST['ta_meeting']; |
$start = $_REQUEST['start']; |
$ende = $_REQUEST['ende']; |
$ta_duration = $_REQUEST['ta_duration']; |
$ta_complete = $_REQUEST['ta_complete']; |
$ta_priority = $_REQUEST['ta_priority']; |
$ta_depend = $_REQUEST['ta_depend']; |
$ta_deptype = $_REQUEST['ta_deptype']; |
$ta_notiz = $_REQUEST['ta_notiz']; |
|
if ($phase) |
$ta_phase = $_REQUEST['ta_phase']; |
else |
$ta_phase = 0; |
|
if (!isset($ta_meeting)) |
$ta_meeting = 0; |
|
echo "<form name=\"obsolete\" action=\"plan.php\" method=\"post\">\n"; |
echo "<input type=\"hidden\" name=\"ta_num\" value=\"$ta_num\">\n"; |
echo "<input type=\"hidden\" name=\"ta_plnum\" value=\"$ta_plnum\">\n"; |
echo "<input type=\"hidden\" name=\"ta_id\" value=\"$ta_id\">\n"; |
echo "<input type=\"hidden\" name=\"ta_level\" value=\"$ta_level\">\n"; |
echo "<input type=\"hidden\" name=\"ta_name\" value=\"$ta_name\">\n"; |
echo "<input type=\"hidden\" name=\"ta_color\" value=\"$ta_color\">\n"; |
echo "<input type=\"hidden\" name=\"ta_meeting\" value=\"$ta_meeting\">\n"; |
echo "<input type=\"hidden\" name=\"ta_duration\" value=\"$ta_duration\">\n"; |
echo "<input type=\"hidden\" name=\"ta_complete\" value=\"$ta_complete\">\n"; |
echo "<input type=\"hidden\" name=\"ta_priority\" value=\"$ta_priority\">\n"; |
echo "<input type=\"hidden\" name=\"ta_depend\" value=\"$ta_depend\">\n"; |
echo "<input type=\"hidden\" name=\"ta_deptype\" value=\"$ta_deptype\">\n"; |
echo "<input type=\"hidden\" name=\"ta_phase\" value=\"$ta_phase\">\n"; |
echo "<input type=\"hidden\" name=\"ta_notiz\" value=\"$ta_notiz\">\n"; |
echo "<input type=\"hidden\" name=\"start\" value=\"$start\">\n"; |
echo "<input type=\"hidden\" name=\"ende\" value=\"$ende\">\n"; |
echo "<input type=\"hidden\" name=\"menu\" value=\"$menu\">\n"; |
echo "<input type=\"hidden\" name=\"headline\" value=\"$headline\">\n"; |
echo "<input type=\"hidden\" name=\"func\" value=\"SaveObsoleteTask\">\n"; |
?> |
<center> |
<table border=2 class="alarm" width="50%"> |
<tr> |
<td colspan=2><big>Hinweis!</big><br><br> |
<? |
Output(-1, 351, |
" Sie haben das Start− bzw. Endedatum des Tasks |
geändert. Diesem Task sind jedoch bereits Mitarbeiter |
zugeordnet, deren Perioden nun (teilweise) außerhalb des |
Zeitraums des Tasks fallen würden.<br><br> |
Wenn Sie folgende Frage mit <b>JA</b> beantworten, werden jene |
Perioden geloescht, die außerhalb des Taskzeitraums liegen!<br><br> |
Wollen Sie die Perioden der zugeordneten Mitarbeiter die außerhalb des |
Taskzeitraums liegen wirklich loeschen?"); |
?> |
</td> |
</tr> |
<tr> |
<? |
echo "<td align=\"center\">"; |
Button("Ja", "obsolete"); |
echo "</td><td align=\"center\">"; |
ButtonLink("Abbrechen", "plan.php", "editplan=$ta_plnum&menu=$menu&headline=$headline"); |
echo "</td>"; |
?> |
</tr> |
</table> |
</center> |
</form> |
<?php |
} |
|
function SaveTask($doit=false) { |
global $phase; |
$ta_num = $_REQUEST['ta_num']; |
$ta_plnum = $_REQUEST['ta_plnum']; |
$ta_id = $_REQUEST['ta_id']; |
$ta_level = $_REQUEST['ta_level']; |
$ta_name = $_REQUEST['ta_name']; |
$ta_color = $_REQUEST['ta_color']; |
$ta_meeting = $_REQUEST['ta_meeting']; |
$start = $_REQUEST['start']; |
$end = $_REQUEST['ende']; |
$ta_duration = $_REQUEST['ta_duration']; |
$ta_complete = $_REQUEST['ta_complete']; |
$ta_priority = $_REQUEST['ta_priority']; |
$ta_depend = $_REQUEST['ta_depend']; |
$ta_deptype = $_REQUEST['ta_deptype']; |
$ta_notiz = $_REQUEST['ta_notiz']; |
$ta_risiko = $_REQUEST['ta_risiko']; |
$folder = $_REQUEST['folder']; |
|
if ($phase) |
$ta_phase = $_REQUEST['ta_phase']; |
else |
$ta_phase = 0; |
|
# Plausibilitaetspruefungen |
$err = 0; |
|
if (!isset($ta_plnum) || $ta_plnum < 1) { |
Error(GetMessage(-1, 341, "Interner Fehler: Plannummer fehlt!")); |
$err = 1; |
} |
|
if (!isset($ta_id) || $ta_id < 1) { |
Error(GetMessage(-1, 342, "Interner Fehler: Keine oder ungültige ID-Nummer!")); |
$err = 1; |
} |
|
if (strlen($ta_name) < 1) { |
Error(GetMessage(-1, 343, "Ein Task muss einen Namen haben!")); |
$err = 1; |
} |
|
if (strlen($ta_color) != 6) { |
Error(GetMessage(-1, 344, "Ungültiger Farbcode! Standard (hellgelb) wurde gesetzt!")); |
$ta_color = "ffffcc"; |
} |
|
if (!isset($ta_meeting)) { |
$ta_meeting = 0; |
} |
|
if (!isset($ta_risiko) || $ta_meeting) |
$ta_risiko = 0; |
|
if (strlen($start) < 8 || str_wordcount($start) != 3) { |
Error(GetMessage(-1, 345, "Ungültiges Startdatum! (%s)", $start)); |
$err = 1; |
} |
|
if (!$ta_meeting && (strlen($end) < 8 || str_wordcount($end) != 3)) { |
Error(GetMessage(-1, 346, "Ungültiges Endedatum! (%s)", $end)); |
$err = 1; |
} |
|
$db = OpenDB(); |
# Datum des letzten Teilprojektabschlusses ermitteln. |
$query = "select pl_prnum from plan where pl_num = $ta_plnum"; |
|
if (!($result = QueryDB($db, $query))) { |
closeDB($db); |
return false; |
} |
|
$data = fetchDB($result, 0); |
$pl_prnum = $data[0]; |
|
$query = "select ab_datum from abschluss where ab_prnum = $pl_prnum "; |
$query .= "order by ab_Datum desc"; |
|
if (!($result = QueryDB($db, $query))) { |
closeDB($db); |
return false; |
} |
|
if (numrowsDB($result) > 0) { |
$data = fetchDB($result, 0); |
$ab_datum = $data[0]; |
} else |
$ab_datum = 0; |
|
# Pruefen ob die eingegebenen Datum korrekt sind. |
$dt = explode(".", $start); |
$ta_start = gmmktime(0, 0, 0, $dt[1], $dt[0], $dt[2]); |
|
// if (isset($ta_num) && $ta_num > 0 && $ta_start <= $ab_datum) { |
// Error(GetMessage($db, 349, "Das Startdatum darf nicht vor dem Datum des letzten Teilprojektabschluß sein!")); |
// $err = 1; |
// } |
|
if (!$ta_meeting) { |
$dt = explode(".", $end); |
$ta_end = gmmktime(0, 0, 0, $dt[1], $dt[0], $dt[2]); |
} else |
$ta_end = $ta_start; |
|
if ($ta_meeting == 0 && $ta_start > $ta_end) { |
Error(GetMessage(-1, 347, "Das Startdatum darf nicht größer als das Endedatum sein!")); |
$err = 1; |
} |
|
// if (!$err && isset($ta_num) && $ta_num > 0 && $ta_end <= $ab_datum) { |
// Error(GetMessage($db, 350, "Das Endedatum darf nicht vor dem Datum des letzten Teilprojektabschluß sein!")); |
// $err = 1; |
// } |
|
if (!isset($ta_depend) || strlen($ta_depend) == 0) { |
$ta_depend = 0; |
} |
|
if ($ta_complete > 100) { |
$ta_complete = 100; |
} |
|
# Wenn der vorhergehende Task, sofern einer existiert, ein Meilenstein |
# ist, dann darf der Level des folgenden Tasks nicht hoeher sein. |
$query = "select ta_level, ta_meeting from task where "; |
$query .= "ta_plnum = $ta_plnum and ta_id < $ta_id order by ta_id desc"; |
|
if (!($result = QueryDB($db, $query))) { |
closeDB($db); |
return false; |
} |
|
if (numrowsDB($result) > 0) { |
$data = fetchDB($result, 0); |
$level = $data[0]; |
$meeting = $data[1]; |
|
if ($meeting && !$ta_meeting && $ta_level > $level) { |
Error(GetMessage($db, 348, "Der \"Level\" ist außerhalb des gültigen Bereichs!")); |
$err = 1; |
} |
} |
|
if ($ta_level < 1 || $ta_level > 99) { |
Error(GetMessage($db, 348, "Der \"Level\" ist außerhalb des gültigen Bereichs!")); |
$err = 1; |
} |
|
if ($err == 1) { |
closeDB($db); |
return false; |
} |
|
# Umwandlungen |
$ta_color = hexdec($ta_color); |
|
if (!$ta_meeting) |
$ta_duration = ($ta_end - $ta_start) / 86400; |
else |
$ta_duration = 0; |
|
# Aendern wir einen bestehenden Datensatz, oder speichern wir einen |
# neuen? |
if (isset($ta_num) && $ta_num > 0) { // neuer Datensatz? |
$query = "select ta_start, ta_duration from task where ta_num = $ta_num"; |
|
if (!($result = QueryDB($db, $query))) { |
closeDB($db); |
return false; |
} |
|
$numrows = numrowsDB($result); |
|
# Pruefen ob das eventuell geaenderte Startdatum nicht in einer |
# zukuenftigen Periode liegt und bereits zugewiesene Mitarbeiter |
# in der Luft haengen wuerden. Ist das der Fall, muss der User |
# darauf hingewiesen werden und, wenn er es will, die nicht mehr |
# zugeordneten Mitarbeiter geloescht werden. |
# |
if ($numrows == 1 && !$doit) { |
$data = fetchDB($result, 0); |
$old_tastart = $data[0]; |
$old_taduration = $data[1]; |
$oend = $old_tastart + ($old_taduration * 86400); |
$dend = $ta_start + ($ta_duration * 86400); |
|
# Prufen, ob das Start- oder Endedatum geaendert wurde und wenn |
# ja, dann duerfen die neuen Datum nicht juenger als das letzte |
# Datum des Teilprojektabschluss sein. |
|
if (!$folder && (($old_tastart != $ta_start && $ta_start <= $ab_datum) || |
($old_taduration != $ta_duration && $dend <= $ab_datum))) { |
Error(GetMessage($db, 352, "Das Startdatum und/oder das Endedatum darf nicht vor dem Datum des letzten Teilabschluss sein!")); |
closeDB($db); |
return false; |
} |
|
# Pruefen, ob die neuen Start- oder Endedatum keine in der Luft |
# haengenden Planwerte hinterlassen. |
if (PerDateComp($ta_start, $old_tastart) < 0 || |
PerDateComp($oend, $dend) < 0) { |
$query = "select al_num, al_pstart from allocation where "; |
$query .= "al_task = $ta_num and (al_pstart < $ta_start or "; |
$query .= "al_pstart > $dend)"; |
|
if (!($result = QueryDB($db, $query))) { |
closeDB($db); |
return false; |
} |
|
$rows = numrowsDB($result); |
|
if ($rows > 0) { // Gibt es MA unterhalb von ta_start? |
AskObsoleteMA(); |
closeDB($db); |
require('footer.inc'); |
exit(); |
} |
} |
} /* else |
$numrows = 0; |
*/ |
# Gibt es den Datensatz bereits, dann aendern wir ihn. |
if ($numrows == 1) { |
if ($doit) { |
$dend = $ta_start + ($ta_duration * 86400); |
QueryDB($db, "begin"); |
$query = "delete from allocation where al_task = $ta_num and "; |
$query .= "(al_pstart < $ta_start or al_pstart > $dend)"; |
|
if (!QueryDB($db, $query)) { |
closeDB($db); |
return false; |
} |
} |
|
$query = "update task set ta_name = '$ta_name', ta_color = '$ta_color',"; |
$query .= "ta_meeting = $ta_meeting, ta_start = $ta_start,"; |
$query .= "ta_duration = $ta_duration, ta_complete = $ta_complete,"; |
$query .= "ta_priority = $ta_priority, ta_level = $ta_level,"; |
$query .= "ta_depend = $ta_depend, ta_deptype = $ta_deptype,"; |
|
if ($phase == 1) |
$query .= "ta_plnum = $ta_plnum, ta_id = $ta_id, ta_phase = $ta_phase,"; |
else |
$query .= "ta_plnum = $ta_plnum, ta_id = $ta_id,"; |
|
$query .= "ta_notiz = '$ta_notiz', ta_risiko = $ta_risiko where ta_num = $ta_num"; |
|
if (!QueryDB($db, $query)) { |
if ($doit) |
QueryDB($db, "rollback"); |
|
closeDB($db); |
return false; |
} |
|
if ($doit) |
QueryDB($db, "commit"); |
|
closeDB($db); |
return true; |
} |
} |
|
# Der Datensatz existiert nicht und deshalb fuegen wir ihn ein. Es |
# muss jedoch geprueft werden, ob die ID bereits existiert. Existiert |
# sie, muessen alle IDs >= #ta_id um 1 erhoeht werden und der |
# Datensatz anschliessend eingefuegt werden. |
$query = "select ta_id from task where ta_plnum = $ta_plnum and ta_id = $ta_id"; |
$result = QueryDB($db, $query); |
$numrows = numrowsDB($result); |
|
if ($numrows == 1) { |
# Alle IDs um 1 nach hinten schieben! |
$query = "select ta_num, ta_id from task where ta_plnum = $ta_plnum and ta_id >= $ta_id order by ta_id desc"; |
$result = QueryDB($db, $query); |
$numrows = numrowsDB($result); |
$row = 0; |
$db2 = OpenDB(); |
|
while ($row < $numrows) { |
$data = fetchDB($result, $row); |
$num = $data[0]; |
$id = $data[1] + 1; |
$query = "update task set ta_id = $id where ta_num = $num"; |
|
if (!TQueryDB($db2, $query)) { |
Error("SQL-Error: $query"); |
closeDB($db); |
closeDB($db2); |
return false; |
} |
|
$row++; |
} |
|
closeDB($db2); |
} |
|
# Nun wird der neue Datensatz tatsaechlich geschrieben. |
$query = "select co_task from counter"; |
$result = QueryDB($db, $query); |
$data = fetchDB($result, 0); |
$ta_num = $data[0] + 1; |
$ta_hash = md5($ta_num); |
|
QueryDB($db, "begin"); |
$query = "insert into task (ta_num, ta_plnum, ta_id, ta_depend,"; |
$query .= "ta_deptype, ta_name, ta_color, ta_shape, ta_meeting,"; |
$query .= "ta_start, ta_duration, ta_complete, ta_fixed_start,"; |
$query .= "ta_priority, ta_level, ta_phase, ta_notiz, ta_hash, ta_risiko) values ("; |
$query .= "$ta_num, $ta_plnum, $ta_id, $ta_depend, $ta_deptype,"; |
$query .= "'$ta_name', $ta_color, '0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0',"; |
$query .= "$ta_meeting, $ta_start, $ta_duration, $ta_complete,"; |
|
if ($phase == 1) |
$query .= "0, $ta_priority, $ta_level, $ta_phase, '$ta_notiz', '$ta_hash', $ta_risiko)"; |
else |
$query .= "0, $ta_priority, $ta_level, 0, '$ta_notiz', '$ta_hash', $ta_risiko)"; |
|
if (!QueryDB($db, $query)) { |
QueryDB($db, "rollback"); |
Error("SQL-Error: $query"); |
closeDB($db); |
return false; |
} |
|
$query = "update counter set co_task = $ta_num"; |
|
if (!QueryDB($db, $query)) { |
QueryDB($db, "rollback"); |
Error("SQL-Error: $query"); |
closeDB($db); |
return false; |
} |
|
QueryDB($db, "commit"); |
Journal(300, "plan.php: SaveTask: task=$ta_num", $db); |
closeDB($db); |
return true; |
} |
|
function AddMiAdd() { |
global $periode; |
global $phase; |
global $role; |
|
$al_task = $_REQUEST['al_task']; |
$al_ressource = $_REQUEST['al_ressource']; |
$al_hours = $_REQUEST['al_hours']; |
|
if ($role) |
$al_role = $_REQUEST['al_role']; |
|
$al_pstart = $_REQUEST['al_pstart']; |
|
if ($phase) |
$al_phase = $_REQUEST['al_phase']; |
else |
$al_phase = 0; |
|
$al_hours = str_replace(",", ".", $al_hours); |
|
if ($al_hours <= 0 || $al_hours > 99.999) { |
Error("Error: Die Projekttage (PT) müssen im Bereich 1 bis 99,999 sein!<br>\n"); |
return false; |
} |
|
$db = OpenDB(); |
$query = "select co_allocation from counter"; |
$result = QueryDB($db, $query); |
|
if (!$result) { |
closeDB($db); |
return false; |
} |
|
$data = fetchDB($result, 0); |
$co_allocation = $data[0] + 1; |
$mon = gmdate("n", $al_pstart); |
$year = gmdate("Y", $al_pstart); |
|
switch ($periode) { |
case 1: $al_pduration = 364; break; |
case 2: $al_pduration = 91; break; |
case 3: $al_pduration = daysinmonth($mon, $year); break; |
case 4: $al_pduration = 1; break; |
default: $al_pduration = daysinmonth($mon, $year); break; |
} |
|
QueryDB($db, "begin"); |
|
if (!$phase) |
$al_phase = 0; |
|
$query = "insert into allocation (al_num, al_task, al_ressource,"; |
|
if ($role) |
$query .= "al_hours, al_phase, al_role, al_pstart, al_pduration) "; |
else |
$query .= "al_hours, al_phase, al_pstart, al_pduration) "; |
|
$query .= "values ($co_allocation, $al_task,"; |
|
if ($role) |
$query .= "$al_ressource, $al_hours, $al_phase, $al_role,"; |
else |
$query .= "$al_ressource, $al_hours, $al_phase, "; |
|
$query .= "$al_pstart, $al_pduration)"; |
$result = QueryDB($db, $query); |
|
if (!$result) { |
QueryDB($db, "rollback"); |
closeDB($db); |
return false; |
} |
|
$query = "update counter set co_allocation = $co_allocation"; |
$result = QueryDB($db, $query); |
|
if (!$result) { |
QueryDB($db, "rollback"); |
closeDB($db); |
return false; |
} |
|
QueryDB($db, "commit"); |
Journal(202, "plan.php: AddMiAdd: task=$al_task; ressource=$al_ressource", $db); |
closeDB($db); |
return true; |
} |
|
function AddMiDel($al_num) { |
global $unum; |
global $rstufe; |
|
$db = OpenDB(); |
$query = "delete from allocation where al_num = $al_num"; |
$result = TQueryDB($db, $query); |
|
if (!$result) { |
closeDB($db); |
return false; |
} |
|
Journal(105, "plan.php: AddMiDel: al_num=$al_num", $db); |
closeDB($db); |
return true; |
} |
|
# Folgende Funktion ermittelt die Summe aller Planwerte eines bestimmten |
# Mitarbeiters in einer bestimmten Periode. |
# |
function GetRessource($db, $mi_num, $periode) { |
$mon = gmdate("n", $periode); |
$year = gmdate("Y", $periode); |
$per_start = gmmktime(0, 0, 0, $mon, 1, $year); |
$per_end = gmmktime(0, 0, 0, $mon, daysinmonth($mon, $year), $year); |
$query = "select sum(al_hours) from allocation, task, plan where "; |
$query .= "ta_num = al_task and pl_num = ta_plnum and pl_status in (2,4) and "; |
$query .= "al_ressource = $mi_num and al_pstart between $per_start and $per_end"; |
|
if (!($result = QueryDB($db, $query))) |
return -1; |
|
$data = fetchDB($result, 0); |
return $data[0]; |
} |
|
function PrintMa($db, $dstart, $dend, $al_task, $color, $pl_num, $ressource, $lock=false) { |
global $periode; |
global $einheit; |
global $menu; |
global $phase; |
global $role; |
global $verrmodul; |
global $stdwhg; |
global $ab_datum; |
global $rstufe; |
|
$nav = "pl_num=$pl_num&al_task=$al_task&menu=$menu&headline=20"; |
$query = "select am_num, am_task, am_ressource, am_hours, am_pstart,"; |
$query .= "am_pduration, am_role, am_krnum, am_nname, am_vname, am_phase "; |
$query .= "from allocmi where am_task = $al_task order by "; |
$query .= "am_nname, am_vname, am_pstart"; |
$erg = QueryDB($db, $query); |
|
if (!$erg) |
return 0; |
|
$erganz = numrowsDB($erg); |
$ergrow = 0; |
$oressource = 0; |
$dt = 0; |
$sum = 0; |
$total = 0; |
$brutto = 0; |
|
while ($ergrow < $erganz) { |
$data = fetchDB($erg, $ergrow); |
$am_num = $data[0]; |
$am_task = $data[1]; |
$am_ressource = $data[2]; |
$am_hours = $data[3]; |
$am_pstart = $data[4]; |
$am_pduration = $data[5]; |
$am_role = $data[6]; |
$am_krnum = $data[7]; |
$am_nname = $data[8]; |
$am_vname = $data[9]; |
$am_phase = $data[10]; |
|
# Wenn das Verrechnungsmodul aktiv ist, benoetigen wir den |
# Tagsatz des Mitarbeiters. |
if ($oressource != $am_ressource) { |
if ($oressource != 0) { |
$ed = GetEDate($einheit, $ta_start, $ta_duration); |
|
if ($dt < $ed) { |
while (PerDateComp($dt, $ed) >= 0) { |
if ($oressource == $ressource) { |
$res_hours = GetRessource($db, $ressource, $dt); |
$pts = GetPT($dt); |
$mon = gmdate("n", $dt); |
$year = gmdate("Y", $dt); |
$nm = "dt_0_" . (string)$mon; |
$nm .= "_" . (string)$year; |
|
if ($dt > $ab_datum || $rstufe == 1) { |
echo "<td class=\"sel\"><input type=\"text\" name=\"$nm\" size=6 maxlength=6 "; |
echo "onChange=\"javascript:CheckOverload(this, $res_hours, $pts)\"></td>\n"; |
} else { |
echo "<td style=\"background-color: #$color; border: 1px solid black;\"> </td>\n"; |
} |
} |
else |
echo "<td style=\"background-color: #$color; border: 1px solid black;\"> </td>\n"; |
|
$dt = IncDate($periode, $dt); |
} |
} |
|
while (PerDateComp($dt, $dend) >= 0) { |
$dt = IncDate($periode, $dt); |
echo "<td class=\"sel\"> </td>"; |
} |
|
printf ("<td class=\"selnum\"><b>%s</b></td>\n", FormatNum($sum, 3)); |
$total += $sum; |
|
if ($verrmodul) { |
echo "<td class=\"sel\"> </td>"; |
printf ("<td class=\"selnum\">%s</td>", FormatNum($brutto, 2)); |
echo "<td class=\"sel\"> </td>"; |
echo "<td class=\"sel\"> </td>"; |
} |
|
$sum = 0; |
$brutto = 0; |
echo "</tr>\n"; |
} |
|
# Starrer Zeilenbegin ... |
echo "<tr>\n"; |
# Button |
echo "<td class=\"selakt\">"; |
|
if (!$lock && $am_ressource == $ressource) { |
echo "<a name=\"edit\"></a>\n"; # Einsprungpunkt |
echo "<form name=\"PrintMa\" action=\"plan.php\" method=\"post\">\n"; |
echo "<input type=\"hidden\" name=\"pl_num\" value=\"$pl_num\">\n"; |
echo "<input type=\"hidden\" name=\"ressource\" value=\"$am_ressource\">\n"; |
echo "<input type=\"hidden\" name=\"ta_num\" value=\"$al_task\">\n"; |
echo "<input type=\"hidden\" name=\"al_phase\" value=\"$am_phase\">\n"; |
echo "<input type=\"hidden\" name=\"al_role\" value=\"$am_krnum\">\n"; |
echo "<input type=\"hidden\" name=\"menu\" value=\"$menu\">\n"; |
echo "<input type=\"hidden\" name=\"headline\" value=\"20\">\n"; |
echo "<input type=\"hidden\" name=\"func\" value=\"SaveUpMa\">\n"; |
/* echo "<button type=\"submit\" name=\"submit\">"; |
echo "<img src=\"image/new.png\" border=0 alt=\"Speichern\">"; |
echo "</button>\n"; |
*/ |
ButtonImage("filesave.png", "PrintMa", "Speichern"); |
} else if (!$lock) { |
echo "<a href=\"#\" onClick=\"javascript:MoveTo('plan.php',"; |
echo "'ressource=$am_ressource&func=UpdateMa&$nav#edit')\">"; |
echo "<img src=\"image/edit.png\" border=0 alt=\"Update\"></a>"; |
echo "<a href=\"#\" onClick=\"javascript:MoveTo('plan.php',"; |
echo "'ta_num=$am_task&ressource=$am_ressource&func=AskDeleteMa&$nav')\">"; |
echo "<img src=\"image/editdelete.png\" border=0 alt=\"Loeschen\"></a>"; |
} else |
echo " "; |
|
echo "</td>\n"; |
# Nummerierung |
echo "<td class=\"sel\"> </td>\n"; |
# Ressource |
echo "<td colspan=2 class=\"sel\" width=\"20%\"> </td>\n"; |
echo "<td class=\"sel\"><i>$am_nname $am_vname"; |
|
if ($role) |
echo ", $am_role"; |
|
echo "</i></td>\n"; |
# Tasklaenge mit Einheit |
echo "<td colspan=3 class=\"sel\"> </td>\n"; |
# Mitarbeiterrolle |
|
# if ($role) |
# echo "<td class=\"sel\">$am_role</td>\n"; |
|
# Zellen bis zum Taskanfang schreiben |
$query = "select ta_start, ta_duration from task where ta_num = $am_task"; |
|
if (!($res = QueryDB($db, $query))) { |
Error(GetMessage($db, 339, "Keinen dazupassenden Task gefunden!")); |
return 0; |
} |
|
$data = fetchDB($res, 0); |
$ta_start = $data[0]; |
$ta_duration = $data[1]; |
$dt = $dstart; |
|
while (PerDateComp($dt, $ta_start) > 0) { |
$dt = IncDate($periode, $dt); |
echo "<td class=\"sel\"> </td>"; |
} |
|
# Falls wir Eingabezeilen benoetigen die vor dem ersten |
# gespeicherten Task beginnen, schreiben wir diese hier. |
if ($ressource == $am_ressource && $ta_start < $am_pstart) { |
while (PerDateComp($dt, $am_pstart) > 0) { |
$res_hours = GetRessource($db, $ressource, $dt); |
$pts = GetPT($dt); |
$mon = gmdate("n", $dt); |
$year = gmdate("Y", $dt); |
$nm = "dt_0_" . (string)$mon; |
$nm .= "_" . (string)$year; |
|
if ($dt > $ab_datum || $rstufe == 1) { |
echo "<td class=\"sel\"><input type=\"text\" name=\"$nm\" size=6 maxlength=6 "; |
echo "onChange=\"javascript:CheckOverload(this, $res_hours, $pts)\"></td>\n"; |
} else |
echo "<td style=\"background-color: #$color; border: 1px solid black;\"> </td>\n"; |
|
$dt = IncDate($periode, $dt); |
} |
} |
|
$oressource = $am_ressource; |
} |
|
# Rest der Zeile schreiben |
$PerStart = GetPeriode($am_pstart); |
$pyear = gmdate("Y", $am_pstart); |
$PerAkt = GetPeriode($dt); |
$tyear = gmdate("Y", $dt); |
|
# Wenn das Verrechnungsmodul aktiv ist, benoetigen wir den |
# Tagsatz des Mitarbeiters zum aktuellen Datum. |
if ($verrmodul) { |
$query = "select tg_amount, tg_whg from tagsatz where "; |
$query .= "tg_minum = $am_ressource and tg_valid_from <= to_date('" . gmdate("d.m.Y", $dt) . "','DD.MM.YYYY') and "; |
$query .= "(tg_valid_to >= to_date('" . gmdate("d.m.Y", GetUltimo($dt)) . "','DD.MM.YYYY') or tg_valid_to is NULL) "; |
$query .= "order by tg_valid_from, tg_valid_to"; |
|
if (!($resver = QueryDB($db, $query))) |
return 0; |
|
if (numrowsDB($resver) > 0) { |
$data = fetchDB($resver, 0); |
$tg_amount = $data[0]; |
$tg_whg = $data[1]; |
} else { |
$tg_amount = 0.0; |
$tg_whg = $stdwhg; |
} |
} |
|
if ($ressource == $am_ressource) { |
$tm = gmdate("j.n.Y", $dt); |
$ad = explode(".", $tm); |
$res_hours = GetRessource($db, $ressource, $dt); |
$pts = GetPT($dt); |
|
if ($PerStart == $PerAkt) { |
$nm = "dt_" . (string)$am_num . "_" . (string)$ad[1]; |
$nm .= "_" . (string)$ad[2]; |
|
if ($dt > $ab_datum || $rstufe == 1) { |
printf("<td class=\"sel\"><input type=\"text\" name=\"$nm\" value=\"%s\" size=6 maxlength=6 ", FormatNum($am_hours, 3)); |
echo "onChange=\"javascript:CheckOverload(this, $res_hours, $pts)\"></td>\n"; |
} else { |
echo "<td style=\"background-color: #$color; border: 1px solid black; text-align: right;\">"; |
echo FormatNum($am_hours, 3) . "</td>\n"; |
} |
|
$sum += $am_hours; |
$brutto += $am_hours * $tg_amount; |
$ergrow++; |
} else { |
$nm = "dt_0_" . (string)$ad[1]; |
$nm .= "_" . (string)$ad[2]; |
|
if ($dt > $ab_datum || $rstufe == 1) { |
echo "<td class=\"sel\"><input type=\"text\" name=\"$nm\" size=6 maxlength=6 "; |
echo "onChange=\"javascript:CheckOverload(this, $res_hours, $pts)\"></td>\n"; |
} else |
echo "<td style=\"background-color: #$color; border: 1px solid black;\"> </td>\n"; |
} |
} else { |
if ($PerStart == $PerAkt && $pyear == $tyear) { |
printf ("<td style=\"background-color: #$color; border: 1px solid black; text-align:right;\">%s</td>\n", FormatNum($am_hours, 3)); |
$sum += $am_hours; |
$brutto += $am_hours * $tg_amount; |
$ergrow++; |
} else |
echo "<td style=\"background-color: #$color; border: 1px solid black;\"> </td>\n"; |
} |
|
$dt = IncDate($periode, $dt); |
} |
|
if ($erganz > 0) { |
$ed = GetEDate($einheit, $ta_start, $ta_duration); |
|
if ($dt < $ed) { |
while (PerDateComp($dt, $ed) >= 0) { |
if ($oressource == $ressource) { |
$res_hours = GetRessource($db, $am_ressource, $dt); |
$pts = GetPT($dt); |
$mon = gmdate("n", $dt); |
$year = gmdate("Y", $dt); |
$nm = "dt_0_" . (string)$mon; |
$nm .= "_" . (string)$year; |
|
if ($dt > $ab_datum || $rstufe == 1) { |
echo "<td class=\"sel\"><input type=\"text\" name=\"$nm\" size=6 maxlength=6 \n"; |
echo "onChange=\"javascript:CheckOverload(this, $res_hours, $pts)\"></td>\n"; |
} else |
echo "<td style=\"background-color: #$color; border: 1px solid black;\"> </td>\n"; |
} |
else |
echo "<td style=\"background-color: #$color; border: 1px solid black;\"> </td>\n"; |
|
$dt = IncDate($periode, $dt); |
} |
} |
|
while (PerDateComp($dt, $dend) >= 0) { |
$dt = IncDate($periode, $dt); |
echo "<td class=\"sel\"> </td>"; |
} |
|
printf ("<td class=\"selnum\"><b>%s</b></td>\n", FormatNum($sum, 3)); |
$total += $sum; |
|
if ($verrmodul) { |
echo "<td class=\"sel\"> </td>"; |
printf ("<td class=\"selnum\">%s</td>", FormatNum($brutto, 2)); |
echo "<td class=\"sel\"> </td>"; |
echo "<td class=\"sel\"> </td>"; |
} |
|
echo "</tr>\n"; |
|
if ($am_ressource == $ressource) |
echo "</form>\n"; |
} |
|
return $total; |
} |
|
# Liefert den Level des Tasks vor dem angegebenen. Existiert kein Task |
# davor, wird -1 zurueckgegeben. |
# |
function GetPreviousLevel($db, $ta_num) { |
$query = "select ta_id, ta_plnum from task where ta_num = $ta_num"; |
|
if (!($result = QueryDB($db, $query))) |
return -1; |
|
$data = fetchDB($result, 0); |
$ta_id = $data[0]; |
$ta_plnum = $data[1]; |
$query = "select ta_level from task where ta_plnum = $ta_plnum "; |
$query .= "and ta_num != $ta_num and ta_id < $ta_id "; |
$query .= "order by ta_id desc"; |
|
if (!($result = QueryDB($db, $query))) |
return -1; |
|
if (numrowsDB($result) <= 0) |
return -1; |
|
$data = fetchDB($result, 0); |
return $data[0]; |
} |
|
# Liefert den Level des Tasks nach dem angegebenen. Existiert kein Task |
# danach, wird -1 zurueckgegeben. |
# |
function GetNextLevel($db, $ta_num) { |
$query = "select ta_id, ta_plnum from task where ta_num = $ta_num"; |
|
if (!($result = QueryDB($db, $query))) |
return -1; |
|
$data = fetchDB($result, 0); |
$ta_id = $data[0]; |
$ta_plnum = $data[1]; |
$query = "select ta_level from task where ta_plnum = $ta_plnum "; |
$query .= "and ta_num != $ta_num and ta_id > $ta_id "; |
$query .= "order by ta_id"; |
|
if (!($result = QueryDB($db, $query))) |
return -1; |
|
if (numrowsDB($result) <= 0) |
return -1; |
|
$data = fetchDB($result, 0); |
return $data[0]; |
} |
|
# Folgende Funktion liefert den vorhergehenden, oder den nachfolgenden Task, |
# mit welchem getauscht werden kann. Es handelt sich also um einen Task |
# des selben Levels. |
# |
function GetReplaceTask($db, $ta_num, $dir) { |
$query = "select ta_id, ta_plnum, ta_level from task where ta_num = $ta_num"; |
|
if (!($result = QueryDB($db, $query))) |
return -1; |
|
$data = fetchDB($result, 0); |
$ta_id = $data[0]; |
$ta_plnum = $data[1]; |
$ta_level = $data[2]; |
$query = "select ta_num from task where ta_plnum = $ta_plnum "; |
$query .= "and ta_num != $ta_num and ta_level = $ta_level and ta_id "; |
|
if ($dir > 0) // 0 = Rueckwaerts, 1 = Vorwaerts |
$query .= "> "; |
else |
$query .= "< "; |
|
$query .= "$ta_id order by ta_id"; |
|
if ($dir == 0) |
$query .= " desc"; |
|
if (!($result = QueryDB($db, $query))) |
return -1; |
|
if (numrowsDB($result) <= 0) |
return -1; |
|
$data = fetchDB($result, 0); |
return $data[0]; |
} |
|
# Die Funktion tauscht die Reihen folge eines Tasks, so das ein Task nach |
# oben oder unten verschoben werden kann. |
# |
function MoveTask($ta_num, $dir) { |
$db = OpenDB(); |
$query = "select ta_id, ta_plnum, ta_level from task where ta_num = $ta_num"; |
|
if (!($result = QueryDB($db, $query))) { |
closeDB($db); |
return false; |
} |
|
$data = fetchDB($result, 0); |
$ta_id = $data[0]; |
$ta_plnum = $data[1]; |
$ta_level = $data[2]; |
$query = "select ta_num, ta_id from task where ta_plnum = $ta_plnum and "; |
$query .= "ta_level = $ta_level and "; |
|
if ($dir < 0) { |
$query .= "ta_num != $ta_num and ta_id < $ta_id "; |
$query .= "order by ta_id desc"; |
} else { |
$query .= "ta_num != $ta_num and ta_id > $ta_id "; |
$query .= "order by ta_id"; |
} |
|
if (!($result = QueryDB($db, $query))) { |
closeDB($db); |
return false; |
} |
|
if (numrowsDB($result) <= 0) { |
Error("Interner Fehler: In der gewählten Richtung existiert kein geeigneter Task!"); |
closeDB($db); |
return false; |
} |
|
$data = fetchDB($result, 0); |
$ta_num1 = $data[0]; |
$ta_id1 = $data[1]; |
|
# Tauschen der Tasks |
QueryDB($db, "begin"); |
$query = "update task set ta_id = -1 where ta_num = $ta_num"; |
|
if (!QueryDB($db, $query)) { |
QueryDB($db, "rollback"); |
closeDB($db); |
return false; |
} |
|
$query = "update task set ta_id = $ta_id where ta_num = $ta_num1"; |
|
if (!QueryDB($db, $query)) { |
QueryDB($db, "rollback"); |
closeDB($db); |
return false; |
} |
|
$query = "update task set ta_id = $ta_id1 where ta_num = $ta_num"; |
|
if (!QueryDB($db, $query)) { |
QueryDB($db, "rollback"); |
closeDB($db); |
return false; |
} |
|
QueryDB($db, "commit"); |
closeDB($db); |
return true; |
} |
|
# Folgenden Funktionen erlauben die Erfassung von Plaenen, wobei die |
# einzelnen Perioden dargestellt werden, welche mit individuellen Zeiten |
# gefuellt werden koennen. |
# Es wird immer der Zeitraum vom Start des Projekts bis zu seinem Ende |
# dargestellt. Bei sehr langen Projekten oder sehr kleinen Perioden, kann |
# die Tabelle durchaus sehr breit werden. |
# |
function PlanPeriode($pl_num, $ta_num, $ressource, $new=false, $lock=false) { |
global $rstufe; |
global $unum; |
global $periode; |
global $verteil; |
global $einheit; |
global $menu; |
global $phase; |
global $dtformatshort; |
global $role; |
global $pmlight; |
global $stdwhg; |
global $verrmodul; |
global $ab_datum; |
|
if ($pl_num <= 0) { |
Error(GetMessage(-1, 327, "Interner Fehler: Es wurde keine Plannummer an \"PlanPeriode\" übergeben!")); |
return; |
} |
|
if ($rstufe != 1 && $rstufe != 2) { |
Error(GetMessage(-1, 50, "Berechtigungsfehler!")); |
return; |
} |
|
if (!isset($ta_num)) |
$ta_num = 0; |
|
if (!isset($ressource)) |
$ressource = 0; |
else if ($ressource > 0) |
$tanum = $ta_num; |
|
if ($lock && $new) |
$new = false; |
|
$db = OpenDB(); |
$query = "select pr_name, pl_prnum, mi_nname, mi_vname from "; |
$query .= "plan, project, mitarbeiter where pl_num = $pl_num and "; |
$query .= "pr_num = pl_prnum and mi_num = pr_pl"; |
$result = QueryDB($db, $query); |
|
if (!$result) { |
closeDB($db); |
return; |
} |
|
$data = fetchDB($result, 0); |
$pr_name = $data[0]; |
$pl_prnum = $data[1]; |
$mi_nname = $data[2]; |
$mi_vname = $data[3]; |
|
# Ermitteln des letzten Abschlussdatums fuer das aktuelle Projekt |
$query = "select ab_datum from abschluss where "; |
$query .= "ab_prnum = $pl_prnum "; |
$query .= "order by ab_datum desc"; |
|
if (!($resab = QueryDB($db, $query))) { |
closeDB($db); |
return; |
} |
|
if (numrowsDB($resab) > 0) { |
$data = fetchDB($resab, 0); |
$ab_datum = $data[0]; |
} else |
$ab_datum = 0; |
|
# Zeichnen der fixen Kopfspalten. |
if ($new) { |
$id = $_REQUEST['ta_num']; |
|
if (!isset($id)) |
$id = 0; |
?> |
<form name="plan" action="plan.php" method="post"> |
<input type="hidden" name="menu" value="<? echo "$menu"; ?>"> |
<input type="hidden" name="headline" value="20"> |
<input type="hidden" name="pl_num" value="<? echo "$pl_num"; ?>"> |
<?php |
} |
|
# Eingabezeile fuer den Plankommentar anzeigen. |
$query = "select pl_comment from plan where pl_num = $pl_num"; |
|
if (!($result = QueryDB($db, $query))) { |
closeDB($db); |
return; |
} |
|
$data = fetchDB($result, 0); |
$pl_comment = $data[0]; |
|
if (!$lock && !$new) { |
echo "<form name=\"plcomment\" aktion=\"plan.php\" method=\"post\">\n"; |
echo "<input type=\"hidden\" name=\"menu\" value=\"$menu\">\n"; |
echo "<input type=\"hidden\" name=\"headline\" value=\"20\">\n"; |
echo "<input type=\"hidden\" name=\"pl_num\" value=\"$pl_num\">\n"; |
echo "<input type=\"hidden\" name=\"func\" value=\"COMMENT\">\n"; |
} |
|
echo "<table class=\"input\">\n"; |
echo "<tr><td>" . GetMessage($db, 1, "Projekt:") . "</td><td>$pl_prnum $pr_name</td></tr>\n"; |
echo "<tr><td>" . GetMessage($db, 328, "Projektleiter:") . "</td><td>$mi_nname $mi_vname</td></tr>\n"; |
echo "<tr><td>" . GetMessage($db, 19, "Kommentar:") . "</td>\n"; |
|
if (!$lock && !$new) { |
if ($pmlight) |
$class = " class=\"inputmust\""; |
|
echo "<td><input type=\"text\"$class name=\"pl_comment\" "; |
echo "value=\"" . htmlentities($pl_comment) . "\" onChange=\"javascript:document.plcomment.submit()\" "; |
|
if ($pmlight) |
echo "size=\"30\" maxlength=\"30\"></td>\n"; |
else |
echo "size=\"80\" maxlength=\"255\"></td>\n"; |
} else { |
echo "<td>$pl_comment</td>\n"; |
} |
|
echo "</tr></table>\n"; |
|
if (!$lock && !$new) |
echo "</form>\n"; |
|
$nav = "pl_num=$pl_num&menu=$menu&headline=20"; |
?> |
<table class="sel"> |
<tr> |
<th class="sel" rowspan=2>Akt</th> |
<th class="sel" rowspan=2>Num.</th> |
<th class="sel" colspan=3 rowspan=2> |
<table border=0 width="100%"><tr><td align="center" colspan=2><? Output($db, 333, "Taskname"); ?></td></tr> |
<tr><td> </td><td align="right"><? Output($db, 329, "Ressource"); ?></td></tr> |
</table> |
</th> |
<th class="sel" rowspan=2 colspan=3> |
<table border=0 width="100%"><tr><td align="center" colspan=3><? Output($db, 334, "Arbeit"); ?></td></tr> |
<td align="center"><? Output($db, 330, "Dauer"); ?></td> |
<td align="center"><? Output($db, 331, "Start"); ?></td> |
<td align="center"><? Output($db, 332, "Ende"); ?></td></tr> |
</table> |
</th> |
<? |
# if ($role) |
# echo " <th class=\"sel\" rowspan=2>" . GetMessage($db, 335, "Rolle") . "</th>\n"; |
|
# Ermitteln des Projektstarts um den Tabellenkopf fertig zu schreiben. |
$query = "select ta_start, ta_duration, ta_meeting from task where "; |
$query .= "ta_plnum = $pl_num order by ta_start"; |
$resta = QueryDB($db, $query); |
|
if (!$resta) { |
closeDB($db); |
return; |
} |
|
$numrows = numrowsDB($resta); |
$row = 0; |
$fdate = 0; |
$ldate = 0; |
|
while ($row < $numrows) { |
$data = fetchDB($resta, $row); |
$ta_start = $data[0]; |
$ta_duration = $data[1]; |
$ta_meeting = $data[2]; |
|
if ($row == 0) |
$fdate = $ta_start; |
|
if ($ta_meeting) |
$ed = $ta_start; |
else |
$ed = GetEDate($einheit, $ta_start, $ta_duration); |
|
if ($ed > $ldate) |
$ldate = $ed; |
|
$row++; |
} |
|
# Erstellen des restlichen Tabellenkopfs ... |
$tm = gmdate("j.n.Y", $fdate); |
$dt = explode(".", $tm); |
$smon = $dt[1]; |
$syear = $dt[2]; |
$dt = $fdate; |
$cols = 0; |
$tbcols = 1; |
$oyear = $syear; |
|
while (PerDateComp($dt, $ldate) > 0) { |
$syear = gmdate("Y", $dt); |
|
if ($oyear != $syear) { |
if ($cols <= 1) |
echo "<th class=\"sel\">$oyear</th>\n"; |
else |
echo "<th class=\"sel\" colspan=$cols>$oyear</th>\n"; |
|
$oyear = $syear; |
$cols = 0; |
} |
|
$cols++; |
$tbcols++; |
$dt = IncDate($periode, $dt); |
} |
|
$cols++; |
|
if ($cols <= 1) |
echo "<th class=\"sel\">$syear</th>\n"; |
else |
echo "<th class=\"sel\" colspan=$cols>$syear</th>\n"; |
|
# Ueberschrift der letzten Spalte, welche die Summierungen der |
# geplanten Aufwaende enthaelt. |
echo "<th class=\"sel\" rowspan=2>" . GetMessage($db, 337, "Summe") . "<br>" . GetMessage($db, 336, "Aufwand") . "</th>\n"; |
|
if ($verrmodul) { |
$query = "select wh_whg from key_whg where wh_num = $stdwhg"; |
|
if (!($reswhg = QueryDB($db, $query))) { |
closeDB($db); |
return; |
} |
|
$data = fetchDB($reswhg, 0); |
$whg = $data[0]; |
echo "<th class=\"sel\" rowspan=2>" . GetMessage($db, 388, "Risiko<br>in %%") . "</th>\n"; |
echo "<th class=\"sel\" rowspan=2>" . GetMessage($db, 385, "Wert<br>ini %s", $whg) . "</th>\n"; |
echo "<th class=\"sel\" rowspan=2>" . GetMessage($db, 386, "Risiko−<br>aufschlag") . "</th>\n"; |
echo "<th class=\"sel\" rowspan=2>" . GetMessage($db, 387, "Summen<br>ini %s", $whg) . "</th>\n"; |
} |
|
echo "</tr>\n"; |
$dt = $fdate; |
|
while (PerDateComp($dt, $ldate) >= 0) { |
printf ("<th class=\"sel\">%s</th>\n", GetStrMonth($smon)); |
$smon++; |
$dt = IncDate($periode, $dt); |
|
if ($smon > 12) { |
$syear++; |
$smon = 1; |
} |
} |
|
echo "</tr>\n"; |
|
# Neues Projektobjekt. Es enthaelt die Tasknummerierung und Typen- |
# zuweisung der einzelnen Tasks. |
$project = new TaskNum($pl_num, $db); |
|
if (!$project->GetStatus()) { |
Error(GetMessage($db, 338, "PlanPeriode: Interner Fehler beim Initialisieren des Objekts \"TaskNum\"!")); |
closeDB($db); |
return; |
} |
|
# Nun muessen wir die Tabelle mit Inhalten fuellen |
$query = "select ta_num, ta_id, ta_name, ta_meeting, ta_start,"; |
$query .= "ta_duration, ta_level, ta_phase, ta_color, ta_plnum, ta_risiko "; |
$query .= "from task where ta_plnum = $pl_num order by ta_id"; |
$result = QueryDB($db, $query); |
|
if (!$result) { |
closeDB($db); |
return; |
} |
|
$numrows = numrowsDB($result); |
|
if ($numrows == 0) { |
$ta_id = 0; |
$ta_plnum = $pl_num; |
} |
|
$row = 0; |
$snum = "1"; |
$ma = false; |
$done = false; |
$total = 0; |
$brutto_sum = 0; |
$netto_sum = 0; |
$risiko_sum = 0; |
|
while ($row < $numrows) { |
if (!$ma) { |
$data = fetchDB($result, $row); |
$ta_num = $data[0]; |
$ta_id = $data[1]; |
$ta_name = $data[2]; |
$ta_meeting = $data[3]; |
$ta_start = $data[4]; |
$ta_duration = $data[5]; |
$ta_level = $data[6]; |
$ta_phase = $data[7]; |
$ta_color = $data[8]; |
$ta_plnum = $data[9]; |
$ta_risiko = $data[10]; |
|
# Der Task muss oben summiert sein, also in der Taskzeile |
# selbst. |
if ($ta_level == 1) { |
$query = "select ta_num, ta_level, ta_risiko from task where "; |
$query .= "ta_plnum = $ta_plnum and ta_id > $ta_id and "; |
$query .= "ta_meeting = 0 order by ta_id"; |
|
if (!($resta = QueryDB($db, $query))) { |
closeDB($db); |
return; |
} |
|
$men = numrowsDB($resta); |
$i = 0; |
$al_hours = 0; |
|
if ($verrmodul) { |
$risc_sum = 0; |
$netto = 0; |
$brutto = 0; |
} |
|
while ($i < $men) { |
$data = fetchDB($resta, $i); |
$xnum = $data[0]; |
$xlevel = $data[1]; |
$risc = $data[2]; |
|
if ($xlevel <= $ta_level) |
break; |
|
# Ist das Verrechnungsmodul aktiv, benoetigen wir |
# zusaetzlich den Tagsatz des jeweiligen Mitarbeiters, |
# um die korrekten monetaeren Werte errechnen zu koennen. |
if ($verrmodul) { |
$query = "select al_hours, tg_amount from allocation "; |
$query .= "left join tagsatz on tg_minum = al_ressource "; |
$query .= "where al_task = $xnum and "; |
$query .= "extract(epoch from tg_valid_from) <= al_pstart and "; |
$query .= "(extract(epoch from tg_valid_to) >= al_pstart or tg_valid_to is NULL) "; |
$query .= "order by tg_valid_from, tg_valid_to"; |
|
if (!($resver = QueryDB($db, $query))) { |
closeDB($db); |
return; |
} |
|
$jj = 0; |
$xx = numrowsDB($resver); |
|
while ($jj < $xx) { |
$data = fetchDB($resver, $jj); |
$al_hour = $data[0]; |
$tg_amount = $data[1]; |
|
$brutto += $tg_amount * $al_hour; |
$rs = $al_hour / 100.0 * $risc; |
$risc_sum += $rs * $tg_amount; |
$netto += ($al_hour + $rs) * $tg_amount; |
$al_hours += $al_hour; |
$jj++; |
} |
} else { |
$query = "select sum(al_hours) from allocation where "; |
$query .= "al_task = $xnum"; |
|
if (!($resal = QueryDB($db, $query))) { |
closeDB($db); |
return; |
} |
|
$data = fetchDB($resal, 0); |
$al_hours += $data[0]; |
} |
|
$i++; |
} |
} else { |
if ($verrmodul) { |
$query = "select al_hours, tg_amount from allocation "; |
$query .= "left join tagsatz on tg_minum = al_ressource "; |
$query .= "where al_task = $ta_num and "; |
$query .= "extract(epoch from tg_valid_from) <= al_pstart and "; |
$query .= "(extract(epoch from tg_valid_to) >= al_pstart or tg_valid_to is NULL) "; |
$query .= "order by tg_valid_from, tg_valid_to"; |
|
if (!($resver = QueryDB($db, $query))) { |
closeDB($db); |
return; |
} |
|
$al_hours = 0; |
$risc_sum = 0; |
$netto = 0; |
$brutto = 0; |
$jj = 0; |
$xx = numrowsDB($resver); |
|
while ($jj < $xx) { |
$data = fetchDB($resver, $jj); |
$al_hour = $data[0]; |
$tg_amount = $data[1]; |
|
$al_hours += $al_hour; |
$brutto += $al_hour * $tg_amount; |
$rs = $al_hour / 100.0 * $ta_risiko; |
$risc_sum += $rs * $tg_amount; |
$netto += ($al_hour + $rs) * $tg_amount; |
$jj++; |
} |
|
$brutto_sum += $brutto; |
$risiko_sum += $risc_sum; |
$netto_sum += $netto; |
} else { |
$query = "select sum(al_hours) from allocation where "; |
$query .= "al_task = $ta_num"; |
|
if (!($resal = QueryDB($db, $query))) { |
closeDB($db); |
return; |
} |
|
$data = fetchDB($resal, 0); |
$al_hours = $data[0]; |
} |
} |
} |
|
# Starrer Zeilenbegin ... |
echo "<tr>\n"; |
if (!$ma) { |
// $snum = GetTaskNum($pl_num, $ta_id, $ta_level, $ta_phase, $ta_meeting, $snum, &$typ, $db); |
$snum = $project->Get_snum($row); |
$art = $project->Get_type($row); |
|
if ($art == "t") |
$typ = true; |
else |
$typ = false; |
} |
|
# Diverse Aktionen / Buttons |
echo "<td class=\"selakt\">"; |
$cal_linkf = ""; |
$cal_linkb = ""; |
|
if ($new && $ma) { |
echo "<a name=\"edit\"></a>\n"; # Einsprungspunkt |
echo "<input type=\"hidden\" name=\"ta_num\" value=\"$ta_num\">\n"; |
echo "<input type=\"hidden\" name=\"ta_phase\" value=\"$ta_phase\">\n"; |
echo "<input type=\"hidden\" name=\"func\" value=\"SaveMa\">\n"; |
ButtonImage("filesave.png", "plan", "Zeile speichern"); |
} else if (!$ta_meeting && !$lock && $ta_level > 1 && $typ) { |
echo "<a href=\"#\" onClick=\"javascript:MoveTo('plan.php','edittask=$ta_num&$nav')\">"; |
echo "<img src=\"image/edit.png\" border=0 alt=\"Task editieren\"></a>"; |
echo "<a href=\"#\" onClick=\"javascript:MoveTo('plan.php','taskadd=$ta_id&ta_num=$ta_num&ta_plnum=$ta_plnum&$nav')\">"; |
echo "<img src=\"image/new.png\" border=0 alt=\"Einfuegen\"></a>\n"; |
echo "<a href=\"#\" onClick=\"javascript:MoveTo('plan.php','deletetask=$ta_num&ta_plnum=$ta_plnum&$nav')\">"; |
echo "<img src=\"image/editdelete.png\" border=0 alt=\"Task loeschen\"></a>"; |
$lev = GetPreviousLevel($db, $ta_num); |
|
if ($lev != -1 && $lev >= $ta_level) { |
echo "<a href=\"#\" onClick=\"javascript:MoveTo('plan.php','moveup=$ta_num&$nav')\">"; |
echo "<img src=\"image/up.png\" border=0 width=\"16\" height=\"16\" alt=\"Hinauf\">"; |
} |
|
$lev = GetNextLevel($db, $ta_num); |
|
if ($lev != -1 && $lev >= $ta_level) { |
echo "<a href=\"#\" onClick=\"javascript:MoveTo('plan.php','movedown=$ta_num&$nav')\">"; |
echo "<img src=\"image/down.png\" border=0 width=\"16\" height=\"16\" alt=\"Hinunter\">"; |
} |
|
echo "<a href=\"#\" onClick=\"javascript:MoveTo('plan.php','func=AllocMa&ta_num=$ta_num&$nav#edit')\">"; |
echo "<img src=\"image/kverbosuser.png\" border=0 width=15 height=15 alt=\"Neuer Mitarbeiter\"></a>"; |
// $cal_linkf = "<a href=\"#\" onClick=\"javascript:open_window('calentry.php?header=1&ca_prnum=$pl_prnum&ca_task=$ta_num&func=plan', 'Kalender', 800, 600)\">"; |
// $cal_linkb = "</a>"; |
} else if (!$lock) { |
echo "<a href=\"#\" onClick=\"javascript:MoveTo('plan.php','edittask=$ta_num&$nav')\">"; |
echo "<img src=\"image/edit.png\" border=0 alt=\"Task editieren\"></a>"; |
echo "<a href=\"#\" onClick=\"javascript:MoveTo('plan.php','taskadd=$ta_id&ta_num=$ta_num&ta_plnum=$ta_plnum&$nav')\">"; |
echo "<img src=\"image/new.png\" border=0 alt=\"Einfuegen\"></a>\n"; |
echo "<a href=\"#\" onClick=\"javascript:MoveTo('plan.php','deletetask=$ta_num&ta_plnum=$ta_plnum&$nav')\">"; |
echo "<img src=\"image/editdelete.png\" border=0 alt=\"Task loeschen\"></a>"; |
|
// if ($ta_meeting) { |
$lev = GetPreviousLevel($db, $ta_num); |
|
if ($lev != -1 && $lev >= $ta_level) { |
echo "<a href=\"#\" onClick=\"javascript:MoveTo('plan.php','moveup=$ta_num&$nav')\">"; |
echo "<img src=\"image/up.png\" border=0 width=\"16\" height=\"16\" alt=\"Hinauf\">"; |
} |
|
$lev = GetNextLevel($db, $ta_num); |
|
if ($lev != -1 && $lev >= $ta_level) { |
echo "<a href=\"#\" onClick=\"javascript:MoveTo('plan.php','movedown=$ta_num&$nav')\">"; |
echo "<img src=\"image/down.png\" border=0 width=\"16\" height=\"16\" alt=\"Hinunter\">"; |
} |
// } |
} else |
echo " "; |
|
echo "</td>\n"; |
# Nummerierung |
if (!$ma) { |
if ($ta_meeting) |
echo "<td class=\"sel\"><b>$snum</b></td>\n"; |
else |
echo "<td class=\"sel\">$snum</td>\n"; |
} else { |
echo "<td class=\"sel\"> </td>\n"; |
} |
|
# Tasknamendarstellung abhaenging vom Level |
if (!$ma) { |
if ($ta_level == 1 || !$typ) { |
if ($ta_meeting) |
echo "<td class=\"seldkgray\" colspan=3>" . $cal_linkf . $ta_name . $cal_linkb . "</td>\n"; |
else if ($ta_level == 1) |
echo "<td class=\"selltgray\" colspan=3>" . $cal_linkf . $ta_name . $cal_linkb . "</td>\n"; |
else |
echo "<td class=\"selgray\" colspan=3>" . $cal_linkf . $ta_name . $cal_linkb . "</td>\n"; |
} else { |
if ($ta_meeting) |
echo "<td class=\"sel\" width=\"10%\"> </td><td class=\"seldkgray\" colspan=2>" . $cal_linkf . $ta_name . $cal_linkb . "</td>\n"; |
else |
echo "<td class=\"sel\" width=\"10%\"> </td><td class=\"selgray\" colspan=2>" . $cal_linkf . $ta_name . $cal_linkb . "</td>\n"; |
} |
} else if ($ma && $new) { |
echo "<td colspan=2 class=\"sel\" width=\"20%\"> </td>\n"; |
echo "<td class=\"sel\"><select name=\"name\">\n"; |
# $query = "select mi_num, mi_vname, mi_nname from mitarbeiter "; |
# $query .= "where mi_plan = true order by mi_nname, mi_vname"; |
$query = "select ma_minum, mi_vname, mi_nname, kr_role from matopr "; |
$query .= "left join mitarbeiter on mi_num = ma_minum "; |
$query .= "left join key_role on kr_num = ma_role "; |
$query .= "where ma_prnum = $pl_prnum "; |
$query .= "order by mi_nname, mi_vname"; |
$resmi = QueryDB($db, $query); |
|
if (!$resmi) { |
return; |
} |
|
$nr = numrowsDB($resmi); |
$r = 0; |
|
while ($r < $nr) { |
$data = fetchDB($resmi, $r); |
$mi_num = $data[0]; |
$mi_vname = $data[1]; |
$mi_nname = $data[2]; |
$kr_role = $data[3]; |
echo "<option value=\"$mi_num\">$mi_nname $mi_vname, $kr_role</option>\n"; |
$r++; |
} |
|
echo "</select></td>\n"; |
} |
|
if (!$ta_meeting) { |
if ($typ) { |
$sein = GetStrEinheit($einheit); |
echo "<td class=\"selgray\" align=\"right\">$ta_duration $sein</td>\n"; |
$dt = gmdate($dtformatshort, $ta_start); |
$ed = GetEDate($einheit, $ta_start, $ta_duration); |
$dte = gmdate($dtformatshort, $ed); |
echo "<td class=\"selgray\" align=\"center\">$dt</td>\n"; |
echo "<td class=\"selgray\" align=\"center\">$dte</td>\n"; |
} else { |
if ($ta_level == 1) |
echo "<td colspan=3 class=\"selltgray\"> </td>\n"; |
else |
echo "<td colspan=3 class=\"selgray\"> </td>\n"; |
} |
} else { |
echo "<td class=\"seldkgray\" align=\"center\">M</td>\n"; |
$dt = gmdate($dtformatshort, $ta_start); |
echo "<td class=\"seldkgray\" align=\"center\" colspan=2>$dt</td>\n"; |
} |
|
# Anzeigen der Mitarbeiterrolle |
|
# if ($role) { |
# if ($ma && $new) { |
# echo "<td class=\"sel\">"; |
# $query = "select kr_num, kr_role from key_role order by kr_num"; |
# $result2 = QueryDB($db, $query); |
|
# if (!$result2) |
# return; |
|
# $nr = numrowsDB($result2); |
# $r = 0; |
# echo "<select name=\"role\">\n"; |
|
# while ($r < $nr) { |
# $data = fetchDB($result2, $r); |
# $kr_num = $data[0]; |
# $kr_role = $data[1]; |
# echo "<option value=\"$kr_num\">$kr_role</option>\n"; |
# $r++; |
# } |
|
# echo "</select></td>\n"; |
# } else { |
# if ($ta_level == 1) |
# echo "<td class=\"selltgray\"> </td>\n"; |
# else |
# echo "<td class=\"selgray\"> </td>\n"; |
# } |
# } |
|
# Dynamischer Aufbau der restlichen Tabelle. |
# Ab dem Startdatum werden Eingabezeilen ausgegeben, in die der |
# Anwender Arbeitseinheiten eintragen kann. |
$color = dechex($ta_color); |
$len = strlen($color); |
|
while ($len < 6) { |
$color = "0" . $color; |
$len++; |
} |
|
$dt = $fdate; |
|
while (PerDateComp($dt, $ta_start) > 0) { |
$dt = IncDate($periode, $dt); |
|
if (!$typ && ! $ta_meeting && $ta_level == 1) |
echo "<td class=\"sel\"> </td>"; |
else |
echo "<td class=\"sel\"> </td>"; |
} |
|
if ($ta_meeting) |
$edate = $ta_start; |
else |
$edate = GetEDate($einheit, $ta_start, $ta_duration); |
|
do { |
if ($new && $ma) { |
$tm = gmdate("j.n.Y", $dt); |
$ad = explode(".", $tm); |
$nm = "dt_" . (string)$ta_id . "_" . (string)$ad[1]; |
$nm .= "_" . (string)$ad[2]; |
|
if ($dt > $ab_datum || $rstufe == 1) |
echo "<td class=\"sel\"><input type=\"text\" name=\"$nm\" size=6 maxlength=6></td>\n"; |
else |
echo "<td style=\"background-color: #$color; border: 1px solid black;\"> </td>\n"; |
} else { |
if ($typ) |
echo "<td style=\"background-color: #$color; border: 1px solid black;\"> </td>\n"; |
else if ($ta_meeting) |
echo "<td style=\"color: #$color;background-color: #969696;border: 1px solid black;\"><center>###</center></td>\n"; |
else if ($ta_level == 1) |
echo "<td style=\"color: #$color;background-color: #dddddd; border: 1px solid black;\"><center>===</center></td>\n"; |
else |
echo "<td style=\"color: #$color;background-color: #dddddd; border: 1px solid black;\"><center>===</center></td>\n"; |
} |
|
$dt = IncDate($periode, $dt); |
} |
while (PerDateComp($dt, $edate) >= 0); |
|
while (PerDateComp($dt, $ldate) >= 0) { |
$dt = IncDate($periode, $dt); |
|
// if ($ta_level == 1) |
// echo "<td class=\"sel\"> </td>"; |
// else |
echo "<td class=\"sel\"> </td>"; |
} |
|
# Ausfuellen der Summenspalte |
if (($typ && !$ma) || $ta_level == 1) { |
printf ("<td class=\"selltgray\" align=\"right\"><b><u>%s</u></b></td>\n", FormatNum($al_hours, 3)); |
$sum = 0; |
|
if ($verrmodul) { |
if ($ta_risiko > 0) |
printf ("<td class=\"selnum\"><b>%s</b></td>", FormatNum($ta_risiko, 3)); |
else |
echo "<td class=\"sel\"> </td>\n"; |
|
printf ("<td class=\"selnum\"><b>%s</b></td>", FormatNum($brutto, 2)); |
printf ("<td class=\"selnum\"><b>%s</b></td>", FormatNum($risc_sum, 2)); |
printf ("<td class=\"selnum\"><b>%s</b></td>", FormatNum($netto, 2)); |
} |
} else { |
echo "<td class=\"sel\"> </td>\n"; |
|
if ($verrmodul) { |
echo "<td class=\"sel\"> </td>"; |
echo "<td class=\"sel\"> </td>"; |
echo "<td class=\"sel\"> </td>"; |
echo "<td class=\"sel\"> </td>"; |
} |
} |
|
if ($typ && !$ma) { |
if ($ta_num == $tanum) |
$sum = PrintMa($db, $fdate, $ldate, $ta_num, $color, $pl_num, $ressource, $lock); |
else |
$sum = PrintMa($db, $fdate, $ldate, $ta_num, $color, $pl_num, 0, $lock); |
|
$total += $sum; |
} |
|
echo "</tr>\n"; |
|
if ($ma) { |
$ma = false; |
$done = true; |
} |
|
if ($new && !$done && $ta_num == $id) |
$ma = true; |
|
if (!$ma) |
$row++; |
} |
|
# Anfuegen der Summierungen |
|
if ($total > 0) { |
# if ($role) |
# $span = 9 + $tbcols; |
# else |
$span = 8 + $tbcols; |
|
// if ($sum > 0) { |
/* if (($typ && !$ma) || $ta_level == 1) { |
echo "<tr><td class=\"sel\"colspan=$span> </td>"; |
printf("<td class=\"selltgray\" align=\"right\"><b><u>%s</u></b></td>\n", FormatNum($al_hours, 3)); |
|
if ($verrmodul) { |
if ($ta_risiko > 0) |
printf ("<td class=\"selnum\"><b>%s</b></td>", FormatNum($ta_risiko, 3)); |
else |
echo "<td class=\"sel\"> </td>\n"; |
|
printf ("<td class=\"selnum\"><b>%s</b></td>", FormatNum($brutto, 2)); |
printf ("<td class=\"selnum\"><b>%s</b></td>", FormatNum($risc_sum, 2)); |
printf ("<td class=\"selnum\"><b>%s</b></td>", FormatNum($netto, 2)); |
} |
|
echo "</tr>\n"; |
} |
*/ |
echo "<tr><td class=\"selnum\" colspan=$span>Gesamtsumme:</td>"; |
printf("<td class=\"selgray\" align=\"right\"><b><u>%s</u></b></td>\n", FormatNum($total, 3)); |
|
if ($verrmodul) { |
echo "<td class=\"sel\"> </td>\n"; |
printf ("<td class=\"selgray\" align=\"right\"><b>%s</b></td>\n", FormatNum($brutto_sum, 2)); |
printf ("<td class=\"selgray\" align=\"right\"><b>%s</b></td>\n", FormatNum($risiko_sum, 2)); |
printf ("<td class=\"selgray\" align=\"right\"><b>%s</b></td>\n", FormatNum($netto_sum, 2)); |
} |
|
echo "</tr>\n"; |
} |
|
echo "</table>\n"; |
|
if ($new) |
echo "</form>\n"; |
|
$ta_id++; |
|
if (!$lock) { |
echo "<table class=\"indent\"><tr><td>"; |
ButtonLink("Task Anhängen", "plan.php", "taskadd=$ta_id&ta_num=$ta_num&ta_plnum=$ta_plnum&$nav"); |
echo "</td></tr></table>"; |
} |
|
closeDB($db); |
} |
|
function AskPlanOverload($db, $res_hours, $plan, $pts, $mon, $year) { |
global $periode; |
global $phase; |
global $role; |
global $dtformatshort; |
global $menu; |
global $headline; |
|
$pl_num = $_REQUEST['pl_num']; |
$ta_num = $_REQUEST['ta_num']; |
$name = $_REQUEST['name']; |
# $rolem = $_REQUEST['role']; |
|
if ($phase) |
$ta_phase = $_REQUEST['ta_phase']; |
|
$query = "select mi_nname, mi_vname from mitarbeiter where "; |
$query .= "mi_num = $name"; |
|
if (!($result = QueryDB($db, $query))) |
return; |
|
$data = fetchDB($result, 0); |
$mi_nname = $data[0]; |
$mi_vname = $data[1]; |
|
echo "<form name=\"Overload\" action=\"plan.php\" method=\"post\">\n"; |
echo "<input type=\"hidden\" name=\"func\" value=\"SaveMa\">\n"; |
echo "<input type=\"hidden\" name=\"pl_num\" value=\"$pl_num\">\n"; |
echo "<input type=\"hidden\" name=\"ta_num\" value=\"$ta_num\">\n"; |
echo "<input type=\"hidden\" name=\"name\" value=\"$name\">\n"; |
# echo "<input type=\"hidden\" name=\"role\" value=\"$rolem\">\n"; |
echo "<input type=\"hidden\" name=\"menu\" value=\"$menu\">\n"; |
echo "<input type=\"hidden\" name=\"headline\" value=\"$headline\">\n"; |
echo "<input type=\"hidden\" name=\"yes\" value=\"yes\">\n"; |
|
if ($phase) |
echo "<input type=\"hidden\" name=\"ta_phase\" value=\"$ta_phase\">\n"; |
|
foreach ($_REQUEST as $key => $pstart) { |
$fr = substr($key, 0, 3); |
|
if ($fr == "dt_") |
echo "<input type=\"hidden\" name=\"$key\" value=\"$pstart\">\n"; |
} |
|
$sum = $plan + $res_hours; |
?> |
<table border=2 class="alarm"> |
<tr><td colspan=2><big>Warnung!</big><br><br> |
Die Ressource <font color="white"><? echo "$mi_nname $mi_vname"; ?></font> soll mit weiteren |
<font color="white"><? echo FormatNum($plan, 3); ?></font> PT's in der Periode |
<font color="white"><? echo "$mon/$year"; ?></font> gebucht werden. Dadurch |
würde die Ressource auf insgesamt <font color="white"><? echo FormatNum($sum, 3); ?></font> |
PT's verplant werden. In dieser Periode stehen jedoch nur |
<font color="white"><? echo "$pts"; ?></font> PT's zur Verfügung!<br> |
<br> |
Wollen Sie dennoch die eingegebenen Planwerte für diese |
Ressource speichern? |
</td> |
</tr> |
<tr> |
<td><center> |
<? |
Button("Planwerte speichern", "Overload"); |
?> |
</center> |
</td> |
<td><center> |
<? |
ButtonLink("Abbrechen", "plan.php", "editplan=$pl_num&menu=$menu&headline=$headline"); |
?> |
</center></td> |
</tr> |
</table> |
</form> |
<? |
} |
|
function SaveMa($save=true) { |
global $periode; |
global $phase; |
global $role; |
|
$pl_num = $_REQUEST['pl_num']; |
$ta_num = $_REQUEST['ta_num']; |
$name = $_REQUEST['name']; |
|
# if ($role) |
# $rolem = $_REQUEST['role']; |
|
if ($phase) |
$ta_phase = $_REQUEST['ta_phase']; |
else |
$ta_phase = 0; |
|
$err = 0; |
|
if (!isset($pl_num) || $pl_num <= 0) { |
Error("Interner Fehler: Plannumer fehlt oder ist ungültig!"); |
$err = 1; |
} |
|
if (!isset($ta_num) || $ta_num <= 0) { |
Error("Interner Fehler: Tasknummer fehlt oder ist ungültig!"); |
$err = 1; |
} |
|
if (!isset($name) || $name <= 0) { |
Error("Interner Fehler: Mitarbeiternummer fehlt oder ist ungültig!"); |
$err = 1; |
} |
|
# if ($role && (!isset($rolem) || $rolem <= 0)) { |
# Error("Interner Fehler: Rollenbezeichnung fehlt!"); |
# $err = 1; |
# } |
|
if ($err) |
return false; |
|
// if (!$role) |
// $rolem = 1; |
|
$db = OpenDB(); |
|
# Da sich die Mitarbeiterrollenzuweisung geaendert hat (03.04.2007) |
# muessen wir die Rolle aus dem zugewiesenen Mitarbeiter extrahieren. |
# Dazu benoetigen wir zunaechst die Projektnummer. |
if ($role) { |
$query = "select pl_prnum from plan where pl_num = $pl_num"; |
|
if (!($result = QueryDB($db, $query))) { |
closeDB($db); |
return; |
} |
|
if (numrowsDB($result) > 0) { |
$data = fetchDB($result, 0); |
$pr_num = $data[0]; |
} else { |
closeDB($db); |
Error("Interner Fehler: Projektnummer wurde nicht gefunden!"); |
return false; |
} |
|
$query = "select ma_role from matopr where "; |
$query .= "ma_minum = $name and ma_prnum = $pr_num"; |
|
if (!($result = QueryDB($db, $query))) { |
closeDB($db); |
return false; |
} |
|
if (numrowsDB($result) > 0) { |
$data = fetchDB($result, 0); |
$rolem = $data[0]; |
} else { |
closeDB($db); |
Error("Interner Fehler: Mitarbeiterrolle wurde nicht gefunden!"); |
return false; |
} |
} |
|
# Zunaechst muessen wir sicher stellen, das dem Task nicht bereits |
# diese Ressource hinzugefuegt wurde. |
$query = "select al_num from allocation where al_ressource = $name "; |
$query .= "and al_task = $ta_num"; |
$result = QueryDB($db, $query); |
|
if (!$result) { |
closeDB($db); |
return false; |
} |
|
$anz = numrowsDB($result); |
$query = "select co_allocation from counter"; |
$result = QueryDB($db, $query); |
|
if (!$result) { |
closeDB($db); |
return false; |
} |
|
$data = fetchDB($result, 0); |
$co_allocation = $data[0]; |
QueryDB($db, "begin"); |
|
# Falls die Ressource bereits zugeordnet war, wird sie hier geloescht. |
$query = "delete from allocation where al_ressource = $name "; |
$query .= "and al_task = $ta_num"; |
|
if (!QueryDB($db, $query)) { |
QueryDB($db, "rollback"); |
closeDB($db); |
return false; |
} |
|
foreach ($_REQUEST as $key => $pstart) { |
$fr = substr($key, 0, 3); |
|
if ($fr == "dt_") { |
$p = strpos($key, "_", 3); |
$ta_id = substr($key, 3, $p-3); |
$q = strpos($key, "_", $p+1); |
$mon = substr($key, $p+1, $q-($p+1)); |
$year = substr($key, $q+1); |
$pstart = str_replace(",", ".", $pstart); |
|
if (!isset($pstart) || $pstart <= 0.0) |
continue; |
|
$al_pstart = gmmktime(0, 0, 0, $mon, 1, $year); |
|
# Pruefen, ob die Ressource in der aktuellen Periode ueberbucht |
# ist. Falls ja, erscheint ein rotes Warnfenster, welches den |
# Anwender darauf hinweist. |
$res_hours = GetRessource($db, $name, $al_pstart); |
$pts = GetPT($al_pstart); |
|
if (!$save && ($res_hours + $pstart) > $pts) { |
AskPlanOverload($db, $res_hours, $pstart, $pts, $mon, $year); |
QueryDB($db, "rollback"); |
closeDB($db); |
include('footer.inc'); |
exit; |
} |
|
switch ($periode) { |
case 1: $al_pduration = 364; break; |
case 2: $al_pduration = 91; break; |
case 3: $al_pduration = daysinmonth($mon, $year); break; |
case 4: $al_pduration = 1; break; |
default: $al_pduration = daysinmonth($mon, $year); break; |
} |
|
$co_allocation++; |
$query = "insert into allocation (al_num, al_task, al_ressource,"; |
$query .= "al_hours, al_phase, al_pstart, al_pduration"; |
|
if ($role) |
$query .= ",al_role"; |
|
$query .= ") values ($co_allocation, $ta_num, $name, $pstart, "; |
$query .= "$ta_phase, $al_pstart, $al_pduration"; |
|
if ($role) |
$query .= ", $rolem"; |
|
$query .= ")"; |
|
if (!QueryDB($db, $query)) { |
QueryDB($db, "rollback"); |
closeDB($db); |
return false; |
} |
} |
} |
|
$query = "update counter set co_allocation = $co_allocation"; |
|
if (!QueryDB($db, $query)) { |
QueryDB($db, "rollback"); |
closeDB($db); |
return false; |
} |
|
QueryDB($db, "commit"); |
Journal(300, "plan.php: SaveMa: task=$ta_num; ressource=$name", $db); |
closeDB($db); |
return true; |
} |
|
function SaveUpMa() { |
global $periode; |
global $phase; |
global $role; |
|
$pl_num = $_REQUEST['pl_num']; |
$ta_num = $_REQUEST['ta_num']; |
$ressource = $_REQUEST['ressource']; |
|
if ($phase) |
$al_phase = $_REQUEST['al_phase']; |
else |
$al_phase = 0; |
|
if ($role) |
$al_role = $_REQUEST['al_role']; |
// else |
// $al_role = 1; |
|
$err = 0; |
|
if (!isset($pl_num) || $pl_num <= 0) { |
Error("Interner Fehler: Plannumer fehlt oder ist ungültig!"); |
$err = 1; |
} |
|
if (!isset($ta_num) || $ta_num <= 0) { |
Error("Interner Fehler: Tasknummer fehlt oder ist ungültig!"); |
$err = 1; |
} |
|
if ($err) |
return false; |
|
$db = OpenDB(); |
$query = "select co_allocation from counter"; |
$result = QueryDB($db, $query); |
|
if (!$result) { |
closeDB($db); |
return false; |
} |
|
$data = fetchDB($result, 0); |
$co_allocation = $data[0]; |
$count = $co_allocation; |
|
QueryDB($db, "begin"); |
|
foreach ($_REQUEST as $key => $pstart) { |
$fr = substr($key, 0, 3); |
|
if ($fr == "dt_") { |
$p = strpos($key, "_", 3); |
$al_num = substr($key, 3, $p-3); |
$q = strpos($key, "_", $p+1); |
$mon = substr($key, $p+1, $q-($p+1)); |
$year = substr($key, $q+1); |
$pstart = str_replace(",", ".", $pstart); |
|
if ((!isset($pstart) || $pstart <= 0) && $al_num > 0) { |
$query = "delete from allocation where al_num = $al_num"; |
|
if (!QueryDB($db, $query)) { |
QueryDB($db, "rollback"); |
closeDB($db); |
return false; |
} |
|
continue; |
} |
|
if ($al_num == 0 && $pstart > 0) { |
$al_pstart = gmmktime(0, 0, 0, $mon, 1, $year); |
|
switch ($periode) { |
case 1: $al_pduration = 364; break; |
case 2: $al_pduration = 91; break; |
case 3: $al_pduration = 30; break; |
case 4: $al_pduration = 1; break; |
default: $al_pduration = 30; break; |
} |
|
$co_allocation++; |
$query = "insert into allocation (al_num, al_task,"; |
$query .= "al_ressource, al_hours, al_phase, al_pstart,"; |
|
if ($role) |
$query .= "al_pduration, al_role) values ($co_allocation,"; |
else |
$query .= "al_pduration) values ($co_allocation,"; |
|
$query .= "$ta_num, $ressource, $pstart, $al_phase,"; |
|
if ($role) |
$query .= "$al_pstart, $al_pduration, $al_role)"; |
else |
$query .= "$al_pstart, $al_pduration)"; |
} else if ($al_num > 0 && $pstart > 0) { |
$query = "update allocation set al_hours = $pstart where "; |
$query .= "al_num = $al_num"; |
} else |
continue; |
|
if (!QueryDB($db, $query)) { |
QueryDB($db, "rollback"); |
closeDB($db); |
return false; |
} |
} |
} |
|
if ($count < $co_allocation) { |
$query = "update counter set co_allocation = $co_allocation"; |
|
if (!QueryDB($db, $query)) { |
QueryDB($db, "rollback"); |
closeDB($db); |
return false; |
} |
} |
|
QueryDB($db, "commit"); |
Journal(300, "plan.php: SaveUpMa: task=$ta_num; ressource=$ressource", $db); |
closeDB($db); |
return true; |
} |
|
# Folgende Funktion fragt den Anwender, ob er die IST-Werte auch tatsaechlich |
# uebernehmen will. |
function AskIstPlan($pl_num) { |
global $phase; |
global $dtformatshort; |
global $pjcopy; |
|
$headline = $_REQUEST['headline']; |
$menu = $_REQUEST['menu']; |
$pl_prnum = $_REQUEST['pl_prnum']; |
$pl_status = $_REQUEST['pl_status']; |
$nav = "editcopy=$pl_num&menu=$menu&pl_prnum=$pl_prnum&"; |
$nav .= "pl_status=$pl_status&func=CopyPlan&headline=21&"; |
$nav .= "istdate='+document.AskIstPlan.istdate.value+'"; |
$datum = time(); |
$mon = gmdate("n", $datum); |
$year = gmdate("Y", $datum); |
$day = gmdate("j", $datum); |
|
if ($pjcopy != 3) { |
$mon--; |
|
if ($mon < 1) { |
$mon = 12; |
$year--; |
} |
|
if ($day < (daysinmonth($mon, $year) / 2)) { |
$mon--; |
|
if ($mon < 1) { |
$mon = 12; |
$year--; |
} |
} |
|
$datum = gmmktime(0, 0, 0, $mon, 1, $year); |
} else { |
$datum = 0; |
$db = OpenDB(); |
$query = "select ab_datum from abschluss where "; |
$query .= "ab_prnum = $pl_prnum order by ab_datum desc"; |
|
if (!($result = QueryDB($db, $query))) { |
closeDB($db); |
return; |
} |
|
if (numrowsDB($result) > 0) { |
$data = fetchDB($result, 0); |
$ab_datum = $data[0]; |
$lab = gmdate($dtformatshort, $ab_datum); |
} else |
$lab = GetMessage($db, 404, "(Projekt wurde bisher noch nicht abgeschlossen)"); |
} |
?> |
<br> |
<form name="AskIstPlan" action="plan.php" method="post"> |
<table class="input"> |
<tr><th class="sel" colspan=3><? Output(-1, 393, "Plan kopieren"); ?></th></tr> |
<? |
if ($pjcopy == 1) { |
?> |
<tr><td colspan=3><br><? Output(-1, 394, "Bis zu welcher Periode sollen die IST-Werte als |
Planwerte übernommen werden?"); ?> |
<br><br> |
</td> |
</tr> |
<tr> |
<td><? Output(-1, 395, "IST-Werte übernehmen bis (%s):", GetVisualDate($dtformatshort, true)); ?></td> |
<td colspan=2><input type="text" name="istdate" value="<? echo GetShortDate($datum) ?>" maxlength=7 size=7></td> |
</tr> |
<? |
} else if ($pjcopy == 2) { |
?> |
<tr> |
<td colspan=3><? Output(-1, 397, "Beim Kopieren des Plans werden die IST-Werte bis zum %s übernommen!", GetShortDate($datum)); ?> |
<input type="hidden" name="istdate" value="<? echo GetShortDate($datum); ?>"> |
</td> |
</tr> |
<? |
} else { |
?> |
<tr> |
<td colspan=3><? Output(-1, 402, "Die IST-Werte des Projekts %s werden bis zum %s (letzter Teilprojektabschluss) übernommen!", $pl_prnum, $lab); ?> |
<input type="hidden" name="istdate" value="0"> |
</td> |
</tr> |
<? |
} |
?> |
<tr> |
<td><center><input type="button" name="yes" value="<? Output(-1, 393, "Plan kopieren"); ?>" onClick="javascript:MoveTo('plan.php','yes=yes&<? echo "$nav"; ?>')"></center></td> |
<td><? if ($pjcopy == 1) { ?><center><input type="button" name="no" value="<? Output(-1, 396, "Planwerte unverändert übernehmen"); ?>" onClick="javascript:MoveTo('plan.php','no=no&<? echo "$nav"; ?>')"></center> <? } ?></td> |
<td><center><input type="button" name="cancel" value="<? Output(-1, 49, "Abbrechen"); ?>" onClick="javascript:MoveTo('plan.php','cancel=cancel&<? echo "$nav"; ?>')"></center></td> |
</tr> |
</table> |
</form> |
<?php |
} |
|
# Folgende Funktion kopiert einen bestehenden Plan und erzeugt eine Instanz |
# davon. Anschliessend kann diese Instanz bearbeitet werden. |
# |
function editcopy($pl_num, $plis=false, $doit=false) { |
global $leneinheit; |
global $periode; |
global $role; |
global $pmlight; |
global $pjcopy; |
|
$pl_prnum = $_REQUEST['pl_prnum']; |
$pl_status = $_REQUEST['pl_status']; |
|
if (!isset($pl_prnum) || $pl_prnum <= 0) { |
Error(GetMessage(-1, 389, "Interner Fehler: Projektnummer fehlt!")); |
return false; |
} |
|
if (!isset($pl_status) || $pl_status <= 0) { |
Error(GetMessage(-1, 390, "Interner Fehler: Projektstatus wurde nicht übergeben!")); |
return false; |
} |
|
if (!$doit) { |
AskIstPlan($pl_num); |
require('footer.inc'); |
exit(0); |
} |
|
if ($plis || $pjcopy == 2) |
$istdate = $_REQUEST['istdate']; |
else |
$istdate = 0; |
|
if (!isset($istdate)) { |
Error(GetMessage(-1, 391, "Es wurde kein Datum angegeben, bis zu welchem die IST-Werte übernommen werden sollen!")); |
return false; |
} else if ($plis || $pjcopy == 2) { |
$edt = explode(GetDateSep(), $istdate); |
$istdate = gmmktime(0, 0, 0, $edt[0], daysinmonth($edt[0], $edt[1]), $edt[1]); |
} |
|
$db = OpenDB(); |
$query = "select pl_lfd, pl_prnum, pl_status, pl_comment from plan where "; |
$query .= "pl_num = $pl_num"; |
$result = QueryDB($db, $query); |
|
if (!$result) { |
closeDB($db); |
return false; |
} |
|
$data = fetchDB($result, 0); |
$pl_lfd = $data[0]; |
$pl_prnum = $data[1]; |
$pl_status = $data[2]; |
$pl_comment = $data[3]; |
closeDB($db); |
unset($db); |
|
$new_pl_num = SaveNewPlan(); |
|
if (!$new_pl_num) |
return false; |
|
$db = OpenDB(); |
# Den Kommentar zum neuen Plan hinzufuegen (nur wenn keine strikte |
# Periodensicht ($pmlight == false) gewaehlt wurde) |
if (!$pmlight) { |
$query = "update plan set pl_comment = '$pl_comment' where "; |
$query .= "pl_num = $new_pl_num"; |
|
if (!QueryDB($db, $query)) { |
closeDB($db); |
return false; |
} |
} |
|
$query = "select co_task, co_allocation from counter"; |
$result = QueryDB($db, $query); |
|
if (!$result) { |
QueryDB($db, "delete from plan where pl_num = $new_pl_num"); |
closeDB($db); |
return false; |
} |
|
$data = fetchDB($result, 0); |
$co_task = $data[0] + 1; |
$co_allocation = $data[1] + 1; |
|
# Wenn die IST-Werte des PJ bis zum Datum des letzten |
# Teilprojektabschluss uebernommen werden sollen, |
# benoetigen wir das Datum des letzten TPA. |
if ($pjcopy == 3) { |
$query = "select ab_datum from abschluss where "; |
$query .= "ab_prnum = $pl_prnum order by ab_datum desc"; |
|
if (!($resab = QueryDB($db, $query))) { |
QueryDB($db, "rollback"); |
QueryDB($db, "delete from plan where pl_num = $new_pl_num"); |
closeDB($db); |
return false; |
} |
|
if (numrowsDB($resab) > 0) { |
$data = fetchDB($resab, 0); |
$ab_datum = $data[0]; |
} else |
$ab_datum = 0; |
|
if ($ab_datum == 0) |
$plis = 0; |
else |
$istdate = $ab_datum; |
} |
|
# Auslesen der Tasks. In der folgenden Schleife werden die Tasks |
# kopiert und neu eingefuegt. |
$query = "select ta_num, ta_id, ta_depend, ta_deptype, ta_name, ta_color,"; |
$query .= "ta_shape, ta_meeting, ta_start, ta_duration, ta_complete,"; |
$query .= "ta_fixed_start, ta_priority, ta_level, ta_phase, ta_notiz, ta_risiko, ta_hash "; |
$query .= "from task where ta_plnum = $pl_num order by ta_id"; |
$result = QueryDB($db, $query); |
|
if (!$result) { |
QueryDB($db, "delete from plan where pl_num = $new_pl_num"); |
closeDB($db); |
return false; |
} |
|
$numrows = numrowsDB($result); |
$rows = 0; |
QueryDB($db, "begin"); |
|
while ($rows < $numrows) { |
$data = fetchDB($result, $rows); |
$ori_ta_num = $data[0]; |
$ta_id = $data[1]; |
$ta_depend = $data[2]; |
$ta_deptype = $data[3]; |
$ta_name = addslashes($data[4]); |
$ta_color = $data[5]; |
$ta_shape = $data[6]; |
$ta_meeting = $data[7]; |
$ta_start = $data[8]; |
$ta_duration = $data[9]; |
$ta_complete = $data[10]; |
$ta_fixed_start = $data[11]; |
$ta_priority = $data[12]; |
$ta_level = $data[13]; |
$ta_phase = $data[14]; |
$ta_notiz = $data[15]; |
$ta_risiko = $data[16]; |
$ta_hash = $data[17]; |
$ta_num = $co_task; |
$ta_plnum = $new_pl_num; |
|
if (!isset($ta_fixed_start)) |
$ta_fixed_start = 0; |
|
if (!isset($ta_risiko)) |
$ta_risiko = 0; |
|
if (!isset($ta_depend) || strlen($ta_depend) == 0) |
$ta_depend = "NULL"; |
|
# Ende des Task als Datum |
$ta_end = $ta_start + ($ta_duration * 86400); |
# Kopie des Task speichern |
$query = "insert into task (ta_num, ta_plnum, ta_id, ta_depend,"; |
$query .= "ta_deptype, ta_name, ta_color, ta_shape, ta_meeting,"; |
$query .= "ta_start, ta_duration, ta_complete, ta_fixed_start,"; |
$query .= "ta_priority, ta_level, ta_phase, ta_notiz, ta_risiko, ta_hash) values "; |
$query .= "($ta_num, $ta_plnum, $ta_id, $ta_depend, $ta_deptype,"; |
$query .= "'$ta_name', $ta_color, '$ta_shape', $ta_meeting,"; |
$query .= "$ta_start, $ta_duration, $ta_complete, $ta_fixed_start,"; |
$query .= "$ta_priority, $ta_level, $ta_phase, '$ta_notiz', $ta_risiko, '$ta_hash')"; |
$result2 = QueryDB($db, $query); |
|
if (!$result2) { |
QueryDB($db, "rollback"); |
QueryDB($db, "delete from plan where pl_num = $new_pl_num"); |
closeDB($db); |
return false; |
} |
|
if (!$plis && $pjcopy != 2) { |
# Auslesen der Planwerte zum Task. |
$query = "select al_ressource, al_hours, al_phase, al_pstart,"; |
|
if ($role) |
$query .= "al_pduration, al_role from allocation where "; |
else |
$query .= "al_pduration from allocation where "; |
|
$query .= "al_task = $ori_ta_num order by al_num"; |
$result3 = QueryDB($db, $query); |
|
if (!$result3) { |
QueryDB($db, "rollback"); |
QueryDB($db, "delete from plan where pl_num = $new_pl_num"); |
closeDB($db); |
return false; |
} |
|
$nr = numrowsDB($result3); |
$r = 0; |
|
while ($r < $nr) { |
$data = fetchDB($result3, $r); |
$al_ressource = $data[0]; |
$al_hours = $data[1]; |
$al_phase = $data[2]; |
$al_pstart = $data[3]; |
$al_pduration = $data[4]; |
|
if ($role) |
$al_role = $data[5]; |
|
$al_num = $co_allocation; |
$al_task = $ta_num; |
|
if (!isset($al_phase)) |
$al_phase = $ta_phase; |
|
if (!isset($al_pduration)) |
$al_pduration = 1; |
|
if (!$role) |
$al_role = 1; |
|
$query = "insert into allocation (al_num, al_task,"; |
$query .= "al_ressource, al_hours, al_phase, al_pstart,"; |
|
if ($role) |
$query .= "al_pduration, al_role) values ($al_num, $al_task,"; |
else |
$query .= "al_pduration) values ($al_num, $al_task,"; |
|
$query .= "$al_ressource, $al_hours, $al_phase, $al_pstart,"; |
|
if ($role) |
$query .= "$al_pduration, $al_role)"; |
else |
$query .= "$al_pduration)"; |
|
if (!QueryDB($db, $query)) { |
QueryDB($db, "rollback"); |
QueryDB($db, "delete from plan where pl_num = $new_pl_num"); |
closeDB($db); |
return false; |
} |
|
$co_allocation++; |
$r++; |
} |
} else { |
# Aus der Tabelle "wdone" heraus werden die IST-Werte ermittelt |
# und mit Hilfe des Hashwerts den richtigen Tasks zugewiesen. |
# |
# Ist ein IST-Wert frueher als das Startdatum eingetragen, aendert |
# sich das Startdatum und wenn der IST-Wert nach dem Endedatum |
# eingetragen wurde, dann aendert sich das Endedatum des Tasks! |
# |
$query = "select wd_hours/$leneinheit, wd_datum, wd_minum from wdone, task where "; |
$query .= "ta_num = wd_task and ta_hash = '$ta_hash' and wd_prnum = $pl_prnum and "; |
$query .= "wd_datum <= $istdate "; |
$query .= "order by wd_minum, wd_datum"; |
|
if (!($resma = QueryDB($db, $query))) { |
QueryDB($db, "rollback"); |
QueryDB($db, "delete from plan where pl_num = $new_pl_num"); |
closeDB($db); |
return false; |
} |
|
$anzma = numrowsDB($resma); |
$maza = 0; |
$end = $ta_start + ($ta_duration * 86400); |
$akt_von = 0; |
$akt_bis = 0; |
$al_hours = 0; |
$old_wdminum = 0; |
$task_flag = false; |
|
while ($maza < $anzma) { |
$data = fetchDB($resma, $maza); |
$wd_hours = $data[0]; |
$wd_datum = $data[1]; |
$wd_minum = $data[2]; |
$lo_tahash = $data[3]; |
|
if ($maza == 0) { |
$mon = gmdate("n", $wd_datum); |
$year = gmdate("Y", $wd_datum); |
$akt_von = gmmktime(0, 0, 0, $mon, 1, $year); |
$akt_bis = gmmktime(0, 0, 0, $mon, daysinmonth($mon, $year), $year); |
$old_wdminum = $wd_minum; |
} |
|
if ($old_wdminum != $wd_minum || ($akt_von < $wd_datum && $akt_bis < $wd_datum)) { |
# Speichern der Periode |
$al_num = $co_allocation; |
$al_task = $ta_num; |
$al_pstart = $akt_von; |
$al_phase = $ta_phase; |
$al_ressource = $old_wdminum; |
$al_pduration = (GetUltimo($al_pstart) - $al_pstart) / 86400; |
# Wir brauchen noch die Rolle, sofern die Einstellungen das |
# verlangen! |
if ($role) { |
$query = "select al_role from allocation where "; |
$query .= "al_task = $ori_ta_num and al_ressource = $al_ressource"; |
|
if (!($resal = QueryDB($db, $query))) { |
QueryDB($db, "rollback"); |
QueryDB($db, "delete from plan where pl_num = $new_pl_num"); |
closeDB($db); |
return false; |
} |
|
if (numrowsDB($resal) > 0) { |
$data = fetchDB($resal, 0); |
$al_role = $data[0]; |
} |
} |
|
$query = "insert into allocation (al_num, al_task,"; |
$query .= "al_ressource, al_hours, al_phase, al_pstart,"; |
|
if ($role && isset($al_role)) |
$query .= "al_pduration, al_role) values ($al_num, $al_task,"; |
else |
$query .= "al_pduration) values ($al_num, $al_task,"; |
|
$query .= "$al_ressource, $al_hours, $al_phase, $al_pstart,"; |
|
if ($role && isset($al_role)) |
$query .= "$al_pduration, $al_role)"; |
else |
$query .= "$al_pduration)"; |
|
if (!QueryDB($db, $query)) { |
QueryDB($db, "rollback"); |
QueryDB($db, "delete from plan where pl_num = $new_pl_num"); |
closeDB($db); |
return false; |
} |
|
$co_allocation++; |
$mon = gmdate("n", $wd_datum); |
$year = gmdate("Y", $wd_datum); |
$akt_von = gmmktime(0, 0, 0, $mon, 1, $year); |
$akt_bis = gmmktime(0, 0, 0, $mon, daysinmonth($mon, $year), $year); |
$old_wdminum = $wd_minum; |
$al_hours = 0; |
} |
|
if ($wd_datum > $ta_end) { |
$ta_duration = ($wd_datum - $ta_start) / 86400; |
$ta_end = $ta_start + ($ta_duration * 86400); |
$task_flag = true; |
} |
|
$al_hours += $wd_hours; |
$maza++; |
} |
|
# Speichern der Periode |
# Hier wird der letzte Datensatz weggespeichert! |
if ($anzma > 0) { |
$al_num = $co_allocation; |
$al_task = $ta_num; |
$al_pstart = $akt_von; |
$al_phase = $ta_phase; |
$al_ressource = $wd_minum; |
$al_pduration = (GetUltimo($al_pstart) - $al_pstart) / 86400; |
# Wir brauchen noch die Rolle, sofern die Einstellungen das |
# verlangen! |
if ($role) { |
$query = "select al_role from allocation where "; |
$query .= "al_task = $ori_ta_num and al_ressource = $al_ressource"; |
|
if (!($resal = QueryDB($db, $query))) { |
QueryDB($db, "rollback"); |
QueryDB($db, "delete from plan where pl_num = $new_pl_num"); |
closeDB($db); |
return false; |
} |
|
if (numrowsDB($resal) > 0) { |
$data = fetchDB($resal, 0); |
$al_role = $data[0]; |
} |
} |
|
$query = "insert into allocation (al_num, al_task,"; |
$query .= "al_ressource, al_hours, al_phase, al_pstart,"; |
|
if ($role && isset($al_role)) |
$query .= "al_pduration, al_role) values ($al_num, $al_task,"; |
else |
$query .= "al_pduration) values ($al_num, $al_task,"; |
|
$query .= "$al_ressource, $al_hours, $al_phase, $al_pstart,"; |
|
if ($role && isset($al_role)) |
$query .= "$al_pduration, $al_role)"; |
else |
$query .= "$al_pduration)"; |
|
if (!QueryDB($db, $query)) { |
QueryDB($db, "rollback"); |
QueryDB($db, "delete from plan where pl_num = $new_pl_num"); |
closeDB($db); |
return false; |
} |
|
$co_allocation++; |
|
if ($wd_datum > $ta_end) { |
$ta_duration = ($wd_datum - $ta_start) / 86400; |
$ta_end = $ta_start + ($ta_duration * 86400); |
$task_flag = true; |
} |
} |
|
# Wenn ($task_flag == true) ist, dann gab es IST-Efassungen |
# die Ausserhalb des Tasks liegen. In diesem Fall muss das |
# Beginndatum und/oder die Laufzeit des Tasks entsprechend |
# geaendert werden. |
# |
if ($task_flag) { |
$query = "update task set ta_duration = $ta_duration "; |
$query .= "where ta_num = $ta_num"; |
|
if (!QueryDB($db, $query)) { |
QueryDB($db, "rollback"); |
QueryDB($db, "delete from plan where pl_num = $new_pl_num"); |
closeDB($db); |
return false; |
} |
} |
|
# Auslesen der Planwerte zum Task. |
# Alle Planwerte die juenger als $istdate sind, muessen gefunden |
# und ebenfalls eingefuegt werden! |
$query = "select al_ressource, al_hours, al_phase, al_pstart,"; |
|
if ($role) |
$query .= "al_pduration, al_role from allocation where "; |
else |
$query .= "al_pduration from allocation where "; |
|
$query .= "al_task = $ori_ta_num and al_pstart > $istdate order by al_ressource, al_num"; |
$result3 = QueryDB($db, $query); |
|
if (!$result3) { |
QueryDB($db, "rollback"); |
QueryDB($db, "delete from plan where pl_num = $new_pl_num"); |
closeDB($db); |
return false; |
} |
|
$nr = numrowsDB($result3); |
$r = 0; |
|
while ($r < $nr) { |
$data = fetchDB($result3, $r); |
$al_ressource = $data[0]; |
$al_hours = $data[1]; |
$al_phase = $data[2]; |
$al_pstart = $data[3]; |
$al_pduration = $data[4]; |
|
if ($role) |
$al_role = $data[5]; |
|
$al_num = $co_allocation; |
$al_task = $ta_num; |
|
if (!isset($al_phase)) |
$al_phase = $ta_phase; |
|
if (!isset($al_pduration)) |
$al_pduration = (GetUltimo($al_pstart) - $al_pstart) / 86400; |
|
$query = "insert into allocation (al_num, al_task,"; |
$query .= "al_ressource, al_hours, al_phase, al_pstart,"; |
|
if ($role) |
$query .= "al_pduration, al_role) values ($al_num, $al_task,"; |
else |
$query .= "al_pduration) values ($al_num, $al_task,"; |
|
$query .= "$al_ressource, $al_hours, $al_phase, $al_pstart,"; |
|
if ($role) |
$query .= "$al_pduration, $al_role)"; |
else |
$query .= "$al_pduration)"; |
|
if (!QueryDB($db, $query)) { |
QueryDB($db, "rollback"); |
QueryDB($db, "delete from plan where pl_num = $new_pl_num"); |
closeDB($db); |
return false; |
} |
|
$co_allocation++; |
$r++; |
} |
} |
|
$co_task++; |
$rows++; |
} |
|
$co_task--; |
$co_allocation--; |
$query = "update counter set co_task = $co_task, co_allocation = $co_allocation"; |
$result2 = QueryDB($db, $query); |
|
if (!$result2) { |
QueryDB($db, "rollback"); |
QueryDB($db, "delete from plan where pl_num = $new_pl_num"); |
closeDB($db); |
return false; |
} |
|
QueryDB($db, "commit"); |
Journal(200, "plan.php: editcopy: alte pl_num=$pl_num; neue pl_num=$new_pl_num; projekt=$pl_prnum", $db); |
closeDB($db); |
return true; |
} |
|
# Folgende Funktion speichert den Kommentar zu einem Plan. Dabei wird der |
# TIMESTAMP nicht neu gesetzt! |
# |
function SavePlanComment() { |
global $pmlight; |
|
$pl_num = $_REQUEST['pl_num']; |
$pl_comment = $_REQUEST['pl_comment']; |
|
if (!isset($pl_num) || $pl_num <= 0) { |
Error("Interner Fehler: Plannummer fehlt in SavePlanComment!"); |
return; |
} |
|
$db = OpenDB(); |
$query = "update plan set pl_comment = '$pl_comment' where "; |
$query .= "pl_num = $pl_num"; |
|
if (!QueryDB($db, $query)) { |
closeDB($db); |
return; |
} |
|
closeDB($db); |
} |
|
# Folgende Funktion stellt eine Maske zur Erfassung eines Statusberichts |
# dar. Es sind auch Navigationselemente enthalten, um bereits erfasste |
# Berichte abrufen zu koennen. |
# |
function ManageStatus($pr_num, $pl_num, $edit=false, $lock=false) { |
global $pmlight; |
global $statusbericht; |
global $menu; |
global $rstufe; |
global $unum; |
global $dtformatshort; |
|
if (!$statusbericht) { |
Error(GetMessage(-1, 354, "Der Statusbericht wurde nicht freigeschalten!")); |
return; |
} |
|
if (!isset($pr_num) || $pr_num <= 0) { |
Error(GetMessage(-1, 355, "Interner Fehler: Projektnummer wurde nicht an ManageStatus übergeben!")); |
return; |
} |
|
if (!isset($pl_num) || $pl_num <= 0) { |
Error(GetMessage(-1, 356, "Interner Fehler: Plannummer wurde nicht an ManageStatus übergeben!")); |
return; |
} |
|
$env_lock = $_REQUEST['lock']; |
|
if (isset($env_lock) && ($env_lock == true || $env_lock == 1)) |
$lock = true; |
|
if ($edit) { |
$ps_num = $_REQUEST['ps_num']; |
$ps_prstat = $_REQUEST['ps_prstat']; |
$ps_comment = stripslashes(urldecode($_REQUEST['ps_comment'])); |
$ps_status = $_REQUEST['ps_status']; |
$ps_datum = $_REQUEST['ps_datum']; |
} |
|
$db = OpenDB(); |
|
if ($lock && !$edit) { |
$query = "select ps_num, ps_prstat, ps_comment, ps_status, "; |
$query .= "to_char(ps_datum, 'DD.MM.YYYY') from planstatus where "; |
$query .= "ps_prnum = $pr_num and ps_plnum = $pl_num and "; |
$query .= "ps_status = true order by ps_datum desc"; |
|
if (!($resps = QueryDB($db, $query))) { |
closeDB($db); |
return; |
} |
|
if (numrowsDB($resps) > 0) { |
$data = fetchDB($resps, 0); |
$ps_num = $data[0]; |
$ps_prstat = $data[1]; |
$ps_comment = $data[2]; |
$ps_status = $data[3]; |
$ps_datum = $data[4]; |
} |
} |
|
$query = "select pr_name, pr_pl, mi_nname, mi_vname "; |
$query .= "from project, mitarbeiter where "; |
$query .= "mi_num = pr_pl and pr_num = $pr_num"; |
|
if (!($result = QueryDB($db, $query))) { |
closeDB($db); |
return; |
} |
|
$data = fetchDB($result, 0); |
$pr_name = $data[0]; |
$pr_pl = $data[1]; |
$mi_nname = $data[2]; |
$mi_vname = $data[3]; |
|
if ($pr_pl != $unum && $rstufe != 1) { |
Error(GetMessage($db, 353, "Nur der Administrator oder der Projektleiter darf den Statusbericht bearbeiten!")); |
closeDB($db); |
return; |
} |
|
$query = "select pl_status, pl_lfd from plan where pl_num = $pl_num"; |
|
if (!($result = QueryDB($db, $query))) { |
closeDB($db); |
return; |
} |
|
$data = fetchDB($result, 0); |
$pl_status = $data[0]; |
$pl_lfd = $data[1]; |
|
switch($pl_status) { |
case 1: $str_status = GetMessage($db, 85, "In Erstellung"); break; |
case 2: $str_status = GetMessage($db, 86, "Freigegeben"); break; |
case 3: $str_status = ""; break; |
case 4: $str_status = GetMessage($db, 87, "Aktiv"); break; |
case 5: $str_status = GetMessage($db, 88, "Inaktiv"); break; |
case 6: $str_status = GetMessage($db, 89, "Abgeschlossen"); break; |
} |
|
$nav = "menu=$menu&headline=9"; |
# Kopf der Maske malen |
?> |
<form action="plan.php" name="statb" method="post"> |
<input type="hidden" name="menu" value="<? echo "$menu"; ?>"> |
<input type="hidden" name="headline" value="9"> |
<input type="hidden" name="pr_num" value="<? echo "$pr_num"; ?>"> |
<input type="hidden" name="pl_num" value="<? echo "$pl_num"; ?>"> |
<input type="hidden" name="ps_pl" value="<? echo "$pr_pl"; ?>"> |
<input type="hidden" name="lock" value="<? echo "$lock"; ?>"> |
<? |
if (isset($ps_num) && $ps_num > 0) |
echo "<input type=\"hidden\" name=\"ps_num\" value=\"$ps_num\">\n"; |
|
if (isset($ps_datum)) |
echo "<input type=\"hidden\" name=\"ps_datum\" value=\"$ps_datum\">\n"; |
|
if ($edit && !isset($ps_datum)) |
$ps_datum = date($dtformatshort); |
?> |
<input type="hidden" name="func" value="SavePlanstatus"> |
|
<table class="input"> |
<tr> |
<? |
if ($edit || $lock) { |
?> |
<th class="sel" colspan=2><? Output($db, 357, "Statusbericht vom %s", $ps_datum); ?></th> |
<? |
} else { |
?> |
<th class="sel" colspan=2><? Output($db, 358, "Neuen Statusbericht erfassen"); ?></th> |
<? |
} |
?> |
<th class="sel"><? Output($db, 359, "Alte Berichte"); ?></th> |
</tr> |
<tr> |
<td><? Output($db, 328, "Projektleiter:"); ?></td> |
<td><? echo "$mi_nname $mi_vname"; ?></td> |
<td rowspan=6 valign="top"> |
<? |
$query = "select ps_num, ps_plnum, ps_status, ps_comment, ps_prstat,"; |
$query .= "to_char(ps_datum, 'DD.MM.YYYY') from planstatus "; |
$query .= "where ps_prnum = $pr_num "; |
|
if ($lock) |
$query .= "and ps_plnum = $pl_num and ps_status = true "; |
|
$query .= "order by ps_lfd desc"; |
|
if (!($result = QueryDB($db, $query))) { |
closeDB($db); |
return; |
} |
|
$anz = numrowsDB($result); |
$i = 0; |
|
if ($anz > 0) |
echo "<table class=\"input\">\n"; |
|
while ($i < $anz) { |
$data = fetchDB($result, $i); |
$xps_num = $data[0]; |
$xps_plnum = $data[1]; |
$xps_status = $data[2]; |
$xps_comment = $data[3]; |
$xps_prstat = $data[4]; |
$xps_datum = $data[5]; |
|
echo "<tr><td><a href=\"#\" onClick=\"javascript:MoveTo('plan.php',"; |
echo "'pr_num=$pr_num&pl_num=$xps_plnum&ps_prstat=$xps_prstat&"; |
echo "ps_num=$xps_num&ps_comment=" . urlencode($xps_comment) . "&ps_status=$xps_status&"; |
echo "ps_datum=$xps_datum&lock=$lock&func=PSEDIT&$nav')\">"; |
echo "$xps_datum</td><td><img src=\"image/"; |
|
switch ($xps_prstat) { |
case 0: echo "cool.gif\" alt=\"" . GetMessage($db, 360, "Gruen"); break; |
case 1: echo "shocked.gif\" alt=\"" . GetMessage($db, 361, "Gelb"); break; |
case 2: echo "sad.gif\" alt=\"" . GetMessage($db, 362, "Rot"); break; |
default: echo "huh.gif\" alt=\"" . GetMessage($db, 363, "Undefiniert"); |
} |
|
echo "\" width=17 height=17></td></tr>\n"; |
$i++; |
} |
|
if ($anz > 0) |
echo "</table>\n"; |
?> |
</td> |
</tr> |
<tr> |
<td><? Output($db, 1, "Projekt:"); ?></td> |
<td><? echo "$pr_num $pr_name"; ?></td> |
</tr> |
<tr> |
<td><? Output($db, 287, "Datum:"); ?></td> |
<td><? if ($edit || $lock) echo "$ps_datum"; else echo date($dtformatshort); ?></td> |
</tr> |
<tr> |
<td><? Output($db, 364, "Plannr./Planstatus:"); ?></td> |
<td><? echo "$pl_lfd / $str_status"; ?></td> |
</tr> |
<tr> |
<th class="sel" colspan=2><? Output($db, 38, "Statusbericht"); ?></th> |
</tr> |
<tr> |
<td><? Output($db, 365, "Planstatus:"); ?></td> |
<td><select name="ps_prstat" <? if ($lock || $pl_status > 4) echo "disabled"; ?>> |
<option class="status" value="0" <? if ($ps_prstat == 0) echo "selected"; ?>><? Output($db, 366, "Grün"); ?></option> |
<option class="status" value="1" <? if ($ps_prstat == 1) echo "selected"; ?>><? Output($db, 361, "Gelb"); ?></option> |
<option class="status" value="2" <? if ($ps_prstat == 2) echo "selected"; ?>><? Output($db, 362, "Rot"); ?></option> |
</select> |
</td> |
</tr> |
<tr> |
<td valign="top"><? output($db, 367, "Statusbeschreibung:"); ?></td> |
<td><textarea name="ps_comment" rows=10 cols=60 <? if ($lock || $pl_status > 4) echo "disabled"; ?>><? echo "$ps_comment"; ?></textarea></td> |
</tr> |
<tr> |
<td><? Output($db, 368, "Bericht:"); ?></td> |
<td><select name="ps_status" <? if ($lock || $pl_status > 4) echo "disabled"; ?>> |
<option value="true" <? if ($ps_status == "t" || $ps_status == "true") echo "selected"; ?>><? Output($db, 369, "Gültig"); ?></option> |
<option value="false" <? if ($ps_status == "f" || $ps_status == "false") echo "selected"; ?>><? Output($db, 370, "Ungültig"); ?></option> |
</select> |
</td> |
</tr> |
</table> |
<? |
if ($lock) { |
echo "</form>\n"; |
closeDB($db); |
return; |
} |
?> |
<table class="indent"><tr><td> |
<? |
if ($edit) { |
ButtonLink(GetMessage($db, 371, "Neuer Bericht"), "plan.php", "pr_num=$pr_num&pl_num=$pl_num&func=PLANSTATUS&$nav"); |
echo "</td><td>"; |
} |
|
if ($pl_status <= 4) |
ButtonSubmit(GetMessage($db, 45, "Speichern"), "statb"); |
|
echo "</td></tr></table></form>\n"; |
closeDB($db); |
} |
|
# Folgende Funktion speichert einen zuvor erfassten Planstatus. Dabei wird |
# ermittelt ob es den Plan bereits gibt oder nicht. |
# |
function SavePlanstatus() { |
$ps_num = $_REQUEST['ps_num']; |
$ps_prnum = $_REQUEST['pr_num']; |
$ps_plnum = $_REQUEST['pl_num']; |
$ps_pl = $_REQUEST['ps_pl']; |
$ps_status = $_REQUEST['ps_status']; |
$ps_comment = $_REQUEST['ps_comment']; |
$ps_prstat = $_REQUEST['ps_prstat']; |
|
if (!isset($ps_prnum) || $ps_prnum <= 0) { |
Error("Interner Fehler: Projektnummer wurde nicht an SavePlanstatus übergeben!"); |
return; |
} |
|
if (!isset($ps_plnum) || $ps_plnum <= 0) { |
Error("Interner Fehler: Plannummer wurde nicht an SavePlanstatus übergeben!"); |
return; |
} |
|
if (!isset($ps_pl) || $ps_pl <= 0) { |
Error("Interner Fehler: Projektleiter wurde nicht an SavePlanstatus übergeben!"); |
return; |
} |
|
$db = OpenDB(); |
# Gibt es den Satz schon, dann machen wir nur ein Update |
if (isset($ps_num) && $ps_num > 0) { |
$query = "select count(*) from planstatus where ps_num = $ps_num"; |
|
if (!($result = QueryDB($db, $query))) { |
closeDB($db); |
return; |
} |
|
$data = fetchDB($result, 0); |
|
if ($data[0] > 0) { |
$query = "update planstatus set ps_status = $ps_status, "; |
$query .= "ps_comment = '$ps_comment', ps_prstat = $ps_prstat "; |
$query .= "where ps_num = $ps_num"; |
|
if (!QueryDB($db, $query)) { |
closeDB($db); |
return; |
} |
|
closeDB($db); |
return; |
} |
} |
|
# Interne laufende Nummer ermitteln |
$query = "select ps_lfd from planstatus where ps_prnum = $ps_prnum order by ps_lfd desc"; |
|
if (!($result = QueryDB($db, $query))) { |
closeDB($db); |
return; |
} |
|
if (numrowsDB($result) > 0) { |
$data = fetchDB($result, 0); |
$ps_lfd = $data[0] + 1; |
} else |
$ps_lfd = 0; |
|
# Internen Zaehler ermitteln |
$query = "select co_planstatus from counter"; |
|
if (!($result = QueryDB($db, $query))) { |
closeDB($db); |
return; |
} |
|
$data = fetchDB($result, 0); |
$co_planstatus = $data[0] + 1; |
# Einfuegen der Daten in die Datenbank |
if (!QueryDB($db, "begin")) { |
closeDB($db); |
return; |
} |
|
$query = "insert into planstatus (ps_num, ps_pl, ps_prnum, ps_plnum,"; |
$query .= "ps_status, ps_comment, ps_lfd, ps_prstat, ps_datum) "; |
$query .= "values ($co_planstatus, $ps_pl, $ps_prnum, $ps_plnum, "; |
$query .= "$ps_status, '$ps_comment', $ps_lfd, $ps_prstat, "; |
$query .= "current_timestamp)"; |
|
if (!QueryDB($db, $query)) { |
QueryDB($db, "rollback"); |
closeDB($db); |
return; |
} |
|
$query = "update counter set co_planstatus = $co_planstatus"; |
|
if (!QueryDB($db, $query)) { |
QueryDB($db, "rollback"); |
closeDB($db); |
return; |
} |
|
QueryDB($db, "commit"); |
closeDB($db); |
} |
|
require_once('planlockm.inc'); |
|
# Folgende Abfrage stellt eine Maske zur Verfuegung, mit deren Hilfe |
# die Stammdaten eines neuen Plans erfasst werden koennen. Es ist der Erste |
# von insgesamt 3 Schritten. |
# Im zweiten Schritt wird zwischen Grob und Feinplanung entschieden. Bei der |
# Grobplanung werden noch keine direkten Ressourcen vergeben, wohl aber die |
# Anzahl der PT und die Zeitdauer der Tasks angegeben. |
# Nei der Feinplanung werden dann den Tasks Ressourcen zugeordnet. Diese |
# Planung kann schlisslich in Form eines Ganttcharts ausgegeben werden. |
# Bei der sp�eren IST-Erfassung werden die eingegebenen Zeiten mit den |
# geplanten gegengerechnet und Abweichungen dargestellt. |
# |
if ($knopf == 10) { |
echo "<form name=\"temp\" action=\"plan.php\" method=\"post\">\n"; |
echo "<input type=\"hidden\" name=\"pl_status\" value=\"1\">\n"; |
echo "<input type=\"hidden\" name=\"headline\" value=\"19\">\n"; |
echo "<input type=\"hidden\" name=\"menu\" value=\"$menu\">\n"; |
echo "<input type=\"hidden\" name=\"func\" value=\"SaveNewPlan\">\n"; |
|
echo "<table class=\"input\">\n"; |
echo "<tr><td>Projekt:</td><td><select name=\"pl_prnum\">\n"; |
|
$db = OpenDB(); |
|
if ($rstufe == 1) { |
$query = "select pr_num, pr_name from project where pr_status = 0 "; |
$query .= "order by pr_num"; |
} else { |
$query = "select pr_num, pr_name from project where "; |
$query .= "pr_pl = $unum and pr_status = 0 "; |
$query .= "order by pr_num"; |
} |
|
$result = QueryDB($db, $query); |
$numrows = numrowsDB($result); |
$row = 0; |
|
while ($row < $numrows) { |
$data = fetchDB($result, $row); |
$pr_num = $data[0]; |
$pr_name = $data[1]; |
|
$query = "select count(*) from plan where pl_prnum = $pr_num and "; |
$query .= "pl_status = 6"; |
|
if (!($respl = QueryDB($db, $query))) |
break; |
|
$data = fetchDB($respl, 0); |
|
if ($data[0] > 0) { |
$row++; |
continue; |
} |
|
echo "<option value=\"$pr_num\">$pr_num $pr_name</option>\n"; |
$row++; |
} |
|
echo "</select></td></tr>\n"; |
echo "<tr><td>Template:</td>\n"; |
echo "<td><select name=\"te_num\">\n<option value=\"0\"> -- kein Template -- </option>\n"; |
|
$query = "select te_num, te_name from tempidx order by te_name"; |
$result = QueryDB($db, $query); |
$numrows = numrowsDB($result); |
$row = 0; |
|
while ($row < $numrows) { |
$data = fetchDB($result, $row); |
$te_num = $data[0]; |
$te_name = $data[1]; |
echo "<option value=\"$te_num\">$te_name</option>\n"; |
$row++; |
} |
|
echo "</td></tr>\n"; |
echo "</table>\n"; |
echo "<table class=\"indent\"><tr><td>"; |
ButtonSubmit("Plan erstellen", "temp"); |
echo "</td></tr></table>"; |
echo "</form>\n"; |
} |
|
if ($knopf == 2) { |
ShowPlan($rstufe, $menu, $unum); |
// include('start.inc'); |
} |
|
if ($knopf == 11) { |
ShowPlan($rstufe, $menu, $unum); |
} |
|
if (isset($func)) { |
if ($func == "SaveNewPlan") { |
$te_num = $_REQUEST['te_num']; |
$pl_num = SaveNewPlan(); |
|
if ($pl_num > 0 && $te_num > 0) { |
PlanPeriode($pl_num, 0, 0); |
} else if ($pl_num > 0) { |
AddTask($pl_num, 1); |
} |
} |
|
if ($func == "DeletePlan") { |
if (isset($_REQUEST['yes'])) { |
DeletePlan(); |
$pl_num = $_REQUEST['pl_num']; |
echo "<p class=\"cry\">Plan Nr.: $pl_num wurde erfolgreich gelöscht!</p>\n"; |
} |
|
ShowPlan($rstufe, $menu, $unum); |
} |
|
if ($func == "DeleteTask") { |
if (isset($_REQUEST['yes'])) { |
DeleteTask(); |
} |
|
$ta_plnum = $_REQUEST['ta_plnum']; |
PlanPeriode($ta_plnum, 0, 0); |
} |
|
if ($func == "GetColor") { |
GetColor(); |
} |
|
if ($func == "SaveTask" || $func == "SaveObsoleteTask") { |
if ($func == "SaveObsoleteTask") |
$doit = true; |
else |
$doit = false; |
|
if (SaveTask($doit)) { |
$ta_plnum = $_REQUEST['ta_plnum']; |
PlanPeriode($ta_plnum, 0, 0); |
} else { |
// $pl_num = $_REQUEST['pl_num']; |
$ta_plnum = $_REQUEST['ta_plnum']; |
$ta_id = $_REQUEST['ta_id']; |
$ta_num = $_REQUEST['ta_num']; |
|
if (isset($ta_num) && $ta_num > 0) |
EditTask($ta_num); |
else |
AddTask($ta_plnum, $ta_id); |
} |
} |
|
if ($func == "AddMiAdd") { |
AddMiAdd(); |
$al_task = $_REQUEST['al_task']; |
AddMi($al_task); |
} |
|
if ($func == "AllocMa") { |
$pl_num = $_REQUEST['pl_num']; |
PlanPeriode($pl_num, 0, 0, true); |
} |
|
if ($func == "SaveMa") { |
$pl_num = $_REQUEST['pl_num']; |
$yes = $_REQUEST['yes']; |
|
if (isset($yes) && $yes == "yes") |
$yes = true; |
else |
$yes = false; |
|
if (!SaveMa($yes)) { |
PlanPeriode($pl_num, 0, 0, true); |
} else |
PlanPeriode($pl_num, 0, 0); |
} |
|
if ($func == "SaveUpMa") { |
$pl_num = $_REQUEST['pl_num']; |
|
if (!SaveUpMa()) { |
$ta_num = $_REQUEST['al_task']; |
$ressource = $_REQUEST['ressource']; |
PlanPeriode($pl_num, $ta_num, $ressource); |
} else |
PlanPeriode($pl_num, 0, 0); |
} |
|
if ($func == "UpdateMa") { |
$pl_num = $_REQUEST['pl_num']; |
$ta_num = $_REQUEST['al_task']; |
$ressource = $_REQUEST['ressource']; |
PlanPeriode($pl_num, $ta_num, $ressource); |
} |
|
if ($func == "AskDeleteMa") { |
AskDeleteMa(); |
} |
|
if ($func == "DeleteMa") { |
if (isset($_REQUEST['yes'])) |
DeleteMa(); |
|
$pl_num = $_REQUEST['pl_num']; |
PlanPeriode($pl_num, 0, 0); |
} |
|
if ($func == "EditPlStatus") { |
$pl_num = $_REQUEST['pl_num']; |
ShowPlan($rstufe, $menu, $unum, $pl_num); |
$knopf = -1; |
} |
|
if ($func == "UpdatePlan") { |
UpdatePlan(); |
ShowPlan($rstufe, $menu, $unum); |
$knopf = -1; |
} |
|
if ($func == "WriteStatus") { |
if ($_REQUEST['yes'] == "yes") |
UpdatePlan(true); |
|
ShowPlan($rstufe, $menu, $unum); |
$knopf = -1; |
} |
|
if ($func == "COMMENT") { |
SavePlanComment(); |
|
if (!isset($editplan) || $editplan <= 0) { |
$pl_num = $_REQUEST['pl_num']; |
PlanPeriode($pl_num, 0, 0); |
} |
} |
|
if ($func == "PLANSTATUS") { |
$pr_num = $_REQUEST['pr_num']; |
$pl_num = $_REQUEST['pl_num']; |
$lock = $_REQUEST['lock']; |
|
if ($lock) |
ManageStatus($pr_num, $pl_num, false, true); |
else |
ManageStatus($pr_num, $pl_num); |
} |
|
if ($func == "SavePlanstatus") { |
SavePlanstatus(); |
$pr_num = $_REQUEST['pr_num']; |
$pl_num = $_REQUEST['pl_num']; |
ManageStatus($pr_num, $pl_num, true); |
} |
|
if ($func == "PSEDIT") { |
$pr_num = $_REQUEST['pr_num']; |
$pl_num = $_REQUEST['pl_num']; |
ManageStatus($pr_num, $pl_num, true); |
} |
|
if ($func == "LockM") |
AskLockM(); |
|
if ($func == "LockProject") { |
LockProject(); |
ShowPlan($rstufe, $menu, $unum); |
} |
} |
|
# Folgende Abfragen werden dann Aktiv, wenn der Anwender einen der |
# Buttons in der ersten Spalte der durch ShowPlan() angezeigten Tabelle |
# klickt. |
# |
if (isset($editplan) && $editplan > 0) { |
$lock = $_REQUEST['lock']; |
PlanPeriode($editplan, 0, 0); |
} |
|
if (isset($viewplan) && $viewplan > 0) { |
PlanPeriode($viewplan, 0, 0, false, true); |
} |
|
if (isset($deleteplan) && $deleteplan > 0) { |
AskDelete($deleteplan); |
} |
|
if (isset($editcopy) && $editcopy > 0) { |
if ($func == "CopyPlan") { |
$yes = $_REQUEST['yes']; |
$cancel = $_REQUEST['cancel']; |
|
if (isset($cancel) && $cancel == "cancel") |
$cancel = true; |
else |
$cancel = false; |
|
if (!isset($yes)) |
$yes = false; |
else |
$yes = true; |
|
$doit = true; |
} else { |
$yes = false; |
$doit = false; |
} |
|
if (!$cancel && EditCopy($editcopy, $yes, $doit)) |
Error("Plan wurde erfolgreich kopiert!"); |
else if (!$cancel) |
Error("Plan konnte nicht kopiert werden!"); |
else |
Error("Aktion wurde abgebrochen."); |
|
ShowPlan($rstufe, $menu, $unum); |
} |
|
if (isset($taskadd) && $taskadd > 0) { |
$ta_plnum = $_REQUEST['ta_plnum']; |
AddTask($ta_plnum, $taskadd); |
} |
|
if (isset($deletetask) && $deletetask > 0) { |
AskDeleteTask($deletetask); |
} |
|
if (isset($edittask) && $edittask > 0) { |
EditTask($edittask); |
} |
|
if (isset($addmi) && $addmi > 0) { |
AddMi($addmi); |
} |
|
if (isset($addmiadd)) { |
$al_task = $_REQUEST['al_task']; |
AddMi($al_task, 1); |
} |
|
if (isset($addmidel) && $addmidel > 0) { |
AddMiDel($addmidel); |
$al_task = $_REQUEST['al_task']; |
AddMi($al_task); |
} |
|
if (isset($movedown) && $movedown > 0) { |
if (MoveTask($movedown, 1)) { |
$pl_num = $_REQUEST['pl_num']; |
|
if (isset($pl_num) && $pl_num > 0) |
PlanPeriode($pl_num, 0, 0); |
else |
Error("Interner Fehler: Plannummer ist verloren gegangen!"); |
} else |
Error ("Task konnte nicht verschoben werden!"); |
} |
|
if (isset($moveup) && $moveup > 0) { |
if (MoveTask($moveup, -1)) { |
$pl_num = $_REQUEST['pl_num']; |
|
if (isset($pl_num) && $pl_num > 0) |
PlanPeriode($pl_num, 0, 0); |
else |
Error("Interner Fehler: Plannummer ist verloren gegangen!"); |
} else |
Error ("Task konnte nicht verschoben werden!"); |
} |
|
require('footer.inc'); |
?> |