Untitled
unknown
plain_text
a year ago
138 kB
4
Indexable
<?php
namespace app\modules\supravizio\controllers;
use app\models\DcfAnexos;
use app\models\DcfContratosInstrumentos;
use app\models\DmsAnexos;
use DateTime;
use GuzzleHttp\Exception\InvalidArgumentException;
use yii\filters\auth\CompositeAuth;
use yii\filters\auth\HttpBasicAuth;
use yii\filters\auth\QueryParamAuth;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\ClientException;
use GuzzleHttp\Psr7;
use yii\filters\VerbFilter;
use \kartik\mpdf\Pdf;
use GuzzleHttp\HandlerStack;
use GuzzleHttp\Handler\CurlMultiHandler;
use MicrosoftAzure\Storage\Blob\BlobRestProxy;
use MicrosoftAzure\Storage\Blob\Models\CreateBlockBlobOptions;
use Ramsey\Uuid\Uuid;
use yii\filters\auth\HttpBearerAuth;
use Yii;
use yii\web\BadRequestHttpException;
use yii\web\Response;
use yii\rest\Controller;
use yii\rest\ActiveController;
class SupraController extends Controller
{
public function behaviors()
{
$behaviors = parent::behaviors();
$behaviors['contentNegotiator']['formats']['text/html'] = Response::FORMAT_JSON;
$behaviors['authenticator'] = [
'class' => CompositeAuth::class,
'authMethods' => [
HttpBearerAuth::class,
],
];
$behaviors['verbs'] = [
'class' => VerbFilter::className(),
'actions' => [],
];
return $behaviors;
}
public function actionRelacionaFornecedor()
{
Yii::$app->response->format = Response::FORMAT_JSON;
$request = Yii::$app->getRequest();
if ($request->isPost) {
// Tenta obter os dados da requisição POST
$dados = Yii::$app->request->post();
if (isset($dados)) {
if (is_array($dados)) {
// abre o primeiro array
foreach ($dados as $v) {
// Usar parâmetros vinculados para prevenir injeção de SQL
$dgco = filter_var($v['DGCO'], FILTER_SANITIZE_SPECIAL_CHARS);
$dgco_fornecedor = filter_var($v['DGFORNECEDOR'], FILTER_SANITIZE_SPECIAL_CHARS);
// Validação
if (!preg_match('/^\d{5}\/\d{4}$/', $dgco)) {
return [
'status' => 'error',
'message' => "Parâmetro 'DGCO' inválido."
];
}
if (!preg_match('/^\d{5}\/\d{4}$/', $dgco_fornecedor)) {
return [
'status' => 'error',
'message' => "Parâmetro 'DGFORNECEDOR' inválido."
];
}
Yii::$app->db->createCommand(
"INSERT INTO tmp_tb_contrato_fornecedores_rel (dgco, dgco_fornecedor) VALUES (:dgco, :dgco_fornecedor)"
)->bindValues([
':dgco' => $dgco,
':dgco_fornecedor' => $dgco_fornecedor
])->execute();
}
return ['dados' => $dados];
} else {
return [
'status' => 'error',
'message' => 'Os dados recebidos não são um array.'
];
}
} else {
// Se a string JSON não foi recebida, retornar um erro
return [
'status' => 'error',
'message' => 'Nenhuma string JSON recebida.'
];
}
} else {
return [
'error' => 'Método não permitido. Apenas POST é permitido neste endpoint.',
'requisicao' => $request->method
];
}
}
public function actionListaDesignacaoFornecedor()
{
Yii::$app->response->format = Response::FORMAT_JSON;
$request = Yii::$app->getRequest();
if ($request->isGet) {
// Tenta obter os dados da requisição POST
$dados = Yii::$app->db->createCommand("SELECT dcf_contratos_designacoes.*, dcf_contratos.gescon_nm_dgco as dgco,
dcf_contratos.gescon_ds_objeto as objeto,
dcf_contratos.dt_inicio_vigencia,dcf_contratos.dt_fim_vigencia,
DATEDIFF(CURRENT_DATE, dcf_contratos.dt_inicio_vigencia) AS dias_desde_inicio,DATEDIFF(dcf_contratos.dt_fim_vigencia,CURRENT_DATE) AS dias_para_fim ,dcf_contratos.gescon_nm_razao_social as nome_fornecedor
FROM dicocdb.dcf_contratos_designacoes
left join dicocdb.dcf_contratos on dcf_contratos.id_contrato_fornecedor=dcf_contratos_designacoes.tb_contratos_fornecedor_id
where dcf_contratos_designacoes.status='Vigente' and dcf_contratos.gescon_ds_status IN('CONTRATO_VIGENTE','AGUARDANDO_DESIGNACAO','AGUARDANDO_SUBSIDIOS_DEMANDANTE','CONTRATO_VIGENTE','DESIGNADO','EM_RENOVACAO','NAO_SERA_RENOVADO') and gescon_nm_dgco is not null and tipo_designacao IN('FISCALIZACAO_SERVICO','FISCALIZACAO_ADMINISTRATIVA','FISCALIZACAO_MASTER')AND titular_ou_suplente='titular';")->queryAll();
return json_encode($dados);
} else {
return [
'error' => 'Método não permitido. Apenas POST é permitido neste endpoint.',
'requisicao' => $request->method,
];
}
}
public function actionBuscarDesignacao(int $matricula)
{
Yii::$app->response->format = Response::FORMAT_JSON;
$request = Yii::$app->getRequest();
if ($request->isGet) {
// Tenta obter os dados da requisição POST
$dados = Yii::$app->db->createCommand("
SELECT contrato.*, designacao.*, designacao_gestor.matricula_colaborador AS matricula_gestor_titular, designacao_gestor.nome_colaborador AS nome_gestor_titular
FROM dcf_contratos_designacoes designacao
LEFT JOIN dcf_contratos contrato ON contrato.id_contrato_fornecedor = designacao.tb_contratos_fornecedor_id
LEFT JOIN dcf_contratos_designacoes designacao_gestor ON (designacao_gestor.tipo_designacao = 'GESTAO_CONTRATO' AND designacao_gestor.status = 'VIGENTE' AND designacao_gestor.titular_ou_suplente = 'titular' and contrato.id_contrato_fornecedor = designacao_gestor.tb_contratos_fornecedor_id)
WHERE ((((designacao.tipo_designacao = 'GESTAO_CONTRATO' AND designacao.titular_ou_suplente = 'suplente')
OR (designacao.tipo_designacao <> 'GESTAO_CONTRATO' AND designacao.tipo_designacao <> 'FISCALIZACAO_ADMINISTRATIVA'))
AND designacao.status = 'vigente') AND designacao.matricula_colaborador = $matricula)
AND (contrato.gescon_ds_status IN ('CONTRATO_VIGENTE', 'EM_RENOVACAO', 'AGUARDANDO_SUBSIDIOS_DEMANDANTE', 'NAO_SERA_RENOVADO') AND contrato.gescon_ds_serv_fisc_comissao = 'N')
GROUP BY id_contrato_fornecedor;
")
->queryAll();
return json_encode($dados);
} else {
return [
'error' => 'Método não permitido. Ausência de dados na requisicao ao endpoint.',
'requisicao' => $request->method,
];
}
}
public function actionBuscarDesignacoesPorDgco(string $dgco, int $matricula)
{
Yii::$app->response->format = Response::FORMAT_JSON;
$dgco = filter_var($dgco, FILTER_SANITIZE_SPECIAL_CHARS);
// Validação
if (!preg_match('/^\d{5}\/\d{4}$/', $dgco)) {
throw new InvalidArgumentException("Parâmetro 'dgco' inválido.");
}
$request = Yii::$app->getRequest();
if ($request->isGet) {
// Tenta obter os dados da requisição POST
$command = Yii::$app->db->createCommand("
SELECT
contrato.gescon_nm_dgco AS dgco,
contrato.gescon_ds_objeto AS objeto,
contrato.gescon_nm_razao_social AS fornecedor,
ds_fs_titular.nome_colaborador AS fiscal_servico_titular,
ds_fs_titular.matricula_colaborador AS matricula_fiscal_servico_titular,
ds_fs_suplente.nome_colaborador AS fiscal_servico_suplente,
ds_fs_suplente.matricula_colaborador AS matricula_fiscal_servico_suplente,
ds_fa_titular.nome_colaborador AS fiscal_administrativo_titular,
ds_fa_titular.matricula_colaborador AS matricula_fiscal_administrativo_titular,
ds_fa_suplente.nome_colaborador AS fiscal_administrativo_suplente,
ds_fa_suplente.matricula_colaborador AS matricula_fiscal_administrativo_suplente,
ds_an_titular.nome_colaborador AS analista_titular,
ds_an_titular.matricula_colaborador AS matricula_analista_titular,
ds_an_suplente.nome_colaborador AS analista_suplente,
ds_an_suplente.matricula_colaborador AS matricula_analista_suplente,
ds_gs_titular.nome_colaborador AS gestor_titular,
ds_gs_titular.matricula_colaborador AS matricula_gestor_titular,
ds_gs_suplente.nome_colaborador AS gestor_suplente,
ds_gs_suplente.matricula_colaborador AS matricula_gestor_suplente,
ultima.tipo_designacao,
ultima.titular_ou_suplente,
ultima.id as id_designacao,
MD5(CONCAT_WS(
'',
contrato.gescon_nm_dgco,
contrato.gescon_ds_objeto,
contrato.gescon_nm_razao_social,
ds_fs_titular.nome_colaborador,
ds_fs_titular.matricula_colaborador,
ds_fs_suplente.nome_colaborador,
ds_fs_suplente.matricula_colaborador,
ds_fa_titular.nome_colaborador,
ds_fa_titular.matricula_colaborador,
ds_fa_suplente.nome_colaborador,
ds_fa_suplente.matricula_colaborador,
ds_an_titular.nome_colaborador,
ds_an_titular.matricula_colaborador,
ds_an_suplente.nome_colaborador,
ds_an_suplente.matricula_colaborador,
ds_gs_titular.nome_colaborador,
ds_gs_titular.matricula_colaborador,
ds_gs_suplente.nome_colaborador,
ds_gs_suplente.matricula_colaborador,
ultima.tipo_designacao,
ultima.titular_ou_suplente,
ultima.id
)) AS unique_id
FROM dcf_contratos contrato
LEFT JOIN dcf_contratos_designacoes ds_fs_titular
ON ds_fs_titular.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_fs_titular.tipo_designacao = 'FISCALIZACAO_SERVICO'
AND ds_fs_titular.titular_ou_suplente = 'titular'
AND ds_fs_titular.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_fs_suplente
ON ds_fs_suplente.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_fs_suplente.tipo_designacao = 'FISCALIZACAO_SERVICO'
AND ds_fs_suplente.titular_ou_suplente = 'suplente'
AND ds_fs_suplente.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_fa_titular
ON ds_fa_titular.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_fa_titular.tipo_designacao = 'FISCALIZACAO_MASTER'
AND ds_fa_titular.titular_ou_suplente = 'titular'
AND ds_fa_titular.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_fa_suplente
ON ds_fa_suplente.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_fa_suplente.tipo_designacao = 'FISCALIZACAO_MASTER'
AND ds_fa_suplente.titular_ou_suplente = 'suplente'
AND ds_fa_suplente.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_an_titular
ON ds_an_titular.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_an_titular.tipo_designacao = 'ANALISTA_CONTRATO'
AND ds_an_titular.titular_ou_suplente = 'titular'
AND ds_an_titular.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_an_suplente
ON ds_an_suplente.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_an_suplente.tipo_designacao = 'ANALISTA_CONTRATO'
AND ds_an_suplente.titular_ou_suplente = 'suplente'
AND ds_an_suplente.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_gs_titular
ON ds_gs_titular.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_gs_titular.tipo_designacao = 'GESTAO_CONTRATO'
AND ds_gs_titular.titular_ou_suplente = 'titular'
AND ds_gs_titular.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_gs_suplente
ON ds_gs_suplente.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_gs_suplente.tipo_designacao = 'GESTAO_CONTRATO'
AND ds_gs_suplente.titular_ou_suplente = 'suplente'
AND ds_gs_suplente.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ultima
ON ultima.status = 'VIGENTE'
AND ultima.matricula_colaborador = :matricula
AND contrato.id_contrato_fornecedor = ultima.tb_contratos_fornecedor_id
WHERE contrato.gescon_nm_dgco = :dgco AND contrato.gescon_ds_serv_fisc_comissao = 'N'
AND (
ds_fs_titular.matricula_colaborador = :matricula
OR ds_fs_suplente.matricula_colaborador = :matricula
OR ds_gs_suplente.matricula_colaborador = :matricula
OR ds_an_titular.matricula_colaborador = :matricula
OR ds_an_suplente.matricula_colaborador = :matricula
OR ds_fa_titular.matricula_colaborador = :matricula
OR ds_fa_suplente.matricula_colaborador = :matricula
)
");
$command->bindValue(':dgco', $dgco);
$command->bindValue(':matricula', $matricula);
$dados = $command->queryAll();
return json_encode($dados);
} else {
return [
'error' => 'Método não permitido. Ausência de dados na requisicao ao endpoint.',
'requisicao' => $request->method,
];
}
}
public function actionAtualizarDesignacao(string $dgco, int $matriculaTransferido, int $matriculaDesignado, string $tipoDesignacao, string $titularSuplente, string $numeroOs)
{
Yii::$app->response->format = Response::FORMAT_JSON;
$request = Yii::$app->getRequest();
$tipoDesignacao = filter_var($tipoDesignacao, FILTER_SANITIZE_SPECIAL_CHARS);
$titularSuplente = filter_var($titularSuplente, FILTER_SANITIZE_SPECIAL_CHARS);
$dgco = filter_var($dgco, FILTER_SANITIZE_SPECIAL_CHARS);
$numeroOs = filter_var($numeroOs, FILTER_SANITIZE_SPECIAL_CHARS);
// Validação
if (!preg_match('/^\d{5}\/\d{4}$/', $dgco)) {
throw new InvalidArgumentException("Parâmetro 'dgco' inválido.");
}
if ($request->isGet) {
if ($matriculaTransferido != 0) {
$transaction = Yii::$app->db->beginTransaction();
try {
// Obtém designação
$designacao = Yii::$app->db->createCommand("
SELECT designacao.*, contrato.gescon_nm_dgco as dgco
FROM dcf_contratos_designacoes designacao
LEFT JOIN dcf_contratos contrato ON contrato.id_contrato_fornecedor = designacao.tb_contratos_fornecedor_id
WHERE
designacao.matricula_colaborador = :matriculaTransferido
AND designacao.tipo_designacao = :tipoDesignacao
AND designacao.titular_ou_suplente = :titularSuplente
AND designacao.status = 'VIGENTE'
AND contrato.gescon_nm_dgco = :dgco
")
->bindValue(':matriculaTransferido', $matriculaTransferido)
->bindValue(':tipoDesignacao', $tipoDesignacao)
->bindValue(':titularSuplente', $titularSuplente)
->bindValue(':dgco', $dgco)
->queryOne();
if ($designacao) {
// Atualiza status da designação anterior
Yii::$app->db->createCommand("
UPDATE dcf_contratos_designacoes
SET status = 'NÃO VIGENTE'
WHERE id = :id
")
->bindValue(':id', $designacao['id'])
->execute();
// Obtém informações do colaborador
$colaborador = Yii::$app->db->createCommand("
SELECT *
FROM tb_colaboradores
WHERE matricula = :matriculaDesignado
")
->bindValue(':matriculaDesignado', $matriculaDesignado)
->queryOne();
if ($colaborador) {
// Insere nova designação
Yii::$app->db->createCommand("
INSERT INTO dcf_contratos_designacoes (
tb_contratos_fornecedor_id, id_contrato, tipo_designacao, dt_designacao,
status, nome_colaborador, matricula_colaborador, uor_colaborador, titular_ou_suplente
)
VALUES (
:tb_contratos_fornecedor_id, :id_contrato, :tipo_designacao, :dt_designacao,
'VIGENTE', :nome_colaborador, :matricula_colaborador, :uor_colaborador, :titular_ou_suplente
)
")
->bindValue(':tb_contratos_fornecedor_id', $designacao['tb_contratos_fornecedor_id'])
->bindValue(':id_contrato', $designacao['id_contrato'])
->bindValue(':tipo_designacao', $designacao['tipo_designacao'])
->bindValue(':dt_designacao', date('Y-m-d'))
->bindValue(':nome_colaborador', $colaborador['nome'])
->bindValue(':matricula_colaborador', $colaborador['matricula'])
->bindValue(':uor_colaborador', $colaborador['uor'])
->bindValue(':titular_ou_suplente', $designacao['titular_ou_suplente'])
->execute();
// Confirma a transação
$transaction->commit();
return json_encode('deu boa');
} else {
throw new \Exception('Colaborador não encontrado.');
}
} else {
throw new \Exception('Designação não encontrada.');
}
} catch (\Exception $e) {
// Reverte a transação em caso de erro
$transaction->rollBack();
return [
'error' => $e->getMessage(),
'requisicao' => $request->method,
];
}
} else {
$transaction = Yii::$app->db->beginTransaction();
// Obtém informações do colaborador
$colaborador = Yii::$app->db->createCommand("SELECT * FROM tb_colaboradores WHERE matricula = :matriculaDesignado")->bindValue(':matriculaDesignado', $matriculaDesignado)->queryOne();
$contrato = Yii::$app->db->createCommand("SELECT * FROM dcf_contratos WHERE gescon_nm_dgco = :dgco")->bindValue(':dgco', $dgco)->queryOne();
if ($colaborador) {
// Insere nova designação
Yii::$app->db->createCommand("
INSERT INTO dcf_contratos_designacoes (
tb_contratos_fornecedor_id, id_contrato, tipo_designacao, dt_designacao,
status, nome_colaborador, matricula_colaborador, uor_colaborador, titular_ou_suplente
)
VALUES (
:tb_contratos_fornecedor_id, :id_contrato, :tipo_designacao, :dt_designacao,
'VIGENTE', :nome_colaborador, :matricula_colaborador, :uor_colaborador, :titular_ou_suplente
)
")
->bindValue(':tb_contratos_fornecedor_id', $contrato['id_contrato_fornecedor'])
->bindValue(':id_contrato', 0)
->bindValue(':tipo_designacao', $tipoDesignacao)
->bindValue(':dt_designacao', date('Y-m-d'))
->bindValue(':nome_colaborador', $colaborador['nome'])
->bindValue(':matricula_colaborador', $colaborador['matricula'])
->bindValue(':uor_colaborador', $colaborador['uor'])
->bindValue(':titular_ou_suplente', $titularSuplente)
->execute();
// Confirma a transação
$transaction->commit();
return json_encode('deu boa');
}
}
} else {
return [
'error' => 'Método não permitido. Ausência de dados na requisição ao endpoint.',
'requisicao' => $request->method,
];
}
}
//novos endpoint
public function actionBuscarDesignacaoComissao(int $matricula)
{
Yii::$app->response->format = Response::FORMAT_JSON;
$request = Yii::$app->getRequest();
if ($request->isGet) {
// Consulta os dados da designação e do contrato
$command = Yii::$app->db->createCommand("
SELECT
contrato.*,
designacao.*,
designacao_gestor.matricula_colaborador AS matricula_gestor_titular,
designacao_gestor.nome_colaborador AS nome_gestor_titular
FROM dcf_contratos_designacoes designacao
LEFT JOIN dcf_contratos contrato
ON contrato.id_contrato_fornecedor = designacao.tb_contratos_fornecedor_id
LEFT JOIN dcf_contratos_designacoes designacao_gestor
ON (designacao_gestor.tipo_designacao = 'GESTAO_CONTRATO'
AND designacao_gestor.status = 'VIGENTE'
AND designacao_gestor.titular_ou_suplente = 'titular'
AND contrato.id_contrato_fornecedor = designacao_gestor.tb_contratos_fornecedor_id)
WHERE (
((designacao.tipo_designacao = 'GESTAO_CONTRATO' AND designacao.titular_ou_suplente = 'suplente')
OR (designacao.tipo_designacao <> 'GESTAO_CONTRATO' AND designacao.tipo_designacao <> 'FISCALIZACAO_ADMINISTRATIVA'))
AND designacao.status = 'VIGENTE'
AND designacao.matricula_colaborador = :matricula
)
AND (contrato.gescon_ds_status IN ('CONTRATO_VIGENTE', 'EM_RENOVACAO', 'AGUARDANDO_SUBSIDIOS_DEMANDANTE', 'NAO_SERA_RENOVADO') AND contrato.gescon_ds_serv_fisc_comissao = 'S')
GROUP BY contrato.id_contrato_fornecedor;
");
$command->bindValue(':matricula', $matricula);
$dados = json_encode($command->queryAll());
return $dados; // Yii automaticamente converte arrays para JSON quando Response::FORMAT_JSON está definido
} else {
Yii::$app->response->statusCode = 405; // Método não permitido
return [
'error' => 'Método não permitido. Ausência de dados na requisição ao endpoint.',
'requisicao' => $request->method,
];
}
}
public function actionBuscarIntervenientesPorDgcoComissao(string $dgco)
{
Yii::$app->response->format = Response::FORMAT_JSON;
$dgco = filter_var($dgco, FILTER_SANITIZE_SPECIAL_CHARS);
// Validação
if (!preg_match('/^\d{5}\/\d{4}$/', $dgco)) {
throw new InvalidArgumentException("Parâmetro 'dgco' inválido.");
}
$request = Yii::$app->getRequest();
if ($request->isGet) {
// Tenta obter os dados da requisição GET
$command = Yii::$app->db->createCommand("
SELECT
contrato.gescon_nm_dgco AS dgco,
contrato.gescon_ds_objeto AS objeto,
contrato.gescon_nm_gerencia as nm_gerencia,
contrato.gescon_nm_razao_social AS fornecedor,
ds_fa_titular.nome_colaborador AS fiscal_administrativo_titular,
ds_fa_titular.matricula_colaborador AS matricula_fiscal_administrativo_titular,
ds_fa_suplente.nome_colaborador AS fiscal_administrativo_suplente,
ds_fa_suplente.matricula_colaborador AS matricula_fiscal_administrativo_suplente,
ds_an_titular.nome_colaborador AS analista_titular,
ds_an_titular.matricula_colaborador AS matricula_analista_titular,
ds_an_suplente.nome_colaborador AS analista_suplente,
ds_an_suplente.matricula_colaborador AS matricula_analista_suplente,
ds_gs_titular.nome_colaborador AS gestor_titular,
ds_gs_titular.matricula_colaborador AS matricula_gestor_titular,
ds_gs_suplente.nome_colaborador AS gestor_suplente,
ds_gs_suplente.matricula_colaborador AS matricula_gestor_suplente,
MD5(CONCAT_WS(
'',
contrato.gescon_nm_dgco,
contrato.gescon_ds_objeto,
contrato.gescon_nm_razao_social,
ds_fa_titular.nome_colaborador,
ds_fa_titular.matricula_colaborador,
ds_fa_suplente.nome_colaborador,
ds_fa_suplente.matricula_colaborador,
ds_an_titular.nome_colaborador,
ds_an_titular.matricula_colaborador,
ds_an_suplente.nome_colaborador,
ds_an_suplente.matricula_colaborador,
ds_gs_titular.nome_colaborador,
ds_gs_titular.matricula_colaborador,
ds_gs_suplente.nome_colaborador,
ds_gs_suplente.matricula_colaborador
)) AS unique_id
FROM dcf_contratos contrato
LEFT JOIN dcf_contratos_designacoes ds_fa_titular
ON ds_fa_titular.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_fa_titular.tipo_designacao = 'FISCALIZACAO_MASTER'
AND ds_fa_titular.titular_ou_suplente = 'titular'
AND ds_fa_titular.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_fa_suplente
ON ds_fa_suplente.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_fa_suplente.tipo_designacao = 'FISCALIZACAO_MASTER'
AND ds_fa_suplente.titular_ou_suplente = 'suplente'
AND ds_fa_suplente.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_an_titular
ON ds_an_titular.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_an_titular.tipo_designacao = 'ANALISTA_CONTRATO'
AND ds_an_titular.titular_ou_suplente = 'titular'
AND ds_an_titular.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_an_suplente
ON ds_an_suplente.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_an_suplente.tipo_designacao = 'ANALISTA_CONTRATO'
AND ds_an_suplente.titular_ou_suplente = 'suplente'
AND ds_an_suplente.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_gs_titular
ON ds_gs_titular.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_gs_titular.tipo_designacao = 'GESTAO_CONTRATO'
AND ds_gs_titular.titular_ou_suplente = 'titular'
AND ds_gs_titular.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_gs_suplente
ON ds_gs_suplente.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_gs_suplente.tipo_designacao = 'GESTAO_CONTRATO'
AND ds_gs_suplente.titular_ou_suplente = 'suplente'
AND ds_gs_suplente.status = 'VIGENTE'
WHERE contrato.gescon_nm_dgco = :dgco
AND contrato.gescon_ds_serv_fisc_comissao = 'S'
");
$command->bindValue(':dgco', $dgco);
$dados = json_encode($command->queryAll());
return $dados; // Yii automaticamente converte arrays para JSON quando Response::FORMAT_JSON está definido
} else {
Yii::$app->response->statusCode = 405; // Método não permitido
return [
'error' => 'Método não permitido. Ausência de dados na requisição ao endpoint.',
'requisicao' => $request->method,
];
}
}
public function actionBuscarFiscaisServicoComissao(string $dgco)
{
Yii::$app->response->format = Response::FORMAT_JSON;
$dgco = filter_var($dgco, FILTER_SANITIZE_SPECIAL_CHARS);
// Validação
if (!preg_match('/^\d{5}\/\d{4}$/', $dgco)) {
throw new InvalidArgumentException("Parâmetro 'dgco' inválido.");
}
$request = Yii::$app->getRequest();
if ($request->isGet) {
// Tenta obter os dados da requisição GET
$dados = Yii::$app->db->createCommand("
SELECT contrato.gescon_nm_dgco as dgco, designacao.*
FROM dcf_contratos_designacoes designacao
LEFT JOIN dcf_contratos contrato
ON contrato.id_contrato_fornecedor = designacao.tb_contratos_fornecedor_id
WHERE designacao.status = 'VIGENTE'
AND contrato.gescon_nm_dgco = :dgco
AND designacao.tipo_designacao = 'FISCALIZACAO_SERVICO'
")
->bindValue(':dgco', $dgco)
->queryAll();
return json_encode($dados); // Yii automaticamente converte arrays para JSON quando Response::FORMAT_JSON está definido
} else {
Yii::$app->response->statusCode = 405; // Método não permitido
return [
'error' => 'Método não permitido. Ausência de dados na requisição ao endpoint.',
'requisicao' => $request->method,
];
}
}
public function actionBuscarIntervenientesPorDgco(string $dgco)
{
Yii::$app->response->format = Response::FORMAT_JSON;
$dgco = filter_var($dgco, FILTER_SANITIZE_SPECIAL_CHARS);
// Validação
if (!preg_match('/^\d{5}\/\d{4}$/', $dgco)) {
throw new InvalidArgumentException("Parâmetro 'dgco' inválido.");
}
$request = Yii::$app->getRequest();
if ($request->isGet) {
// Tenta obter os dados da requisição POST
$command = Yii::$app->db->createCommand("SELECT
contrato.gescon_nm_dgco AS dgco,
contrato.gescon_ds_objeto AS objeto,
contrato.gescon_nm_gerencia as nm_gerencia,
contrato.gescon_nm_razao_social AS fornecedor,
contrato.gescon_ds_serv_fisc_comissao AS fiscalizado_comissao,
ds_fa_titular.nome_colaborador AS fiscal_master_titular,
ds_fa_titular.matricula_colaborador AS matricula_fiscal_master_titular,
ds_fa_suplente.nome_colaborador AS fiscal_master_suplente,
ds_fa_suplente.matricula_colaborador AS matricula_fiscal_master_suplente,
ds_fa_titular2.nome_colaborador AS fiscal_administrativo_titular,
ds_fa_titular2.matricula_colaborador AS matricula_fiscal_administrativo_titular,
ds_fa_suplente2.nome_colaborador AS fiscal_administrativo_suplente,
ds_fa_suplente2.matricula_colaborador AS matricula_fiscal_administrativo_suplente,
ds_an_titular.nome_colaborador AS analista_titular,
ds_an_titular.matricula_colaborador AS matricula_analista_titular,
ds_an_suplente.nome_colaborador AS analista_suplente,
ds_an_suplente.matricula_colaborador AS matricula_analista_suplente,
ds_gs_titular.nome_colaborador AS gestor_titular,
ds_gs_titular.matricula_colaborador AS matricula_gestor_titular,
ds_gs_suplente.nome_colaborador AS gestor_suplente,
ds_gs_suplente.matricula_colaborador AS matricula_gestor_suplente,
MD5(CONCAT_WS(
'',
contrato.gescon_nm_dgco,
contrato.gescon_ds_objeto,
contrato.gescon_nm_razao_social,
ds_fa_titular.nome_colaborador,
ds_fa_titular.matricula_colaborador,
ds_fa_suplente.nome_colaborador,
ds_fa_suplente.matricula_colaborador,
ds_an_titular.nome_colaborador,
ds_an_titular.matricula_colaborador,
ds_an_suplente.nome_colaborador,
ds_an_suplente.matricula_colaborador,
ds_gs_titular.nome_colaborador,
ds_gs_titular.matricula_colaborador,
ds_gs_suplente.nome_colaborador,
ds_gs_suplente.matricula_colaborador
)) AS unique_id
FROM dcf_contratos contrato
LEFT JOIN dcf_contratos_designacoes ds_fa_titular
ON ds_fa_titular.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_fa_titular.tipo_designacao = 'FISCALIZACAO_MASTER'
AND ds_fa_titular.titular_ou_suplente = 'titular'
AND ds_fa_titular.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_fa_suplente
ON ds_fa_suplente.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_fa_suplente.tipo_designacao = 'FISCALIZACAO_MASTER'
AND ds_fa_suplente.titular_ou_suplente = 'suplente'
AND ds_fa_suplente.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_fa_titular2
ON ds_fa_titular2.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_fa_titular2.tipo_designacao = 'FISCALIZACAO_ADMINISTRATIVA'
AND ds_fa_titular2.titular_ou_suplente = 'titular'
AND ds_fa_titular2.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_fa_suplente2
ON ds_fa_suplente2.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_fa_suplente2.tipo_designacao = 'FISCALIZACAO_ADMINISTRATIVA'
AND ds_fa_suplente2.titular_ou_suplente = 'suplente'
AND ds_fa_suplente2.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_an_titular
ON ds_an_titular.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_an_titular.tipo_designacao = 'ANALISTA_CONTRATO'
AND ds_an_titular.titular_ou_suplente = 'titular'
AND ds_an_titular.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_an_suplente
ON ds_an_suplente.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_an_suplente.tipo_designacao = 'ANALISTA_CONTRATO'
AND ds_an_suplente.titular_ou_suplente = 'suplente'
AND ds_an_suplente.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_gs_titular
ON ds_gs_titular.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_gs_titular.tipo_designacao = 'GESTAO_CONTRATO'
AND ds_gs_titular.titular_ou_suplente = 'titular'
AND ds_gs_titular.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_gs_suplente
ON ds_gs_suplente.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_gs_suplente.tipo_designacao = 'GESTAO_CONTRATO'
AND ds_gs_suplente.titular_ou_suplente = 'suplente'
AND ds_gs_suplente.status = 'VIGENTE'
WHERE contrato.gescon_nm_dgco = :dgco;
");
$command->bindValue(':dgco', $dgco);
$dados = $command->queryAll();
return json_encode($dados);
} else {
return [
'error' => 'Método não permitido. Ausência de dados na requisicao ao endpoint.',
'requisicao' => $request->method,
];
}
}
public function actionBuscarContratos(string $dgco)
{
Yii::$app->response->format = Response::FORMAT_JSON;
$request = Yii::$app->getRequest();
if ($request->isGet) {
// Tenta obter os dados da requisição POST
$dados = Yii::$app->db->createCommand("SELECT id_contrato_fornecedor, gescon_nm_dgco,gescon_ds_status FROM dcf_contratos WHERE gescon_nm_dgco = '$dgco';")->queryAll();
return json_encode($dados);
} else {
return [
'error' => 'Método não permitido. Ausência de dados na requisicao ao endpoint.',
'requisicao' => $request->method,
];
}
}
public function actionInserirContrato(string $dgco, string $nomeFantasia)
{
Yii::$app->response->format = Response::FORMAT_JSON;
$dgco = filter_var($dgco, FILTER_SANITIZE_SPECIAL_CHARS);
$nomeFantasia = filter_var($nomeFantasia, FILTER_SANITIZE_SPECIAL_CHARS);
// Validação
if (!preg_match('/^\d{5}\/\d{4}$/', $dgco)) {
throw new InvalidArgumentException("Parâmetro 'dgco' inválido.");
}
$request = Yii::$app->getRequest();
if ($request->isGet) {
// Tenta obter os dados da requisição POST
Yii::$app->db->createCommand("INSERT INTO dcf_contratos (gescon_nm_dgco, gescon_ds_status, gescon_oid, gescon_id_contrato, gescon_nm_razao_social, gescon_ds_serv_fisc_comissao) VALUES('$dgco', 'CONTRATO_VIGENTE', '', 0, '$nomeFantasia', 'N');")->queryOne();
return json_encode([true]);
} else {
return [
'error' => 'Método não permitido. Ausência de dados na requisicao ao endpoint.',
'requisicao' => $request->method,
];
}
}
public function actionInvalidarDesignacao(string $dgco = null, int $matriculaTransferido = null, string $titularSuplente = null)
{
Yii::$app->response->format = Response::FORMAT_JSON;
$dgco = filter_var($dgco, FILTER_SANITIZE_SPECIAL_CHARS);
$titularSuplente = filter_var($titularSuplente, FILTER_SANITIZE_SPECIAL_CHARS);
// Validação
if (!preg_match('/^\d{5}\/\d{4}$/', $dgco)) {
throw new InvalidArgumentException("Parâmetro 'dgco' inválido.");
}
$request = Yii::$app->getRequest();
if ($request->isGet) {
$transaction = Yii::$app->db->beginTransaction();
try {
// Obtém designação
$designacao = Yii::$app->db->createCommand("SELECT designacao.*, contrato.gescon_nm_dgco as dgco FROM dcf_contratos_designacoes designacao LEFT JOIN dcf_contratos contrato ON contrato.id_contrato_fornecedor = designacao.tb_contratos_fornecedor_id WHERE designacao.matricula_colaborador = :matriculaTransferido AND designacao.tipo_designacao = 'FISCALIZACAO_SERVICO' AND designacao.titular_ou_suplente = :titularSuplente AND designacao.status = 'VIGENTE' AND contrato.gescon_nm_dgco = :dgco")->bindValue(':matriculaTransferido', $matriculaTransferido)->bindValue(':titularSuplente', $titularSuplente)->bindValue(':dgco', $dgco)->queryOne();
if ($designacao) {
// Atualiza status da designação anterior
Yii::$app->db->createCommand("UPDATE dcf_contratos_designacoes SET status = 'NÃO VIGENTE' WHERE id = :id")->bindValue(':id', $designacao['id'])->execute();
// Confirma a transação
$transaction->commit();
return json_encode('deu boa');
} else {
throw new \Exception('Designação não encontrada.');
}
} catch (\Exception $e) {
// Reverte a transação em caso de erro
$transaction->rollBack();
return [
'error' => $e->getMessage(),
'requisicao' => $request->method,
];
}
} else {
return [
'error' => 'Método não permitido. Ausência de dados na requisição ao endpoint.',
'requisicao' => $request->method,
];
}
}
public function actionBuscarDesignacoesGestor(int $matricula)
{
Yii::$app->response->format = Response::FORMAT_JSON;
$request = Yii::$app->getRequest();
if ($request->isGet) {
// Tenta obter os dados da requisição POST
$dados = Yii::$app->db->createCommand("SELECT contrato.*, designacao.*, designacao_gestor.matricula_colaborador AS matricula_gestor_titular, designacao_gestor.nome_colaborador AS nome_gestor_titular
FROM dcf_contratos_designacoes designacao
LEFT JOIN dcf_contratos contrato ON contrato.id_contrato_fornecedor = designacao.tb_contratos_fornecedor_id
LEFT JOIN dcf_contratos_designacoes designacao_gestor ON (designacao_gestor.tipo_designacao = 'GESTAO_CONTRATO' AND designacao_gestor.status = 'VIGENTE' AND designacao_gestor.titular_ou_suplente = 'titular' AND contrato.id_contrato_fornecedor = designacao_gestor.tb_contratos_fornecedor_id)
WHERE designacao.matricula_colaborador = :matricula AND designacao.tipo_designacao = 'GESTAO_CONTRATO' AND designacao.status = 'VIGENTE' AND designacao.titular_ou_suplente = 'titular' AND contrato.gescon_ds_status IN ('CONTRATO_VIGENTE', 'EM_RENOVACAO', 'AGUARDANDO_SUBSIDIOS_DEMANDANTE', 'NAO_SERA_RENOVADO');")->bindValue(':matricula', $matricula);
$resultado = $dados->queryAll();
return json_encode($resultado); // Retorna o array de resultados diretamente
} else {
return [
'error' => 'Método não permitido. Ausência de dados na requisicao ao endpoint.',
'requisicao' => $request->method,
];
}
}
public function actionAtualizarGestores(int $page = 1)
{
Yii::$app->response->format = Response::FORMAT_JSON;
$request = Yii::$app->getRequest();
if ($request->isGet) {
// Calcula o offset com base no número da página
$limit = 100;
$offset = ($page - 1) * $limit;
// Ajusta a consulta SQL para incluir paginação
$dados = Yii::$app->db->createCommand("
SELECT
contrato.gescon_nm_dgco AS dgco,
contrato.gescon_ds_objeto AS objeto,
contrato.gescon_nm_razao_social AS fornecedor,
contrato.gescon_ds_serv_fisc_comissao AS fiscalizado_comissao,
ds_fa_titular.nome_colaborador AS fiscal_master_titular,
ds_fa_titular.matricula_colaborador AS matricula_fiscal_master_titular,
ds_fa_suplente.nome_colaborador AS fiscal_master_suplente,
ds_fa_suplente.matricula_colaborador AS matricula_fiscal_master_suplente,
ds_an_titular.nome_colaborador AS analista_titular,
ds_an_titular.matricula_colaborador AS matricula_analista_titular,
ds_an_suplente.nome_colaborador AS analista_suplente,
ds_an_suplente.matricula_colaborador AS matricula_analista_suplente,
ds_gs_titular.nome_colaborador AS gestor_titular,
ds_gs_titular.matricula_colaborador AS matricula_gestor_titular,
ds_gs_titular.uor_colaborador AS uor_gestor_titular,
ds_gs_suplente.nome_colaborador AS gestor_suplente,
ds_gs_suplente.matricula_colaborador AS matricula_gestor_suplente,
MD5(CONCAT_WS(
'',
contrato.gescon_nm_dgco,
contrato.gescon_ds_objeto,
contrato.gescon_nm_razao_social,
ds_fa_titular.nome_colaborador,
ds_fa_titular.matricula_colaborador,
ds_fa_suplente.nome_colaborador,
ds_fa_suplente.matricula_colaborador,
ds_an_titular.nome_colaborador,
ds_an_titular.matricula_colaborador,
ds_an_suplente.nome_colaborador,
ds_an_suplente.matricula_colaborador,
ds_gs_titular.nome_colaborador,
ds_gs_titular.matricula_colaborador,
ds_gs_suplente.nome_colaborador,
ds_gs_suplente.matricula_colaborador
)) AS unique_id
FROM dcf_contratos contrato
LEFT JOIN dcf_contratos_designacoes ds_fa_titular
ON ds_fa_titular.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_fa_titular.tipo_designacao = 'FISCALIZACAO_MASTER'
AND ds_fa_titular.titular_ou_suplente = 'titular'
AND ds_fa_titular.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_fa_suplente
ON ds_fa_suplente.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_fa_suplente.tipo_designacao = 'FISCALIZACAO_MASTER'
AND ds_fa_suplente.titular_ou_suplente = 'suplente'
AND ds_fa_suplente.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_an_titular
ON ds_an_titular.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_an_titular.tipo_designacao = 'ANALISTA_CONTRATO'
AND ds_an_titular.titular_ou_suplente = 'titular'
AND ds_an_titular.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_an_suplente
ON ds_an_suplente.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_an_suplente.tipo_designacao = 'ANALISTA_CONTRATO'
AND ds_an_suplente.titular_ou_suplente = 'suplente'
AND ds_an_suplente.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_gs_titular
ON ds_gs_titular.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_gs_titular.tipo_designacao = 'GESTAO_CONTRATO'
AND ds_gs_titular.titular_ou_suplente = 'titular'
AND ds_gs_titular.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_gs_suplente
ON ds_gs_suplente.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_gs_suplente.tipo_designacao = 'GESTAO_CONTRATO'
AND ds_gs_suplente.titular_ou_suplente = 'suplente'
AND ds_gs_suplente.status = 'VIGENTE'
WHERE contrato.gescon_ds_status IN ('CONTRATO_VIGENTE', 'EM_RENOVACAO', 'AGUARDANDO_SUBSIDIOS_DEMANDANTE', 'NAO_SERA_RENOVADO')
LIMIT :limit OFFSET :offset
")
->bindValue(':limit', $limit)
->bindValue(':offset', $offset);
$resultado = $dados->queryAll();
return json_encode($resultado); // Retorna o array de resultados diretamente
} else {
return [
'error' => 'Método não permitido. Ausência de dados na requisicao ao endpoint.',
'requisicao' => $request->method,
];
}
}
public function actionInserirAlertaGestorTransferido(int $idDesignacao)
{
Yii::$app->response->format = Response::FORMAT_JSON;
$request = Yii::$app->getRequest();
if ($request->isGet) {
// Tenta obter os dados da requisição POST
$dados = Yii::$app->db->createCommand("SELECT * FROM dcf_alertas_gestores_transferidos WHERE solucionado <> 1 AND id_designacao_gestor_transferido = $idDesignacao;")->queryOne();
if (!$dados) {
Yii::$app->db->createCommand("INSERT INTO dcf_alertas_gestores_transferidos (id_designacao_gestor_transferido, data_transferencia) VALUES(:idDesignacao, :dataTransferencia);")->bindValue(':idDesignacao', $idDesignacao)->bindValue(':dataTransferencia', date('y-m-d'))->queryAll();
}
return json_encode(true); // Retorna o array de resultados diretamente
} else {
return [
'error' => 'Método não permitido. Ausência de dados na requisicao ao endpoint.',
'requisicao' => $request->method,
];
}
}
public function actionBuscarContratosSemGestor()
{
Yii::$app->response->format = Response::FORMAT_JSON;
$request = Yii::$app->getRequest();
if ($request->isGet) {
// Tenta obter os dados da requisição POST
$dados = Yii::$app->db->createCommand("SELECT transferido.id as id_notificacao, designacao.id as id_designacao, transferido.data_transferencia, designacao.*, contrato.*
FROM dcf_alertas_gestores_transferidos transferido
left join dcf_contratos_designacoes designacao on designacao.id = transferido.id_designacao_gestor_transferido
left join dcf_contratos contrato on contrato.id_contrato_fornecedor = designacao.tb_contratos_fornecedor_id
WHERE transferido.solucionado <> 1")->queryAll();
return json_encode($dados); // Retorna o array de resultados diretamente
} else {
return [
'error' => 'Método não permitido. Ausência de dados na requisicao ao endpoint.',
'requisicao' => $request->method,
];
}
}
public function actionAtualizarGestorContrato(int $idDesignacao, int $idAlerta, int $matriculaNovoGestor)
{
Yii::$app->response->format = Response::FORMAT_JSON;
$request = Yii::$app->getRequest();
if ($request->isGet) {
// Tenta obter os dados da requisição POST
$designacao = Yii::$app->db->createCommand("SELECT * FROM dcf_contratos_designacoes WHERE id = :idDesignacao;")->bindValue(':idDesignacao', $idDesignacao)->queryOne();
$alerta = Yii::$app->db->createCommand("SELECT * FROM dcf_alertas_gestores_transferidos WHERE id = :idAlerta;")->bindValue(':idAlerta', $idAlerta)->queryOne();
$colaborador = Yii::$app->db->createCommand("SELECT * FROM tb_colaboradores WHERE matricula = :matriculaNovoGestor;")->bindValue(':matriculaNovoGestor', $matriculaNovoGestor)->queryOne();
if (isset($colaborador)) {
Yii::$app->db->createCommand("UPDATE dcf_contratos_designacoes SET status='NÃO VIGENTE' WHERE id=:idDesignacao;")->bindValue(':idDesignacao', $designacao['id'])->queryOne();
Yii::$app->db->createCommand("INSERT INTO dcf_contratos_designacoes (tb_contratos_fornecedor_id, id_contrato, tipo_designacao, dt_designacao, status, nome_colaborador, matricula_colaborador, uor_colaborador, titular_ou_suplente) VALUES(" . $designacao['tb_contratos_fornecedor_id'] . ", " . $designacao['id_contrato'] . ", 'GESTAO_CONTRATO', '" . date("Y-m-d") . "', 'vigente', '" . $colaborador['nome'] . "', '" . $colaborador['matricula'] . "', '" . $designacao['uor_colaborador'] . "', 'titular');")->queryOne();
Yii::$app->db->createCommand("UPDATE dcf_alertas_gestores_transferidos SET solucionado = 1 WHERE id = " . $alerta['id'] . ";")->queryOne();
return json_encode(true);
} else {
return json_encode(true);
}
} else {
return [
'error' => 'Método não permitido. Ausência de dados na requisicao ao endpoint.',
'requisicao' => $request->method,
];
}
}
public function actionBuscarDesignacoesFiscalAdministrativo(int $matricula)
{
Yii::$app->response->format = Response::FORMAT_JSON;
$request = Yii::$app->getRequest();
if ($request->isGet) {
// Tenta obter os dados da requisição POST
$dados = Yii::$app->db->createCommand("SELECT contrato.*, designacao.*
FROM dcf_contratos_designacoes designacao
LEFT JOIN dcf_contratos contrato ON contrato.id_contrato_fornecedor = designacao.tb_contratos_fornecedor_id
WHERE designacao.matricula_colaborador = :matricula AND designacao.tipo_designacao = 'FISCALIZACAO_ADMINISTRATIVA' AND designacao.status = 'VIGENTE' AND contrato.gescon_ds_status IN ('CONTRATO_VIGENTE', 'EM_RENOVACAO', 'AGUARDANDO_SUBSIDIOS_DEMANDANTE', 'NAO_SERA_RENOVADO');")->bindValue(':matricula', $matricula);
$resultado = $dados->queryAll();
return json_encode($resultado); // Retorna o array de resultados diretamente
} else {
return [
'error' => 'Método não permitido. Ausência de dados na requisicao ao endpoint.',
'requisicao' => $request->method,
];
}
}
public function actionBuscarAvaliadoresPorDgcoComissao(string $dgco)
{
Yii::$app->response->format = Response::FORMAT_JSON;
$dgco = filter_var($dgco, FILTER_SANITIZE_SPECIAL_CHARS);
// Validação
if (!preg_match('/^\d{5}\/\d{4}$/', $dgco)) {
throw new InvalidArgumentException("Parâmetro 'dgco' inválido.");
}
$request = Yii::$app->getRequest();
if ($request->isGet) {
// Tenta obter os dados da requisição POST
$command = Yii::$app->db->createCommand("SELECT
contrato.gescon_nm_dgco AS dgco,
contrato.gescon_ds_objeto AS objeto,
contrato.gescon_nm_gerencia as nm_gerencia,
contrato.gescon_nm_razao_social AS fornecedor,
ds_fa_titular.nome_colaborador AS fiscal_master_titular,
ds_fa_titular.matricula_colaborador AS matricula_fiscal_master_titular,
ds_fa_suplente.nome_colaborador AS fiscal_master_suplente,
ds_fa_suplente.matricula_colaborador AS matricula_fiscal_master_suplente,
ds_an_titular.nome_colaborador AS analista_titular,
ds_an_titular.matricula_colaborador AS matricula_analista_titular,
ds_an_suplente.nome_colaborador AS analista_suplente,
ds_an_suplente.matricula_colaborador AS matricula_analista_suplente,
ds_gs_titular.nome_colaborador AS gestor_titular,
ds_gs_titular.matricula_colaborador AS matricula_gestor_titular,
ds_gs_suplente.nome_colaborador AS gestor_suplente,
ds_gs_suplente.matricula_colaborador AS matricula_gestor_suplente,
ds_fa_titular2.nome_colaborador AS fiscal_administrativo_titular,
ds_fa_titular2.matricula_colaborador AS matricula_fiscal_administrativo_titular,
ds_fa_suplente2.nome_colaborador AS fiscal_administrativo_suplente,
ds_fa_suplente2.matricula_colaborador AS matricula_fiscal_administrativo_suplente,
MD5(CONCAT_WS(
'',
contrato.gescon_nm_dgco,
contrato.gescon_ds_objeto,
contrato.gescon_nm_razao_social,
ds_fa_titular.nome_colaborador,
ds_fa_titular.matricula_colaborador,
ds_fa_suplente.nome_colaborador,
ds_fa_suplente.matricula_colaborador,
ds_an_titular.nome_colaborador,
ds_an_titular.matricula_colaborador,
ds_an_suplente.nome_colaborador,
ds_an_suplente.matricula_colaborador,
ds_gs_titular.nome_colaborador,
ds_gs_titular.matricula_colaborador,
ds_gs_suplente.nome_colaborador,
ds_gs_suplente.matricula_colaborador
)) AS unique_id
FROM dcf_contratos contrato
LEFT JOIN dcf_contratos_designacoes ds_fa_titular
ON ds_fa_titular.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_fa_titular.tipo_designacao = 'FISCALIZACAO_MASTER'
AND ds_fa_titular.titular_ou_suplente = 'titular'
AND ds_fa_titular.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_fa_suplente
ON ds_fa_suplente.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_fa_suplente.tipo_designacao = 'FISCALIZACAO_MASTER'
AND ds_fa_suplente.titular_ou_suplente = 'suplente'
AND ds_fa_suplente.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_an_titular
ON ds_an_titular.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_an_titular.tipo_designacao = 'ANALISTA_CONTRATO'
AND ds_an_titular.titular_ou_suplente = 'titular'
AND ds_an_titular.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_an_suplente
ON ds_an_suplente.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_an_suplente.tipo_designacao = 'ANALISTA_CONTRATO'
AND ds_an_suplente.titular_ou_suplente = 'suplente'
AND ds_an_suplente.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_gs_titular
ON ds_gs_titular.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_gs_titular.tipo_designacao = 'GESTAO_CONTRATO'
AND ds_gs_titular.titular_ou_suplente = 'titular'
AND ds_gs_titular.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_gs_suplente
ON ds_gs_suplente.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_gs_suplente.tipo_designacao = 'GESTAO_CONTRATO'
AND ds_gs_suplente.titular_ou_suplente = 'suplente'
AND ds_gs_suplente.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_fa_titular2
ON ds_fa_titular2.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_fa_titular2.tipo_designacao = 'FISCALIZACAO_ADMINISTRATIVA'
AND ds_fa_titular2.titular_ou_suplente = 'titular'
AND ds_fa_titular2.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_fa_suplente2
ON ds_fa_suplente2.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_fa_suplente2.tipo_designacao = 'FISCALIZACAO_ADMINISTRATIVA'
AND ds_fa_suplente2.titular_ou_suplente = 'suplente'
AND ds_fa_suplente2.status = 'VIGENTE'
WHERE contrato.gescon_nm_dgco = :dgco AND contrato.gescon_ds_serv_fisc_comissao = 'S';
");
$command->bindValue(':dgco', $dgco);
$dados = $command->queryAll();
return json_encode($dados);
} else {
return [
'error' => 'Método não permitido. Ausência de dados na requisicao ao endpoint.',
'requisicao' => $request->method,
];
}
}
public function actionBuscarAvaliadoresPorDgco(string $dgco)
{
Yii::$app->response->format = Response::FORMAT_JSON;
$dgco = filter_var($dgco, FILTER_SANITIZE_SPECIAL_CHARS);
// Validação
if (!preg_match('/^\d{5}\/\d{4}$/', $dgco)) {
throw new InvalidArgumentException("Parâmetro 'dgco' inválido.");
}
$request = Yii::$app->getRequest();
if ($request->isGet) {
// Tenta obter os dados da requisição POST
$command = Yii::$app->db->createCommand("SELECT
contrato.gescon_nm_dgco AS dgco,
contrato.gescon_ds_objeto AS objeto,
contrato.gescon_nm_gerencia as nm_gerencia,
contrato.gescon_nm_razao_social AS fornecedor,
contrato.gescon_ds_serv_fisc_comissao AS fiscalizado_comissao,
ds_fa_titular.nome_colaborador AS fiscal_master_titular,
ds_fa_titular.matricula_colaborador AS matricula_fiscal_master_titular,
ds_fa_suplente.nome_colaborador AS fiscal_master_suplente,
ds_fa_suplente.matricula_colaborador AS matricula_fiscal_master_suplente,
ds_fa_titular2.nome_colaborador AS fiscal_administrativo_titular,
ds_fa_titular2.matricula_colaborador AS matricula_fiscal_administrativo_titular,
ds_fa_suplente2.nome_colaborador AS fiscal_administrativo_suplente,
ds_fa_suplente2.matricula_colaborador AS matricula_fiscal_administrativo_suplente,
ds_an_titular.nome_colaborador AS analista_titular,
ds_an_titular.matricula_colaborador AS matricula_analista_titular,
ds_an_suplente.nome_colaborador AS analista_suplente,
ds_an_suplente.matricula_colaborador AS matricula_analista_suplente,
ds_gs_titular.nome_colaborador AS gestor_titular,
ds_gs_titular.matricula_colaborador AS matricula_gestor_titular,
ds_gs_suplente.nome_colaborador AS gestor_suplente,
ds_gs_suplente.matricula_colaborador AS matricula_gestor_suplente,
ds_fs_titular.nome_colaborador AS fiscal_servico_titular,
ds_fs_titular.matricula_colaborador AS matricula_fiscal_servico_titular,
ds_fs_suplente.nome_colaborador AS fiscal_servico_suplente,
ds_fs_suplente.matricula_colaborador AS matricula_fiscal_servico_suplente,
MD5(CONCAT_WS(
'',
contrato.gescon_nm_dgco,
contrato.gescon_ds_objeto,
contrato.gescon_nm_razao_social,
ds_fa_titular.nome_colaborador,
ds_fa_titular.matricula_colaborador,
ds_fa_suplente.nome_colaborador,
ds_fa_suplente.matricula_colaborador,
ds_an_titular.nome_colaborador,
ds_an_titular.matricula_colaborador,
ds_an_suplente.nome_colaborador,
ds_an_suplente.matricula_colaborador,
ds_gs_titular.nome_colaborador,
ds_gs_titular.matricula_colaborador,
ds_gs_suplente.nome_colaborador,
ds_gs_suplente.matricula_colaborador
)) AS unique_id
FROM dcf_contratos contrato
LEFT JOIN dcf_contratos_designacoes ds_fa_titular
ON ds_fa_titular.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_fa_titular.tipo_designacao = 'FISCALIZACAO_MASTER'
AND ds_fa_titular.titular_ou_suplente = 'titular'
AND ds_fa_titular.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_fa_suplente
ON ds_fa_suplente.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_fa_suplente.tipo_designacao = 'FISCALIZACAO_MASTER'
AND ds_fa_suplente.titular_ou_suplente = 'suplente'
AND ds_fa_suplente.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_fa_titular2
ON ds_fa_titular2.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_fa_titular2.tipo_designacao = 'FISCALIZACAO_ADMINISTRATIVA'
AND ds_fa_titular2.titular_ou_suplente = 'titular'
AND ds_fa_titular2.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_fa_suplente2
ON ds_fa_suplente2.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_fa_suplente2.tipo_designacao = 'FISCALIZACAO_ADMINISTRATIVA'
AND ds_fa_suplente2.titular_ou_suplente = 'suplente'
AND ds_fa_suplente2.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_fs_titular
ON ds_fs_titular.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_fs_titular.tipo_designacao = 'FISCALIZACAO_SERVICO'
AND ds_fs_titular.titular_ou_suplente = 'titular'
AND ds_fs_titular.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_fs_suplente
ON ds_fs_suplente.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_fs_suplente.tipo_designacao = 'FISCALIZACAO_SERVICO'
AND ds_fs_suplente.titular_ou_suplente = 'suplente'
AND ds_fs_suplente.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_an_titular
ON ds_an_titular.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_an_titular.tipo_designacao = 'ANALISTA_CONTRATO'
AND ds_an_titular.titular_ou_suplente = 'titular'
AND ds_an_titular.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_an_suplente
ON ds_an_suplente.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_an_suplente.tipo_designacao = 'ANALISTA_CONTRATO'
AND ds_an_suplente.titular_ou_suplente = 'suplente'
AND ds_an_suplente.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_gs_titular
ON ds_gs_titular.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_gs_titular.tipo_designacao = 'GESTAO_CONTRATO'
AND ds_gs_titular.titular_ou_suplente = 'titular'
AND ds_gs_titular.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_gs_suplente
ON ds_gs_suplente.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_gs_suplente.tipo_designacao = 'GESTAO_CONTRATO'
AND ds_gs_suplente.titular_ou_suplente = 'suplente'
AND ds_gs_suplente.status = 'VIGENTE'
WHERE contrato.gescon_nm_dgco = :dgco AND contrato.gescon_ds_serv_fisc_comissao = 'N';
");
$command->bindValue(':dgco', $dgco);
$dados = $command->queryAll();
return json_encode($dados);
} else {
return [
'error' => 'Método não permitido. Ausência de dados na requisicao ao endpoint.',
'requisicao' => $request->method,
];
}
}
public function actionContratosVigentesDcf()
{
Yii::$app->response->format = Response::FORMAT_JSON;
$request = Yii::$app->getRequest();
if ($request->isGet) {
// Obtém a data atual
$formatter = Yii::$app->formatter;
$month = (int)$formatter->asDate('now', 'MM');
$year = (int)$formatter->asDate('now', 'yyyy');
// Calcula o trimestre
$quarter = ceil($month / 3);
// Executa a consulta no banco de dados
$dados = Yii::$app->db->createCommand("SELECT gescon_nm_dgco AS dgco, gescon_ds_serv_fisc_comissao AS fiscalizado_comissao, gescon_nm_gerencia AS nm_gerencia, gescon_ds_cat_compra AS cat_compra FROM dcf_contratos WHERE gescon_ds_status IN ('CONTRATO_VIGENTE', 'AGUARDANDO_SUBSIDIOS_DEMANDANTE', 'EM_RENOVACAO', 'NAO_SERA_RENOVADO') AND gescon_ds_cat_compra NOT IN ('CONTRATO CLIENTE') AND gescon_ds_cat_compra NOT LIKE '%outros%';")->queryAll();
// Adiciona o período e o ano a cada item do resultado
foreach ($dados as &$dado) {
$dado['periodo'] = $quarter;
$dado['ano'] = $year;
}
// Retorna o resultado como JSON
return $dados;
} else {
return [
'error' => 'Método não permitido. Apenas GET é permitido neste endpoint.',
'requisicao' => $request->method,
];
}
}
public function actionInserirAvaliacao(string $dgco, float $nota, int $periodo, int $ano, int $matricula_avaliador, string $tipo_avaliador, string $os)
{
Yii::$app->response->format = Response::FORMAT_JSON;
$dgco = filter_var($dgco, FILTER_SANITIZE_SPECIAL_CHARS);
// Validação
if (!preg_match('/^\d{5}\/\d{4}$/', $dgco)) {
throw new InvalidArgumentException("Parâmetro 'dgco' inválido.");
}
$request = Yii::$app->getRequest();
if ($request->isGet) {
// Executa a consulta no banco de dados
$dadosContrato = Yii::$app->db->createCommand("SELECT id_contrato_fornecedor, gescon_nm_dgco FROM dcf_contratos WHERE gescon_nm_dgco = :dgco;")
->bindValue(":dgco", $dgco)
->queryOne();
if (isset($dadosContrato)) {
// Executa a inserção
Yii::$app->db->createCommand("INSERT INTO dcf_avaliacoes_trimestrais (id_contrato, nota, periodo, ano, matricula_colaborador, tipo_avaliador, numero_os) VALUES(:idContrato, :nota, :periodo, :ano, :matricula_colaborador, :tipo_avaliador, :numero_os);")
->bindValue(":idContrato", $dadosContrato['id_contrato_fornecedor'])
->bindValue(":nota", $nota)
->bindValue(":periodo", $periodo)
->bindValue(":ano", $ano)
->bindValue(":matricula_colaborador", $matricula_avaliador)
->bindValue(":tipo_avaliador", $tipo_avaliador)
->bindValue(":numero_os", $os)
->execute();
// Retorna o resultado como JSON
return json_encode(["success" => true]);
} else {
return json_encode([
'error' => 'Contrato não encontrado para o DGCO informado.',
]);
}
} else {
return json_encode([
'error' => 'Método não permitido. Apenas GET é permitido neste endpoint.',
'requisicao' => $request->method,
]);
}
}
public function actionGerarDgco()
{
//Yii::$app->response->format = Response::FORMAT_JSON;
if (Yii::$app->request->isPost) {
$matricula_solicitante = Yii::$app->request->post('matricula_solicitante');
$motivo = Yii::$app->request->post('motivo');
$cnpj_cpf = Yii::$app->request->post('cnpj_cpf');
$tipo = Yii::$app->request->post('tipo', null);
$nr_os = Yii::$app->request->post('nr_os', null);
$razao_social = Yii::$app->request->post('razao_social', null);
$fisica_juridica = Yii::$app->request->post('fisica_juridica', null);
// Sanitização e validação
$matricula_solicitante = filter_var($matricula_solicitante, FILTER_VALIDATE_INT);
$nr_os = $nr_os !== null ? filter_var($nr_os, FILTER_VALIDATE_INT) : null;
$motivo = filter_var($motivo, FILTER_SANITIZE_SPECIAL_CHARS);
$cnpj_cpf = filter_var($cnpj_cpf, FILTER_SANITIZE_SPECIAL_CHARS);
$tipo = filter_var($tipo, FILTER_SANITIZE_SPECIAL_CHARS);
$razao_social = filter_var($razao_social, FILTER_SANITIZE_SPECIAL_CHARS);
$fisica_juridica = filter_var($fisica_juridica, FILTER_SANITIZE_SPECIAL_CHARS);
if ($matricula_solicitante === false || ($nr_os !== null && $nr_os === false)) {
return [
'success' => false,
'message' => 'Parâmetros inválidos.'
];
}
date_default_timezone_set('America/Sao_Paulo');
$datetime = new DateTime();
$ano = $datetime->format('Y');
function preencherZeros($number, $length = 5)
{
return str_pad($number, $length, '0', STR_PAD_LEFT);
}
$id_fornecedor = 0;
$fornecedor = Yii::$app->db->createCommand("SELECT * FROM dicocdb.tb_fornecedores WHERE cnpj_cpf = :cnpj_cpf")
->bindValue(':cnpj_cpf', $cnpj_cpf)
->queryOne();
if (empty($fornecedor)) { // Verificando se o fornecedor não existe
Yii::$app->db->createCommand("INSERT INTO dicocdb.tb_fornecedores (fisica_juridica, razao_social, cnpj_cpf, tipo) VALUES (:fisica_juridica, :razao_social, :cnpj_cpf, :tipo)")
->bindValue(':fisica_juridica', $fisica_juridica)
->bindValue(':razao_social', $razao_social)
->bindValue(':cnpj_cpf', $cnpj_cpf)
->bindValue(':tipo', $tipo)
->execute(); // Usar execute() para executar o comando
// Pegando o último ID inserido
$id_fornecedor = Yii::$app->db->getLastInsertID();
} else {
$id_fornecedor = $fornecedor['id'];
}
$maiorSequencial = Yii::$app->db->createCommand("SELECT MAX(sequencial) as maior_sequencial FROM dicocdb.acervo_dgcos WHERE ano = :ano")
->bindValue(':ano', $ano)
->queryScalar();
$novoSequencial = $maiorSequencial == null ? 1 : $maiorSequencial + 1;
$sequencialComZeros = preencherZeros($novoSequencial);
$dgco = "$sequencialComZeros/$ano";
$dadosDgco = Yii::$app->db->createCommand('SELECT * FROM dicocdb.acervo_dgcos WHERE dgco = :dgco')
->bindValue(':dgco', $dgco)
->queryOne();
if ($dadosDgco == null) {
try {
$data_solicitacao = date('Y-m-d H:i:s');
Yii::$app->db->createCommand("INSERT INTO dicocdb.acervo_dgcos (dgco, sequencial, ano, matricula_solicitante, data_solicitacao, motivo, nr_os, cnpj_cpf, status, tipo, razao_social, fisica_juridica, id_tb_fornecedores) VALUES (:dgco, :sequencial, :ano, :matricula_solicitante, :data_solicitacao, :motivo, :nr_os, :cnpj_cpf, 1, :tipo, :razao_social, :fisica_juridica, :id_fornecedor)")
->bindValue(':dgco', $dgco)
->bindValue(':sequencial', $novoSequencial)
->bindValue(':ano', $ano)
->bindValue(':matricula_solicitante', $matricula_solicitante)
->bindValue(':data_solicitacao', $data_solicitacao)
->bindValue(':motivo', $motivo)
->bindValue(':nr_os', $nr_os)
->bindValue(':cnpj_cpf', $cnpj_cpf)
->bindValue(':tipo', $tipo)
->bindValue(':fisica_juridica', $fisica_juridica)
->bindValue(':razao_social', $razao_social)
->bindValue(':id_fornecedor', $id_fornecedor)
->execute();
return [
'success' => true,
'message' => 'DGCO gerado com sucesso!',
'maiorSequencial' => $novoSequencial,
'ano' => $ano,
'dgco' => $dgco,
'matricula_solicitante' => $matricula_solicitante
];
} catch (\Exception $e) {
return [
'success' => false,
'message' => 'Erro ao inserir no banco de dados: ' . $e->getMessage(),
'maiorSequencial' => $novoSequencial,
'ano' => $ano,
'dgco' => $dgco
];
}
} else {
return [
'success' => false,
'message' => 'DGCO já existe.',
'maiorSequencial' => $novoSequencial,
'ano' => $ano,
'dgco' => $dgco
];
}
} else {
return [
'success' => false,
'message' => 'A requisição deve ser apenas através do método POST.'
];
}
}
public function actionAtualizarDgcoProcessoDilic(string $dgco, string $os)
{
Yii::$app->response->format = Response::FORMAT_JSON;
$dgco = filter_var($dgco, FILTER_SANITIZE_SPECIAL_CHARS);
$os = filter_var($os, FILTER_SANITIZE_SPECIAL_CHARS);
// Validação
if (!preg_match('/^\d{5}\/\d{4}$/', $dgco)) {
throw new InvalidArgumentException("Parâmetro 'dgco' inválido.");
}
$request = Yii::$app->getRequest();
if ($request->isGet) {
// Tenta obter os dados da requisição POST
$dados = Yii::$app->db->createCommand("SELECT * FROM dicocdb.dil_tb_processo_contratacao WHERE os_supra_dgco = :os;")->bindValue(':os', $os)->queryOne();
if ($dados) {
Yii::$app->db->createCommand("UPDATE dicocdb.dil_tb_processo_contratacao SET numero_dgco = :dgco WHERE os_supra_dgco = :os;")
->bindValue(':os', $os)
->bindValue(':dgco', $dgco)
->execute();
$dados = Yii::$app->db->createCommand("SELECT * FROM dicocdb.dil_tb_processo_contratacao WHERE numero_dgco = :dgco;")
->bindValue(':dgco', $dgco)
->queryOne();
return [
'error' => false,
'message' => 'Processo atualizado com sucesso.',
'processo' => $dados,
];
} else {
return [
'error' => true,
'message' => 'Processo não localizado.',
'os' => $os,
];
}
} else {
return [
'error' => true,
'message' => 'Método não permitido. Ausência de dados na requisicao ao endpoint.',
'requisicao' => $request->method,
];
}
}
public function actionAtualizarSituacao(string $dgco, string $status)
{
Yii::$app->response->format = Response::FORMAT_JSON;
$dgco = filter_var($dgco, FILTER_SANITIZE_SPECIAL_CHARS);
$status = filter_var($status, FILTER_SANITIZE_SPECIAL_CHARS);
// Validação
if (!preg_match('/^\d{5}\/\d{4}$/', $dgco)) {
throw new InvalidArgumentException("Parâmetro 'dgco' inválido.");
}
$request = Yii::$app->getRequest();
if ($request->isGet) {
// Tenta obter os dados da requisição POST
$dados = Yii::$app->db->createCommand("SELECT contrato.* FROM dcf_contratos contrato WHERE gescon_nm_dgco = :dgco;")->bindValue(':dgco', $dgco)->queryOne();
if ($dados) {
Yii::$app->db->createCommand("UPDATE dcf_contratos SET gescon_ds_status = :status WHERE gescon_nm_dgco = :dgco;")
->bindValue(':status', $status)
->bindValue(':dgco', $dgco)
->execute();
$dados = Yii::$app->db->createCommand("SELECT contrato.* FROM dcf_contratos contrato WHERE gescon_nm_dgco = :dgco;")
->bindValue(':dgco', $dgco)
->queryOne();
return [
'error' => false,
'message' => 'Status do contrato atualizado com sucesso.',
'contrato' => $dados,
];
} else {
return [
'error' => true,
'message' => 'Contrato não localizado.',
'dgco' => $dgco,
];
}
} else {
return [
'error' => true,
'message' => 'Método não permitido. Ausência de dados na requisicao ao endpoint.',
'requisicao' => $request->method,
];
}
}
public function actionInserirOrdemServico(string $dgco, string $numero_chamado)
{
Yii::$app->response->format = Response::FORMAT_JSON;
$dgco = filter_var($dgco, FILTER_SANITIZE_SPECIAL_CHARS);
$numero_chamado = filter_var($numero_chamado, FILTER_SANITIZE_SPECIAL_CHARS);
// Validação
if (!preg_match('/^\d{5}\/\d{4}$/', $dgco)) {
throw new InvalidArgumentException("Parâmetro 'dgco' inválido.");
}
if (!Yii::$app->request->isPost) {
// Verifica se o contrato existe
$contrato = Yii::$app->db->createCommand("SELECT * FROM dcf_contratos WHERE gescon_nm_dgco = :dgco")
->bindValue(':dgco', $dgco)
->queryOne();
// Se o contrato não existir, retorna uma mensagem de erro
if (!$contrato) {
return ['success' => false, 'message' => 'Contrato inexistente.'];
}
// Define o valor de id_contrato_fornecedor com base no contrato existente
$id_contrato_fornecedor = $contrato['id_contrato_fornecedor'];
// Define os valores para a inserção
$descricao = 'Vinculação Teste p/ Exibição do Chamado de 200 Dias.';
$situacao = 0; // Ajuste conforme necessário
$dataHoraChamado = date('Y-m-d H:i:s');
// Cria a consulta de inserção
$command = Yii::$app->db->createCommand("INSERT INTO dcf_chamados_duzentos_dias (id_contrato_fornecedor, numero_chamado, descricao, situacao, data_hora_chamado) VALUES(:id_contrato_fornecedor, :numero_chamado, :descricao, :situacao, :data_hora_chamado)");
// Adiciona os valores aos parâmetros da consulta
$command->bindValues([
':id_contrato_fornecedor' => $id_contrato_fornecedor,
':numero_chamado' => $numero_chamado,
':descricao' => $descricao,
':situacao' => $situacao,
':data_hora_chamado' => $dataHoraChamado,
])->execute();
return ['success' => true, 'message' => 'Obtenção de Dados logrou sucesso.'];
} else {
// Requisição não é do tipo POST
return ['success' => false, 'message' => 'A requisição deve ser apenas através do método GET.'];
}
}
//inserir ordens de serviço encerramento
public function actionInserirOrdemServicoEncerramento(string $dgco, string $numero_chamado)
{
Yii::$app->response->format = Response::FORMAT_JSON;
$dgco = filter_var($dgco, FILTER_SANITIZE_SPECIAL_CHARS);
$numero_chamado = filter_var($numero_chamado, FILTER_SANITIZE_SPECIAL_CHARS);
// Validação
if (!preg_match('/^\d{5}\/\d{4}$/', $dgco)) {
throw new InvalidArgumentException("Parâmetro 'dgco' inválido.");
}
if (!Yii::$app->request->isPost) {
// Verifica se o contrato existe
$contrato = Yii::$app->db->createCommand("SELECT * FROM dcf_contratos WHERE gescon_nm_dgco = :dgco")
->bindValue(':dgco', $dgco)
->queryOne();
// Se o contrato não existir, retorna uma mensagem de erro
if (!$contrato) {
return ['success' => false, 'message' => 'Contrato inexistente.'];
}
// Define o valor de id_contrato_fornecedor com base no contrato existente
$id_contrato_fornecedor = $contrato['id_contrato_fornecedor'];
// Define os valores para a inserção
$descricao = 'Vinculação Teste p/ Exibição do Chamado de 200 Dias.';
$situacao = 0; // Ajuste conforme necessário
$dataHoraChamado = date('Y-m-d H:i:s');
// Cria a consulta de inserção
$command = Yii::$app->db->createCommand("INSERT INTO dcf_chamados_encerramento (id_contrato_fornecedor, numero_chamado, descricao, situacao, data_hora_chamado) VALUES(:id_contrato_fornecedor, :numero_chamado, :descricao, :situacao, :data_hora_chamado)");
// Adiciona os valores aos parâmetros da consulta
$command->bindValues([
':id_contrato_fornecedor' => $id_contrato_fornecedor,
':numero_chamado' => $numero_chamado,
':descricao' => $descricao,
':situacao' => $situacao,
':data_hora_chamado' => $dataHoraChamado,
])->execute();
return ['success' => true, 'message' => 'Obtenção de Dados logrou sucesso.'];
} else {
// Requisição não é do tipo POST
return ['success' => false, 'message' => 'A requisição deve ser apenas através do método GET.'];
}
}
public function actionConsultarContratosDuzentosDias()
{
Yii::$app->response->format = Response::FORMAT_JSON;
if (!Yii::$app->request->isPost) {
$contratos = Yii::$app->db->createCommand("SELECT
contrato.*,
c200.numero_chamado,
DATEDIFF(CURRENT_DATE, contrato.dt_inicio_vigencia) AS dias_desde_inicio,
DATEDIFF(contrato.dt_fim_vigencia, CURRENT_DATE) AS dias_para_fim,
ds_fa_titular.nome_colaborador AS fiscal_master_titular,
ds_fa_titular.matricula_colaborador AS matricula_fiscal_master_titular,
ds_fa_suplente.nome_colaborador AS fiscal_master_suplente,
ds_fa_suplente.matricula_colaborador AS matricula_fiscal_master_suplente,
ds_fa_titular2.nome_colaborador AS fiscal_administrativo_titular,
ds_fa_titular2.matricula_colaborador AS matricula_fiscal_administrativo_titular,
ds_fa_suplente2.nome_colaborador AS fiscal_administrativo_suplente,
ds_fa_suplente2.matricula_colaborador AS matricula_fiscal_administrativo_suplente,
ds_fa_titular3.nome_colaborador AS fiscal_servico_titular,
ds_fa_titular3.matricula_colaborador AS matricula_fiscal_servico_titular,
ds_fa_suplente3.nome_colaborador AS fiscal_servico_suplente,
ds_fa_suplente3.matricula_colaborador AS matricula_fiscal_servico_suplente,
ds_an_titular.nome_colaborador AS analista_titular,
ds_an_titular.matricula_colaborador AS matricula_analista_titular,
ds_an_suplente.nome_colaborador AS analista_suplente,
ds_an_suplente.matricula_colaborador AS matricula_analista_suplente,
ds_gs_titular.nome_colaborador AS gestor_titular,
ds_gs_titular.matricula_colaborador AS matricula_gestor_titular,
ds_gs_suplente.nome_colaborador AS gestor_suplente,
ds_gs_suplente.matricula_colaborador AS matricula_gestor_suplente
FROM
dcf_contratos contrato
LEFT JOIN (
SELECT
id_contrato_fornecedor,
MAX(id) AS max_id_chamado
FROM
dcf_chamados_duzentos_dias
WHERE
YEAR(data_hora_chamado) = YEAR(CURRENT_DATE())
GROUP BY
id_contrato_fornecedor
) c200_max ON c200_max.id_contrato_fornecedor = contrato.id_contrato_fornecedor
LEFT JOIN dcf_chamados_duzentos_dias c200 ON c200.id_contrato_fornecedor = c200_max.id_contrato_fornecedor
AND c200.id = c200_max.max_id_chamado
LEFT JOIN dcf_contratos_designacoes ds_fa_titular ON ds_fa_titular.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_fa_titular.tipo_designacao = 'FISCALIZACAO_MASTER'
AND ds_fa_titular.titular_ou_suplente = 'titular'
AND ds_fa_titular.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_fa_suplente ON ds_fa_suplente.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_fa_suplente.tipo_designacao = 'FISCALIZACAO_MASTER'
AND ds_fa_suplente.titular_ou_suplente = 'suplente'
AND ds_fa_suplente.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_fa_titular2 ON ds_fa_titular2.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_fa_titular2.tipo_designacao = 'FISCALIZACAO_ADMINISTRATIVA'
AND ds_fa_titular2.titular_ou_suplente = 'titular'
AND ds_fa_titular2.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_fa_suplente2 ON ds_fa_suplente2.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_fa_suplente2.tipo_designacao = 'FISCALIZACAO_ADMINISTRATIVA'
AND ds_fa_suplente2.titular_ou_suplente = 'suplente'
AND ds_fa_suplente2.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_fa_titular3 ON ds_fa_titular3.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_fa_titular3.tipo_designacao = 'FISCALIZACAO_SERVICO'
AND ds_fa_titular3.titular_ou_suplente = 'titular'
AND ds_fa_titular3.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_fa_suplente3 ON ds_fa_suplente3.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_fa_suplente3.tipo_designacao = 'FISCALIZACAO_SERVICO'
AND ds_fa_suplente3.titular_ou_suplente = 'suplente'
AND ds_fa_suplente3.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_an_titular ON ds_an_titular.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_an_titular.tipo_designacao = 'ANALISTA_CONTRATO'
AND ds_an_titular.titular_ou_suplente = 'titular'
AND ds_an_titular.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_an_suplente ON ds_an_suplente.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_an_suplente.tipo_designacao = 'ANALISTA_CONTRATO'
AND ds_an_suplente.titular_ou_suplente = 'suplente'
AND ds_an_suplente.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_gs_titular ON ds_gs_titular.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_gs_titular.tipo_designacao = 'GESTAO_CONTRATO'
AND ds_gs_titular.titular_ou_suplente = 'titular'
AND ds_gs_titular.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_gs_suplente ON ds_gs_suplente.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_gs_suplente.tipo_designacao = 'GESTAO_CONTRATO'
AND ds_gs_suplente.titular_ou_suplente = 'suplente'
AND ds_gs_suplente.status = 'VIGENTE'
WHERE
contrato.gescon_ds_status IN ('CONTRATO_VIGENTE', 'DESIGNADO')
AND contrato.gescon_ds_cat_compra NOT IN ('CONTRATO CLIENTE')
AND contrato.gescon_ds_cat_compra NOT LIKE '%outros/%'
AND c200.numero_chamado IS NULL
AND c200.gescon_ds_vedada_renovacao = 'N'
AND DATEDIFF(contrato.dt_fim_vigencia, CURRENT_DATE) > 0
AND DATEDIFF(contrato.dt_fim_vigencia, CURRENT_DATE) <= 200;")->queryAll();
return ['success' => true, 'message' => 'Obtenção de Dados logrou sucesso.', 'contratos' => $contratos];
} else {
// Requisição não é do tipo POST
return ['success' => false, 'message' => 'A requisição deve ser apenas através do método GET.'];
}
}
// esse endpoint é para os casos dos contratos que não podem ser renovados no fluxo de 200 dias
public function actionConsultarContratosDuzentosDiasVedada()
{
Yii::$app->response->format = Response::FORMAT_JSON;
if (!Yii::$app->request->isPost) {
$contratos = Yii::$app->db->createCommand("SELECT
contrato.*,
c200.numero_chamado,
DATEDIFF(CURRENT_DATE, contrato.dt_inicio_vigencia) AS dias_desde_inicio,
DATEDIFF(contrato.dt_fim_vigencia, CURRENT_DATE) AS dias_para_fim,
ds_fa_titular.nome_colaborador AS fiscal_master_titular,
ds_fa_titular.matricula_colaborador AS matricula_fiscal_master_titular,
ds_fa_suplente.nome_colaborador AS fiscal_master_suplente,
ds_fa_suplente.matricula_colaborador AS matricula_fiscal_master_suplente,
ds_fa_titular2.nome_colaborador AS fiscal_administrativo_titular,
ds_fa_titular2.matricula_colaborador AS matricula_fiscal_administrativo_titular,
ds_fa_suplente2.nome_colaborador AS fiscal_administrativo_suplente,
ds_fa_suplente2.matricula_colaborador AS matricula_fiscal_administrativo_suplente,
ds_fa_titular3.nome_colaborador AS fiscal_servico_titular,
ds_fa_titular3.matricula_colaborador AS matricula_fiscal_servico_titular,
ds_fa_suplente3.nome_colaborador AS fiscal_servico_suplente,
ds_fa_suplente3.matricula_colaborador AS matricula_fiscal_servico_suplente,
ds_an_titular.nome_colaborador AS analista_titular,
ds_an_titular.matricula_colaborador AS matricula_analista_titular,
ds_an_suplente.nome_colaborador AS analista_suplente,
ds_an_suplente.matricula_colaborador AS matricula_analista_suplente,
ds_gs_titular.nome_colaborador AS gestor_titular,
ds_gs_titular.matricula_colaborador AS matricula_gestor_titular,
ds_gs_suplente.nome_colaborador AS gestor_suplente,
ds_gs_suplente.matricula_colaborador AS matricula_gestor_suplente
FROM
dcf_contratos contrato
LEFT JOIN (
SELECT
id_contrato_fornecedor,
MAX(id) AS max_id_chamado
FROM
dcf_chamados_duzentos_dias
WHERE
YEAR(data_hora_chamado) = YEAR(CURRENT_DATE())
GROUP BY
id_contrato_fornecedor
) c200_max ON c200_max.id_contrato_fornecedor = contrato.id_contrato_fornecedor
LEFT JOIN dcf_chamados_encerramento c200 ON c200.id_contrato_fornecedor = c200_max.id_contrato_fornecedor
AND c200.id = c200_max.max_id_chamado
LEFT JOIN dcf_contratos_designacoes ds_fa_titular ON ds_fa_titular.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_fa_titular.tipo_designacao = 'FISCALIZACAO_MASTER'
AND ds_fa_titular.titular_ou_suplente = 'titular'
AND ds_fa_titular.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_fa_suplente ON ds_fa_suplente.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_fa_suplente.tipo_designacao = 'FISCALIZACAO_MASTER'
AND ds_fa_suplente.titular_ou_suplente = 'suplente'
AND ds_fa_suplente.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_fa_titular2 ON ds_fa_titular2.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_fa_titular2.tipo_designacao = 'FISCALIZACAO_ADMINISTRATIVA'
AND ds_fa_titular2.titular_ou_suplente = 'titular'
AND ds_fa_titular2.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_fa_suplente2 ON ds_fa_suplente2.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_fa_suplente2.tipo_designacao = 'FISCALIZACAO_ADMINISTRATIVA'
AND ds_fa_suplente2.titular_ou_suplente = 'suplente'
AND ds_fa_suplente2.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_fa_titular3 ON ds_fa_titular3.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_fa_titular3.tipo_designacao = 'FISCALIZACAO_SERVICO'
AND ds_fa_titular3.titular_ou_suplente = 'titular'
AND ds_fa_titular3.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_fa_suplente3 ON ds_fa_suplente3.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_fa_suplente3.tipo_designacao = 'FISCALIZACAO_SERVICO'
AND ds_fa_suplente3.titular_ou_suplente = 'suplente'
AND ds_fa_suplente3.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_an_titular ON ds_an_titular.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_an_titular.tipo_designacao = 'ANALISTA_CONTRATO'
AND ds_an_titular.titular_ou_suplente = 'titular'
AND ds_an_titular.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_an_suplente ON ds_an_suplente.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_an_suplente.tipo_designacao = 'ANALISTA_CONTRATO'
AND ds_an_suplente.titular_ou_suplente = 'suplente'
AND ds_an_suplente.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_gs_titular ON ds_gs_titular.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_gs_titular.tipo_designacao = 'GESTAO_CONTRATO'
AND ds_gs_titular.titular_ou_suplente = 'titular'
AND ds_gs_titular.status = 'VIGENTE'
LEFT JOIN dcf_contratos_designacoes ds_gs_suplente ON ds_gs_suplente.tb_contratos_fornecedor_id = contrato.id_contrato_fornecedor
AND ds_gs_suplente.tipo_designacao = 'GESTAO_CONTRATO'
AND ds_gs_suplente.titular_ou_suplente = 'suplente'
AND ds_gs_suplente.status = 'VIGENTE'
WHERE
contrato.gescon_ds_status IN ('CONTRATO_VIGENTE', 'DESIGNADO')
AND contrato.gescon_ds_cat_compra NOT IN ('CONTRATO CLIENTE')
AND contrato.gescon_ds_cat_compra NOT LIKE '%outros/%'
AND c200.numero_chamado IS NULL
AND c200.gescon_ds_vedada_renovacao = 'S'
AND DATEDIFF(contrato.dt_fim_vigencia, CURRENT_DATE) > 0
AND DATEDIFF(contrato.dt_fim_vigencia, CURRENT_DATE) <= 200;")->queryAll();
return ['success' => true, 'message' => 'Obtenção de Dados logrou sucesso.', 'contratos' => $contratos];
} else {
// Requisição não é do tipo POST
return ['success' => false, 'message' => 'A requisição deve ser apenas através do método GET.'];
}
}
public function actionBuscarDadosContrato(string $dgco)
{
Yii::$app->response->format = Response::FORMAT_JSON;
// Sanitização básica: Remover espaços em branco
$dgco = filter_var($dgco, FILTER_SANITIZE_SPECIAL_CHARS);
// Validação
if (!preg_match('/^\d{5}\/\d{4}$/', $dgco)) {
throw new InvalidArgumentException("Parâmetro 'dgco' inválido.");
}
// Verifica se a requisição é do tipo POST
if (!Yii::$app->request->isPost) {
if ($dgco != null) {
$contrato = Yii::$app->db->createCommand("SELECT * FROM dicocdb.dcf_contratos WHERE gescon_nm_dgco = :dgco;")->bindValue(':dgco', $dgco)->queryOne();
$gestorTitular = Yii::$app->db->createCommand("SELECT * FROM dicocdb.dcf_contratos_designacoes WHERE tipo_designacao = 'GESTAO_CONTRATO' AND titular_ou_suplente = 'titular' AND status = 'VIGENTE' AND tb_contratos_fornecedor_id = :idContrato;")->bindValue(':idContrato', $contrato['id_contrato_fornecedor'])->queryOne();
$analistaTitular = Yii::$app->db->createCommand("SELECT * FROM dicocdb.dcf_contratos_designacoes WHERE tipo_designacao = 'ANALISTA_CONTRATO' AND titular_ou_suplente = 'titular' AND status = 'VIGENTE' AND tb_contratos_fornecedor_id = :idContrato;")->bindValue(':idContrato', $contrato['id_contrato_fornecedor'])->queryOne();
$analistaSuplente = Yii::$app->db->createCommand("SELECT * FROM dicocdb.dcf_contratos_designacoes WHERE tipo_designacao = 'ANALISTA_CONTRATO' AND titular_ou_suplente = 'suplente' AND status = 'VIGENTE' AND tb_contratos_fornecedor_id = :idContrato;")->bindValue(':idContrato', $contrato['id_contrato_fornecedor'])->queryOne();
if ($contrato) {
return ['success' => true, 'message' => 'A requisição foi processada com sucesso.', 'contrato' => $contrato, 'analistaSuplente' => $analistaSuplente, 'gestorTitular' => $gestorTitular, 'analistaTitular' => $analistaTitular];
} else {
return ['success' => false, 'message' => 'Contrato não encontrado!'];
}
} else {
return ['success' => false, 'message' => 'Preencha o DGCO!'];
}
} else {
// Requisição não é do tipo POST
return ['success' => false, 'message' => 'A requisição deve ser apenas através do método POST.'];
}
}
public function actionAtualizarIntervenientesSisccon(string $dgco = null, string $matriculaGestorTitular = null, string $matriculaAnalistaTitular = null, string $matriculaAnalistaSuplente = null)
{
Yii::$app->response->format = Response::FORMAT_JSON;
// Verifica se a requisição é do tipo POST
if (!Yii::$app->request->isPost) {
throw new BadRequestHttpException('A requisição deve ser apenas através do método POST.');
}
if ($dgco === null) {
return ['success' => false, 'message' => 'Preencha o DGCO!'];
}
// Sanitiza a entrada para prevenir XSS
$dgco = htmlspecialchars($dgco, ENT_QUOTES, 'UTF-8');
$matriculaGestorTitular = htmlspecialchars($matriculaGestorTitular, ENT_QUOTES, 'UTF-8');
$matriculaAnalistaTitular = htmlspecialchars($matriculaAnalistaTitular, ENT_QUOTES, 'UTF-8');
$matriculaAnalistaSuplente = htmlspecialchars($matriculaAnalistaSuplente, ENT_QUOTES, 'UTF-8');
// Consulta segura ao banco de dados
$contrato = Yii::$app->db->createCommand("SELECT * FROM dicocdb.dcf_contratos WHERE gescon_nm_dgco = :dgco")
->bindValue(':dgco', $dgco)
->queryOne();
if (!$contrato) {
return ['success' => false, 'message' => 'Contrato não encontrado!'];
}
$gestorTitular = Yii::$app->db->createCommand("SELECT * FROM dicocdb.dcf_contratos_designacoes WHERE tipo_designacao = 'GESTAO_CONTRATO' AND titular_ou_suplente = 'titular' AND status = 'VIGENTE' AND tb_contratos_fornecedor_id = :idContrato")
->bindValue(':idContrato', $contrato['id_contrato_fornecedor'])
->queryOne();
$analistaTitular = Yii::$app->db->createCommand("SELECT * FROM dicocdb.dcf_contratos_designacoes WHERE tipo_designacao = 'ANALISTA_CONTRATO' AND titular_ou_suplente = 'titular' AND status = 'VIGENTE' AND tb_contratos_fornecedor_id = :idContrato")
->bindValue(':idContrato', $contrato['id_contrato_fornecedor'])
->queryOne();
$analistaSuplente = Yii::$app->db->createCommand("SELECT * FROM dicocdb.dcf_contratos_designacoes WHERE tipo_designacao = 'ANALISTA_CONTRATO' AND titular_ou_suplente = 'suplente' AND status = 'VIGENTE' AND tb_contratos_fornecedor_id = :idContrato")
->bindValue(':idContrato', $contrato['id_contrato_fornecedor'])
->queryOne();
$this->atualizarDesignacao($matriculaGestorTitular, $gestorTitular, 'GESTAO_CONTRATO', 'titular');
$this->atualizarDesignacao($matriculaAnalistaTitular, $analistaTitular, 'ANALISTA_CONTRATO', 'titular');
$this->atualizarDesignacao($matriculaAnalistaSuplente, $analistaSuplente, 'ANALISTA_CONTRATO', 'suplente');
return [
'success' => true,
'message' => 'A requisição foi processada com sucesso.',
'contrato' => $contrato,
'analistaSuplente' => $analistaSuplente,
'gestorTitular' => $gestorTitular,
'analistaTitular' => $analistaTitular
];
}
private function atualizarDesignacao(int $novaMatricula, $designacaoAtual, $tipoDesignacao, int $titularOuSuplente)
{
$designacao_atual_matricula = intval($designacaoAtual['matricula_colaborador']);
// Verifica se $numeroOS é um inteiro válido (diferente de 0)
if ($designacao_atual_matricula > 0) {
// Uso seguro na consulta SQL
} else {
// Lida com o caso de $numeroOS inválido
throw new \yii\web\BadRequestHttpException('Número de OS inválido.');
}
// Verifica se a nova matrícula é diferente da matrícula atual
if ($novaMatricula != $designacao_atual_matricula) {
// Busca o colaborador pelo número de matrícula de forma segura
$colaborador = Yii::$app->db->createCommand("SELECT * FROM dicocdb.tb_colaboradores WHERE matricula = :matricula")
->bindValue(':matricula', $novaMatricula, \PDO::PARAM_INT)
->queryOne();
if ($colaborador) {
// Atualiza o status da designação atual para "NÃO VIGENTE"
Yii::$app->db->createCommand("UPDATE dicocdb.dcf_contratos_designacoes SET status = 'NÃO VIGENTE' WHERE id = :idDesignacao")
->bindValue(':idDesignacao', $designacaoAtual['id'], \PDO::PARAM_INT)
->execute();
// Insere uma nova designação com o novo colaborador
Yii::$app->db->createCommand("INSERT INTO dicocdb.dcf_contratos_designacoes (tb_contratos_fornecedor_id, id_contrato, tipo_designacao, dt_designacao, status, nome_colaborador, matricula_colaborador, uor_colaborador, titular_ou_suplente) VALUES(:tb_contratos_fornecedor_id, :id_contrato, :tipoDesignacao, :dt_designacao, 'VIGENTE', :nome_colaborador, :matricula_colaborador, :uor_colaborador, :titular_ou_suplente)")
->bindValue(':tb_contratos_fornecedor_id', $designacaoAtual['tb_contratos_fornecedor_id'], \PDO::PARAM_INT)
->bindValue(':id_contrato', $designacaoAtual['id_contrato'], \PDO::PARAM_INT)
->bindValue(':tipoDesignacao', $tipoDesignacao, \PDO::PARAM_STR)
->bindValue(':dt_designacao', date('Y-m-d'), \PDO::PARAM_STR)
->bindValue(':nome_colaborador', strtoupper($colaborador['nome']), \PDO::PARAM_STR)
->bindValue(':matricula_colaborador', $colaborador['matricula'], \PDO::PARAM_INT)
->bindValue(':uor_colaborador', $colaborador['uor'], \PDO::PARAM_INT)
->bindValue(':titular_ou_suplente', $titularOuSuplente, \PDO::PARAM_INT)
->execute();
}
}
}
// Envio de Anexos:
public function actionDmsRetornarContratosAnexo($id_instrumento_vinculado)
{
// Obtenha a conexão oracle configurada
$connection = \Yii::$app->gescon;
try {
// Teste a conexão
$connection->open();
// Realiza o select
$results = $connection->createCommand("SELECT * FROM GESCON.CONTRATO_ANEXO WHERE id_instrumento_vinculado = " . $id_instrumento_vinculado)->queryAll();
// Retornar os resultados com o campo 'arquivo' convertido
return ['success' => true, 'data' => $results];
} catch (\Exception $e) {
return json_encode(['success' => false, 'error' => $e->getMessage()]);
}
}
public function actionDmsRetornarAnexoAnexoInfo($id_contrato_anexo)
{
// Obtenha a conexão oracle configurada
$connection = \Yii::$app->gescon;
// Realiza o select com LIMIT 1 e obtém apenas uma linha
$result = $connection->createCommand("SELECT * FROM GESCON.CONTRATO_ANEXO_ANEXO_INFO WHERE id_contrato_anexo = " . $id_contrato_anexo)->queryAll();
// Retorna o resultado
return ['success' => true, 'data' => $result];
}
public function actionDmsRetornarAnexosInfoGescon($id_anexo_info)
{
// Obtenha a conexão oracle configurada
$connection = \Yii::$app->gescon;
// Realiza o select
$results = $connection->createCommand("SELECT * FROM GESCON.ANEXO_INFO WHERE id_anexo_info = " . $id_anexo_info)->queryAll();
// Retorna o resultado
return ['success' => true, 'data' => $results];
}
public function actionDmsEnviarArquivo($id_anexo, $id_contrato_fornecedor, $id_instrumento, $nome, $extensao, $dt_inclusao, $id_func_inclusao)
{
$connection = \Yii::$app->gescon;
try {
// Conectando ao banco de dados
$connection->open();
Yii::debug("Conexão com o banco de dados aberta.");
// Executa a consulta para obter o arquivo
$result = $connection->createCommand("SELECT arquivo FROM GESCON.ANEXO WHERE id_anexo = :id")
->bindValue(':id', $id_anexo)
->queryOne();
$funcionarioResponsavelAnexo = $connection->createCommand("SELECT * FROM GESCON.FUNCIONARIO WHERE id = " . $id_func_inclusao)->queryAll();
$matriculaFuncionarioResponsavelAnexo = $funcionarioResponsavelAnexo ? $funcionarioResponsavelAnexo[0]['matricula'] : 0;
// Converter dt_inclusao para o formato YYYY-MM-DD
$dataConvertida = DateTime::createFromFormat('d-M-y', strtoupper($dt_inclusao));
if (!$dataConvertida) {
throw new \Exception("Formato de data inválido: {$dt_inclusao}");
}
$dataFormatada = $dataConvertida->format('Y-m-d');
Yii::debug("Resultado da consulta: " . print_r($result, true));
if (!$result || !isset($result['arquivo'])) {
throw new \Exception('Arquivo não encontrado.');
}
// Obtém o arquivo do resultado da consulta
$fileResource = $result['arquivo'];
// Gera um UUID para o novo anexo
$uuid = Uuid::uuid4()->toString();
// Cria a instância do modelo DcfAnexos
$model = new DmsAnexos();
$model->id_dilic_demanda = $id_contrato_fornecedor;
$model->id_anexo_gescon = $id_anexo;
$model->id_dipli_demanda = $id_contrato_fornecedor; // Supondo que seja o mesmo
$model->id_instrumento = $id_instrumento; // Supondo que seja o mesmo
$model->id_dil_tb_processo_contratacao = $id_instrumento; // Supondo que seja o mesmo
$model->id_dipli_demanda = $id_contrato_fornecedor; // Supondo que seja o mesmo
$model->data_hora_insercao = $dataFormatada;
$model->extensao = $extensao;
$model->nome = $nome; // Nome do arquivo
$model->uuid = $uuid;
$model->st_blob = 'portalgesuc'; // Defina o container adequado
$model->matricula_condutor = $matriculaFuncionarioResponsavelAnexo;
$model->atividade_do_anexo = 'Importado do Gescon';
$model->observacao = 'Importado do Gescon';
// Salva o modelo antes do upload
if ($model->save()) {
// Conexão com o serviço de Blob Storage
$azureConfig = require Yii::getAlias('@app/config/azure.php');
$connectionString = "DefaultEndpointsProtocol=https;AccountName={$azureConfig['account_name']};AccountKey={$azureConfig['account_key']};EndpointSuffix=core.windows.net";
$blobClient = BlobRestProxy::createBlobService($connectionString);
$contentType = 'application/octet-stream'; // Use conforme necessário
$options = new CreateBlockBlobOptions();
$options->setContentType($contentType);
// Converte o arquivo para um fluxo ou string
// Caso o arquivo seja um recurso
if (is_resource($fileResource)) {
// Se você estiver lidando com um recurso, use um buffer
$fileContent = stream_get_contents($fileResource);
} else {
// Se for uma string, você pode usar diretamente
$fileContent = $fileResource; // Ajuste se necessário
}
// Salva o arquivo no Azure Blob Storage
$blobName = $nome; // Nome único para o blob
$blobClient->createBlockBlob($model->st_blob, $blobName, $fileContent, $options);
// Se você precisa redirecionar ou retornar um sucesso
Yii::$app->getSession()->setFlash('success', 'Arquivo renderizado e salvo com sucesso!');
return ['success' => true];
} else {
throw new \Exception('Erro ao salvar o modelo de anexo: ' . implode(', ', $model->getFirstErrors()));
return ['success' => true];
}
} catch (\Throwable $th) {
Yii::$app->getSession()->setFlash('error', 'Erro ao tentar renderizar o arquivo: ' . $th->getMessage());
return ['success' => false];
// return $th->getMessage(); // Exibe uma página de erro customizada
}
}
// Envio de Anexos:
public function actionRetornarContratosAnexo($id_instrumento_vinculado)
{
// Obtenha a conexão oracle configurada
$connection = \Yii::$app->gescon;
try {
// Teste a conexão
$connection->open();
// Realiza o select
$results = $connection->createCommand("SELECT * FROM GESCON.CONTRATO_ANEXO WHERE id_instrumento_vinculado = " . $id_instrumento_vinculado)->queryAll();
// Retornar os resultados com o campo 'arquivo' convertido
return ['success' => true, 'data' => $results];
} catch (\Exception $e) {
return json_encode(['success' => false, 'error' => $e->getMessage()]);
}
}
public function actionRetornarAnexoAnexoInfo($id_contrato_anexo)
{
// Obtenha a conexão oracle configurada
$connection = \Yii::$app->gescon;
// Realiza o select com LIMIT 1 e obtém apenas uma linha
$result = $connection->createCommand("SELECT * FROM GESCON.CONTRATO_ANEXO_ANEXO_INFO WHERE id_contrato_anexo = " . $id_contrato_anexo)->queryAll();
// Retorna o resultado
return ['success' => true, 'data' => $result];
}
public function actionRetornarAnexosInfoGescon($id_anexo_info)
{
// Obtenha a conexão oracle configurada
$connection = \Yii::$app->gescon;
// Realiza o select
$results = $connection->createCommand("SELECT * FROM GESCON.ANEXO_INFO WHERE id_anexo_info = " . $id_anexo_info)->queryAll();
// Retorna o resultado
return ['success' => true, 'data' => $results];
}
public function actionEnviarArquivo($id_anexo, $id_contrato_fornecedor, $id_instrumento, $nome, $extensao, $dt_inclusao, $id_func_inclusao)
{
$connection = \Yii::$app->gescon;
try {
// Conectando ao banco de dados
$connection->open();
Yii::debug("Conexão com o banco de dados aberta.");
// Executa a consulta para obter o arquivo
$result = $connection->createCommand("SELECT arquivo FROM GESCON.ANEXO WHERE id_anexo = :id")
->bindValue(':id', $id_anexo)
->queryOne();
$funcionarioResponsavelAnexo = $connection->createCommand("SELECT * FROM GESCON.FUNCIONARIO WHERE id = " . $id_func_inclusao)->queryAll();
$matriculaFuncionarioResponsavelAnexo = $funcionarioResponsavelAnexo ? $funcionarioResponsavelAnexo[0]['matricula'] : 0;
// Converter dt_inclusao para o formato YYYY-MM-DD
$dataConvertida = DateTime::createFromFormat('d-M-y', strtoupper($dt_inclusao));
if (!$dataConvertida) {
throw new \Exception("Formato de data inválido: {$dt_inclusao}");
}
$dataFormatada = $dataConvertida->format('Y-m-d');
Yii::debug("Resultado da consulta: " . print_r($result, true));
if (!$result || !isset($result['arquivo'])) {
throw new \Exception('Arquivo não encontrado.');
}
// Obtém o arquivo do resultado da consulta
$fileResource = $result['arquivo'];
// Gera um UUID para o novo anexo
$uuid = Uuid::uuid4()->toString();
// Cria a instância do modelo DcfAnexos
$model = new DcfAnexos();
$model->id_dilic_demanda = $id_contrato_fornecedor;
$model->id_anexo_gescon = $id_anexo;
$model->id_dipli_demanda = $id_contrato_fornecedor; // Supondo que seja o mesmo
$model->id_instrumento = $id_instrumento; // Supondo que seja o mesmo
$model->id_dil_tb_processo_contratacao = $id_instrumento; // Supondo que seja o mesmo
$model->id_dipli_demanda = $id_contrato_fornecedor; // Supondo que seja o mesmo
$model->data_hora_insercao = $dataFormatada;
$model->extensao = $extensao;
$model->nome = $nome; // Nome do arquivo
$model->uuid = $uuid;
$model->st_blob = 'portalgesuc-dicof'; // Defina o container adequado
$model->matricula_condutor = $matriculaFuncionarioResponsavelAnexo;
$model->atividade_do_anexo = 'Importado do Gescon';
$model->observacao = 'Importado do Gescon';
// Salva o modelo antes do upload
if ($model->save()) {
// Conexão com o serviço de Blob Storage
$azureConfig = require Yii::getAlias('@app/config/azure.php');
$connectionString = "DefaultEndpointsProtocol=https;AccountName={$azureConfig['account_name']};AccountKey={$azureConfig['account_key']};EndpointSuffix=core.windows.net";
$blobClient = BlobRestProxy::createBlobService($connectionString);
$contentType = 'application/octet-stream'; // Use conforme necessário
$options = new CreateBlockBlobOptions();
$options->setContentType($contentType);
// Converte o arquivo para um fluxo ou string
// Caso o arquivo seja um recurso
if (is_resource($fileResource)) {
// Se você estiver lidando com um recurso, use um buffer
$fileContent = stream_get_contents($fileResource);
} else {
// Se for uma string, você pode usar diretamente
$fileContent = $fileResource; // Ajuste se necessário
}
// Salva o arquivo no Azure Blob Storage
$blobName = $nome; // Nome único para o blob
$blobClient->createBlockBlob($model->st_blob, $blobName, $fileContent, $options);
// Se você precisa redirecionar ou retornar um sucesso
Yii::$app->getSession()->setFlash('success', 'Arquivo renderizado e salvo com sucesso!');
return ['success' => true];
} else {
throw new \Exception('Erro ao salvar o modelo de anexo: ' . implode(', ', $model->getFirstErrors()));
return ['success' => true];
}
} catch (\Throwable $th) {
Yii::$app->getSession()->setFlash('error', 'Erro ao tentar renderizar o arquivo: ' . $th->getMessage());
return ['success' => false];
// return $th->getMessage(); // Exibe uma página de erro customizada
}
}
public function actionGetPeriodosDisponiveis($dgco)
{
// Busca o id_contrato_fornecedor correspondente ao dgco na tabela dcf_contratos
$idContratoFornecedor = (new \yii\db\Query())
->select('id_contrato_fornecedor')
->from('dcf_contratos')
->where(['gescon_nm_dgco' => $dgco])
->scalar();
if (!$idContratoFornecedor) {
return $this->asJson(['error' => 'Contrato não encontrado para o DGCO informado.']);
}
// Busca o contrato primitivo
$contratoPrimitivo = DcfContratosInstrumentos::find()
->where([
'en_tipo_instrumento' => 'CONTRATO_PRIMITIVO',
'id_contrato_fornecedor' => $idContratoFornecedor,
])
->orderBy(['id_instrumento' => SORT_ASC])
->one();
// Busca a última prorrogação, se houver
$ultimaProrrogacao = DcfContratosInstrumentos::find()
->joinWith('dcfContratosInstrumentosAditamento')
->where([
'dcf_contratos_instrumentos.en_tipo_instrumento' => 'ADITIVO',
'dcf_contratos_instrumentos.id_contrato_fornecedor' => $idContratoFornecedor,
'dcf_contratos_instrumentos_aditamento.tipo_aditamento' => 'PRORROGACAO_VIGENCIA',
])
->orderBy(['dcf_contratos_instrumentos.id_instrumento' => SORT_DESC])
->one();
// Define as datas de início e fim
$dt_ini = new \DateTime($contratoPrimitivo->dt_ini_vigencia);
$dt_fim = new \DateTime($ultimaProrrogacao ? $ultimaProrrogacao->dt_fim_vigencia : $contratoPrimitivo->dt_fim_vigencia);
// Data atual para comparar se o trimestre já encerrou
$hoje = new \DateTime();
$periodos = [];
// Loop para gerar trimestres encerrados
while ($dt_ini <= $dt_fim) {
$ano = (int) $dt_ini->format('Y');
$trimestre = (int) ceil($dt_ini->format('n') / 3);
// Calcula o último dia do trimestre atual
$ultimoDiaTrimestre = (clone $dt_ini)->modify('+3 months')->modify('-1 day');
// Só adiciona o trimestre se ele já encerrou
if ($ultimoDiaTrimestre < $hoje) {
$periodos[] = [
'ano' => $ano,
'periodo' => $trimestre,
'meses' => $this->getMesesPorTrimestre($trimestre, $ano), // Chama a função para obter os meses
];
}
// Avança para o próximo trimestre
$dt_ini->modify('+3 months');
}
// Consulta períodos que já possuem nota na view
$periodosAvaliados = (new \yii\db\Query())
->select(['ano', 'periodo'])
->from('dcf_vw_avaliacoes_medias_trimestre')
->where(['id_contrato' => $idContratoFornecedor])
->all();
// Filtra os períodos disponíveis removendo os que já possuem avaliação
$periodosDisponiveis = array_filter($periodos, function ($periodo) use ($periodosAvaliados) {
foreach ($periodosAvaliados as $avaliado) {
if ($avaliado['ano'] == $periodo['ano'] && $avaliado['periodo'] == $periodo['periodo']) {
return false;
}
}
return true;
});
// Adiciona o DGCO na resposta de cada período disponível
$resultado = array_map(function ($periodo) use ($dgco) {
return array_merge($periodo, ['dgco' => $dgco]);
}, $periodosDisponiveis);
// Retorna o resultado em JSON
return $this->asJson(array_values($resultado));
}
/**
* Função para obter os meses correspondentes a um trimestre
*/
private function getMesesPorTrimestre($trimestre, $ano)
{
$meses = [
1 => 'Jan/Fev/Mar',
2 => 'Abr/Mai/Jun',
3 => 'Jul/Ago/Set',
4 => 'Out/Nov/Dez',
];
return $meses[$trimestre] ?? [];
}
}Editor is loading...
Leave a Comment