Untitled
unknown
plain_text
6 months ago
138 kB
3
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