forked from SimplesIP/pabx-app
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.
222 lines
8.7 KiB
222 lines
8.7 KiB
<?php |
|
|
|
namespace app\Models; |
|
|
|
use app\Core\Model; |
|
|
|
/** |
|
* Clase para criacao de Querys no banco de dados. |
|
* |
|
* Todas as querys desta classe esta especificada para o uso do WhatsApp. |
|
* |
|
* @author Lucas Awade |
|
*/ |
|
class Agent extends Model |
|
{ |
|
|
|
const USUARIOS = "pbx_usuarios"; |
|
const SUPERVISOR_AGENTE = "pbx_supervisor_agentes"; |
|
const EVENTO_AGENTE = 'pbx_eventos_agentes'; |
|
const BILHETE = 'pbx_bilhetes'; |
|
const EVENTOS_DACS = 'pbx_eventos_dacs'; |
|
|
|
public function findByNumber($number) |
|
{ |
|
$this->query = "SELECT CASE WHEN(origem_destino = '$number') THEN 'CLIENT' ELSE 'AGENT' END AS phone, * " |
|
. "FROM " . self::SUPERVISOR_AGENTE . " WHERE (origem_destino = :number OR ramal = :number)"; |
|
return $this->read($this->query, ['number' => $number])->fetch(); |
|
} |
|
|
|
public function findAllAgentes($media = ['TELEGRAM', 'whatsapp'], $queue = null) |
|
{ |
|
|
|
$data = []; |
|
$this->query = "SELECT * FROM " . self::SUPERVISOR_AGENTE . " WHERE 1=1 "; |
|
$this->query .= sprintf(" AND sala_1 in(%s) ", whereIn($media)); |
|
if ($queue) { |
|
$this->query .= " AND dac = :queue "; |
|
$data['queue'] = $queue; |
|
} |
|
$ret = $this->read($this->query, $data); |
|
if ($ret) { |
|
return $ret->fetchAll(); |
|
} else { |
|
return []; |
|
} |
|
} |
|
|
|
public function findByAgent($user) |
|
{ |
|
$this->query = "SELECT * FROM " . self::USUARIOS . " WHERE apelido = :apelido;"; |
|
return $this->read($this->query, ['apelido' => $user])->fetch(); |
|
} |
|
|
|
public function findAgentByRamal($ramal) |
|
{ |
|
$this->query = "SELECT * FROM " . self::SUPERVISOR_AGENTE . " WHERE ramal = :ramal;"; |
|
return $this->read($this->query, ['ramal' => $ramal])->fetch(); |
|
} |
|
|
|
public function findAgentByMatricula($matricula) |
|
{ |
|
$this->query = "SELECT * FROM " . self::SUPERVISOR_AGENTE . " WHERE matricula = :matricula;"; |
|
return $this->read($this->query, ['matricula' => $matricula])->fetch(); |
|
} |
|
|
|
public function findAgentByQueue($queue, $status = 'LIVRE', $orderBy = null, $orderByType = 'ASC') |
|
{ |
|
$data = []; |
|
$this->query = "SELECT ramal, b.matricula, b.nome, b.apelido, penalidade, (logado - duracao) as tempo_livre, |
|
(SELECT count(*) AS atendimentos |
|
FROM " . self::BILHETE . " ab |
|
INNER JOIN " . self::EVENTOS_DACS . " bc ON ab.uniqueid = bc.uid2 |
|
WHERE bc.fila = a.dac |
|
AND bc.agente = a.matricula |
|
AND bc.evento IN(:evento) |
|
AND ab.data_bilhete = 'now') |
|
FROM " . self::SUPERVISOR_AGENTE . " a |
|
INNER JOIN " . self::USUARIOS . " b ON a.matricula = b.matricula |
|
WHERE upper(a.dac) = upper(:queue) |
|
AND a.status = upper(:status) "; |
|
|
|
$data['queue'] = $queue; |
|
$data['status'] = $status; |
|
$data['evento'] = implode(',', [ |
|
CONF_EVENT_TIMERMINO_CLIENTE, |
|
CONF_EVENT_TIMERMINO_AGENTE |
|
]); |
|
|
|
if ($orderBy && $orderByType) { |
|
$this->query .= " ORDER BY $orderBy $orderByType;"; |
|
} |
|
|
|
return $this->read($this->query, $data)->fetchAll(); |
|
} |
|
|
|
######################################## |
|
### SUPERVISOR AGENTE ### |
|
######################################## |
|
|
|
public function addAgent($matricula, $ramal, $login, $queue, $media, $chamada_classificado = 1) |
|
{ |
|
$this->query = "INSERT INTO " . self::SUPERVISOR_AGENTE . " |
|
(ramal, matricula, nome, tempo_login, modo_atendimento, dac, status, duracao, logado, status_time, disponivel_atendimento, sala_1, chamada_classificado) |
|
VALUES(:ramal, :matricula, :login, :tempo_login, :modo_atendimento, :queue, :status, :duracao, :logado, :status_time, :disponivel_atendimento, :media, :chamada_classificado);"; |
|
|
|
return $this->create($this->query, [ |
|
'matricula' => $matricula, |
|
'ramal' => $ramal, |
|
'login' => $login, |
|
'tempo_login' => 'now()', |
|
'modo_atendimento' => 'Manual', |
|
'queue' => $queue, |
|
'status' => 'LIVRE', |
|
'duracao' => 'now()', |
|
'logado' => 'now()', |
|
'status_time' => 'now()', |
|
'disponivel_atendimento' => 1, |
|
'media' => $media, |
|
'chamada_classificado' => $chamada_classificado |
|
]); |
|
} |
|
|
|
public function updateAgent($matricula, $ramal, $status = 'LIVRE', $origemDestino = null, $motivoPausa = null, $duracao = null, $uniqueid = null, $chamada_classificado = 1) |
|
{ |
|
$data = []; |
|
$this->query = "UPDATE " . self::SUPERVISOR_AGENTE . " SET logado = :logado, origem_destino = :origem_destino, status = :status, motivo_pausa = :motivo_pausa, uniqueid = :uniqueid, chamada_classificado = :chamada_classificado"; |
|
if ($duracao) { |
|
$this->query .= ", duracao = :duracao "; |
|
} |
|
$this->query .= " WHERE matricula = :matricula AND ramal = :ramal;"; |
|
|
|
$data['matricula'] = $matricula; |
|
$data['ramal'] = $ramal; |
|
$data['logado'] = 'now()'; |
|
$data['duracao'] = 'now()'; |
|
$data['origem_destino'] = $origemDestino; |
|
$data['status'] = $status; |
|
$data['motivo_pausa'] = $motivoPausa; |
|
$data['uniqueid'] = $uniqueid; |
|
$data['chamada_classificado'] = ($chamada_classificado ? '1' : '0'); |
|
return $this->update($this->query, $data); |
|
} |
|
|
|
public function updateRefreshAgent($matricula, $ramal, $duracao = false) |
|
{ |
|
$data = []; |
|
$this->query = "UPDATE " . self::SUPERVISOR_AGENTE . " SET logado = :logado "; |
|
if ($duracao) { |
|
$this->query .= ", duracao = :duracao "; |
|
$data['duracao'] = 'now()'; |
|
} |
|
$this->query .= " WHERE matricula = :matricula AND ramal = :ramal;"; |
|
|
|
$data['logado'] = 'now()'; |
|
$data['matricula'] = $matricula; |
|
$data['ramal'] = $ramal; |
|
return $this->update($this->query, $data); |
|
} |
|
|
|
public function updateSala2Agent($matricula, $ramal, $sala2 = null) |
|
{ |
|
$data = []; |
|
$this->query = "UPDATE " . self::SUPERVISOR_AGENTE . " SET sala_2 = :sala_2 WHERE matricula = :matricula AND ramal = :ramal;"; |
|
$data['sala_2'] = $sala2; |
|
$data['matricula'] = $matricula; |
|
$data['ramal'] = $ramal; |
|
return $this->update($this->query, $data); |
|
} |
|
|
|
public function deleteAgent($matricula, $ramal) |
|
{ |
|
$data = []; |
|
$this->query = "DELETE FROM " . self::SUPERVISOR_AGENTE . " WHERE matricula = :matricula AND ramal = :ramal;"; |
|
$data['matricula'] = $matricula; |
|
$data['ramal'] = $ramal; |
|
return $this->delete($this->query, $data); |
|
} |
|
|
|
public function updateLogadoAll($media = null) |
|
{ |
|
$data = []; |
|
$this->query = "UPDATE " . self::SUPERVISOR_AGENTE . " SET logado = :logado "; |
|
if ($media) { |
|
$this->query .= " WHERE sala_1 = :sala_1; "; |
|
} |
|
$data['logado'] = 'now()'; |
|
$data['sala_1'] = $media; |
|
return $this->update($this->query, $data); |
|
} |
|
|
|
######################################## |
|
### EVENTOS ### |
|
######################################## |
|
|
|
public function addEventoLoginAgent($matricula, $ramal, $idDac, $flag = 1) |
|
{ |
|
$data = []; |
|
$this->query = "INSERT INTO " . self::EVENTO_AGENTE . "(matricula, ramal, login, logoff, id_dac, flag) VALUES(:matricula, :ramal, :login, :logoff, :id_dac, :flag) "; |
|
$data['matricula'] = $matricula; |
|
$data['ramal'] = $ramal; |
|
$data['login'] = 'now()'; |
|
$data['logoff'] = 'now()'; |
|
$data['id_dac'] = $idDac; |
|
$data['flag'] = $flag; |
|
return $this->create($this->query, $data); |
|
} |
|
|
|
public function updateEventoLogoffAgent($matricula, $ramal, $dac, $flag = 2) |
|
{ |
|
$data = []; |
|
$this->query = "UPDATE " . self::EVENTO_AGENTE . " SET logoff = :logoff, flag = :flag " |
|
. "WHERE matricula = :matricula AND id_dac = :id_dac AND ramal = :ramal " |
|
. "AND login = (SELECT MAX(login) FROM pbx_eventos_agentes WHERE matricula = :matricula AND id_dac = :id_dac AND ramal= :ramal);"; |
|
|
|
$data['logoff'] = 'now()'; |
|
$data['flag'] = $flag; |
|
$data['matricula'] = $matricula; |
|
$data['id_dac'] = $dac; |
|
$data['ramal'] = $ramal; |
|
return $this->update($this->query, $data); |
|
} |
|
} |