From 533782fd928ecf93e4d5c6d3248f16ce749ee515 Mon Sep 17 00:00:00 2001 From: Karl Burkhart Date: Tue, 10 Apr 2012 11:55:05 +0000 Subject: [PATCH] =?UTF-8?q?Projekte=20k=C3=B6nnen=20jetzt=20per=20Zeitraum?= =?UTF-8?q?=20abgefragt=20werden?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/projekt/gantt.svg.php | 203 ++++++++++++++++++++++++++++++++-- 1 file changed, 196 insertions(+), 7 deletions(-) diff --git a/content/projekt/gantt.svg.php b/content/projekt/gantt.svg.php index a8ab2a124..6bb8d8251 100755 --- a/content/projekt/gantt.svg.php +++ b/content/projekt/gantt.svg.php @@ -31,15 +31,19 @@ if(isset($_REQUEST['projekt']) || isset($_REQUEST['oe'])) else die ('Kein Projekt oder OE übergeben!'); + +if(isset($_REQUEST['beginn']) && isset($_REQUEST['ende'])) +{ + $beginn = $_REQUEST['beginn']; + $ende = $_REQUEST['ende']; +} + if(isset($_REQUEST['studienjahr'])) $studienjahr = $_REQUEST['studienjahr']; -else - die ('Kein Studienjahr übergeben'); if(isset($_REQUEST['ansicht'])) $ansicht = $_REQUEST['ansicht']; -else - die('es wurde keine Ansicht mitübergeben'); + // header für no cache header("Cache-Control: no-cache"); @@ -62,11 +66,196 @@ if($projekt_kurzbz != '') } else { - // Zeichne alle Projekte der übergebenen OE - getOeGantt(); - + if(!isset($_REQUEST['beginn'])) + getOeGantt(); + else + getOeGanttZeitraum($beginn, $ende); } +function getOeGanttZeitraum($beginn, $ende) +{ + global $oe; + $datum = new datum(); + $widthPerWeek = 16; + $startX =50; + $startY = 90; + $split_date_beginn = explode('.', $beginn); + $split_date_ende = explode('.', $ende); + $timestampZeitraum_beginn = mktime(0,0,0,$split_date_beginn[1],$split_date_beginn[0], $split_date_beginn[2]); + $timestampZeitraum_ende = mktime(0,0,0,$split_date_ende[1],$split_date_ende[0], $split_date_ende[2]); + + $cw = getCwRange($timestampZeitraum_beginn, $timestampZeitraum_ende); + $anzahlKw = count($cw); + $beginn = $datum->formatDatum($beginn, 'Y-m-d'); + $ende = $datum->formatDatum($ende, 'Y-m-d'); + + $projekt = new projekt(); + if(!$projekt->getProjekteInZeitraum($beginn, $ende, $oe)) + die('Fehler beim laden der Projekte aufgetreten'); + + $height = (count($projekt->result)) * 50; + + echo ' + '; + + echo ' + '; + + // Überschriften + echo'Projekte zwischen '.$beginn.' und '.$ende.''; + echo' KW:'; + + // Zeichne Raster + for($i=1; $i<=$anzahlKw; $i++) + { + $x1 = $startX + $i*$widthPerWeek; + echo ''; + if($i%2 == 1) + echo ''.$cw[$i-1]['week'].''; + } + + $i=0; + foreach($projekt->result as $projekt) + { + $width = 0; + $x = 0; + // wenn kein start oder ende angegeben -> nichts zeichnen -> width=0 + if($projekt->beginn != '' && $projekt->ende != '') + { + $timestamp_beginn = $datum->mktime_fromdate($projekt->beginn); + $timestamp_end = $datum->mktime_fromdate($projekt->ende); + $kw_beginn = kalenderwoche($timestamp_beginn); + $kw_end = kalenderwoche($timestamp_end); + + $year_beginn=date("Y",$timestamp_beginn); + $year_end=date("Y",$timestamp_end); + + $cw_projekt = getCwRange($timestamp_beginn, $timestamp_end); + $anzahlKwProjekt = count($cw_projekt); + + // Projekt beginnt und endet in aktuellem Zeitraum //stimmt + if($timestamp_beginn >= $timestampZeitraum_beginn && $timestamp_end <= $timestampZeitraum_ende) + { + $help = $kw_beginn-$cw[0]['week']; + $x = ($startX + $help*$widthPerWeek); + $width = $anzahlKwProjekt*$widthPerWeek; + } + // Projekt beginnt im und endet nach Zeitraum // stimmt + if($timestamp_beginn>$timestampZeitraum_beginn && $timestamp_end > $timestampZeitraum_ende) + { + $cw_help = getCwRange($timestampZeitraum_beginn, $timestamp_beginn); + $cw_help_anzahl = count($cw_help); // Anzahl der Wochen zwischen Zeitraumbeginn und Projektbeginn + + $x = $startX+($cw_help_anzahl*$widthPerWeek); + $width = ($anzahlKw- $cw_help_anzahl)*$widthPerWeek; + } + // Projekt beginnt vor und endet im Zeitraum + if($timestamp_beginn < $timestampZeitraum_beginn && $timestamp_end < $timestampZeitraum_ende) + { + $cw_help = getCwRange($timestampZeitraum_beginn, $timestamp_end); + $cw_help_anzahl = count($cw_help); // Anzahl der Wochen zwischen Zeitraumbeginn und Projektbeginn + + $x = $startX; + $width = ($cw_help_anzahl)*$widthPerWeek; + } + // Projekt beginnt vor und endet nach Zeitraum + if($timestamp_beginn <= $timestampZeitraum_beginn && $timestamp_end >= $timestampZeitraum_ende) + { + $x = $startX; + $width = $anzahlKw *$widthPerWeek; + } + } + + // zeichne balken + echo ''; + echo''.$projekt->titel.''; + + // Zeichne Phasen in Projektbalken + $projektphasen = new projektphase(); + $projektphasen->getProjektphasen($projekt->projekt_kurzbz); + foreach($projektphasen->result as $phase) + { + $width = 0; + $x = 0; + // wenn kein start oder ende angegeben -> nichts zeichnen -> width=0 + if($phase->start != '' && $phase->ende != '') + { + $timestamp_beginn = $datum->mktime_fromdate($phase->start); + $timestamp_end = $datum->mktime_fromdate($phase->ende); + $kw_beginn = kalenderwoche($timestamp_beginn); + $kw_end = kalenderwoche($timestamp_end); + + $year_beginn=date("Y",$timestamp_beginn); + $year_end=date("Y",$timestamp_end); + + $cw_projekt = getCwRange($timestamp_beginn, $timestamp_end); + $anzahlKwProjekt = count($cw_projekt); + + // Projekt beginnt und endet in aktuellem Zeitraum //stimmt + if($timestamp_beginn > $timestampZeitraum_beginn && $timestamp_end < $timestampZeitraum_ende) + { + $cw_help = getCwRange($timestampZeitraum_beginn, $timestamp_beginn); + $cw_help_anzahl = count($cw_help); // Anzahl der Wochen zwischen Zeitraumbeginn und Projektbeginn + + $x = $startX+($cw_help_anzahl*$widthPerWeek); + $width = $anzahlKwProjekt*$widthPerWeek; + } + // Projekt beginnt im und endet nach Zeitraum // stimmt + if($timestamp_beginn>$timestampZeitraum_beginn && $timestamp_end > $timestampZeitraum_ende) + { + $cw_help = getCwRange($timestampZeitraum_beginn, $timestamp_beginn); + $cw_help_anzahl = count($cw_help); // Anzahl der Wochen zwischen Zeitraumbeginn und Projektbeginn + + $x = $startX+($cw_help_anzahl*$widthPerWeek); + $width = ($anzahlKw- $cw_help_anzahl)*$widthPerWeek; + } + // Projekt beginnt vor und endet im Zeitraum + if($timestamp_beginn < $timestampZeitraum_beginn && $timestamp_end < $timestampZeitraum_ende && $timestamp_end > $timestampZeitraum_beginn) + { + $cw_help = getCwRange($timestampZeitraum_beginn, $timestamp_end); + $cw_help_anzahl = count($cw_help); // Anzahl der Wochen zwischen Zeitraumbeginn und Projektbeginn + + $x = $startX; + $width = ($cw_help_anzahl)*$widthPerWeek; + + } + // Projekt beginnt vor und endet nach Zeitraum + if($timestamp_beginn <= $timestampZeitraum_beginn && $timestamp_end >= $timestampZeitraum_ende) + { + $x = $startX; + $width = $anzahlKw *$widthPerWeek; + } + + } + // zeichne phasenbalken + echo ''; + } + $i++; + } + echo'Organisationseinheit: '.$projekt->oe_kurzbz.''; + echo ''; +} + +function getCwRange($start, $end) +{ + if($start > $end) { + throw new InvalidArgumentException('Falsche Reihenfolge der Argumente'); + } + + $duration = ceil(($end-$start)/3600/24/7); + + for($i = 0; $i < $duration; ++$i) { + $week = mktime(0, 0, 0, date('m', $start), date('d', $start)+($i*7), date('Y', $start)); + $cw[$i]['week'] = date('W', $week); + $cw[$i]['year'] = date('Y', $week); + } + return $cw; +} + + /** * * Zeichnet den Chart für alle Projekte einer Übergebenen Organisationseinheit