From 8c7764ed5d80d22098529a2bdefc17c9502f5819 Mon Sep 17 00:00:00 2001 From: lmarcouiller Date: Mon, 8 Mar 2021 12:18:55 +0100 Subject: [PATCH] Move of 2 graph in boxes --- .../core/boxes/box_nb_ticket_last_x_days.php | 220 ++++++++++++++++++ htdocs/core/boxes/box_ticket_by_severity.php | 217 +++++++++++++++++ htdocs/core/modules/modTicket.class.php | 4 +- .../install/mysql/migration/13.0.0-14.0.0.sql | 3 + htdocs/langs/en_US/ticket.lang | 16 +- htdocs/ticket/index.php | 201 ---------------- 6 files changed, 452 insertions(+), 209 deletions(-) create mode 100644 htdocs/core/boxes/box_nb_ticket_last_x_days.php create mode 100644 htdocs/core/boxes/box_ticket_by_severity.php diff --git a/htdocs/core/boxes/box_nb_ticket_last_x_days.php b/htdocs/core/boxes/box_nb_ticket_last_x_days.php new file mode 100644 index 00000000000..96928c796f8 --- /dev/null +++ b/htdocs/core/boxes/box_nb_ticket_last_x_days.php @@ -0,0 +1,220 @@ + + * 2016 Christophe Battarel + * Copyright (C) 2019 Frédéric France + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file core/boxes/box_nb_ticket_last_x_days.php + * \ingroup ticket + * \brief This box shows the number of new daily tickets the last X days + */ +require_once DOL_DOCUMENT_ROOT."/core/boxes/modules_boxes.php"; + +/** + * Class to manage the box + */ +class box_nb_ticket_last_x_days extends ModeleBoxes +{ + + public $boxcode = "box_nb_ticket_last_x_days"; + public $boximg = "ticket"; + public $boxlabel; + public $depends = array("ticket"); + + /** + * @var DoliDB Database handler. + */ + public $db; + + public $param; + public $info_box_head = array(); + public $info_box_contents = array(); + + /** + * Constructor + * @param DoliDB $db Database handler + * @param string $param More parameters + */ + public function __construct($db, $param = '') + { + global $langs; + $langs->load("boxes"); + $this->db = $db; + + $this->boxlabel = $langs->transnoentitiesnoconv("BoxTicketSeverity"); + } + + /** + * Load data into info_box_contents array to show array later. + * + * @param int $max Maximum number of records to load + * @return void + */ + public function loadBox($max = 5) + { + global $conf, $user, $langs,$db; + + $badgeStatus0 = '#cbd3d3'; // draft + $badgeStatus1 = '#bc9526'; // validated + $badgeStatus1b = '#bc9526'; // validated + $badgeStatus2 = '#9c9c26'; // approved + $badgeStatus3 = '#bca52b'; + $badgeStatus4 = '#25a580'; // Color ok + $badgeStatus4b = '#25a580'; // Color ok + $badgeStatus5 = '#cad2d2'; + $badgeStatus6 = '#cad2d2'; + $badgeStatus7 = '#baa32b'; + $badgeStatus8 = '#993013'; + $badgeStatus9 = '#e7f0f0'; + if (file_exists(DOL_DOCUMENT_ROOT . '/theme/' . $conf->theme . '/theme_vars.inc.php')) { + include DOL_DOCUMENT_ROOT . '/theme/' . $conf->theme . '/theme_vars.inc.php'; + } + $this->max = $max; + + + $param_day = 'DOLUSERCOOKIE_ticket_last_days'; + if ($_POST[$param_day]) { + if ($_POST[$param_day] >= 15) { + $days = 14; + } else { + $days = $_POST[$param_day]; + } + } else { + $days = 7; + } + require_once DOL_DOCUMENT_ROOT."/ticket/class/ticket.class.php"; + $text = $langs->trans("BoxTicketLastXDays", $days).' ' . img_picto('', 'filter.png', 'id="idsubimgDOLUSERCOOKIE_ticket_last_days" class="linkobject"'); + $this->info_box_head = array( + 'text' => $text, + 'limit' => dol_strlen($text) + ); + $today = date_time_set(date_create(), 0, 0); + $todayformat = date('Y-m-d', date_timestamp_get($today)); + $intervaltosub = new DateInterval('P' . dol_escape_htmltag($days - 1) . 'D'); + $intervaltoadd = new DateInterval('P1D'); + $minimumdatec = date_sub($today, $intervaltosub); + $minimumdatecformated = date('Y-m-d', date_timestamp_get($minimumdatec)); + + $sql = "SELECT CAST(t.datec AS DATE) as datec, COUNT(t.datec) as nb"; + $sql .= " FROM " . MAIN_DB_PREFIX . "ticket as t"; + $sql .= " WHERE CAST(t.datec AS DATE) > DATE_SUB(CURRENT_DATE, INTERVAL " . $days . " DAY)"; + $sql .= " GROUP BY CAST(t.datec AS DATE)"; + $resql = $db->query($sql); + if ($resql) { + $num = $db->num_rows($resql); + $i = 0; + $dataseries = array(); + while ($i < $num) { + $objp = $db->fetch_object($resql); + while ($minimumdatecformated < $objp->datec) { + $dataseries[] = array('label' => dol_print_date($minimumdatecformated, 'day'), 'data' => 0); + $minimumdatec = date_add($minimumdatec, $intervaltoadd); + $minimumdatecformated = date('Y-m-d', date_timestamp_get($minimumdatec)); + } + $dataseries[] = array('label' => dol_print_date($objp->datec, 'day'), 'data' => $objp->nb); + $minimumdatec = date_add($minimumdatec, $intervaltoadd); + $minimumdatecformated = date('Y-m-d', date_timestamp_get($minimumdatec)); + $i++; + } + while (count($dataseries) < $days) { + $dataseries[] = array('label' => dol_print_date($minimumdatecformated, 'day'), 'data' => 0); + $minimumdatec = date_add($minimumdatec, $intervaltoadd); + $minimumdatecformated = date('Y-m-d', date_timestamp_get($minimumdatec)); + $i++; + } + } else { + dol_print_error($db); + } + + if ($user->rights->ticket->read) { + $stringtoshow = '
'; + $stringtoshow .= ''; + $stringtoshow .= '
'; // hideobject is to start hidden + $stringtoshow .= '
'; + $stringtoshow .= ''; + $stringtoshow .= ''; + $stringtoshow .= ''; + $stringtoshow .= ' ' . $langs->trans("Days"); + $stringtoshow .= ''; + $stringtoshow .= '
'; + $stringtoshow .= '
'; + $px1 = new DolGraph(); + $mesg = $px1->isGraphKo(); + $totalnb = 0; + if (!$mesg) { + $data = array(); + foreach ($dataseries as $value) { + $data[] = array($value['label'], $value['data']); + $totalnb += $value['data']; + } + $px1->SetData($data); + $px1->setShowLegend(2); + $px1->SetType(array('bar')); + $px1->SetLegend(array($langs->trans('NumberOfTicketByDay'))); + $px1->SetMaxValue($px1->GetCeilMaxValue()); + $px1->SetHeight(192); + $px1->SetShading(3); + $px1->SetHorizTickIncrement(1); + $px1->SetCssPrefix("cssboxes"); + $px1->mode = 'depth'; + + $px1->draw('idgraphticketlastxdays'); + $graphtoshow= $px1->show($totalnb ? 0 : 1); + } + if ($totalnb) { + $stringtoshow .= $graphtoshow; + } + $stringtoshow .= '
'; + if ($totalnb) { + $this->info_box_contents[][]=array( + 'td' => 'center', + 'text' => $stringtoshow + ); + } else { + $this->info_box_contents[0][0] = array( + 'td' => 'class="center opacitymedium"', + 'text' => $stringtoshow . $langs->trans("BoxNoTicketLastXDays", $days) + ); + } + } else { + $this->info_box_contents[0][0] = array( + 'td' => 'class="left"', + 'text' => $langs->trans("ReadPermissionNotAllowed"), + ); + } + } + + /** + * Method to show box + * + * @param array $head Array with properties of box title + * @param array $contents Array with properties of box lines + * @param int $nooutput No print, only return string + * @return string + */ + public function showBox($head = null, $contents = null, $nooutput = 0) + { + return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput); + } +} diff --git a/htdocs/core/boxes/box_ticket_by_severity.php b/htdocs/core/boxes/box_ticket_by_severity.php new file mode 100644 index 00000000000..d7b033d6f18 --- /dev/null +++ b/htdocs/core/boxes/box_ticket_by_severity.php @@ -0,0 +1,217 @@ + + * 2016 Christophe Battarel + * Copyright (C) 2019 Frédéric France + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file core/boxes/box_ticket_by_severity.php + * \ingroup ticket + * \brief This box shows open tickets by severity + */ +require_once DOL_DOCUMENT_ROOT."/core/boxes/modules_boxes.php"; + +/** + * Class to manage the box + */ +class box_ticket_by_severity extends ModeleBoxes +{ + + public $boxcode = "box_ticket_by_severity"; + public $boximg = "ticket"; + public $boxlabel; + public $depends = array("ticket"); + + /** + * @var DoliDB Database handler. + */ + public $db; + + public $param; + public $info_box_head = array(); + public $info_box_contents = array(); + + /** + * Constructor + * @param DoliDB $db Database handler + * @param string $param More parameters + */ + public function __construct($db, $param = '') + { + global $langs; + $langs->load("boxes"); + $this->db = $db; + + $this->boxlabel = $langs->transnoentitiesnoconv("BoxTicketSeverity"); + } + + /** + * Load data into info_box_contents array to show array later. + * + * @param int $max Maximum number of records to load + * @return void + */ + public function loadBox($max = 5) + { + global $conf, $user, $langs,$db; + + $badgeStatus0 = '#cbd3d3'; // draft + $badgeStatus1 = '#bc9526'; // validated + $badgeStatus1b = '#bc9526'; // validated + $badgeStatus2 = '#9c9c26'; // approved + $badgeStatus3 = '#bca52b'; + $badgeStatus4 = '#25a580'; // Color ok + $badgeStatus4b = '#25a580'; // Color ok + $badgeStatus5 = '#cad2d2'; + $badgeStatus6 = '#cad2d2'; + $badgeStatus7 = '#baa32b'; + $badgeStatus8 = '#993013'; + $badgeStatus9 = '#e7f0f0'; + if (file_exists(DOL_DOCUMENT_ROOT . '/theme/' . $conf->theme . '/theme_vars.inc.php')) { + include DOL_DOCUMENT_ROOT . '/theme/' . $conf->theme . '/theme_vars.inc.php'; + } + $this->max = $max; + + require_once DOL_DOCUMENT_ROOT."/ticket/class/ticket.class.php"; + + $text = $langs->trans("BoxTicketSeverity", $max); + $this->info_box_head = array( + 'text' => $text, + 'limit' => dol_strlen($text) + ); + + if ($user->rights->ticket->read) { + $listofopplabel = array(); + $listofoppcode = array(); + $colorseriesstat = array(); + + $sql = "SELECT cts.rowid, cts.label, cts.code"; + $sql .= " FROM " . MAIN_DB_PREFIX . "c_ticket_severity as cts"; + $sql .= " WHERE cts.active = 1"; + $sql .= $db->order('cts.rowid', 'ASC'); + $resql = $db->query($sql); + + if ($resql) { + $num = $db->num_rows($resql); + $i = 0; + while ($i < $num) { + $objp = $db->fetch_object($resql); + $listofoppcode[$objp->rowid] = $objp->code; + $listofopplabel[$objp->rowid] = $objp->label; + switch ($objp->code) { + case 'LOW': + $colorseriesstat[$objp->rowid] = $badgeStatus4; + break; + case 'NORMAL': + $colorseriesstat[$objp->rowid] = $badgeStatus2; + break; + case 'HIGH': + $colorseriesstat[$objp->rowid] = $badgeStatus1; + break; + case 'BLOCKING': + $colorseriesstat[$objp->rowid] = $badgeStatus8; + break; + default: + break; + } + $i++; + } + } else { + dol_print_error($db); + } + + $dataseries = array(); + $data = array(); + $sql = "SELECT t.severity_code, COUNT(t.severity_code) as nb"; + $sql .= " FROM " . MAIN_DB_PREFIX . "ticket as t"; + $sql .= " WHERE t.fk_statut <> 8"; + $sql .= " GROUP BY t.severity_code"; + $resql = $db->query($sql); + if ($resql) { + $num = $db->num_rows($resql); + $i = 0; + while ($i < $num) { + $objp = $db->fetch_object($resql); + $data[$objp->severity_code] = $objp->nb; + $i++; + } + foreach ($listofoppcode as $rowid => $code) { + $dataseries[] = array('label' => $langs->getLabelFromKey($db, 'TicketSeverityShort' . $code, 'c_ticket_category', 'code', 'label', $code), 'data' => $data[$code]); + } + } else { + dol_print_error($db); + } + $stringtoprint = ''; + $stringtoprint .= '
'; + if (!empty($dataseries) && count($dataseries) > 0) { + $px1 = new DolGraph(); + $mesg = $px1->isGraphKo(); + $totalnb = 0; + if (!$mesg) { + $px1->SetDataColor(array_values($colorseriesstat)); + $data = array(); + $legend = array(); + foreach ($dataseries as $value) { + $data[] = array($value['label'], $value['data']); + $totalnb += $value['data']; + } + $px1->SetData($data); + $px1->setShowLegend(2); + $px1->SetType(array('pie')); + $px1->SetLegend($legend); + $px1->SetMaxValue($px1->GetCeilMaxValue()); + $px1->SetHeight($HEIGHT); + $px1->SetShading(3); + $px1->SetHorizTickIncrement(1); + $px1->SetCssPrefix("cssboxes"); + $px1->mode = 'depth'; + + $px1->draw('idgraphticketseverity'); + $stringtoprint .= $px1->show($totalnb ? 0 : 1); + } + $stringtoprint .= '
'; + $this->info_box_contents[][]=array( + 'td' => 'center', + 'text' => $stringtoprint + ); + } else { + $this->info_box_contents[0][0] = array( + 'td' => 'class="center opacitymedium"', + 'text' => $langs->trans("BoxNoTicketSeverity") + ); + } + } else { + $this->info_box_contents[0][0] = array( + 'td' => 'class="left"', + 'text' => $langs->trans("ReadPermissionNotAllowed"), + ); + } + } + + /** + * Method to show box + * + * @param array $head Array with properties of box title + * @param array $contents Array with properties of box lines + * @param int $nooutput No print, only return string + * @return string + */ + public function showBox($head = null, $contents = null, $nooutput = 0) + { + return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput); + } +} diff --git a/htdocs/core/modules/modTicket.class.php b/htdocs/core/modules/modTicket.class.php index 6ba5c4ae972..01c58b917fb 100644 --- a/htdocs/core/modules/modTicket.class.php +++ b/htdocs/core/modules/modTicket.class.php @@ -143,7 +143,9 @@ class modTicket extends DolibarrModules // Add here list of php file(s) stored in core/boxes that contains class to show a box. $this->boxes = array( 0=>array('file'=>'box_last_ticket.php', 'enabledbydefaulton'=>'Home'), - 1=>array('file'=>'box_last_modified_ticket.php', 'enabledbydefaulton'=>'Home') + 1=>array('file'=>'box_last_modified_ticket.php', 'enabledbydefaulton'=>'Home'), + 2=>array('file'=>'box_ticket_by_severity.php', 'enabledbydefaulton'=>'ticketindex'), + 3=>array('file'=>'box_nb_ticket_last_x_days.php', 'enabledbydefaulton'=>'ticketindex') ); // Boxes list // Permissions diff --git a/htdocs/install/mysql/migration/13.0.0-14.0.0.sql b/htdocs/install/mysql/migration/13.0.0-14.0.0.sql index 7f8f3c9aba7..49733b50421 100644 --- a/htdocs/install/mysql/migration/13.0.0-14.0.0.sql +++ b/htdocs/install/mysql/migration/13.0.0-14.0.0.sql @@ -256,3 +256,6 @@ UPDATE llx_payment_salary as ps SET ps.fk_salary = ps.rowid WHERE ps.fk_salary I UPDATE llx_payment_salary as ps SET ps.ref = ps.rowid WHERE ps.ref IS NULL; ALTER TABLE llx_salary CHANGE paye paye smallint default 0 NOT NULL; + +-- VMYSQL4.1 INSERT INTO llx_boxes_def (file, entity) SELECT 'box_ticket_by_severity.php', 1 FROM DUAL WHERE NOT EXISTS (SELECT * FROM llx_boxes_def WHERE file = 'box_ticket_by_severity.php' AND entity = 1); +-- VMYSQL4.1 INSERT INTO llx_boxes_def (file, entity) SELECT 'box_nb_ticket_last_x_days.php', 1 FROM DUAL WHERE NOT EXISTS (SELECT * FROM llx_boxes_def WHERE file = 'box_nb_ticket_last_x_days.php' AND entity = 1); diff --git a/htdocs/langs/en_US/ticket.lang b/htdocs/langs/en_US/ticket.lang index aa6cd658129..17ffbab6255 100644 --- a/htdocs/langs/en_US/ticket.lang +++ b/htdocs/langs/en_US/ticket.lang @@ -145,13 +145,6 @@ OrderByDateAsc=Sort by ascending date OrderByDateDesc=Sort by descending date ShowAsConversation=Show as conversation list MessageListViewType=Show as table list -ChartTicketType=Number of tickets by type -ChartTicketSeverity=Number of tickets by severity -ChartTicketLastXDays=Number of new tickets by days the last %s days -NumberOfTicketByDay=Number of new tickets by day -ChartNewTicketVSClose=Number of today's new tickets versus today's closed tickets -TicketCreatedToday=Ticket created today -TicketClosedToday=Ticket closed today # # Ticket card @@ -309,3 +302,12 @@ BoxLastModifiedTicket=Latest modified tickets BoxLastModifiedTicketDescription=Latest %s modified tickets BoxLastModifiedTicketContent= BoxLastModifiedTicketNoRecordedTickets=No recent modified tickets +ChartTicketType=Number of open tickets by type +BoxTicketSeverity=Number of open tickets by severity +BoxNoTicketSeverity=No tickets opened +BoxTicketLastXDays=Number of new tickets by days the last %s days +BoxNoTicketLastXDays=No new tickets the last %s days +NumberOfTicketByDay=Number of new tickets by day +ChartNewTicketVSClose=Number of today's new tickets versus today's closed tickets +TicketCreatedToday=Ticket created today +TicketClosedToday=Ticket closed today \ No newline at end of file diff --git a/htdocs/ticket/index.php b/htdocs/ticket/index.php index 8f278b91367..79d55fdcff5 100644 --- a/htdocs/ticket/index.php +++ b/htdocs/ticket/index.php @@ -279,207 +279,6 @@ print ''; // Build graphic number of object $data = $stats->getNbByMonthWithPrevYear($endyear, $startyear); -/* - * Chart of Ticket by Severity - */ - -$listofopplabel = array(); -$listofoppcode = array(); -$colorseriesstat = array(); - -$sql = "SELECT cts.rowid, cts.label, cts.code"; -$sql .= " FROM " . MAIN_DB_PREFIX . "c_ticket_severity as cts"; -$sql .= " WHERE cts.active = 1"; -$sql .= $db->order('cts.rowid', 'ASC'); -$resql = $db->query($sql); - -if ($resql) { - $num = $db->num_rows($resql); - $i = 0; - while ($i < $num) { - $objp = $db->fetch_object($resql); - $listofoppcode[$objp->rowid] = $objp->code; - $listofopplabel[$objp->rowid] = $objp->label; - switch ($objp->code) { - case 'LOW': - $colorseriesstat[$objp->rowid] = $badgeStatus4; - break; - case 'NORMAL': - $colorseriesstat[$objp->rowid] = $badgeStatus2; - break; - case 'HIGH': - $colorseriesstat[$objp->rowid] = $badgeStatus1; - break; - case 'BLOCKING': - $colorseriesstat[$objp->rowid] = $badgeStatus8; - break; - default: - break; - } - $i++; - } -} else { - dol_print_error($db); -} - -$dataseries = array(); -$data = array(); -$sql = "SELECT t.severity_code, COUNT(t.severity_code) as nb"; -$sql .= " FROM " . MAIN_DB_PREFIX . "ticket as t"; -$sql .= " WHERE t.fk_statut <> 8"; -$sql .= " GROUP BY t.severity_code"; -$resql = $db->query($sql); -if ($resql) { - $num = $db->num_rows($resql); - $i = 0; - while ($i < $num) { - $objp = $db->fetch_object($resql); - $data[$objp->severity_code] = $objp->nb; - $i++; - } - foreach ($listofoppcode as $rowid => $code) { - $dataseries[] = array('label' => $langs->getLabelFromKey($db, 'TicketSeverityShort' . $code, 'c_ticket_category', 'code', 'label', $code), 'data' => $data[$code]); - } -} else { - dol_print_error($db); -} -$transChartTicketSeverity = $langs->trans('ChartTicketSeverity'); -print '
'; -print ''; -print ''; -print ''; -print "
' . $transChartTicketSeverity . '
'; -if (!empty($dataseries) && count($dataseries) > 0) { - $px1 = new DolGraph(); - $mesg = $px1->isGraphKo(); - $totalnb = 0; - if (!$mesg) { - $px1->SetDataColor(array_values($colorseriesstat)); - $data = array(); - $legend = array(); - foreach ($dataseries as $value) { - $data[] = array($value['label'], $value['data']); - $totalnb += $value['data']; - } - $px1->SetData($data); - $px1->setShowLegend(2); - $px1->SetType(array('pie')); - $px1->SetLegend($legend); - $px1->SetMaxValue($px1->GetCeilMaxValue()); - $px1->SetHeight($HEIGHT); - $px1->SetShading(3); - $px1->SetHorizTickIncrement(1); - $px1->SetCssPrefix("cssboxes"); - $px1->mode = 'depth'; - - $px1->draw('idgraphticketseverity'); - print $px1->show($totalnb ? 0 : 1); - } -} - -print '
"; -print '
'; - -/* - * Graph of nb daily Tickets the last X days - */ - -$param_day = 'DOLUSERCOOKIE_ticket_last_days'; -if ($_POST[$param_day]) { - if ($_POST[$param_day] >= 15) { - $days = 14; - } else { - $days = $_POST[$param_day]; - } -} else { - $days = 7; -} -$today = date_time_set(date_create(), 0, 0); -$intervaltosub = new DateInterval('P' . dol_escape_htmltag($days - 1) . 'D'); -$intervaltoadd = new DateInterval('P1D'); -$minimumdatec = date_sub($today, $intervaltosub); -$minimumdatecformated = date('Y-m-d', date_timestamp_get($minimumdatec)); - -$sql = "SELECT CAST(t.datec AS DATE) as datec, COUNT(t.datec) as nb"; -$sql .= " FROM " . MAIN_DB_PREFIX . "ticket as t"; -$sql .= " WHERE CAST(t.datec AS DATE) > DATE_SUB(CURRENT_DATE, INTERVAL " . $days . " DAY)"; -$sql .= " GROUP BY CAST(t.datec AS DATE)"; -$resql = $db->query($sql); -if ($resql) { - $num = $db->num_rows($resql); - $i = 0; - $dataseries = array(); - while ($i < $num) { - $objp = $db->fetch_object($resql); - while ($minimumdatecformated < $objp->datec) { - $dataseries[] = array('label' => dol_print_date($minimumdatecformated, 'day'), 'data' => 0); - $minimumdatec = date_add($minimumdatec, $intervaltoadd); - $minimumdatecformated = date('Y-m-d', date_timestamp_get($minimumdatec)); - } - $dataseries[] = array('label' => dol_print_date($objp->datec, 'day'), 'data' => $objp->nb); - $minimumdatec = date_add($minimumdatec, $intervaltoadd); - $minimumdatecformated = date('Y-m-d', date_timestamp_get($minimumdatec)); - $i++; - } -} else { - dol_print_error($db); -} - -$stringtoshow = ''; -$stringtoshow .= '
'; // hideobject is to start hidden -$stringtoshow .= '
'; -$stringtoshow .= ''; -$stringtoshow .= ''; -$stringtoshow .= ''; -$stringtoshow .= ' ' . $langs->trans("Days"); -$stringtoshow .= ''; -$stringtoshow .= '
'; -$stringtoshow .= '
'; - -print '
'; -print ''; -print ''; - -print ''; -print "
' . $langs->trans('ChartTicketLastXDays', $days) . ' ' . img_picto('', 'filter.png', 'id="idsubimgDOLUSERCOOKIE_ticket_last_days" class="linkobject"') . '
'; - -print $stringtoshow; - -$px1 = new DolGraph(); -$mesg = $px1->isGraphKo(); -$totalnb = 0; -if (!$mesg) { - //$px1->SetDataColor(array_values($colorseriesstat)); - $data = array(); - foreach ($dataseries as $value) { - $data[] = array($value['label'], $value['data']); - $totalnb += $value['data']; - } - $px1->SetData($data); - $px1->setShowLegend(2); - $px1->SetType(array('bar')); - $px1->SetLegend(array($langs->trans('NumberOfTicketByDay'))); - $px1->SetMaxValue($px1->GetCeilMaxValue()); - $px1->SetHeight($HEIGHT); - $px1->SetShading(3); - $px1->SetHorizTickIncrement(1); - $px1->SetCssPrefix("cssboxes"); - $px1->mode = 'depth'; - - $px1->draw('idgraphticketlastxdays'); - print $px1->show($totalnb ? 0 : 1); -} - - -print '
"; -print '
'; - print '
';