Blame | Last modification | View Log | RSS feed
<?php
require_once('version.inc');
require_once('dbaccess.inc');
require_once('language.inc');
require_once('header.inc');
require_once('settings.inc');
require_once('crypt.inc');
require_once('helper.inc');
/*
0: Verwalter
1: Administrator
2: Projektleiter
3: Mitarbeiter
4: Kontroller
5: Kein Zugang!
6: Ressourcenmanager
7: Revisor
*/
$drm = array(true, false, true, true, false, true, true, true);
if (isset($_REQUEST['pjclose'])) { $knopf = 50; $headline = 41; }
require_once('menu.inc');
/*
* Klassendefinitionen
*/
class prj_in {
var $arr_prnum;
var $arr_prname;
var $arr_prstat;
var $arr_plnum;
var $arr_abdatum;
var $anz;
var $error;
function prj_in($db=-1) {
if ($db == -1) {
$db = OpenDB();
$flag = true;
} else
$flag = false;
$menge = 0;
$query = "select pr_num, pr_name, pr_status from project ";
$query .= "order by pr_num";
if (!($result = QueryDB($db, $query))) {
if ($flag)
closeDB($db);
$this->error = true;
return;
}
$num = numrowsDB($result);
$i = 0;
while ($i < $num) {
$data = fetchDB($result, $i);
$pr_num = $data[0];
$pr_name = $data[1];
$pr_status = $data[2];
$query = "select pl_num, pl_status from plan where ";
$query .= "pl_prnum = $pr_num and pl_status in (0,2,3,4) ";
$query .= "order by pl_lfd desc";
if (!($respl = QueryDB($db, $query))) {
if ($flag)
closeDB($db);
$this->error = true;
return;
}
if (numrowsDB($respl) > 0) {
$data = fetchDB($respl, 0);
$pl_num = $data[0];
$pl_status = $data[1];
$query = "select ab_datum from abschluss where ";
$query .= "ab_prnum = $pr_num order by ab_datum desc";
if (!($resab = QueryDB($db, $query))) {
if ($flag)
closeDB($db);
$this->error = true;
return;
}
if (numrowsDB($resab) > 0) {
$data = fetchDB($resab, 0);
$this->arr_abdatum[$menge] = $data[0];
} else
$this->arr_abdatum[$menge] = 0;
$this->arr_prnum[$menge] = $pr_num;
$this->arr_prname[$menge] = $pr_name;
if ($pr_status == 1)
$this->arr_prstat[$menge] = 0;
else
$this->arr_prstat[$menge] = $pl_status;
$this->arr_plnum[$menge] = $pl_num;
$menge++;
}
$i++;
}
$this->anz = $menge;
if ($flag)
closeDB($db);
$this->error = false;
}
function iserror() {
return $this->error;
}
function GetCount() {
return $this->anz;
}
function GetProjectNum($prj) {
if ($prj >= $this->anz)
return 0;
return $this->arr_prnum[$prj];
}
function GetProjectName($prj) {
if ($prj >= $this->anz)
return 0;
return $this->arr_prname[$prj];
}
function GetProjectStatus($prj) {
if ($prj >= $this->anz)
return 0;
return $this->arr_prstat[$prj];
}
function GetProjectPlan($prj) {
if ($prj >= $this->anz)
return 0;
return $this->arr_plnum[$prj];
}
function GetProjectClose($prj) {
if ($prj >= $this->anz)
return 0;
return $this->arr_abdatum[$prj];
}
}
function mask_pjclose() {
global $pj_lock;
global $menu;
global $headline;
global $periode;
global $dtformatshort;
if (!$pj_lock) {
Error(GetMessage(-1, 140, "Der Teilabschluß von Projekten ist mit der derzeitigen Einstellung nicht erlaubt!"));
return;
}
$db = OpenDB();
$prj = new prj_in($db);
if ($prj->iserror())
return;
?>
<form name="lock" action="pjclose.php" method="post">
<input type="hidden" name="menu" value="<? echo "$menu"; ?>">
<input type="hidden" name="headline" value="<? echo "$headline"; ?>">
<input type="hidden" name="func" value="LockProject">
<table class="input">
<tr>
<th class="sel" colspan=5><? Output($db, 181, "Projekte abschließen"); ?></th>
</tr>
<tr>
<td colspan=3><? Output($db, 186, "Projekte abschließen bis:"); ?></td>
<td colspan=2>
<select name="ab_datum">
<?
# Juengstes Datum ermitteln
$anz = $prj->GetCount();
$i = 0;
$dat = 0;
while ($i < $anz) {
if ($dat < $prj->GetProjectClose($i))
$dat = $prj->GetProjectClose($i);
$i++;
}
# Aeltestes Datum ermittlen
$i = 0;
$dat_low = $dat;
while ($i < $anz && $dat_low > 0) {
if ($dat_low > $prj->GetProjectClose($i))
$dat_low = $prj->GetProjectClose($i);
$i++;
}
# Sicherstellen, dass wir den Monatsultimo verwenden. Zusaetzlich
# kann maximal bis zu einem Jahr in die Vergangenheit abgeschlossen
# werden.
if ($dat == 0) {
$day = gmdate("j");
$mon = gmdate("n");
$year = gmdate("Y");
$year--;
$dat = GetUltimo(gmmktime(0, 0, 0, $mon, $day, $year));
} else {
// $dat = IncDate($periode, $dat);
$day = gmdate("j", $dat);
$mon = gmdate("n", $dat);
$year = gmdate("Y", $dat);
$dat = GetUltimo(gmmktime(0, 0, 0, $mon, $day, $year));
}
if ($dat_low == 0) {
if ($dat > 0)
$dt = $dat;
else
$dt = time();
$day = gmdate("j", $dt);
$mon = gmdate("n", $dt);
$year = gmdate("Y", $dt);
$year--;
$dat_low = GetUltimo(gmmktime(0, 0, 0, $mon, $day, $year));
} else {
$dat_low = IncDate($periode, $dat_low);
$day = gmdate("j", $dat_low);
$mon = gmdate("n", $dat_low);
$year = gmdate("Y", $dat_low);
$dat_low = GetUltimo(gmmktime(0, 0, 0, $mon, $day, $year));
}
# Heutiges Datum
$day = gmdate("j");
$mon = gmdate("n");
$year = gmdate("Y");
$heute = gmmktime(0, 0, 0, $mon, $day, $year);
$dt = $dat_low;
$i = 0;
while ($dt < $heute) {
echo "<option value=\"$dt\"";
$d = $dt;
$dt = GetUltimo(IncDate($periode, $dt));
if ($dt >= $heute)
echo " selected>";
else
echo ">";
echo gmdate($dtformatshort, $d);
echo "</option>\n";
$i++;
}
$dat_high = $d;
?>
</select>
<?
if ($i == 0)
Output($db, 188, "Derzeit sind alle Projekte bis zum %s abgeschlossen!", gmdate($dtformatshort, $dat));
?>
</td>
</tr>
<tr>
<td colspan=5>
<table border=0>
<tr><td>
<?
if ($i > 0)
Button(GetMessage($db, 185, "Markierte Projekte Abschließen"), "lock");
else
echo " ";
?>
</td><td>
<? Button(GetMessage($db, 372, "Letzten Abschl. für Mark. Proj. zurücknehmen"), "lock",
"func", "RemoveLock"); ?>
</td></tr>
</table>
</td>
</tr>
<tr>
<th class="sel"> </th>
<th class="sel"><? Output($db, 182, "Pr.Nr."); ?></th>
<th class="sel"><? Output($db, 326, "Art"); ?></th>
<th class="sel"><? Output($db, 183, "Projektbezeichnung"); ?></th>
<th class="sel"><? Output($db, 184, "Lzt.Abschl."); ?></th>
</tr>
<?
$i = 0;
while ($i < $anz) {
echo "<tr><td class=\"selakt\"><input type=\"checkbox\" ";
echo "name=\"check_" . $prj->GetProjectNum($i) . "\"";
if ($prj->GetProjectClose($i) < $dat_high)
echo " checked";
echo "></td>\n";
echo "<td class=\"sel\">" . $prj->GetProjectNum($i) . "</td>\n";
echo "<td class=\"sel\">";
switch ($prj->GetProjectStatus($i)) {
case 0: Output($db, 234, "Konto"); break;
default: Output($db, 262, "Projekt");
}
echo "</td>\n";
echo "<td class=\"sel\">" . $prj->GetProjectName($i) . "</td>\n";
if ($prj->GetProjectClose($i) == 0)
$datum = "";
else
$datum = gmdate($dtformatshort, $prj->GetProjectClose($i));
echo "<td class=\"sel\">$datum</td></tr>\n";
$i++;
}
echo "</table></form>\n";
closeDB($db);
}
function LockProjects() {
global $unum;
$ab_datum = $_REQUEST['ab_datum'];
if (!isset($ab_datum) || $ab_datum < 1) {
Error(GetMessage(-1, 187, "Interner Fehler: LockProjects: Abschlußdatum fehlt!"));
return;
}
$db = OpenDB();
$prj = new prj_in($db);
if ($prj->iserror()) {
closeDB();
return;
}
$query = "select co_abschluss from counter";
if (!($result = QueryDB($db, $query))) {
closeDB($db);
return;
}
$data = fetchDB($result, 0);
$co_abschluss = $data[0] + 1;
$anz = $prj->GetCount();
$i = 0;
$query = "insert into abschluss (ab_num, ab_datum, ab_user, ab_prnum, ab_plnum) ";
$query .= "values (";
if (!QueryDB($db, "begin")) {
closeDB($db);
return;
}
while ($i < $anz) {
$cname = "check_" . $prj->GetProjectNum($i);
$check = $_REQUEST[$cname];
if (!isset($check)) {
$i++;
continue;
}
# Abschluss in die Tabelle "abschluss" schreiben
$q = "$co_abschluss, $ab_datum, $unum, ";
$q .= $prj->GetProjectNum($i) . ", ";
$q .= $prj->GetProjectPlan($i) . ")";
if (!QueryDB($db, $query . $q)) {
QueryDB($db, "rollback");
closeDB($db);
return;
}
# Alle IST-Buchungen bis zum Abschlussdatum auf NICHT editierbar
# setzen.
$q = "update wdone set wd_edit = 'false' where ";
$q .= "wd_prnum = " . $prj->GetProjectNum($i) . " and ";
$q .= "wd_datum <= $ab_datum";
if (!QueryDB($db, $q)) {
QueryDB($db, "rollback");
closeDB($db);
return;
}
$i++;
$co_abschluss++;
}
if (!QueryDB($db, "update counter set co_abschluss = $co_abschluss")) {
QueryDB($db, "rollback");
closeDB($db);
return;
}
if (!QueryDB($db, "commit"))
QueryDB($db, "rollback");
closeDB($db);
}
function RemoveLock() {
global $unum;
$db = OpenDB();
$prj = new prj_in($db);
if ($prj->iserror()) {
closeDB();
return;
}
$anz = $prj->GetCount();
$i = 0;
if (!QueryDB($db, "begin")) {
closeDB($db);
return;
}
while ($i < $anz) {
$cname = "check_" . $prj->GetProjectNum($i);
$check = $_REQUEST[$cname];
if (!isset($check)) {
$i++;
continue;
}
$query = "select ab_num, ab_datum from abschluss where ab_prnum = ";
$query .= $prj->GetProjectNum($i) . "order by ab_datum desc";
if (!($result = QueryDB($db, $query))) {
closeDB($db);
return;
}
$menge = numrowsDB($result);
if ($menge > 0) {
$data = fetchDB($result, 0);
$ab_num = $data[0];
if ($menge > 1) {
$data = fetchDB($result, 1);
$last_abdatum = $data[1];
} else
$last_abdatum = 0;
$query = "delete from abschluss where ab_num = $ab_num";
if (!QueryDB($db, $query)) {
QueryDB($db, "rollback");
closeDB($db);
return;
}
$query = "update wdone set wd_edit = true where ";
$query .= "wd_prnum = " . $prj->GetProjectNum($i) . " and ";
$query .= "wd_datum > $last_abdatum";
if (!QueryDB($db, $query)) {
QueryDB($db, "rollback");
closeDB($db);
return;
}
}
$i++;
}
QueryDB($db, "commit");
closeDB($db);
}
if ($knopf == 50)
mask_pjclose();
$func = $_REQUEST['func'];
if ($func == "RemoveLock") {
$func = "";
RemoveLock();
mask_pjclose();
}
if ($func == "LockProject") {
LockProjects();
mask_pjclose();
}
require_once('footer.inc');