예제 #1
0
파일: ganttex14.php 프로젝트: Ethennoob/Web
<?php

include "../jpgraph.php";
include "../jpgraph_gantt.php";
$graph = new GanttGraph(0, 0, "auto");
$graph->SetBox();
$graph->SetShadow();
// Add title and subtitle
$graph->title->Set("Example of captions");
$graph->title->SetFont(FF_ARIAL, FS_BOLD, 12);
$graph->subtitle->Set("(ganttex14.php)");
// Show day, week and month scale
$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH);
// Use the short name of the month together with a 2 digit year
// on the month scale
$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR2);
$graph->scale->month->SetFontColor("white");
$graph->scale->month->SetBackgroundColor("blue");
// 0 % vertical label margin
$graph->SetLabelVMarginFactor(1);
// Format the bar for the first activity
// ($row,$title,$startdate,$enddate)
$activity = new GanttBar(0, "Project", "2001-12-21", "2002-01-07", "[50%]");
// Yellow diagonal line pattern on a red background
$activity->SetPattern(BAND_RDIAG, "yellow");
$activity->SetFillColor("red");
// Set absolute height
$activity->SetHeight(10);
// Specify progress to 60%
$activity->progress->Set(0.6);
// Format the bar for the second activity
예제 #2
0
 public function graficar($filename)
 {
     $graph = new GanttGraph();
     $graph->SetShadow();
     $graph->SetBox();
     $dataset = $this->dataSource->getDataset();
     define('UTF-8', $locale_char_set);
     $tamanioDataset = count($dataset);
     $fecha_reg_ini = new DateTime();
     $fecha_reg_fin = new DateTime();
     $fechaInicio = new DateTime();
     $fechaFin = new DateTime();
     $data = array();
     $constrains = array();
     for ($i = 0; $i < $tamanioDataset; $i++) {
         //echo date_format(new DateTime($dataset[$i]['fecha_ini']),'Y-m-d H:i:s');
         //exit;
         if ($i == 0) {
             $fechaInicio = new DateTime($dataset[$i]['fecha_ini']);
             $fechaFin = new DateTime($dataset[$i]['fecha_fin']);
         }
         if ($fechaFin < new DateTime($dataset[$i]['fecha_ini']) && $dataset[$i]['tipo'] == 'estado_final') {
             $fechaFin = new DateTime($dataset[$i]['fecha_ini']);
         }
         $actividad = array();
         array_push($actividad, $dataset[$i]['id']);
         $prefijo = '';
         if ($dataset[$i]['tipo'] == 'proceso') {
             $tipo = ACTYPE_GROUP;
         }
         if ($dataset[$i]['tipo'] == 'estado') {
             $tipo = ACTYPE_NORMAL;
             $prefijo = '  ';
         }
         if ($dataset[$i]['tipo'] == 'obs') {
             $tipo = ACTYPE_NORMAL;
             $prefijo = '  ';
         }
         if ($dataset[$i]['tipo'] == 'estado_final') {
             $tipo = ACTYPE_MILESTONE;
             $prefijo = '  ';
         }
         //arma cabecera
         $fecha_reg_ini = new DateTime($dataset[$i]['fecha_ini']);
         $fecha_reg_fin = new DateTime($dataset[$i]['fecha_fin']);
         $resp = $dataset[$i]['funcionario'] != '' ? $dataset[$i]['funcionario'] : $dataset[$i]['depto'];
         $resp = $resp == '' ? $dataset[$i]['cuenta'] : $resp;
         //$resp = $dataset[$i]['depto'].'('.$dataset[$i]['cuenta'].") ->".$dataset[$i]['funcionario'];
         //$resp = $dataset[$i]['depto'].'('.$dataset[$i]['cuenta'].");
         $fini = $fecha_reg_ini->format('d M H:i:s');
         $ffin = $fecha_reg_fin->format('d M H:i:s');
         $start = strtotime($dataset[$i]['fecha_ini']);
         $end = strtotime($dataset[$i]['fecha_fin']);
         $days_between = round(($end - $start) / 86400);
         if ($dataset[$i]['tipo'] == 'obs') {
             $desc_principal = utf8_decode($prefijo . '  -> OBS: ' . $dataset[$i]['nombre']);
         } else {
             $desc_principal = utf8_decode($prefijo . $dataset[$i]['nombre']);
         }
         if ($dataset[$i]['tipo'] == 'estado' || $dataset[$i]['tipo'] == 'obs') {
             $tiempo = $days_between . ' dias';
         } else {
             if ($dataset[$i]['tipo'] == 'estado_final') {
                 $tiempo = '--';
                 $ffin = $fini;
             } else {
                 $resp = '--';
                 $tiempo = $days_between . ' dias';
                 $desc_principal = $desc_principal . "\n" . $dataset[$i]['descripcion'];
             }
         }
         // si el estado tiene configurado el nombre de estapa damos preferencia a este campo
         if (isset($dataset[$i]['etapa']) && $dataset[$i]['etapa'] != '') {
             $desc_principal = '  ' . $dataset[$i]['etapa'] . ' [' . trim($desc_principal) . ']';
         }
         //mostramos cuenta de usuario si existe
         if ($dataset[$i]['nombre_usuario_ai'] != '' && $dataset[$i]['nombre_usuario_ai'] != 'NULL') {
             $desc_principal = $desc_principal . ' (por AI: ' . $dataset[$i]['nombre_usuario_ai'] . ")";
         } elseif ($dataset[$i]['cuenta'] != '') {
             $desc_principal = $desc_principal . ' (por: ' . $dataset[$i]['cuenta'] . ")";
         }
         if ($dataset[$i]['disparador'] == 'no' && $dataset[$i]['estado_reg'] == 'activo' || $dataset[$i]['tipo'] == 'estado_final') {
             $desc_principal = $desc_principal . ' *****';
         }
         $cabecera = array(utf8_decode($desc_principal), utf8_decode($resp), $tiempo, $fini, $ffin);
         array_push($actividad, $tipo);
         array_push($actividad, $cabecera);
         array_push($actividad, $fecha_reg_ini->format('Y-m-d H:i:s'));
         if ($dataset[$i]['tipo'] != 'estado_final') {
             array_push($actividad, $fecha_reg_fin->format('Y-m-d H:i:s'));
         }
         array_push($actividad, utf8_decode($dataset[$i]['descripcion']));
         array_push($actividad, '#' . $dataset[$i]['id']);
         array_push($actividad, $fecha_reg_ini->format('Y-m-d H:i:s'));
         //prepara las relaciones entre tipos
         if ($dataset[$i]['tipo'] == 'estado' && $dataset[$i]['id_siguiente'] != 0) {
             array_push($constrains, array($dataset[$i]['id'], $dataset[$i]['id_siguiente'], CONSTRAIN_ENDSTART));
         }
         array_push($data, $actividad);
     }
     //definir scala en funcion al dia inicial y dia final
     $diferencia = $fechaInicio->diff($fechaFin);
     if ($diferencia->format('%m') >= 24) {
         //escala de meses
         $graph->ShowHeaders(GANTT_HYEAR);
         $sw = 1;
         $fechaFin = $fechaFin->add(new DateInterval('PT9000H'));
     } elseif ($diferencia->format('%m') >= 7) {
         //escala de meses
         $graph->ShowHeaders(GANTT_HYEAR | GANTT_HMONTH);
         $sw = 1;
         $fechaFin = $fechaFin->add(new DateInterval('PT29000H'));
     } elseif ($diferencia->format('%m') > 6) {
         //escala de meses
         $graph->ShowHeaders(GANTT_HYEAR | GANTT_HMONTH);
         $graph->scale->week->SetStyle(HOURSTYLE_HM24);
         $sw = 1;
         $fechaFin = $fechaFin->add(new DateInterval('PT6000H'));
     } elseif ($diferencia->format('%m') > 1) {
         //escala de semanas
         $graph->ShowHeaders(GANTT_HYEAR | GANTT_HMONTH | GANTT_HWEEK);
         $graph->scale->week->SetStyle(HOURSTYLE_HM24);
         $sw = 2;
         $fechaFin = $fechaFin->add(new DateInterval('PT7000H'));
     } elseif ($diferencia->format('%m') > 0) {
         //escala de dias
         $graph->ShowHeaders(GANTT_HYEAR | GANTT_HMONTH | GANTT_HWEEK | GANTT_HDAY);
         $graph->scale->week->SetStyle(HOURSTYLE_HM24);
         $sw = 3;
         $fechaFin = $fechaFin->add(new DateInterval('PT4600H'));
     } elseif ($diferencia->format('%m') == 0 && $diferencia->format('%d') > 1) {
         //escala de dias
         $graph->ShowHeaders(GANTT_HMONTH | GANTT_HWEEK | GANTT_HDAY | GANTT_HHOUR);
         $graph->scale->week->SetStyle(HOURSTYLE_HM24);
         $graph->scale->hour->SetInterval(12);
         $sw = 4;
         $fechaFin = $fechaFin->add(new DateInterval('PT400H'));
     } else {
         //escala de horas
         $graph->ShowHeaders(GANTT_HDAY | GANTT_HHOUR);
         $graph->scale->week->SetStyle(HOURSTYLE_HM24);
         $fechaFin = $fechaFin->add(new DateInterval('PT250H'));
         $sw = 5;
     }
     $graph->scale->actinfo->SetColTitles(array('Tipo', 'Responsable', 'Duracion', 'Inicio', 'Fin'), array(40, 100));
     // Setup a horizontal grid
     $graph->hgrid->Show();
     $graph->hgrid->SetRowFillColor('darkblue@0.9');
     $graph->SetDateRange($fechaInicio->format('Y-m-d H:i:s'), $fechaFin->format('Y-m-d H:i:s'));
     //$graph->SetDateRange('2013-06-04','2013-08-04');
     $graph->title->Set("Diagrama Gant Work Flow");
     //$graph->scale->week->SetStyle(MINUTESTYLE_MM);
     $graph->scale->week->SetFont(FF_FONT1);
     $progress = array();
     $graph->CreateSimple($data, $constrains, $progress);
     $archivo = dirname(__FILE__) . '/../../../reportes_generados/' . $filename;
     //$graph->StrokeCSIM();
     $graph->Stroke($archivo);
     /*
             
             echo ('<pre>');
             var_dump($sw);
             var_dump($fechaInicio->format('Y-m-d H:i:s'));
             var_dump($fechaFin->format('Y-m-d H:i:s'));
             
             var_dump($data);
             echo ('</pre>');
             
             echo ('<pre>');
             print_r($constrains);
             echo ('</pre>');*/
 }
 /**
  * creates the image for the gantt chart
  *
  * @param $_params	array containing projectdata, start- and enddate
  * @param $_filename	filename for the image, if empty image gets printed to browser
  * @author	Lars Kneschke / Bettina Gille
  * @returns	nothing - writes image to disk
  */
 function show_graph($params, $_filename = '')
 {
     $modernJPGraph = false;
     // no gd support
     if (!function_exists('imagecopyresampled')) {
         return false;
     }
     DEFINE("TTF_DIR", PHPGW_SERVER_ROOT . "/projects/ttf-bitstream-vera-1.10/");
     if (file_exists(PHPGW_SERVER_ROOT . '/../jpgraph/src/jpgraph.php')) {
         include PHPGW_SERVER_ROOT . '/../jpgraph/src/jpgraph.php';
         include PHPGW_SERVER_ROOT . '/../jpgraph/src/jpgraph_gantt.php';
     } else {
         include PHPGW_SERVER_ROOT . '/projects/inc/jpgraph-1.5.2/src/jpgraph.php';
         include PHPGW_SERVER_ROOT . '/projects/inc/jpgraph-1.5.2/src/jpgraph_gantt.php';
     }
     //_debug_array($params);
     $project_array = $params['project_array'];
     $sdate = $params['sdate'];
     $edate = $params['edate'];
     $showMilestones = $params['showMilestones'];
     $showResources = $params['showResources'];
     $bocalendar = CreateObject('calendar.bocalendar');
     $this->graph = CreateObject('phpgwapi.gdgraph', $this->debug);
     $bolink = CreateObject('infolog.bolink');
     //$this->boprojects->order = 'parent';
     $this->boprojects->limit = False;
     $this->boprojects->html_output = False;
     if (is_array($project_array)) {
         $projects = array();
         foreach ($project_array as $pro) {
             $project = $this->boprojects->list_projects(array('action' => 'mainsubsorted', 'project_id' => $pro, 'mstones_stat' => True));
             if (is_array($project)) {
                 $i = count($projects);
                 for ($k = 0; $k < count($project); $k++) {
                     $projects[$i + $k] = $project[$k];
                 }
             }
         }
     }
     if (is_array($projects)) {
         $modernJPGraph = version_compare('1.13', JPG_VERSION);
         $sdate = $sdate + 60 * 60 * $GLOBALS['phpgw_info']['user']['preferences']['common']['tz_offset'];
         $sdateout = $GLOBALS['phpgw']->common->show_date($sdate, $GLOBALS['phpgw_info']['user']['preferences']['common']['dateformat']);
         $edate = $edate + 60 * 60 * $GLOBALS['phpgw_info']['user']['preferences']['common']['tz_offset'];
         $edateout = $GLOBALS['phpgw']->common->show_date($edate, $GLOBALS['phpgw_info']['user']['preferences']['common']['dateformat']);
         #				$this->graph->title = lang('Gantt chart from %1 to %2',$sdateout,$edateout);
         // Standard calls to create a new graph
         if ($modernJPGraph) {
             $graph = new GanttGraph(940, -1, "auto");
         } else {
             $graph = new GanttGraph(-1, -1, "auto");
         }
         $graph->SetShadow();
         $graph->SetBox();
         $duration = $edate - $sdate;
         if ($duration < 5958000) {
             $graph->ShowHeaders(GANTT_HYEAR | GANTT_HMONTH | GANTT_HDAY | GANTT_HWEEK);
             if ($modernJPGraph) {
                 $graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAYWNBR);
             } else {
                 $graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY);
             }
         } elseif ($duration < 13820400) {
             $graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY);
             $graph->ShowHeaders(GANTT_HYEAR | GANTT_HMONTH | GANTT_HWEEK);
         } else {
             $graph->ShowHeaders(GANTT_HYEAR | GANTT_HMONTH);
         }
         // For the week we choose to show the start date of the week
         // the default is to show week number (according to ISO 8601)
         #$graph->scale->SetDateLocale('de_DE');
         // Change the scale font
         $graph->scale->week->SetFont(FF_VERA, FS_NORMAL, 8);
         $graph->scale->year->SetFont(FF_VERA, FS_BOLD, 10);
         // Titles for chart
         $graph->title->Set(lang('project overview'));
         $graph->subtitle->Set(lang('from %1 to %2', $sdateout, $edateout));
         $graph->title->SetFont(FF_VERA, FS_BOLD, 12);
         $graph->subtitle->SetFont(FF_VERA, FS_BOLD, 10);
         // set the start and end date
         // add one day to the end is needed internaly by jpgraph
         $graph->SetDateRange(date('Y-m-d 00:00:00', $sdate), date('Y-m-d', $edate + 86400));
         foreach ($projects as $pro) {
             $ptime_pro = $this->boprojects->return_value('ptime', $pro[project_id]);
             $acc = $this->boprojects->get_budget(array('project_id' => $pro[project_id], 'ptime' => $ptime_pro));
             if ($ptime_pro > 0) {
                 $finnishedPercent = 100 / $ptime_pro * $acc[uhours_jobs_wminutes];
             } else {
                 $finnishedPercent = 0;
             }
             $previous = '';
             if ($pro['previous'] > 0) {
                 $previous = $this->boprojects->read_single_project($pro['previous']);
                 $spro[] = array('title' => str_repeat(' ', $spro['level']) . '[!]' . $previous['title'], 'extracolor' => 'darkorange', 'sdate' => $previous['sdate'], 'edate' => $previous['edate'], 'pro_id' => $previous['project_id'], 'f_sdate' => $pro['sdate']);
                 $color_legend['previous'] = array('title' => '[!]' . lang('previous project'), 'extracolor' => 'darkorange');
             }
             // add a empty row before new project
             if ($pro['level'] == 0 && $counter > 0) {
                 $counter++;
             }
             $spro = array('title' => $pro['title'], 'sdate' => $pro['sdate'], 'edate' => $pro['edate'] ? $pro['edate'] : mktime(0, 0, 0, date('m'), date('d'), date('Y')), 'color' => $pro['level'], 'pro_id' => $pro['project_id'], 'previous' => $pro['previous']);
             // convert title to iso-8859-1
             $spro[title] = $this->botranslation->convert($spro[title], $this->displayCharset, 'iso-8859-1');
             if ($spro[edate] < $sdate) {
                 continue;
             }
             if ($spro[edate] > $edate) {
                 $spro[edate] = $edate;
             }
             if ($spro[sdate] < $sdate) {
                 $spro[sdate] = $sdate;
             }
             $bar = new GanttBar($counter, $spro[title], date('Y-m-d', $spro[sdate]), date('Y-m-d', $spro[edate]), round($finnishedPercent) . '%', 0.5);
             // mark beginn of new project bold
             if ($pro['level'] == 0) {
                 $bar->title->SetFont(FF_VERA, FS_BOLD, 9);
                 #$bar->title->SetColor("#9999FF");
                 $bar->SetPattern(BAND_SOLID, "#9999FF");
             } else {
                 // For illustration lets make each bar be red with yellow diagonal stripes
                 $bar->SetPattern(BAND_SOLID, "#ccccFF");
                 #$bar->title->SetColor("#ccccFF");
             }
             // To indicate progress each bar can have a smaller bar within
             // For illustrative purpose just set the progress to 50% for each bar
             $bar->progress->SetHeight(0.2);
             $bar->SetColor('#777777');
             if ($finnishedPercent > 100) {
                 $bar->progress->Set(1);
                 #$bar->progress->SetPattern(GANTT_SOLID,"darkred",98);
                 $bar->caption->SetColor("red");
             } else {
                 $bar->progress->Set($finnishedPercent / 100);
                 #$bar->progress->SetPattern(GANTT_SOLID,"darkgreen",98);
             }
             $bar->caption->SetFont(FF_VERA, FS_NORMAL, 8);
             // ... and add the bar to the gantt chart
             $graphs['bars'][] = $bar;
             #$graph->Add($bar);
             $counter++;
             // check for Resources
             if ($showResources == 'true') {
                 $linkedObjects = $bolink->get_links('projects', $pro[project_id]);
                 $projectACL = $this->boprojects->get_acl_for_project($pro[project_id]);
                 if (is_array($projectACL)) {
                     // if beginn
                     foreach ($projectACL as $accountID) {
                         #_debug_array($projectData);
                         $accountData = CreateObject('phpgwapi.accounts', $accountID);
                         $accountData->read_repository();
                         $accountName = $GLOBALS['phpgw']->common->display_fullname($accountData->data['account_lid'], $accountData->data['firstname'], $accountData->data['lastname']);
                         $calData = array('syear' => date('Y', $sdate), 'smonth' => date('m', $sdate), 'sday' => date('d', $sdate), 'eyear' => date('Y', $edate), 'emonth' => date('m', $edate), 'eday' => date('d', $edate), 'owner' => array($accountID));
                         $calEntries = $bocalendar->store_to_cache($calData);
                         $bocalendar->remove_doubles_in_cache(date('Y', $sdate) . date('m', $sdate) . date('d', $sdate), date('Y', $edate) . date('m', $edate) . date('d', $edate));
                         $calEntries = $bocalendar->cached_events;
                         #_debug_array($calEntries);
                         if (is_array($calEntries) && count($calEntries)) {
                             #_debug_array($calEntries);
                             foreach ($calEntries as $calDayDate => $calDayEntries) {
                                 foreach ($calDayEntries as $calDayEntry) {
                                     if ($calDayEntry['recur_type']) {
                                         $bocalendar->set_recur_date($calDayEntry, $calDayDate);
                                     }
                                     #_debug_array($calDayEntry);
                                     if (!$bocalendar->rejected_no_show($calDayEntry)) {
                                         $startDate = date('Y-m-d H:i:s', mktime($calDayEntry['start']['hour'], $calDayEntry['start']['min'], $calDayEntry['start']['sec'], $calDayEntry['start']['month'], $calDayEntry['start']['mday'], $calDayEntry['start']['year']));
                                         $endDate = date('Y-m-d H:i:s', mktime($calDayEntry['end']['hour'], $calDayEntry['end']['min'], $calDayEntry['end']['sec'], $calDayEntry['end']['month'], $calDayEntry['end']['mday'], $calDayEntry['end']['year']));
                                         #$endDate = $startDate+1000;
                                         #_debug_array($startDate);
                                         $bar = new GanttBar($counter, str_repeat(' ', $pro['level'] + 1) . $accountName, $startDate, $endDate, '', 0.5);
                                         $bar->SetPattern(BAND_SOLID, "#DDDDDD");
                                         $bar->SetColor('#CCCCCC');
                                         #$bar->SetShadow(true,"darkgray");
                                         if (count($projectLinks = $bolink->get_links('calendar', $calDayEntry['id'], 'projects'))) {
                                             $projectLinks = array_flip($projectLinks);
                                             #_debug_array($projectLinks);
                                             if (isset($projectLinks[$pro[project_id]])) {
                                                 $bar->SetPattern(BAND_SOLID, "#33FF33");
                                                 $bar->SetColor('#33FF33');
                                             }
                                         }
                                         $graphs['bars'][] = $bar;
                                         #$graph->Add($bar);
                                     } else {
                                         print "rejected<br>";
                                     }
                                 }
                             }
                             $counter++;
                         }
                     }
                 }
                 // if end
             }
             // check for milstones
             if (is_array($pro['mstones']) && $showMilestones == 'true') {
                 $msColor = "#999999";
                 foreach ($pro['mstones'] as $ms) {
                     if ($sdate < $ms['edate'] && $ms['edate'] <= $edate) {
                         $ms[title] = $this->botranslation->convert($ms[title], $this->displayCharset, 'iso-8859-1');
                         $msData = array('title' => $ms['title'], 'extracolor' => 'yellow', 'edate' => $ms['edate'], 'pro_id' => $pro['project_id']);
                         // Create a milestone mark
                         $ms = new MileStone($counter, str_repeat(' ', $pro['level'] + 1) . lang('Milestone'), date('Y-m-d', $msData['edate']), $msData['title']);
                         $ms->caption->SetFont(FF_VERA, FS_NORMAL, 8);
                         $ms->title->SetFont(FF_VERA, FS_NORMAL, 8);
                         $ms->mark->SetColor($msColor);
                         $ms->mark->SetFillColor('#EEEEEE');
                         $graphs['ms'][$counter] = $ms;
                         // Create a vertical line to emphasize the milestone
                         $vl = new GanttVLine(date('Y-m-d', $msData[edate]), '', $msColor, 2);
                         $vl->SetDayOffset(0.5);
                         // Center the line in the day
                         $graphs['vl'][$counter] = $vl;
                         $counter++;
                     }
                 }
             }
         }
         // add the vertical lines
         if (is_array($graphs['vl'])) {
             foreach ($graphs['vl'] as $graphCounter => $graphPointer) {
                 $graph->Add($graphPointer);
             }
         }
         // add the milestones
         if (is_array($graphs['ms'])) {
             foreach ($graphs['ms'] as $graphCounter => $graphPointer) {
                 $graph->Add($graphPointer);
             }
         }
         // add the resources
         if (is_array($graphs['bars'])) {
             foreach ($graphs['bars'] as $graphCounter => $graphPointer) {
                 $graph->Add($graphPointer);
             }
         }
         #$graph->Stroke(PHPGW_SERVER_ROOT . SEP . 'phpgwapi' . SEP . 'images' . SEP . 'draw_tmp.png');
         $graph->Stroke($_filename);
     }
 }
예제 #4
0
 public function graficar($filename)
 {
     $graph = new GanttGraph();
     $graph->SetShadow();
     $graph->SetBox();
     // Only show part of the Gantt
     $graph = new GanttGraph(1000);
     /*
     $graph->title->Set('Proceso '.$this->dataSource->getParameter('desc_proceso_macro')."\n".
     																			'Seguimiento de Solicitud '.$this->dataSource->getParameter('numero')."\n".
     																			'Unidad '.$this->dataSource->getParameter('desc_uo'));
     $graph->title->SetFont(FF_ARIAL,FS_BOLD,6);
     */
     define('UTF-8', $locale_char_set);
     // Setup some "very" nonstandard colors
     $graph->SetMarginColor('lightgreen@0.8');
     $graph->SetBox(true, 'yellow:0.6', 2);
     $graph->SetFrame(true, 'darkgreen', 4);
     $graph->scale->divider->SetColor('yellow:0.6');
     $graph->scale->dividerh->SetColor('yellow:0.6');
     // Explicitely set the date range
     // (Autoscaling will of course also work)
     // Display month and year scale with the gridlines
     $graph->ShowHeaders(GANTT_HMONTH | GANTT_HYEAR | GANTT_HDAY);
     $graph->scale->month->grid->SetColor('gray');
     $graph->scale->month->grid->Show(true);
     $graph->scale->year->grid->SetColor('gray');
     $graph->scale->year->grid->Show(true);
     // Setup a horizontal grid
     $graph->hgrid->Show();
     $graph->hgrid->SetRowFillColor('darkblue@0.9');
     // Setup activity info
     // For the titles we also add a minimum width of 100 pixels for the Task name column
     $graph->scale->actinfo->SetColTitles(array('Tipo', 'Estado', 'Responsable', 'Duracion', 'Inicio', 'Fin'), array(40, 100));
     $graph->scale->actinfo->SetBackgroundColor('green:0.5@0.5');
     $graph->scale->actinfo->SetFont(FF_ARIAL, FS_NORMAL, 10);
     $data = array();
     $dataset = $this->dataSource->getDataset();
     $tamanioDataset = count($dataset);
     $fechaInicio = 0;
     $fechaFin = 0;
     for ($i = 0; $i < $tamanioDataset; $i++) {
         if ($i == 0) {
             $fechaInicio = $dataset[$i]['fecha_reg'];
         }
         /*
         if($dataset[$i]['nombre_estado']=='En_Proceso'||$dataset[$i]['nombre_estado']=='Habilitado para pagar'||$dataset[$i]['nombre_estado']=='En Pago'){
         		$milestone = new MileStone($i,$dataset[$i]['nombre_estado'],$dataset[$i]['fecha_reg'],$dataset[$i]['fecha_reg']);
         		$milestone->title->SetColor("black");
         		$milestone->title->SetFont(FF_FONT1,FS_BOLD);
         		$graph->Add($milestone);
         		continue;
         }
         */
         $actividad = array();
         array_push($actividad, $i);
         if ($i == $tamanioDataset - 1) {
             $fechaFin = $dataset[$i]['fecha_reg'];
         } else {
             $fechaFin = $dataset[$i + 1]['fecha_reg'];
         }
         $startLiteral = new DateTime($dataset[$i]['fecha_reg']);
         $endLiteral = new DateTime($fechaFin);
         $start = strtotime($dataset[$i]['fecha_reg']);
         $end = strtotime($fechaFin);
         $days_between = round(($end - $start) / 86400);
         $cabecera = array($dataset[$i]['proceso'], $dataset[$i]['estado'], $dataset[$i]['funcionario'] != '-' ? $dataset[$i]['func'] : $dataset[$i]['depto'], "{$days_between}" . ' dias', $startLiteral->format('d M Y'), $endLiteral->format('d M Y'));
         array_push($actividad, $cabecera);
         array_push($actividad, $dataset[$i]['fecha_reg']);
         array_push($actividad, $fechaFin);
         array_push($actividad, FF_ARIAL);
         array_push($actividad, FS_NORMAL);
         array_push($actividad, 8);
         array_push($data, $actividad);
     }
     // Create the bars and add them to the gantt chart
     for ($i = 0; $i < count($data); $i++) {
         $bar = new GanttBar($data[$i][0], $data[$i][1], $data[$i][2], $data[$i][3], "[100%]", 10);
         if (count($data[$i]) > 4) {
             $bar->title->SetFont($data[$i][4], $data[$i][5], $data[$i][6]);
         }
         $bar->SetPattern(BAND_RDIAG, "yellow");
         $bar->SetFillColor("gray");
         $bar->progress->Set(1);
         $bar->progress->SetPattern(GANTT_SOLID, "darkgreen");
         $graph->Add($bar);
     }
     //$graph->SetDateRange($fechaInicio,$fechaFin);
     $archivo = dirname(__FILE__) . '/../../../reportes_generados/' . $filename;
     //$graph->StrokeCSIM();
     //exit;
     $graph->Stroke($archivo);
 }
예제 #5
0
 private function createGanttGraph($dataorder, $datalabel, $datastart, $dataende, $datamilestone, $dataprogress, $scale, $title, $constraitkey, $constraitvalue, $constrait, $startdate, $enddate)
 {
     // Create the graph.
     $graph = new GanttGraph($this->width, $this->height, "auto");
     $graph->scale->actinfo->SetColTitles(array('Paket'), array(30));
     //        $icon = new IconPlot( dirname(__FILE__).'/../../themes/basic/gfx/logorisklogiq.png', 0.65,0.90,1 ,40);
     //        $icon->SetAnchor( 'left', 'bottom');
     //        $graph->Add( $icon);
     $todaydate = new DateTime();
     $vline = new GanttVLine($todaydate->format("Y-m-d"), "Today");
     $graph->Add($vline);
     if ($startdate == NULL) {
         $myDate = new DateTime();
         $startdate = $myDate->format("Y-m-d");
     }
     if ($enddate == NULL) {
         $my2Date = new DateTime($startdate);
         $my2Date->modify("30days");
         $enddate = $my2Date->format("Y-m-d");
     }
     $graph->SetDateRange($startdate, $enddate);
     $graph->title->Set($title);
     $graph->title->SetFont(FF_FONT1, FS_BOLD);
     $graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH);
     $graph->scale->week->setStyle(WEEKSTYLE_FIRSTDAY);
     $graph->scale->month->setStyle(MONTHSTYLE_SHORTNAMEYEAR2);
     // Setup a horizontal grid
     $graph->hgrid->Show();
     $graph->hgrid->SetRowFillColor('darkblue@0.93');
     if ($this->shadow) {
         $graph->SetShadow();
     }
     $mapper = array();
     $mydata = array();
     $progress = array();
     $color = array();
     $ii = 0;
     foreach ($this->dataorder as $dorder) {
         if ($datamilestone[$ii] == 0) {
             $mapper[$dataorder[$ii]] = $ii;
             array_push($mydata, array($ii, ACTYPE_NORMAL, $datalabel[$ii], $datastart[$ii], $dataende[$ii], ' '));
             array_push($progress, array($ii, $dataprogress[$ii] / 100));
             array_push($color, array($ii, 'gray'));
         } else {
             $mapper[$dataorder[$ii]] = $ii;
             array_push($mydata, array($ii, ACTYPE_MILESTONE, $datalabel[$ii], $datastart[$ii], $datalabel[$ii]));
         }
         $ii++;
     }
     $myconstrait = array();
     $ii = 0;
     foreach ($constraitkey as $dorder) {
         array_push($myconstrait, array($mapper[$constraitvalue[$ii]], $mapper[$constraitkey[$ii]], $constrait[$ii]));
         $ii++;
     }
     //print_r($myconstrait);
     //print_r($mydata);
     $graph->CreateSimple($mydata, $myconstrait, $progress, $color);
     return $graph;
 }
예제 #6
0
function gantt_chart($p_metrics, $p_title, $p_subtitle, $p_graph_width = 300, $p_graph_height = 380)
{
    $t_graph_font = graph_get_font();
    $t_metrics = $p_metrics['metrics'];
    $t_range = $p_metrics['range'];
    // Diff in weeks of the range:
    $t_60s = 60;
    // 1 minute
    $t_60min = 60;
    // 1 hour
    $t_24h = 24;
    // 1 day
    $t_7d = 7;
    // 1 week
    $t_minute = $t_60s;
    $t_hour = $t_60min * $t_minute;
    $t_day = $t_24h * $t_hour;
    $t_week = $t_7d * $t_day;
    $t_gantt_chart_max_rows = plugin_config_get('rows_max');
    error_check(is_array($t_metrics) ? count($t_metrics) : 0, $p_title . " (" . $p_subtitle . ")");
    if (plugin_config_get('eczlibrary') == ON) {
        // DO NOTHING SINCE eczlibrary DOES NOT SUPPORT GANTT CHART
    } else {
        // A new graph with automatic size
        $graph = new GanttGraph(0, 0, "auto");
        $graph->SetShadow();
        // Add title and subtitle
        $graph->title->Set($p_title);
        $graph->title->SetFont($t_graph_font, FS_BOLD, 12);
        $graph->subtitle->Set($p_subtitle);
        // Show day, week and month scale
        $graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH);
        // Instead of week number show the date for the first day in the week
        // on the week scale
        $graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY);
        // Make the week scale font smaller than the default
        $graph->scale->week->SetFont($t_graph_font, FS_NORMAL, 8);
        // Use the short name of the month together with a 2 digit year
        // on the month scale
        $graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4);
        $graph->scale->month->SetFontColor("white");
        $graph->scale->month->SetBackgroundColor("blue");
        // Setup a horizontal grid
        $graph->hgrid->Show();
        $graph->hgrid->SetRowFillColor('darkblue@0.9');
        // Setup a vertical grid
        //   $graph->vgrid->Show();
        //Setup the divider display
        $graph->scale->divider->SetWeight(3);
        $graph->scale->divider->SetColor("darkblue");
        $graph->scale->dividerh->SetWeight(3);
        $graph->scale->dividerh->SetColor("darkblue");
        $graph->scale->dividerh->Show();
        $graph->scale->actinfo->vgrid->SetStyle('solid');
        $graph->scale->actinfo->vgrid->SetColor('darkblue');
        $graph->scale->actinfo->vgrid->Show();
        //   // Set the column headers and font
        //   $graph->scale->actinfo->SetColTitles( array('Task','Start','End'),array(100));
        //   $graph->scale->actinfo->SetFont( $t_graph_font, FS_BOLD, 10 );
        //Adding columns:
        //The following is an example: 1st element, an array of the columns,
        //  2nd element an optional array of min width of the columns (here the min width of the 2 first columns)
        //$graph->scale->actinfo->SetColTitles(
        //  array('Note','Task','Duration','Start','Finish'),array(30,100));
        //Adding a table title
        $graph->scale->tableTitle->Set("{$p_subtitle}");
        $graph->scale->tableTitle->SetFont($t_graph_font, FS_NORMAL, 8);
        $graph->scale->SetTableTitleBackground('darkblue@0.6');
        $graph->scale->tableTitle->Show();
        //           if ( null != $t_constrain ){
        //           $t_activity->SetConstrain( $t_constrain, CONSTRAIN_ENDSTART );
        //         }
        //     if ( null != $t_constrain ){
        //       $t_activity->SetConstrain( $t_constrain['row'], $t_constrain['type'] );
        //     }
        // We first need to get the list of rows, in order to know whether to
        // display the constraint or not (in case of missing referenced row)
        $t_row_list = array();
        foreach ($t_metrics as $t_metric_row) {
            $t_row_list[] = $t_metric_row[0];
        }
        foreach ($t_metrics as $t_metric_row) {
            $t_row = $t_metric_row[0] % $t_gantt_chart_max_rows;
            $t_activity_type = $t_metric_row[1];
            $t_bug_id = $t_metric_row[2];
            $t_start_date = $t_metric_row[3];
            $t_end_date = $t_metric_row[4];
            $t_extra = " {$t_bug_id}" . $t_metric_row[5];
            $t_level = $t_metric_row[6];
            $t_constraints = $t_metric_row[7];
            if (isset($t_level)) {
                $t_row_label = utf8_str_pad('', $t_level * 2, ' ') . htmlspecialchars_decode(bug_format_summary($t_bug_id, SUMMARY_FIELD));
            } else {
                $t_row_label = htmlspecialchars_decode(bug_format_summary($t_bug_id, SUMMARY_FIELD));
            }
            // Limit the label to max defined
            $t_row_label = strlen($t_row_label) > plugin_config_get('label_max') ? substr($t_row_label, 0, plugin_config_get('label_max') - 3) . '...' : $t_row_label;
            $t_activity_arr = array('left' => null, 'main' => array('row' => $t_row, 'label' => $t_row_label, 'start' => $t_start_date, 'end' => $t_end_date, 'info' => $t_extra), 'right' => null);
            if ($t_end_date < $t_range['min']) {
                // complete left bar
                //   **  | o[ ]-[ ]o
                $t_activity_arr = array('left' => array('row' => $t_row, 'label' => $t_row_label, 'start' => $t_range['min'], 'end' => $t_range['min'], 'info' => "<- " . graph_date_format($t_start_date)), 'main' => null, 'right' => array('row' => $t_row, 'label' => "", 'start' => $t_range['min'] + $t_day, 'end' => $t_range['min'] + $t_day, 'info' => "<<- [" . graph_date_format($t_start_date) . " / " . graph_date_format($t_end_date) . "]" . $t_extra));
            } else {
                if ($t_range['max'] < $t_start_date) {
                    // complete right bar
                    //   o[ ]-[ ]o | **
                    $t_activity_arr = array('left' => array('row' => $t_row, 'label' => $t_row_label, 'start' => $t_range['max'] - $t_day, 'end' => $t_range['max'] - $t_day, 'info' => ""), 'main' => null, 'right' => array('row' => $t_row, 'label' => "", 'start' => $t_range['max'], 'end' => $t_range['max'], 'info' => "[" . graph_date_format($t_start_date) . " / " . graph_date_format($t_end_date) . "] ->>" . $t_extra));
                } else {
                    if ($t_start_date < $t_range['min']) {
                        // left bar
                        //   *  | o[ ]-[    ]
                        $t_activity_arr['left'] = array('row' => $t_row, 'label' => '', 'start' => $t_range['min'], 'end' => $t_range['min'], 'info' => "<- " . graph_date_format($t_start_date));
                        $t_activity_arr['main']['start'] = $t_range['min'] + $t_day;
                        //4 * $t_day;// @TODO: what happens if duration is less than that
                    }
                    if ($t_range['max'] < $t_end_date) {
                        // right bar
                        //  [     ]-[ ]o | *
                        $t_activity_arr['main']['end'] = $t_range['max'] - $t_day;
                        //4 * $t_day;
                        $t_activity_arr['main']['info'] = "";
                        $t_activity_arr['right'] = array('row' => $t_row, 'label' => "", 'start' => $t_range['max'], 'end' => $t_range['max'], 'info' => graph_date_format($t_end_date) . " ->" . $t_extra);
                    }
                }
            }
            switch ($t_activity_type) {
                case ACTYPE_NORMAL:
                    if (null != $t_activity_arr['left']) {
                        $t_activity_left = new GanttBar($t_activity_arr['left']['row'], $t_activity_arr['left']['label'], graph_date_format($t_activity_arr['left']['start']), graph_date_format($t_activity_arr['left']['end']), $t_activity_arr['left']['info']);
                        // Add a left marker
                        $t_activity_left->leftMark->Show();
                        $t_activity_left->leftMark->SetType(MARK_FILLEDCIRCLE);
                        $t_activity_left->leftMark->SetWidth(8);
                        //                        $t_activity_left->leftMark->SetColor( 'red' );
                        $t_activity_left->leftMark->SetFillColor('red');
                        $t_activity_left->leftMark->title->Set('');
                        $t_activity_left->leftMark->title->SetFont($t_graph_font, FS_NORMAL, 8);
                        $t_activity_left->leftMark->title->SetColor('white');
                        if (null != gantt_get_resolution_date($t_bug_id)) {
                            $t_activity_left->SetPattern(BAND_RDIAG, get_status_color(bug_get_field($t_bug_id, 'status')));
                        }
                        $t_activity_left->SetFillColor(get_status_color(bug_get_field($t_bug_id, 'status')));
                    }
                    if (null != $t_activity_arr['main']) {
                        $t_activity_main = new GanttBar($t_activity_arr['main']['row'], $t_activity_arr['main']['label'], graph_date_format($t_activity_arr['main']['start']), graph_date_format($t_activity_arr['main']['end']), $t_activity_arr['main']['info']);
                        if (null != gantt_get_resolution_date($t_bug_id)) {
                            $t_activity_main->SetPattern(BAND_RDIAG, get_status_color(bug_get_field($t_bug_id, 'status')));
                        }
                        $t_activity_main->SetFillColor(get_status_color(bug_get_field($t_bug_id, 'status')));
                        $t_activity_main->title->SetFont($t_graph_font, FS_NORMAL, 8);
                        // Set the constraint if any...
                        foreach ($t_constraints as $t_constraint) {
                            // ... and if possible
                            if (in_array($t_constraint['row'], $t_row_list)) {
                                $t_activity_main->SetConstrain($t_constraint['row'], $t_constraint['type']);
                            }
                        }
                        $graph->add($t_activity_main);
                    }
                    if (null != $t_activity_arr['right']) {
                        $t_activity_right = new GanttBar($t_activity_arr['right']['row'], $t_activity_arr['right']['label'], graph_date_format($t_activity_arr['right']['start']), graph_date_format($t_activity_arr['right']['end']), $t_activity_arr['right']['info']);
                        // Add a left marker
                        $t_activity_right->rightMark->Show();
                        $t_activity_right->rightMark->SetType(MARK_FILLEDCIRCLE);
                        $t_activity_right->rightMark->SetWidth(8);
                        $t_activity_right->rightMark->SetColor('red');
                        $t_activity_right->rightMark->SetFillColor('red');
                        $t_activity_right->rightMark->title->Set('');
                        $t_activity_right->rightMark->title->SetFont($t_graph_font, FS_NORMAL, 8);
                        $t_activity_right->rightMark->title->SetColor('white');
                        if (null != gantt_get_resolution_date($t_bug_id)) {
                            $t_activity_right->SetPattern(BAND_RDIAG, get_status_color(bug_get_field($t_bug_id, 'status')));
                        }
                        $t_activity_right->SetFillColor(get_status_color(bug_get_field($t_bug_id, 'status')));
                    }
                    if (isset($t_activity_left)) {
                        $graph->add($t_activity_left);
                    }
                    if (isset($t_activity_right)) {
                        $graph->add($t_activity_right);
                    }
                    break;
                case ACTYPE_MILESTONE:
                    $t_size = 5;
                    if ($t_start_date < $t_range['min']) {
                        $t_extra = "(<-- " . graph_date_format($t_start_date) . ")" . $t_extra;
                        $t_start_date = $t_range['min'];
                        $t_size = 8;
                    } else {
                        if ($t_range['max'] < $t_start_date) {
                            $t_extra = "(--> " . graph_date_format($t_start_date) . ")" . $t_extra;
                            $t_start_date = $t_range['max'];
                            $t_size = 8;
                        }
                    }
                    $t_milestone = new MileStone($t_row, $t_row_label, graph_date_format($t_start_date), $t_extra);
                    $t_milestone->title->SetFont($t_graph_font, FS_NORMAL, 8);
                    $t_milestone->mark->SetType(MARK_FILLEDCIRCLE);
                    $t_milestone->mark->SetWidth($t_size);
                    if (5 != $t_size) {
                        $t_milestone->mark->SetFillColor('red');
                    }
                    //         foreach( $t_constraints as $t_constraint){
                    //           $t_milestone->SetConstrain( $t_constraint['row'], $t_constraint['type'] );
                    //         }
                    $graph->add($t_milestone);
                    break;
            }
        }
        // Setting the min and max date:
        $t_minmax = $graph->GetBarMinMax();
        $t_week_in_seconds = 7 * 24 * 3600;
        // 1 week offset min:
        if ($t_minmax[0] - $t_week_in_seconds > 0) {
            $t_graph_offset_min = $t_minmax[0] - $t_week_in_seconds;
        } else {
            $t_graph_offset_min = $t_minmax[0];
        }
        // 2 weeks offset max:
        $t_graph_offset_max = $t_minmax[1] + 3 * $t_week_in_seconds;
        $graph->SetDateRange(graph_date_format($t_graph_offset_min), graph_date_format($t_graph_offset_max));
        // Add a vertical line for today if in the range of GetBarMinMax() (retruns an arry ($min, $max) ):
        $t_minmax = $graph->GetBarMinMax();
        $t_now = date(config_get('short_date_format'));
        if ($t_now >= graph_date_format($t_graph_offset_min) && $t_now <= graph_date_format($t_graph_offset_max)) {
            $t_today = new GanttVLine($t_now, "Today", "darkred", 2, "solid");
            $t_today->SetDayOffset(0.5);
            $graph->add($t_today);
        }
        //       $t_today = new GanttVLine( "2011-03-01" , "" , "darkred", 2, "solid");//
        //       $t_today->SetDayOffset(0.5);
        //       $graph->add( $t_today );
        $t_gantt_chart_height = gantt_chart_get_height($graph);
        $t_legend = gantt_chart_legend(false);
        $t_legend_height = 60;
        // Display the Gantt chart
        //     $graph->Stroke();
        //--------------------------------------
        // Create a combined graph
        //--------------------------------------
        $mgraph = new MGraph();
        $mgraph->Add($graph, 0, 0);
        $mgraph->Add($t_legend, 0, $t_gantt_chart_height + $t_legend_height);
        $mgraph->Stroke();
    }
}