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.

121 lines
4.7 KiB

<?php
namespace app\controllers;
use Slim\Routing\RouteCollectorProxy;
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Valitron\Validator;
use Exception;
use app\Repositories\Bilhetes;
use app\traits\Validate;
class CallController
{
static function route()
{
return function (RouteCollectorProxy $group) {
$group->post('/bilhetes', [self::class, 'listarBilhetes']);
$group->post('/eventos', [self::class, 'listarEventos']);
};
}
function listarBilhetes(Request $request, Response $response, array $args)
{
try {
$validator = new Validator();
$validator->mapFieldsRules([
'id' => ['integer', ['min', 1]],
'uniqueid' => ['string'],
'src' => ['string'],
'dst' => ['string'],
'i_date' => ['date'],
'f_date' => ['date'],
'entry' => ['string']
]);
$body = json_decode($request->getBody()->getContents(), true);
$validator = $validator->withData($body);
if (!$validator->validate()) {
$response->getBody()
->write(json_encode($validator->errors()));
return $response->withStatus(422);
}
$result = Bilhetes::getBilhetes($body);
/*$query = "SELECT
a.id_bilhetes AS id, a.calldate AS data_hora,
a.src AS origem, a.dst AS destino, a.billsec AS tempo_conversacao,
a.duration AS tempo_atendimento, a.accountcode AS id_transfer,
a.uniqueid AS uniqueid, a.userfield AS nome_audio,
a.data_bilhete AS data, a.fora_horario AS fora_horario,
a.org_id
FROM pbx_bilhetes a
WHERE a.lastapp <> 'Transferred Call' ";
foreach ($body as $k => $v) {
if ($v) {
$query .= " AND $k = :$k";
}
}
$result = Bilhetes::query($query, $data); */
if (!$result) {
$response->getBody()->write(json_encode(['status' => false, 'data' => ['message' => 'Nenhum resultado encontrado!']]));
} else {
$response->getBody()->write(json_encode(['status' => true, 'data' => $result]));
}
} catch (Exception $e) {
$response->getBody()->write(json_encode(['status' => false, 'data' => ["message" => "Nao foi possivel realizar a consulta! " . $e->getMessage()]]));
return $response->withStatus(500);
}
return $response;
}
public function listarEventos(Request $request, Response $response, array $args)
{
try {
$body = json_decode($request->getBody()->getContents(), true);
$dados = $this->validateData($request, true);
$query = "SELECT
a.id_bilhetes AS id,
a.uniqueid,
c.id AS fila_id,
b.fila,
d.nome,
d.apelido AS login,
SUBSTRING(b.agente,7,4) AS matricula,
b.evento AS evento,
b.param1 AS param1,
b.param2 AS param2,
b.param3 AS param3,
b.param4 AS param4
FROM pbx_bilhetes a
INNER JOIN pbx_eventos_dacs b ON a.uniqueid = b.uid2
INNER JOIN pbx_dacs c ON c.nome = b.fila
INNER JOIN pbx_usuarios d ON d.matricula = SUBSTRING(b.agente,7,4)
WHERE evento IN ('ABANDON','COMPLETEAGENT','COMPLETECALLER','CONNECT','ENTERQUEUE',
'EXITWITHTIMEOUT', 'TRANSBORDANDO', 'TRANSBORDADO','TRANSFER', 'TRANSFERORIG',
'COMPLETACALLER', 'COMPLETAAGENT', 'ANSWERED', 'BUSYS', 'NOANSWERS') ";
$dados['org_id'] = $body['org_id'];
$data = Bilhetes::query($query, $dados);
foreach ($dados as $k => $v) {
if ($v) {
$query .= " AND $k = :$k";
}
}
if (!$data) {
$response->getBody()->write(json_encode(['status' => false, 'data' => ['message' => 'Nenhum resultado encontrado!']]));
} else {
$response->getBody()->write(json_encode(['status' => true, 'data' => $data]));
}
} catch (Exception $e) {
$response->getBody()->write(json_encode(['status' => false, 'data' => ["message" => "Nao foi possivel realizar a consulta! " . $e->getMessage()]]));
}
return $response;
}
}