0,0 → 1,1816 |
<? |
require_once('version.inc'); |
require_once('dbaccess.inc'); |
require_once('language.inc'); |
require_once('helper.inc'); |
require_once('crypt.inc'); |
require_once('settings.inc'); |
|
$knopf = 0; |
$func = $_REQUEST['func']; |
|
# Auswertungsmenue |
if (isset($_REQUEST['auswertung'])) { $knopf = 27; $headline = 31; } |
|
$drm = array(true, false, false, false, false, true, false); |
|
$helvN = 0; |
$helvB = 0; |
$page = 0; |
$SearchPath = "/usr/share/fonts/afms/adobe"; |
$pwidth = 842; |
$pheight = 595; |
//$pwidth = 595; |
//$pheight = 842; |
$fact = -1; // Seitenscalierungsfaktor |
|
//require_once('menu.inc'); |
require_once('knumber.inc'); |
require_once('tempplan.inc'); |
|
# This module contains the following functions: |
# HeadLine |
# ZSumPDF |
# CellPDF |
# ProjektMaPDF |
# MitarbeiterPjPDF |
# PrintListPDF |
|
# Statische Kopfzeile schreiben |
# |
function HeadLine($ps) { |
global $helvN; |
global $helvB; |
global $page; |
global $pwidth; |
global $pheight; |
global $strVersion; |
global $SearchPath; |
global $title_str; |
global $fact; |
|
$page++; |
|
PS_begin_page($ps, $pheight, $pwidth); // Page: A4 landscape |
PS_translate($ps, $pheight, 0); |
PS_rotate($ps, 90); |
|
PS_setfont($ps, $helvN, 8.0); |
PS_setlinewidth($ps, 0.4); |
PS_show_xy($ps, "$title_str v" . $strVersion, 10, $pheight - 15); |
$datum = date("j.n.Y", time()); |
$len = PS_stringwidth($ps, $datum); |
PS_show_xy($ps, $datum, ($pwidth / 2) - ($len / 2), $pheight - 15); |
$text = "Seite $page"; |
$len = PS_stringwidth($ps, $text); |
PS_show_xy($ps, $text, $pwidth - 10 - $len, $pheight - 15); |
|
if ($fact > -1) |
PS_scale($ps, $fact, 1); |
} |
|
# Zeilensumme ausgeben |
# |
function ZSumPDF($ps, $sumi, $sump, $x, $y, $width) { |
global $helvB; |
global $helvN; |
$fields_3 = $_REQUEST['fields_3']; |
$fields_4 = $_REQUEST['fields_4']; |
$fields_5 = $_REQUEST['fields_5']; |
|
PS_setcolor($ps, "fill", "gray", 0.8, 0.0, 0.0, 0.0); |
PS_setfont($ps, $helvB, 10.0); |
|
if ($fields_4 > 0) { |
$num = FormatNum($sumi, 3); |
$len = PS_stringwidth($ps, $num); |
PS_rect($ps, $x - 2, $y - 1, $width + 4, 10); |
PS_fill($ps); |
PS_rect($ps, $x - 2, $y - 1, $width + 4, 10); |
PS_stroke($ps); |
PS_show_xy($ps, $num, $x + $width - $len, $y); |
$x += $width + 4; |
} |
|
if ($fields_3 > 0) { |
$num = FormatNum($sump - $sumi, 3); |
$len = PS_stringwidth($ps, $num); |
PS_moveto($ps, $x - $len - 2, $y); |
PS_rect($ps, $x - 2, $y - 1, $width + 4, 10); |
PS_fill($ps); |
PS_rect($ps, $x - 2, $y - 1, $width + 4, 10); |
PS_stroke($ps); |
PS_show_xy($ps, $num, $x + $width - $len, $y); |
$x += $width + 4; |
} |
|
if ($fields_5 > 0) { |
$num = FormatNum($sump, 3); |
$len = PS_stringwidth($ps, $num); |
PS_moveto($ps, $x - $len - 2, $y); |
PS_rect($ps, $x - 2, $y - 1, $width + 4, 10); |
PS_fill($ps); |
PS_rect($ps, $x - 2, $y - 1, $width + 4, 10); |
PS_stroke($ps); |
PS_show_xy($ps, $num, $x + $width - $len, $y); |
$x += $width + 4; |
} |
|
PS_setcolor($ps, "fill", "gray", 1.0, 0.0, 0.0, 0.0); |
PS_setfont($ps, $helvN, 10.0); |
return $x; |
} |
|
# Schreiben einer Zelle |
# |
function CellPDF($ps, $ist, $plan, $x, $y, $width, $shade, $blank=false) { |
$fields_3 = $_REQUEST['fields_3']; |
$fields_4 = $_REQUEST['fields_4']; |
$fields_5 = $_REQUEST['fields_5']; |
|
if ($shade) |
PS_setcolor($ps, "fill", "gray", 0.9, 0.0, 0.0, 0.0); |
else |
PS_setcolor($ps, "fill", "gray", 1.0, 0.0, 0.0, 0.0); |
|
if ($fields_4 > 0) { |
PS_rect($ps, $x-2, $y-1, $width + 4, 10); |
|
if ($shade) { |
PS_fill($ps); |
PS_rect($ps, $x-2, $y-1, $width + 4, 10); |
} |
|
PS_stroke($ps); |
|
if (!$blank) { |
$num = FormatNum($ist, 3); |
$len = PS_stringwidth($ps, $num); |
PS_show_xy($ps, $num, $x + $width - $len, $y); |
} |
|
$x += $width + 4; |
} |
|
if ($fields_3 > 0) { |
PS_rect($ps, $x-2, $y-1, $width + 4, 10); |
|
if ($shade) { |
PS_fill($ps); |
PS_rect($ps, $x-2, $y-1, $width + 4, 10); |
} |
|
PS_stroke($ps); |
|
if (!$blank) { |
$num = FormatNum($plan - $ist, 3); |
$len = PS_stringwidth($ps, $num); |
PS_show_xy($ps, $num, $x + $width - $len, $y); |
} |
|
$x += $width + 4; |
} |
|
if ($fields_5 > 0) { |
PS_rect($ps, $x-2, $y-1, $width + 4, 10); |
|
if ($shade) { |
PS_fill($ps); |
PS_rect($ps, $x-2, $y-1, $width + 4, 10); |
} |
|
PS_stroke($ps); |
|
if (!$blank) { |
$num = FormatNum($plan, 3); |
$len = PS_stringwidth($ps, $num); |
PS_show_xy($ps, $num, $x + $width - $len, $y); |
} |
|
$x += $width + 4; |
} |
|
return $x; |
} |
|
# Folgende Funktion erzeugt die Liste aller Projekte. Die Liste |
# sortiert nach Projekten und Mitarbeitern (Projektsicht). |
# |
function ProjektMaPDF($ps, $db, $pr_num, $ystart, $mi_num=0) { |
global $periode; |
global $phase; |
global $helvN; |
global $helvB; |
global $page; |
global $pwidth; |
global $pheight; |
global $SearchPath; |
global $fact; |
|
$pl_num = $_REQUEST['pl_num']; |
$dfrom = $_REQUEST['dfrom']; |
$dto = $_REQUEST['dto']; |
$fields_0 = $_REQUEST['fields_0']; |
$fields_1 = $_REQUEST['fields_1']; |
$fields_2 = $_REQUEST['fields_2']; |
$fields_3 = $_REQUEST['fields_3']; |
$fields_4 = $_REQUEST['fields_4']; |
$fields_5 = $_REQUEST['fields_5']; |
$fields_6 = $_REQUEST['fields_6']; |
$sort = $_REQUEST['sort']; |
$level = $_REQUEST['level']; |
$pjclosed = $_REQUEST['pjclosed']; |
$scaled = false; |
|
if (isset($pjclosed) && CheckTrue($pjclosed)) |
$pjc = ",6"; |
|
# Festlegen der Spaltenlaengen |
$lenma = PS_stringwidth($ps, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"); |
$lengr = PS_stringwidth($ps, "XXXXXXXXXXXXXXX"); |
$lenph = PS_stringwidth($ps, "9: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"); |
$lenta = $lenma; |
$lenan = PS_stringwidth($ps, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"); |
$lence = PS_stringwidth($ps, "999,999"); |
$lentotal = 0; |
|
# Beim bis-Datum den Monatsletzten ermitteln |
$mon = gmdate("n", $dto); |
$year = gmdate("Y", $dto); |
$day = daysinmonth($mon, $year); |
$dto = gmmktime(23, 59, 59, $mon, $day, $year); |
# Den Projektnamen ermitteln |
$query = "select pr_num, pr_name, pr_status from project "; |
|
if ($pr_num > 0) |
$query .= "where pr_num = $pr_num "; |
|
$query .= "order by pr_num"; |
$respr = QueryDB($db, $query); |
|
if (!$respr) |
return; |
|
$numpr = numrowsDB($respr); |
$pospr = 0; |
|
$pdiff = $fields_3; |
$pist = $fields_4; |
$pplan = $fields_5; |
$mult = 0; |
$y = $ystart; |
$x = 40; |
|
if ($pist > 0) |
$mult++; |
|
if ($pplan > 0) |
$mult++; |
|
if ($pplan > 0 && $pdiff > 0) |
$mult++; |
|
# Errechnen der gesamten Laenge; Zu jeder Zelle wird ein Rand von |
# 2 PT gerechnet. |
# |
$lenganz = $lenma + 4 + ($lence * $mult) + ($mult * 4); |
$csp = $lenma + 4; |
|
if ($fields_6 > 0) { |
$lenganz += ($lenph + 4); |
$csp += ($lenph + 4); |
} |
|
if ($fields_0 > 0) { |
$lenganz += ($lenta + 4); |
$csp += ($lenta + 4); |
} |
|
if ($fields_1 > 0) { |
$lenganz += ($lenan + 4); |
$csp += ($lenan + 4); |
} |
|
if ($fields_2 > 0) { |
$lenganz += ($lengr + 4); |
$csp += ($lengr + 4); |
} |
|
$pl_flag = false; |
$TempTable = false; |
|
while ($pospr < $numpr) { |
$data = fetchDB($respr, $pospr); |
$pr_num = $data[0]; |
$pr_name = $data[1]; |
$pr_status = $data[2]; |
$lentotal = $lenganz; |
|
# Wurde kein Projekt gewaehlt, dann muessen wir die Plannummer |
# ermitteln. In diesem Fall zeigen wir immer den aktuelsten Plan |
# an. |
# |
if ($pl_flag || !isset($pl_num) || $pl_num <= 0) { |
$query = "select pl_num from plan where pl_prnum = $pr_num order by pl_num desc"; |
$result = QueryDB($db, $query); |
|
if (!$result) |
return; |
|
if (numrowsDB($result) > 0) { |
$data = fetchDB($result, 0); |
$pl_num = $data[0]; |
$pl_flag = true; |
} else { |
$pl_num = 0; |
$pl_flag = false; |
$pospr++; |
continue; |
} |
} |
|
if ($TempTable && $pospr > 0) |
TQueryDB($db, "drop table TempPlan"); |
|
$TempTable = true; |
if (!CreateTempPlan($db, $pl_num, $pr_num, $dfrom, $dto, true)) { |
$pospr++; |
continue; |
} |
|
# Wieviele Perioden gibt es insgesamt? |
$query = "select count(distinct tmp_periode) from TempPlan"; |
$result = QueryDB($db, $query); |
|
if (!$result) { |
closeDB($db); |
return; |
} |
|
$data = fetchDB($result, 0); |
$numper = $data[0]; |
|
# Keine Datensaetze, dann keine Tabelle malen... |
if ($numper == 0) { |
$pospr++; |
continue; |
} |
|
# Die totale Laenge ist immer die Maximale, welche auf Grund des |
# ausgewaehlten Zeitraums moeglich ist- |
# |
$dt = $dfrom; |
$r = 0; |
|
while ($dt < $dto) { |
$dt = IncDate($periode, $dt); |
$r++; |
} |
|
$len = $lentotal + (($r * ($lence + 4)) * $mult); |
|
# Wenn die benoetigte Breite die zur Verfuegung stehende |
# ueberschreitet, dann skalieren wir die Ausgabe so, dass sich |
# alles in der Breite ausgeht. |
if ($fact == -1 && $len > ($pwidth - 50)) { |
$fact = ($pwidth - 50) / $len; |
PS_scale($ps, $fact, 1); |
} |
|
$lentotal += (($numper * ($lence + 4)) * $mult); |
# Zeichnen des Tabellenkopfs |
PS_setcolor($ps, "fill", "gray", 0.7, 0.0, 0.0, 0.0); |
PS_rect($ps, $x - 2, $y-1, $lentotal, 10); |
PS_fill($ps); |
PS_setcolor($ps, "fill", "gray", 1.0, 0.0, 0.0, 0.0); |
PS_setfont($ps, $helvB, 10.0); |
PS_show_xy($ps, "Projekt: $pr_num $pr_name", $x, $y); |
PS_rect($ps, $x - 2, $y-1, $lentotal, 10); |
PS_moveto($ps, $x - 2, $y); |
PS_lineto($ps, $x - 2, $y - 12); |
PS_stroke($ps); |
$y -= 10; |
$x = 38 + $csp; |
|
# Ermitteln der einzelnen Perioden und Darstellung der Selben. |
# |
$query = "select distinct tmp_periode from TempPlan order by tmp_periode"; |
$result = QueryDB($db, $query); |
|
# Wurde kein Projekt gewaehlt, dann muessen wir die Plannummer |
# ermitteln. In diesem Fall zeigen wir immer den aktuelsten Plan |
# an. |
|
if (!$result) { |
return; |
} |
|
$numrows = numrowsDB($result); |
$r = 0; |
$j = 0; |
|
while ($r < $numrows) { |
$data = fetchDB($result, $r); |
$tmp_periode = $data[0]; |
|
$mon = gmdate("n", $tmp_periode); |
$year = gmdate("Y", $tmp_periode); |
|
if ($r == 0) { |
$fdate = $tmp_periode; |
$adate = $fdate; |
} |
|
while ($adate < $tmp_periode) { |
$p = gmdate("n/Y", $adate); |
$len = ($lence + 4) * $mult; |
$slen = PS_stringwidth($ps, $p); |
$mid = $slen / 2 + 2; |
PS_show_xy($ps, $p, $x + $mid, $y); |
PS_rect($ps, $x, $y-1, $len, 10); |
PS_stroke($ps); |
$adate = IncDate($periode, $adate); |
$sumperp[$j] = 0.0; |
$sumperi[$j] = 0.0; |
$totalis[$j] = 0.0; |
$totalpl[$j] = 0.0; |
$x += $len; |
$j++; |
} |
|
$len = ($lence + 4) * $mult; |
$slen = PS_stringwidth($ps, "$mon/$year"); |
$mid = $slen / 2 + 2; |
PS_show_xy($ps, "$mon/$year", $x + $mid, $y); |
PS_rect($ps, $x, $y-1, $len, 10); |
PS_stroke($ps); |
$sumperp[$j] = 0.0; |
$sumperi[$j] = 0.0; |
$totalis[$j] = 0.0; |
$totalpl[$j] = 0.0; |
$adate = IncDate($periode, $adate); |
$r++; |
$j++; |
$x += $len; |
} |
|
$ldate = $tmp_periode; |
$slen = PS_stringwidth($ps, GetMessage($db, 290, "Summen")); |
$mid = $slen / 2 + 2; |
PS_show_xy($ps, GetMessage($db, 290, "Summen"), $x + $mid, $y); |
PS_rect($ps, $x, $y-1, $len, 10); |
PS_stroke($ps); |
$y -= 10; |
$x = 40; |
|
PS_show_xy($ps, GetMessage($db, 66, "Mitarbeiter"), $x, $y); |
PS_rect($ps, $x - 2, $y-1, $lenma + 4, 10); |
PS_stroke($ps); |
$x += $lenma + 2; |
|
if ($fields_2 > 0) { |
PS_show_xy($ps, GetMessage($db, 291, "Gruppe"), $x, $y); |
PS_rect($ps, $x - 2, $y-1, $lengr + 4, 10); |
PS_stroke($ps); |
$x += $lengr + 4; |
} |
|
if ($phase && $fields_6 > 0) { |
PS_show_xy($ps, GetMessage($db, 292, "Phase"), $x, $y); |
PS_rect($ps, $x - 2, $y-1, $lenph + 4, 10); |
PS_stroke($ps); |
$x += $lenph + 4; |
} |
|
if ($fields_0 > 0) { |
PS_show_xy($ps, GetMessage($db, 293, "Tasks"), $x, $y); |
PS_rect($ps, $x - 2, $y-1, $lenta + 4, 10); |
PS_stroke($ps); |
$x += $lenta + 4; |
} |
|
if ($fields_1 > 0) { |
PS_show_xy($ps, GetMessage($db, 294, "Anmerkungen"), $x, $y); |
PS_rect($ps, $x - 2, $y-1, $lenan + 4, 10); |
PS_stroke($ps); |
$x += $lenan + 4; |
} |
|
$r = 0; |
|
while ($r <= $j) { |
if ($pist > 0) { |
PS_show_xy($ps, GetMessage($db, 260, "IST"), $x, $y); |
PS_rect($ps, $x - 2, $y-1, $lence + 4, 10); |
PS_stroke($ps); |
$x += $lence + 4; |
} |
|
if ($pplan > 0 && $pdiff > 0) { |
PS_show_xy($ps, GetMessage($db, 295, "Diff."), $x, $y); |
PS_rect($ps, $x - 2, $y-1, $lence + 4, 10); |
PS_stroke($ps); |
$x += $lence + 4; |
} |
|
if ($pplan > 0) { |
PS_show_xy($ps, GetMessage($db, 278, "Plan"), $x, $y); |
PS_rect($ps, $x - 2, $y-1, $lence + 4, 10); |
PS_stroke($ps); |
$x += $lence + 4; |
} |
|
$r++; |
} |
|
$x = 40; |
$y -= 10; |
$query = "select tmp_phase, tmp_periode, tmp_plan, tmp_ist,"; |
$query .= "tmp_taname, tmp_notiz, mi_nname, mi_vname, kp_phase, "; |
$query .= "kl_land, tmp_miname, tmp_status, tmp_hash "; |
$query .= "from TempPlan, mitarbeiter, key_phase, key_land where "; |
$query .= "mi_num = tmp_miname and kp_num = tmp_phase and kl_num = mi_land "; |
$query .= "order by mi_nname, mi_vname, tmp_phase, tmp_taname, tmp_periode"; |
$result = QueryDB($db, $query); |
# Wurde kein Projekt gewaehlt, dann muessen wir die Plannummer |
# ermitteln. In diesem Fall zeigen wir immer den aktuelsten Plan |
# an. |
|
if (!$result) |
return; |
|
$numrows = numrowsDB($result); |
$rows = 0; |
$oldminame = 0; |
$oldphase = 0; |
$oldtask = ""; |
$sumlpl = 0.0; |
$sumlis = 0.0; |
$per = 0; |
$first = true; |
$adate = $fdate; |
$class = false; |
|
while ($rows < $numrows) { |
$data = fetchDB($result, $rows); |
$tmp_phase = $data[0]; |
$tmp_periode = $data[1]; |
$tmp_plan = $data[2]; |
$tmp_ist = $data[3]; |
$tmp_taname = $data[4]; |
$tmp_notiz = $data[5]; |
$mi_nname = $data[6]; |
$mi_vname = $data[7]; |
$kp_phase = $data[8]; |
$kl_land = $data[9]; |
$tmp_miname = $data[10]; |
$tmp_status = $data[11]; |
$tmp_hash = $data[12]; |
|
# Summen und Zeilenanfang schreiben |
# |
if ($oldminame != $tmp_miname || $oldphase != $tmp_phase || |
$oldtask != $tmp_taname) { |
# Aktuelle Zeile vervollstaendigen (nur wenn eine Zeile |
# bereits geschrieben wurde). |
# |
if (!$first) { |
while ($adate <= $ldate) { |
$x = CellPDF($ps, 0, 0, $x, $y, $lence, $class, true); |
|
if ($class) |
$class = false; |
else |
$class = true; |
|
$adate = IncDate($periode, $adate); |
} |
|
ZSumPDF($ps, $sumlis, $sumlpl, $x, $y, $lence); |
$x = 40; |
|
if (isset($y_next) && $y_next > 0) { |
$y = $y_next; |
$y_next = -1; |
unset ($y_next); |
} else |
$y -= 10; |
|
if ($y <= 30) { |
PS_end_page($ps); |
HeadLine($ps); |
$y = $pheight - 30; |
} |
} |
|
if (!$first && $oldminame != $tmp_miname) { |
# Monatssummen nach einem Mitarbeiterwechsel |
# |
if ($fields_0 > 0 || $fields_6 > 0 && $fields_1 > 0 && $fields_2 > 0) { |
$len = PS_stringwidth($ps, GetMessage($db, 296, "Zwischensumme: ")); |
$x = 38 + $csp - $len - 4; |
PS_show_xy($ps, GetMessage($db, 296, "Zwischensumme:"), $x, $y); |
PS_rect($ps, 38, $y-1, $csp-2, 10); |
PS_stroke($ps); |
$x = 38 + $csp; |
} |
|
$adate = $fdate; |
$per = 0; |
$sumi = 0.0; |
$sump = 0.0; |
|
while ($adate <= $ldate) { |
if ($fields_0 > 0 || $fields_6 > 0 && $fields_1 > 0 && $fields_2 > 0) |
$x = CellPDF($ps, $sumperi[$per], $sumperp[$per], $x, $y, $lence, true); |
|
$adate = IncDate($periode, $adate); |
$sumi += $sumperi[$per]; |
$sump += $sumperp[$per]; |
$sumperi[$per] = 0.0; |
$sumperp[$per] = 0.0; |
$per++; |
} |
|
if ($fields_0 > 0 || $fields_6 > 0 && $fields_1 > 0 && $fields_2 > 0) { |
ZsumPDF($ps, $sumi, $sump, $x, $y, $lence); |
$y -= 10; |
} |
|
$x = 40; |
// $y -= 10; |
|
if ($y <= 30) { |
PS_end_page($ps); |
HeadLine($ps); |
$y = $pheight - 30; |
} |
} |
|
# Beginn der Zeile: Schreiben der ersten fixen Zellen. |
# |
PS_setfont($ps, $helvN, 10.0); |
$x = 40; |
PS_show_xy($ps, "$mi_nname $mi_vname", $x, $y); |
PS_rect($ps, $x - 2, $y-1, $lenma + 4, 10); |
PS_stroke($ps); |
$x += $lenma + 2; |
|
if ($fields_2 > 0) { |
PS_show_xy($ps, $kl_land, $x, $y); |
PS_rect($ps, $x - 2, $y-1, $lengr + 4, 10); |
PS_stroke($ps); |
$x += $lengr + 4; |
} |
|
if ($phase && $fields_6 > 0) { |
if ($tmp_status == 0) |
PS_show_xy($ps, "$tmp_phase: $kp_phase", $x, $y); |
|
PS_rect($ps, $x - 2, $y-1, $lenph + 4, 10); |
PS_stroke($ps); |
$x += $lenph + 4; |
} |
|
if ($fields_0 > 0) { |
PS_show_xy($ps, $tmp_taname, $x, $y); |
PS_rect($ps, $x - 2, $y-1, $lenta + 4, 10); |
PS_stroke($ps); |
$x += $lenta + 4; |
} |
|
if ($fields_1 > 0) { |
if (strlen($tmp_notiz) > 0) { |
$len = PS_stringwidth($ps, $tmp_notiz); |
|
if ($len > $lenan) |
$lines = ceil($len / $lenan); |
else |
$lines = 1; |
|
PS_show_boxed($ps, $tmp_notiz, $x, ($y + 8) - ($lines * 10), $lenan, $lines * 10, "left"); |
PS_rect($ps, $x - 2, (($y + 10) - ($lines * 10))-1, $lenan + 4, $lines * 10); |
$y_next = $y - (($lines - 1) * 10); |
} else { |
PS_show_xy($ps, $tmp_notiz, $x, $y); |
PS_rect($ps, $x - 2, $y-1, $lenan + 4, 10); |
} |
|
PS_stroke($ps); |
$x += $lenan + 4; |
} |
|
# Variablen initialisieren... |
# |
$sumlis = 0.0; |
$sumlpl = 0.0; |
$per = 0; |
$adate = $fdate; |
$oldminame = $tmp_miname; |
$oldphase = $tmp_phase; |
$oldtask = $tmp_taname; |
$first = false; |
$class = false; |
} |
|
# Stimmt die aktuelle Position nicht mit der Periode ueberein, |
# uebergehen wir die Zellen. |
# |
while ($adate < $tmp_periode) { |
$x = CellPDF($ps, 0, 0, $x, $y, $lence, $class, true); |
|
if ($class) |
$class = false; |
else |
$class = true; |
|
$adate = IncDate($periode, $adate); |
$per++; |
} |
|
# Schreiben einer Zelle mit den aktuellen Werten. |
$x = CellPDF($ps, $tmp_ist, $tmp_plan, $x, $y, $lence, $class); |
|
if ($class) |
$class = false; |
else |
$class = true; |
|
$sumperp[$per] += $tmp_plan; |
$sumperi[$per] += $tmp_ist; |
$totalis[$per] += $tmp_ist; |
$totalpl[$per] += $tmp_plan; |
$sumlpl += $tmp_plan; |
$sumlis += $tmp_ist; |
$adate = IncDate($periode, $adate); |
$per++; |
$rows++; |
} |
|
# Beenden der der letzten Datenzeile der aktuellen Tabelle. |
# |
while ($adate <= $ldate) { |
$x = CellPDF($ps, 0, 0, $x, $y, $lence, $class, true); |
|
if ($class) |
$class = false; |
else |
$class = true; |
|
$adate = IncDate($periode, $adate); |
} |
|
ZSumPDF($ps, $sumlis, $sumlpl, $x, $y, $lence); |
$y -= 10; |
$x = 40; |
|
if ($y <= 30) { |
PS_end_page($ps); |
HeadLine($ps); |
$y = $pheight - 30; |
} |
|
# Summenzeile am Ende der Tabelle fuer den letzten Mitarbeiter |
# anzeigen. |
# |
if ($fields_0 > 0 || $fields_6 > 0 && $fields_1 > 0 && $fields_2 > 0) { |
$len = PS_stringwidth($ps, GetMessage($db, 296, "Zwischensumme: ")); |
$x = 38 + $csp - $len - 4; |
PS_show_xy($ps, GetMessage($db, 296, "Zwischensumme:"), $x, $y); |
PS_rect($ps, 38, $y-1, $csp-2, 10); |
PS_stroke($ps); |
$x = 38 + $csp; |
$adate = $fdate; |
$per = 0; |
$sumi = 0.0; |
$sump = 0.0; |
PS_setfont($ps, $helvB, 10.0); |
|
while ($adate <= $ldate) { |
$x = CellPDF($ps, $sumperi[$per], $sumperp[$per], $x, $y, $lence, true); |
$adate = IncDate($periode, $adate); |
$sumi += $sumperi[$per]; |
$sump += $sumperp[$per]; |
$sumperi[$per] = 0.0; |
$sumperp[$per] = 0.0; |
$per++; |
} |
|
ZSumPDF($ps, $sumi, $sump, $x, $y, $lence); |
$y -= 10; |
} |
|
$x = 40; |
|
if ($y <= 30) { |
PS_end_page($ps); |
HeadLine($ps); |
$y = $pheight - 30; |
} |
|
# Monatssummen und Gesamtzeitraumsumme am Ende der Tabelle |
# anzeigen. |
# |
$len = PS_stringwidth($ps, GetMessage($db, 297, "Monatssummen: ")); |
$x = 38 + $csp - $len - 4; |
PS_show_xy($ps, GetMessage($db, 297, "Monatssummen:"), $x, $y); |
PS_rect($ps, 38, $y-1, $csp - 2, 10); |
PS_stroke($ps); |
$x = 38 + $csp; |
$adate = $fdate; |
$per = 0; |
$sumi = 0.0; |
$sump = 0.0; |
PS_setfont($ps, $helvB, 10.0); |
|
while ($adate <= $ldate) { |
$x = CellPDF($ps, $totalis[$per], $totalpl[$per], $x, $y, $lence, true); |
$adate = IncDate($periode, $adate); |
$sumi += $totalis[$per]; |
$sump += $totalpl[$per]; |
$per++; |
} |
|
ZSumPDF($ps, $sumi, $sump, $x, $y, $lence); |
$x = 40; |
$y -= 20; |
|
if ($y <= 30) { |
PS_end_page($ps); |
HeadLine($ps); |
$y = $pheight - 30; |
} |
|
$pospr++; |
} |
} |
|
# Folgende Funktion erzeugt die Liste fuer genau einen Mitarbeiter. Die Liste |
# sortiert nach Mitarbeitern und Projekten. |
# |
function MitarbeiterPjPDF($ps, $db, $mi_num, $ystart, $prp_num=0) { |
global $periode; |
global $phase; |
global $helvN; |
global $helvB; |
global $page; |
global $pwidth; |
global $pheight; |
global $SearchPath; |
global $fact; |
|
$dfrom = $_REQUEST['dfrom']; |
$dto = $_REQUEST['dto']; |
$fields_0 = $_REQUEST['fields_0']; |
$fields_1 = $_REQUEST['fields_1']; |
$fields_2 = $_REQUEST['fields_2']; |
$fields_3 = $_REQUEST['fields_3']; |
$fields_4 = $_REQUEST['fields_4']; |
$fields_5 = $_REQUEST['fields_5']; |
$fields_6 = $_REQUEST['fields_6']; |
$sort = $_REQUEST['sort']; |
$level = $_REQUEST['level']; |
$pjclosed = $_REQUEST['pjclosed']; |
|
if (isset($pjclosed) && CheckTrue($pjclosed)) |
$pjc = ",6"; |
|
# Festlegen der Spaltenlaengen |
$lenpr = PS_stringwidth($ps, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"); |
$lenph = PS_stringwidth($ps, "9: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"); |
$lenta = $lenpr; |
$lenan = PS_stringwidth($ps, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"); |
$lence = PS_stringwidth($ps, "999,999"); |
$lentotal = 0; |
|
# Beim bis-Datum den Monatsletzten ermitteln |
$mon = gmdate("n", $dto); |
$year = gmdate("Y", $dto); |
$day = daysinmonth($mon, $year); |
$dto = gmmktime(23, 59, 59, $mon, $day, $year); |
# Auslesen der Mitarbeiter. In einer Schleife werden die Daten |
# fuer jeden Mitarbeiter erstellt und pro Projekt angezeigt. |
# |
$query = "select mi_num, mi_nname, mi_vname, kl_land, ka_abt "; |
$query .= "from mitarbeiter, key_land, key_abt where "; |
$query .= "kl_num = mi_land and ka_num = mi_abt "; |
|
if ($mi_num > 0) |
$query .= "and mi_num = $mi_num "; |
|
$query .= "order by mi_nname, mi_vname"; |
$resmi = QueryDB($db, $query); |
|
if (!$resmi) |
return; |
|
$nummi = numrowsDB($resmi); |
$posmi = 0; |
|
$pdiff = $fields_3; |
$pist = $fields_4; |
$pplan = $fields_5; |
$mult = 0; |
$y = $ystart; |
$x = 40; |
|
if ($pist > 0) |
$mult++; |
|
if ($pplan > 0) |
$mult++; |
|
if ($pplan > 0 && $pdiff > 0) |
$mult++; |
|
# Errechnen der gesamten Laenge; Zu jeder Zelle wird ein Rand von |
# 2 PT gerechnet. |
# |
$lentotal = $lenpr + 4 + ($lence * $mult) + ($mult * 4); |
$csp = $lenpr + 4; |
|
if ($fields_6 > 0) { |
$lentotal += ($lenph + 4); |
$csp += ($lenph + 4); |
} |
|
if ($fields_0 > 0) { |
$lentotal += ($lenta + 4); |
$csp += ($lenta + 4); |
} |
|
if ($fields_1 > 0) { |
$lentotal += ($lenan + 4); |
$csp += ($lenan + 4); |
} |
|
# Die Anzahl der Perioden ergibt sich aus der Auswahl. Die |
# Mitarbeitersicht besteht aus einer einzigen Tabelle in der |
# alle Daten angezeigt werden und mit Zwischensummen versehen |
# werden. |
# In der folgenden Schleife wird die Anzahl der Perioden |
# ermittelt. |
# |
$adate = $dfrom; |
$numper = 0; |
|
while ($adate <= $dto) { |
$adate = IncDate($periode, $adate); |
$numper++; |
} |
|
$lentotal += (($numper * ($lence + 4)) * $mult); |
# Wenn die benoetigte Breite die zur Verfuegung stehende |
# ueberschreitet, dann skalieren wir die Ausgabe so, dass sich |
# alles in der Breite ausgeht. |
if ($lentotal > ($pwidth - 50)) { |
$fact = ($pwidth - 50) / $lentotal; |
PS_scale($ps, $fact, 1); |
} |
|
$TempTable = false; |
|
while ($posmi < $nummi) { |
$data = fetchDB($resmi, $posmi); |
$mi_num = $data[0]; |
$mi_nname = $data[1]; |
$mi_vname = $data[2]; |
$kl_land = $data[3]; |
$ka_abt = $data[4]; |
|
# Pruefen ob der Mitarbeiter in irgend einem Projekt im gewaehlten |
# Zeitraum geplant ist. |
if ($prp_num > 0) { |
$query = "select count(*) from allocation, task, plan where "; |
$query .= "ta_num = al_task and pl_num = ta_plnum and "; |
$query .= "pl_prnum = $prp_num and pl_status in (0,2,3,4,5 $pjc) and "; |
} else { |
$query = "select count(*) from allocation, task, plan where "; |
$query .= "ta_num = al_task and pl_num = ta_plnum and "; |
$query .= "pl_status in (0,2,3,4,5 $pjc) and "; |
} |
|
$query .= "al_ressource = $mi_num and al_pstart between $dfrom and $dto"; |
$result = QueryDB($db, $query); |
|
if (!$result) |
return; |
|
$data = fetchDB($result, 0); |
$anzp = $data[0]; |
|
# Pruefen ob es auch keine IST-Buchungen fuer den fraglichen |
# Zeitraum gegeben hat. |
$query = "select count(*) from wdone, plan where "; |
$query .= "pl_prnum = wd_prnum and pl_status in (0,2,3,4,5 $pjc) and "; |
$query .= "wd_datum between $dfrom and $dto and "; |
$query .= "wd_minum = $mi_num "; |
|
if ($prp_num > 0) |
$query .= "and wd_prnum = $prp_num"; |
|
if (!($result = QueryDB($db, $query))) |
return; |
|
$data = fetchDB($result, 0); |
$anzi = $data[0]; |
|
if ($anzp < 1 && $anzi < 1) { |
$posmi++; |
continue; |
} |
|
# Zeichnen des Tabellenkopfs |
# Bei jedem Mitarbeiterwechsel wird ein neuer Tabellenkopf |
# gezeichnet. |
# |
if (($y - 60) <= 30) { |
PS_end_page($ps); |
HeadLine($ps); |
$y = $pheight - 30; |
} |
|
$c = PS_stringwidth($ps, GetMessage($db, 55, "Abteilung:") . " "); |
PS_setfont($ps, $helvN, 10.0); |
PS_show_xy($ps, GetMessage($db, 298, "Name:"), $x, $y); |
PS_show_xy($ps, "$mi_nname $mi_vname", $x + $c, $y); |
$y -= 10; |
PS_show_xy($ps, GetMessage($db, 299, "Gruppe:"), $x, $y); |
PS_show_xy($ps, $kl_land, $x + $c, $y); |
$y -= 10; |
$lines = 2; |
|
if (!$pmlight) { |
PS_show_xy($ps, GetMessage($db, 55, "Abteilung:"), $x, $y); |
PS_show_xy($ps, $ka_abt, $x + $c, $y); |
$y -= 10; |
$lines++; |
} |
|
PS_rect($ps, $x - 2, $y + 9 , $lentotal, $lines * 10); |
PS_moveto($ps, $x - 2, $y + 10); |
PS_lineto($ps, $x - 2, $y - 2); |
PS_stroke($ps); |
$r = 0; |
$adate = $dfrom; |
$c = ($lence + 4) * $mult; |
$x = 38 + $csp; |
PS_setcolor($ps, "fill", "gray", 0.6, 0.0, 0.0, 0.0); |
PS_setfont($ps, $helvB, 10.0); |
|
while ($r < $numper) { |
$p = gmdate("n/Y", $adate); |
PS_rect($ps, $x - 2, $y - 1, $c, 10); |
PS_fill($ps); |
PS_rect($ps, $x - 2, $y - 1, $c, 10); |
PS_stroke($ps); |
PS_show_boxed($ps, $p, $x, $y-2, $c - 4, 10, "center"); |
$adate = IncDate($periode, $adate); |
$sumperp[$r] = 0.0; |
$sumperi[$r] = 0.0; |
$totalis[$r] = 0.0; |
$totalpl[$r] = 0.0; |
$mitotp[$r] = 0.0; |
$mitoti[$r] = 0.0; |
$r++; |
$x += $c; |
} |
|
PS_rect($ps, $x - 2, $y - 1, $c, 10); |
PS_fill($ps); |
PS_rect($ps, $x - 2, $y - 1, $c, 10); |
PS_stroke($ps); |
PS_show_boxed($ps, GetMessage($db, 290, "Summen"), $x, $y-2, $c - 4, 10, "center"); |
$y -= 10; |
$x = 40; |
PS_rect($ps, $x - 2, $y - 1, $lenpr+4, 10); |
PS_fill($ps); |
PS_rect($ps, $x - 2, $y - 1, $lenpr+4, 10); |
PS_stroke($ps); |
PS_show_boxed($ps, GetMessage($db, 277, "Projekt"), $x, $y-2, $lenpr, 10, "center"); |
$x += $lenpr + 4; |
|
if ($phase && $fields_6 > 0) { |
PS_rect($ps, $x - 2, $y - 1, $lenph+4, 10); |
PS_fill($ps); |
PS_rect($ps, $x - 2, $y - 1, $lenph+4, 10); |
PS_stroke($ps); |
PS_show_boxed($ps, GetMessage($db, 292, "Phase"), $x, $y-2, $lenph, 10, "center"); |
$x += $lenph + 4; |
} |
|
if ($fields_0 > 0) { |
PS_rect($ps, $x - 2, $y - 1, $lenta+4, 10); |
PS_fill($ps); |
PS_rect($ps, $x - 2, $y - 1, $lenta+4, 10); |
PS_stroke($ps); |
PS_show_boxed($ps, GetMessage($db, 293, "Tasks"), $x, $y-2, $lenta, 10, "center"); |
$x += $lenta + 4; |
} |
|
if ($fields_1 > 0) { |
PS_rect($ps, $x - 2, $y - 1, $lenan+4, 10); |
PS_fill($ps); |
PS_rect($ps, $x - 2, $y - 1, $lenan+4, 10); |
PS_stroke($ps); |
PS_show_boxed($ps, GetMessage($db, 294, "Anmerkungen"), $x, $y-2, $lenan, 10, "center"); |
$x += $lenan + 4; |
} |
|
$r = 0; |
|
while ($r <= $numper) { |
if ($pist > 0) { |
PS_rect($ps, $x - 2, $y - 1, $lence+4, 10); |
PS_fill($ps); |
PS_rect($ps, $x - 2, $y - 1, $lence+4, 10); |
PS_stroke($ps); |
PS_show_boxed($ps, GetMessage($db, 279, "IST"), $x, $y-2, $lence, 10, "center"); |
$x += $lence + 4; |
} |
|
if ($pplan > 0 && $pdiff > 0) { |
PS_rect($ps, $x - 2, $y - 1, $lence+4, 10); |
PS_fill($ps); |
PS_rect($ps, $x - 2, $y - 1, $lence+4, 10); |
PS_stroke($ps); |
PS_show_boxed($ps, GetMessage($db, 295, "Diff."), $x, $y-2, $lence, 10, "center"); |
$x += $lence + 4; |
} |
|
if ($pplan > 0) { |
PS_rect($ps, $x - 2, $y - 1, $lence+4, 10); |
PS_fill($ps); |
PS_rect($ps, $x - 2, $y - 1, $lence+4, 10); |
PS_stroke($ps); |
PS_show_boxed($ps, GetMessage($db, 278, "Plan"), $x, $y-2, $lence, 10, "center"); |
$x += $lence + 4; |
} |
|
$r++; |
} |
|
$y -= 10; |
$x = 40; |
PS_setcolor($ps, "fill", "gray", 1.0, 0.0, 0.0, 0.0); |
PS_setfont($ps, $helvN, 10.0); |
|
# Projekte waehlen, in denen der Mitarbeiter geplant ist. |
# |
# Wurde kein bestimmter Mitarbeiter gewählt, werden immer alle |
# Mitarbeiter angezeigt. Es werden grundsätzlich alle Projekte |
# angezeigt in denen der Mitarbeiter geplant ist oder wo er |
# IST-Werte hat (das eine bedingt das andere!). |
# |
$query = "select distinct on (pr_num) pr_num, pr_name, pl_num, pl_status from "; |
$query .= "project, plan where pl_prnum = pr_num and pl_status in (0,2,3,4,5 $pjc) "; |
|
if ($prp_num > 0) |
$query .= "and pr_num = $prp_num "; |
|
$query .= "order by pr_num asc, pl_lfd desc"; |
$respr = QueryDB($db, $query); |
|
if (!$respr) |
return; |
|
$numpr = numrowsDB($respr); |
$pospr = 0; |
$old_prnum = 0; |
$pr_flag = false; // Zwischensumme schreiben |
|
while ($pospr < $numpr) { |
$data = fetchDB($respr, $pospr); |
$pr_num = $data[0]; |
$pr_name = $data[1]; |
$pl_num = $data[2]; |
$pl_status = $data[3]; |
|
# Pruefen ob fuer den fraglichen Zeitraum Plantage oder |
# IST-Daten vorhanden sind. |
$query = "select count(*) from allocation, task, plan where "; |
$query .= "ta_num = al_task and pl_num = ta_plnum and "; |
$query .= "pl_prnum = $pr_num and al_ressource = $mi_num and "; |
$query .= "al_pstart between $dfrom and $dto and pl_status in (0,2,3,4,5 $pjc)"; |
|
if (!($resco = QueryDB($db, $query))) |
return; |
|
$data = fetchDB($resco, 0); |
$anzp = $data[0]; |
|
$query = "select count(*) from wdone where "; |
$query .= "wd_minum = $mi_num and wd_prnum = $pr_num and "; |
$query .= "wd_datum between $dfrom and $dto"; |
|
if (!($resco = QueryDB($db, $query))) |
return; |
|
$data = fetchDB($resco, 0); |
$anzi = $data[0]; |
|
# Keine Plan- und IST-Daten? Wenn keine Daten, dann das |
# Projekt ueberspringen. |
if ($anzp == 0 && $anzi == 0) { |
$pospr++; |
continue; |
} |
|
# Falls die temporaere Tabelle existiert, loeschen wir sie. |
if ($TempTable) |
TQueryDB($db, "drop table TempPlan"); |
|
$TempTable = true; |
|
if (!CreateTempPlan($db, $pl_num, $pr_num, $dfrom, $dto, true, $mi_num, true)) { |
$pospr++; |
continue; |
} |
|
# Wurden in der temporaeren Tabelle ueberhaupt Datensaetze |
# abgelegt? |
$query = "select count(*) from TempPlan"; |
|
if (!($resanz = QueryDB($db, $query))) |
return; |
|
$data = fetchDB($resanz, 0); |
|
if ($data[0] <= 0) { |
$pospr++; |
continue; |
} |
|
$c = $csp + $np; |
$pr_flag = true; |
|
# Tabelleninhalt schreiben: |
# Die Inhalte werden der zuvor temporaer erzeugten Tabelle |
# entnommen. |
# |
if ($fields_0 <= 0) { |
$query = "select sum(tmp_plan), sum(tmp_ist), tmp_periode "; |
|
if ($fields_6 > 0) |
$query .= ", tmp_phase "; |
|
$query .= "from TempPlan group by "; |
|
if ($fields_6 > 0) |
$query .= "tmp_phase, "; |
|
$query .= "tmp_periode order by "; |
|
if ($fields_6 > 0) |
$query .= "tmp_phase, "; |
|
$query .= "tmp_periode"; |
} else { |
$query = "select tmp_phase, tmp_periode, tmp_plan, tmp_ist,"; |
$query .= "tmp_taname, tmp_notiz, kp_phase, tmp_hash "; |
$query .= "from TempPlan, key_phase where "; |
$query .= "kp_num = tmp_phase "; |
$query .= "order by "; |
|
if ($phase) |
$query .= "tmp_phase, "; |
|
if ($fields_0 > 0 ) |
$query .= "tmp_taname, "; |
|
$query .= "tmp_periode"; |
} |
|
if (!($result = QueryDB($db, $query))) |
return; |
|
$numrows = numrowsDB($result); |
$rows = 0; |
$oldphase = -1; |
$oldtask = ""; |
$sumlpl = 0.0; |
$sumlis = 0.0; |
$per = 0; |
$first = true; |
$adate = $dfrom; |
$class = false; |
|
while ($rows < $numrows) { |
$data = fetchDB($result, $rows); |
|
if ($fields_0 > 0) { |
$tmp_phase = $data[0]; |
$tmp_periode = $data[1]; |
$tmp_plan = $data[2]; |
$tmp_ist = $data[3]; |
$tmp_taname = $data[4]; |
$tmp_notiz = $data[5]; |
$kp_phase = $data[6]; |
$tmp_hash = $data[7]; |
} else { |
$tmp_plan = $data[0]; |
$tmp_ist = $data[1]; |
$tmp_periode = $data[2]; |
|
if ($fields_6 > 0) { |
$tmp_phase = $data[3]; |
|
$query = "select kp_phase from key_phase where kp_num = $tmp_phase"; |
|
if (!($reskp = QueryDB($db, $query))) |
return; |
|
if (numrowsDB($reskp) > 0) { |
$d = fetchDB($reskp, 0); |
$kp_phase = $d[0]; |
} else |
$kp_phase = ""; |
} else |
$tmp_phase = 0; |
|
$tmp_taname = ""; |
$tmp_notiz = ""; |
$tmp_hash = ""; |
} |
|
# Summen und Zeilenanfang schreiben |
# |
if ($oldphase != $tmp_phase || $oldtask != $tmp_taname) { |
# Aktuelle Zeile vervollstaendigen (nur wenn eine Zeile |
# bereits geschrieben wurde). |
# |
if (!$first) { |
while ($adate <= $dto) { |
$x = CellPDF($ps, 0, 0, $x, $y, $lence, $class, true); |
$class = !$class; |
$adate = IncDate($periode, $adate); |
} |
|
ZSumPDF($ps, $sumlis, $sumlpl, $x, $y, $lence); |
$x = 40; |
$y -= 10; |
|
if ($y <= 30) { |
PS_end_page($ps); |
HeadLine($ps); |
$y = $pheight - 30; |
} |
} |
|
# Beginn der Zeile: Schreiben der ersten fixen Zellen. |
# |
PS_show_xy($ps, "$pr_num $pr_name", $x, $y); |
PS_rect($ps, $x - 2, $y - 1, $lenpr+4, 10); |
PS_stroke($ps); |
$x += $lenpr + 2; |
|
if ($phase && $fields_6 > 0) { |
PS_show_xy($ps, "$tmp_phase: $kp_phase", $x, $y); |
PS_rect($ps, $x - 2, $y - 1, $lenph+4, 10); |
PS_stroke($ps); |
$x += $lenph + 2; |
} |
|
if ($fields_0 > 0) { |
PS_show_xy($ps, "$tmp_taname", $x, $y); |
PS_rect($ps, $x - 2, $y - 1, $lenta+4, 10); |
PS_stroke($ps); |
$x += $lenta + 2; |
} |
|
if ($fields_1 > 0) { |
PS_show_xy($ps, "$tmp_notiz", $x, $y); |
PS_rect($ps, $x - 2, $y - 1, $lenan+4, 10); |
PS_stroke($ps); |
$x += $lenan + 2; |
} |
|
# Variablen initialisieren... |
# |
$sumlis = 0.0; |
$sumlpl = 0.0; |
$per = 0; |
$adate = $dfrom; |
$oldphase = $tmp_phase; |
$oldtask = $tmp_taname; |
$first = false; |
$class = false; |
$x = 38 + $csp; |
} |
|
# Stimmt die aktuelle Position nicht mit der Periode ueberein, |
# uebergehen wir die Zellen. |
# |
while ($adate < $tmp_periode) { |
$x = CellPDF($ps, 0, 0, $x, $y, $lence, $class, true); |
$class = !$class; |
$adate = IncDate($periode, $adate); |
$per++; |
} |
|
# Schreiben einer Zelle mit den aktuellen Werten. |
$x = CellPDF($ps, $tmp_ist, $tmp_plan, $x, $y, $lence, $class, false); |
$class = !$class; |
$sumperp[$per] += $tmp_plan; |
$sumperi[$per] += $tmp_ist; |
$totalis[$per] += $tmp_ist; |
$totalpl[$per] += $tmp_plan; |
$mitoti[$per] += $tmp_ist; |
$mitotp[$per] += $tmp_plan; |
$sumlpl += $tmp_plan; |
$sumlis += $tmp_ist; |
$adate = IncDate($periode, $adate); |
$per++; |
$rows++; |
} |
|
# Beenden der letzten Datenzeile der aktuellen Tabelle. |
# |
while ($adate <= $dto) { |
$x = CellPDF($ps, 0, 0, $x, $y, $lence, $class, true); |
$class = !$class; |
$adate = IncDate($periode, $adate); |
} |
|
ZSumPDF($ps, $sumlis, $sumlpl, $x, $y, $lence); |
$x = 40; |
$y -= 10; |
|
if ($y <= 30) { |
PS_end_page($ps); |
HeadLine($ps); |
$y = $pheight - 30; |
} |
|
if ($prp_num == 0 && $numpr > 1 && ($fields_0 || $fields_6)) { |
PS_show_boxed($ps, GetMessage($db, 300, "Projektsumme:") . " ", $x, $y-2, $csp-4, 10, "right"); |
PS_rect($ps, $x - 2, $y - 1, $csp, 10); |
PS_stroke($ps); |
$x = 38 + $csp; |
$adate = $dfrom; |
$per = 0; |
$sumi = 0.0; |
$sump = 0.0; |
|
while ($adate <= $dto) { |
$x = CellPDF($ps, $sumperi[$per], $sumperp[$per], $x, $y, $lence, true); |
$adate = IncDate($periode, $adate); |
$sumi += $sumperi[$per]; |
$sump += $sumperp[$per]; |
$sumperi[$per] = 0.0; |
$sumperp[$per] = 0.0; |
$per++; |
} |
|
ZsumPDF($ps, $sumi, $sump, $x, $y, $lence); |
$y -= 10; |
$x = 40; |
|
if ($y <= 30) { |
PS_end_page($ps); |
HeadLine($ps); |
$y = $pheight - 30; |
} |
} |
|
$pospr++; |
} |
|
PS_show_boxed($ps, GetMessage($db, 301, "Gesamtsumme Mitarbeiter:") . " ", $x, $y-2, $csp-4, 10, "right"); |
PS_rect($ps, $x - 2, $y - 1, $csp, 10); |
PS_stroke($ps); |
$x = 38 + $csp; |
$adate = $dfrom; |
$per = 0; |
$sumi = 0.0; |
$sump = 0.0; |
|
while ($adate <= $dto) { |
$x = CellPDF($ps, $mitoti[$per], $mitotp[$per], $x, $y, $lence, true); |
$adate = IncDate($periode, $adate); |
$sumi += $mitoti[$per]; |
$sump += $mitotp[$per]; |
$mitoti[$per] = 0.0; |
$mitotp[$per] = 0.0; |
$per++; |
} |
|
ZsumPDF($ps, $sumi, $sump, $x, $y, $lence); |
$y -= 15; |
$x = 40; |
|
if ($y <= 30) { |
PS_end_page($ps); |
HeadLine($ps); |
$y = $pheight - 30; |
} |
|
$posmi++; |
} |
|
# Monatssummen und Gesamtzeitraumsumme am Ende der Tabelle |
# anzeigen. |
# |
if ($mi_num == 0) { |
PS_show_boxed($ps, GetMessage($db, 297, "Monatssummen:") . " ", $x, $y-2, $csp-4, 10, "right"); |
PS_rect($ps, $x - 2, $y - 1, $csp, 10); |
PS_stroke($ps); |
$x = 38 + $csp; |
$adate = $dfrom; |
$per = 0; |
$sumi = 0.0; |
$sump = 0.0; |
|
while ($adate <= $dto) { |
$x = CellPDF($ps, $totalis[$per], $totalpl[$per], $x, $y, $lence, true); |
$adate = IncDate($periode, $adate); |
$sumi += $totalis[$per]; |
$sump += $totalpl[$per]; |
$per++; |
} |
|
$x = ZsumPDF($ps, $sumi, $sump, $x, $y, $lence); |
$y -= 10; |
$x = 40; |
|
if ($y <= 30) { |
PS_end_page($ps); |
HeadLine($ps); |
$y = $pheight - 30; |
} |
|
$posmi++; |
} |
} |
|
function GetBrowserInfo($key) { |
$browser = get_browser(); |
|
while (list ($schl, $value) = each ($browser)) { |
if ($schl == $key) |
return $value; |
} |
|
return ""; |
} |
|
# Folgende Funktion wertet die vom Anwender getroffenen Einstellungen aus |
# und ruft die entsprechenden Funktionen auf um die Listen darzustellen. |
# |
function PrintListPDF() { |
global $phase; |
global $pmlight; |
global $strVersion; |
global $helvN; |
global $helvB; |
global $page; |
global $pwidth; |
global $pheight; |
global $SearchPath; |
|
$pl_num = $_REQUEST['pl_num']; |
$mi_num = $_REQUEST['mi_num']; |
$dfrom = $_REQUEST['dfrom']; |
$dto = $_REQUEST['dto']; |
$fields_0 = $_REQUEST['fields_0']; |
$fields_1 = $_REQUEST['fields_1']; |
$fields_2 = $_REQUEST['fields_2']; |
$fields_3 = $_REQUEST['fields_3']; |
$fields_4 = $_REQUEST['fields_4']; |
$fields_5 = $_REQUEST['fields_5']; |
$fields_6 = $_REQUEST['fields_6']; |
$sort = $_REQUEST['sort']; |
$level = $_REQUEST['level']; |
$pjclosed = $_REQUEST['pjclosed']; |
|
# Als erstes pruefen wir, ob die wichtigen Parameter auch korrekt |
# gesetzt wurden. |
if ($dfrom > $dto) { |
Error(GetMessage(-1, 302, "Das Beginndatum darf nicht höher sein als das Endedatum!")); |
return; |
} |
|
$tmpfile = tempnam("/tmp", "pjtool"); |
unlink($tmpfile); |
$tmpfileps = $tmpfile . ".ps"; |
$tmpfilepdf = $tmpfile . ".pdf"; |
|
$db = OpenDB(); |
$ps = PS_new(); |
|
if (PS_open_file($ps, $tmpfileps) == 0) { |
Error(GetMessage($db, 303, "Error: Konnte keine temporäre Postscriptdatei öffnen!")); |
return; |
} |
|
PS_set_info($ps, "Creator", "Theos Soft Project Manager v$strVersion"); |
PS_set_info($ps, "Author", "Andreas Theofilu"); |
PS_set_info($ps, "Title", "Auswertung"); |
PS_set_info($ps, "Keywords", "TheoSys, TheoPlan, Andreas, Theofilu, Auswertung, ProjectManager"); |
PS_set_info($ps, "BoundingBox", "0 0 $pheight $pwidth"); |
PS_set_info($ps, "Orientation", "Landscape"); |
PS_set_parameter($ps, "hyphenation", "false"); |
PS_set_parameter($ps, "warning", "false"); |
$helvN = PS_findfont($ps, "$SearchPath/phvr8a", "", ""); |
$helvB = PS_findfont($ps, "$SearchPath/phvb8a", "", ""); |
|
$top = $pheight - 30; |
$left = 40; |
HeadLine($ps); // print static head line |
|
# In einem ersten Schritt zeichnen wir eine Box in der die gewaehlten |
# Parameter angezeigt werden: |
# |
PS_setfont($ps, $helvN, 10.0); |
$len1 = PS_stringwidth($ps, GetMessage($db, 304, "Sortierreihenfolge:") . " "); |
$chlen = GetMessage($db, 241, "Alle"); |
$y = $top; |
$x = $left; |
PS_set_text_pos($ps, $x, $y); |
PS_show($ps, GetMessage($db, 1, "Projekt:")); |
PS_set_text_pos($ps, $x + $len1, $y); |
|
if ($pl_num == 0) { |
PS_show($ps, GetMessage($db, 241, "Alle")); |
} else { |
$query = "select pl_prnum, pr_name from plan, project "; |
$query .= "where pr_num = pl_prnum and pl_num = $pl_num"; |
$result = QueryDB($db, $query); |
|
if (!$result) { |
closeDB($db); |
return; |
} |
|
$data = fetchDB($result, 0); |
$pr_num = $data[0]; |
$pr_name = $data[1]; |
PS_show($ps, "$pr_num $pr_name"); |
if (strlen("$pr_num $pr_name") > strlen($chlen)) |
$chlen = "$pr_num $pr_name"; |
} |
|
$y -= 10; |
PS_set_text_pos($ps, $x, $y); |
PS_show($ps, GetMessage($db, 305, "Mitarbeiter:")); |
PS_set_text_pos($ps, $x + $len1, $y); |
|
if ($mi_num == 0) { |
PS_show($ps, GetMessage($db, 241, "Alle")); |
} else { |
$query = "select mi_nname, mi_vname from mitarbeiter where mi_num = $mi_num"; |
$result = QueryDB($db, $query); |
|
if (!$result) { |
closeDB($db); |
return; |
} |
|
$data = fetchDB($result, 0); |
$mi_nname = $data[0]; |
$mi_vname = $data[1]; |
PS_show($ps, "$mi_nname $mi_vname"); |
if (strlen("$mi_nname $mi_vname") > strlen($chlen)) |
$chlen = "$mi_nname $mi_vname"; |
} |
|
$y -= 10; |
PS_set_text_pos($ps, $x, $y); |
PS_show($ps, GetMessage($db, 306, "Zeitraum:")); |
PS_set_text_pos($ps, $x + $len1, $y); |
$text = GetMessage($db, 307, "Von:") . " " . date("n.Y", $dfrom) . " "; |
$text .= GetMessage($db, 308, "Bis:") . " " . date("n.Y", $dto); |
PS_show($ps, $text); |
|
if (strlen($text) > strlen($chlen)) |
$chlen = $text; |
|
$y -= 10; |
PS_set_text_pos($ps, $x, $y); |
PS_show($ps, GetMessage($db, 309, "Spaltenauswahl:")); |
PS_set_text_pos($ps, $x + $len1, $y); |
|
if ($fields_2 > 0) { |
PS_show($ps, GetMessage($db, 291, "Gruppe")); |
$y -= 10; |
PS_set_text_pos($ps, $x + $len1, $y); |
} |
|
if ($fields_6 > 0) { |
PS_show($ps, GetMessage($db, 206, "Phasen")); |
$y -= 10; |
PS_set_text_pos($ps, $x + $len1, $y); |
} |
|
if ($fields_0 > 0) { |
PS_show($ps, GetMessage($db, 310, "Tasks anzeigen")); |
$y -= 10; |
PS_set_text_pos($ps, $x + $len1, $y); |
} |
|
if ($fields_1 > 0) { |
PS_show($ps, GetMessage($db, 294, "Anmerkungen")); |
$y -= 10; |
PS_set_text_pos($ps, $x + $len1, $y); |
} |
|
if ($fields_4 > 0) { |
PS_show($ps, GetMessage($db, 311, "IST-Werte")); |
$y -= 10; |
PS_set_text_pos($ps, $x + $len1, $y); |
} |
|
if ($fields_3 > 0) { |
PS_show($ps, GetMessage($db, 312, "IST- / Plandifferenz")); |
$y -= 10; |
PS_set_text_pos($ps, $x + $len1, $y); |
} |
|
if ($fields_5 > 0) { |
PS_show($ps, GetMessage($db, 313, "Planwerte")); |
$y -= 10; |
PS_set_text_pos($ps, $x + $len1, $y); |
} |
|
PS_set_text_pos($ps, $x, $y); |
ps_show($ps, GetMessage($db, 304, "Sortierreihenfolge:")); |
PS_set_text_pos($ps, $x + $len1, $y); |
|
if ($sort == 1) |
PS_show($ps, GetMessage($db, 314, "Projekte / Mitarbeiter")); |
else |
PS_show($ps, GetMessage($db, 315, "Mitarbeiter / Projekte")); |
|
/* $y -= 10; |
PS_set_text_pos($ps, $x, $y); |
PS_show($ps, "Plantiefe:"); |
PS_set_text_pos($ps, $x + $len1, $y); |
|
if ($level == -1) |
PS_show($ps, "Alle"); |
else |
PS_show($ps, "Bis zu Level $level"); |
*/ |
$len2 = PS_stringwidth($ps, $chlen); |
PS_setlinewidth($ps, 0.4); |
PS_moveto($ps, $x - 4, $y - 4); |
PS_rect($ps, $x - 4, $y - 4, $len1 + $len2 + 8, $top - $y + 14); |
PS_stroke($ps); |
$y -= 14; |
|
if ($sort == 1) |
ProjektMaPDF($ps, $db, $pr_num, $y, $mi_num); |
else |
MitarbeiterPjPDF($ps, $db, $mi_num, $y, $pr_num); |
|
PS_end_page($ps); |
PS_close($ps); |
PS_delete($ps); |
passthru("/usr/bin/ps2pdf -sPAPERSIZE=a4 $tmpfileps $tmpfilepdf"); |
closeDB($db); |
unlink($tmpfileps); |
$len = filesize($tmpfilepdf); |
$browser = GetBrowserInfo("browser"); |
|
if ($browser == "IE") { // workaround for braindead browser! |
header("Pragma: public"); |
header("Expires: 0"); |
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); |
header("Content-type: application/pdf"); |
// header("Content-Length: $len"); |
header("Content-Disposition: attachment; filename=\"auswertung.pdf\""); |
} else { |
header("Content-type: application/pdf"); |
header("Content-Length: $len"); |
header("Content-Disposition: inline; filename=\"auswertung.pdf\""); |
} |
|
readfile($tmpfilepdf); |
unlink($tmpfilepdf); |
} |
|
# Auswertung der Funktionen |
if ($func == "prlist") { |
$pl_num = $_REQUEST['pl_num']; |
$mi_num = $_REQUEST['mi_num']; |
$dfrom = $_REQUEST['dfrom']; |
$dto = $_REQUEST['dto']; |
$fields_0 = $_REQUEST['fields_0']; |
$fields_1 = $_REQUEST['fields_1']; |
$fields_2 = $_REQUEST['fields_2']; |
$fields_3 = $_REQUEST['fields_3']; |
$fields_4 = $_REQUEST['fields_4']; |
$fields_5 = $_REQUEST['fields_5']; |
$fields_6 = $_REQUEST['fields_6']; |
$sort = $_REQUEST['sort']; |
$level = $_REQUEST['level']; |
|
PrintListPDF(); |
} |
|
if ($func == "pauswertung") { |
PrintListPDF(); |
} |
|
//require('footer.inc'); |
?> |