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.

151 lines
5.0 KiB

<?php
namespace app\Controllers;
use app\Core\Controller;
use app\Models\EventQueue;
use app\Models\Agent;
use app\Models\Classificacao;
use Exception;
class ClassificacaoController extends Controller
{
/** @var Agent $agent model de Agent */
protected $agent;
/** @var EventQueue $eventqueue model de EventQueue */
protected $eventqueue;
/** @var Classificacao $classificacao model de Classificacao */
protected $classificacao;
public function __construct()
{
$this->agent = new Agent();
$this->eventqueue = new EventQueue();
$this->classificacao = new Classificacao();
}
public function classificacaoList($queue)
{
try {
$classificacao = $this->classificacao->findClassificacaoByQueue($queue);
return $classificacao;
} catch (Exception $ex) {
$this->message($ex->getMessage());
}
return false;
}
public function classificacaoRegister($matricula, $clas_id, $clit_id, $id_bilhetes, $id_dac)
{
try {
$this->classificacao->begin();
$this->classificacao->addClassificacaoReg($matricula, $clas_id, $clit_id, $id_bilhetes, $id_dac);
$agentData = $this->agent->findAgentByMatricula($matricula);
$this->agent->updateAgent($matricula, $agentData->ramal, CONF_AGENT_STATUS_LIVRE, null, null, 1, null, 1);
$this->classificacao->commit();
return true;
} catch (Exception $ex) {
$this->classificacao->rollback();
$this->message($ex->getMessage());
}
return false;
}
public function classificacaoRegList($uniqueid)
{
try {
$classificacaoReg = $this->classificacao->findClassificacaoRegByUniqueid($uniqueid);
return $classificacaoReg;
} catch (Exception $ex) {
$this->message($ex->getMessage());
}
return false;
}
/*
* Listar classificacoes disponiveis
*/
public function agentClassificacaoList($queue)
{
try {
$classificacaoLista = $this->classificacaoList($queue);
if ($classificacaoLista) {
$strmsg = "Informe o n<EFBFBD>mero da classifica<EFBFBD><EFBFBD>o para o atendimento: \n";
$count = 1;
foreach ($classificacaoLista as $classificacao) {
$strmsg .= "{$count}. *{$classificacao->clas_descricao}* - _{$classificacao->clit_descricao}_ \n";
$count++;
}
$this->message($strmsg);
return $strmsg;
}
return false;
} catch (Exception $ex) {
$this->message($ex->getMessage());
}
return false;
}
/*
* Registrar uma classificacao
*/
public function agentClassificacaoRegister($matricula, $queue, $uniqueid, $option)
{
try {
$classificacaoLista = $this->classificacaoList($queue);
if ($classificacaoLista) {
$count = 1;
foreach ($classificacaoLista as $classificacao) {
if ($option == $count || $option == $classificacao->clas_descricao . '-' . $classificacao->clit_descricao) {
$registro = $this->classificacaoRegister($matricula, $classificacao->clas_id, $classificacao->clit_id, $uniqueid, $classificacao->id_dac);
if (!$registro) {
throw new Exception("N<EFBFBD>o foi poss<EFBFBD>vel classificar o atendimento. " . $this->message());
}
$this->message("Atendimento classificado com sucesso!");
return true;
}
$count++;
}
throw new Exception("Informe uma classifica<EFBFBD><EFBFBD>o v<EFBFBD>lida!");
}
return true;
} catch (Exception $ex) {
$this->classificacao->rollback();
$this->message($ex->getMessage());
}
return false;
}
/**
* Verificar se o agente esta pendente de classificacao
* @return string uniqueid
*/
public function agentClassificacaoPending($matricula, $queue)
{
$pendenteClassificacao = null;
$classificacaoLista = $this->classificacaoList($queue); //SE NAO EXISTIR CLASSIFICACAO NAO PRECISA CLASSIFICAR
if ($classificacaoLista) {
$eventQueue = $this->eventqueue->findEventQueueByAgent($matricula, $queue);
$uniqueid = null;
if ($eventQueue) {
$uniqueid = $eventQueue->uid2;
$classificacaoReg = $this->classificacao->findClassificacaoRegByUniqueid($uniqueid);
if (!$classificacaoReg) {
$pendenteClassificacao = $uniqueid;
}
}
}
return $pendenteClassificacao;
}
}