PABX da Simples IP
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

158 lines
4.9 KiB

<?php
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
/**
* Description of DashboardGraph
*
* @author victor
*/
class DashboardGraph {
private $dashboard;
private $gDateLocale;
public function __construct(AbstractDashboard $dashboard) {
$this->dashboard = $dashboard;
require 'jpgraph/jpgraph_utils.inc.php';
require 'jpgraph/jpgraph.php';
require 'jpgraph/jpgraph_line.php';
}
private function init() {
ob_clean();
$this->gDateLocale = $gDateLocale;
}
public function graphChamadasNaoAtendidas($chamadasNaoClassificadas, $ultimosXMeses = 5, $showTitle = true) {
$this->init();
$datay = array();
$datax = array();
$ts = time();
$labels = [];
$n = count($chamadasNaoClassificadas); // Number of data points
$datay[0] = 0;
$datax[0] = '-';
$labels[0] = '-';
for ($i = 0; $i < $n; ++$i) {
$datax[$i + 1] = $chamadasNaoClassificadas[$i]['timestamp'];
$datay[$i + 1] = $chamadasNaoClassificadas[$i]['total'];
$labels[$i + 1] = $chamadasNaoClassificadas[$i]['data'];
}
$datay[count($datay)] = max($datay) + min($datay);
$datax[count($datax)] = '-';
$labels[count($labels)] = '-';
$ydata = array_values($datay);
$width = (70 * $ultimosXMeses) + 100;
$height = 250;
$graph = new Graph($width, $height);
$graph->SetScale('intlin');
$graph->SetMargin(40, 20, 20, 40);
$graph->SetAxisStyle(AXSTYLE_SIMPLE);
$graph->SetScale("textlin");
$graph->xaxis->SetTickLabels(array_values($labels));
if ($showTitle) {
$graph->title->Set('Chamadas n<EFBFBD>o classificadas');
}
//$graph->subtitle->Set('(<EFBFBD>ltimos ' . $ultimosXMeses . ' meses)');
if ($this->dashboard->getIsAgente()) {
$graph->xaxis->title->Set($this->dashboard->getNome() . ' - ' . $this->dashboard->getRamalMonitorAgente());
}
$graph->yaxis->title->Set('N<EFBFBD> de Chamadas');
$lineplot = new LinePlot($ydata);
$graph->Add($lineplot);
echo $graph->Stroke();
}
/**
*
* @param array $dadosDacs
* @param string $type AccBarPlot|GroupBarPlot
* @return string
*/
public function graphDacs($dadosDacs, $type = 'GroupBarPlot') {
require_once ('jpgraph/jpgraph_bar.php');
$this->init();
if (empty($dadosDacs)) {
return "";
}
$xTitle = "Chamadas por Fila";
if ($this->dashboard->getIsAgente()) {
$dacs = array_column($dadosDacs, 'dac');
$dac = array_search($this->dashboard->getDacAtual(), $dacs);
if (!$dac) {
$dac = array_search($this->dashboard->getDacPadrao(), $dacs);
}
$xTitle = ($this->dashboard->getNome() . ' - ' . $this->dashboard->getRamalMonitorAgente());
$dadosDacs = array($dadosDacs[$dac]);
$atendidas = $dadosDacs[0]['atendidas'];
$originadas = $dadosDacs[0]['originadas'];
$abandonadas = $dadosDacs[0]['abandonadas'];
$count = 5;
} else {
$count = count($dadosDacs);
$atendidas = array_column($dadosDacs, 'atendidas');
$originadas = array_column($dadosDacs, 'originadas');
$abandonadas = array_column($dadosDacs, 'abandonadas');
}
$width = (70 * $count) + 100;
$height = 450;
$graph = new Graph($width, $height, 'auto', 5);
$graph->SetScale('textlin');
$graph->SetShadow();
$lbl = array_column($dadosDacs, 'dac');
$graph->xaxis->SetTickLabels($lbl);
if (count($dadosDacs) > 1) {
$graph->xaxis->SetLabelAngle(25);
}
$graph->SetMargin(40, 20, 0, 40);
$graph->title->Set($xTitle);
$graph->subtitle->Set('Atualizado em ' . date('d/m/Y H:i'));
$plotAtendidas = new BarPlot($atendidas);
$plotAtendidas->SetFillColor('green');
$plotAtendidas->SetLegend("Atendidas");
$plotOriginadas = new BarPlot($originadas);
$plotOriginadas->SetFillColor('blue');
$plotOriginadas->SetLegend("Originadas");
$plotAbandonadas = new BarPlot($abandonadas);
$plotAbandonadas->SetFillColor('orange');
$plotAbandonadas->SetLegend("Abandonadas");
$gbplot = new $type(array($plotAtendidas, $plotOriginadas, $plotAbandonadas));
if (strtolower($type) === strtolower('AccBarPlot')) {
$gbplot->value->SetFormatCallback([$this, 'intval']);
}
$graph->Add($gbplot);
$graph->legend->SetPos(0.5, 0.98, 'center', 'bottom');
echo $graph->Stroke();
}
public function intval($aVal) {
return number_format(intval($aVal));
}
}