From cd5a2f204eb5e1079795bae39a719f02fe47b5d9 Mon Sep 17 00:00:00 2001 From: GabrielPintoSouza Date: Tue, 26 Nov 2024 07:43:42 -0300 Subject: [PATCH 01/15] =?UTF-8?q?Altera=C3=A7=C3=A3o=20da=20tabela=20contr?= =?UTF-8?q?ibuicao=5Flog=20[Issue=20#804]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ContribuicaoLogController.php | 5 ++- html/apoio/dao/ContribuicaoLogDAO.php | 8 +++- html/apoio/dao/MeioPagamentoDAO.php | 7 ++- html/apoio/model/ContribuicaoLog.php | 44 +++++++++++++++++++ html/apoio/tabelas.sql | 11 ++++- 5 files changed, 70 insertions(+), 5 deletions(-) diff --git a/html/apoio/controller/ContribuicaoLogController.php b/html/apoio/controller/ContribuicaoLogController.php index f29a0462..f8c423e5 100755 --- a/html/apoio/controller/ContribuicaoLogController.php +++ b/html/apoio/controller/ContribuicaoLogController.php @@ -52,6 +52,7 @@ public function criarBoleto() //Talvez seja melhor separar em: criarBoleto, cria $gatewayPagamentoDao = new GatewayPagamentoDAO(); $gatewayPagamentoArray = $gatewayPagamentoDao->buscarPorId($meioPagamento->getGatewayId()); $gatewayPagamento = new GatewayPagamento($gatewayPagamentoArray['plataforma'], $gatewayPagamentoArray['endPoint'], $gatewayPagamentoArray['token'], $gatewayPagamentoArray['status']); + $gatewayPagamento->setId($meioPagamento->getGatewayId()); //Requisição dinâmica e instanciação da classe com base no nome do gateway de pagamento $requisicaoServico = '../service/' . $gatewayPagamento->getNome() . $formaPagamento . 'Service' . '.php'; @@ -98,7 +99,9 @@ public function criarBoleto() //Talvez seja melhor separar em: criarBoleto, cria ->setCodigo($contribuicaoLog->gerarCodigo()) ->setDataGeracao($dataGeracao) ->setDataVencimento($dataVencimento) - ->setSocio($socio); + ->setSocio($socio) + ->setGatewayPagamento($gatewayPagamento) + ->setMeioPagamento($meioPagamento); try { /*Controle de transação para que o log só seja registrado diff --git a/html/apoio/dao/ContribuicaoLogDAO.php b/html/apoio/dao/ContribuicaoLogDAO.php index 82a55832..c8cf4b96 100755 --- a/html/apoio/dao/ContribuicaoLogDAO.php +++ b/html/apoio/dao/ContribuicaoLogDAO.php @@ -20,7 +20,9 @@ public function __construct(PDO $pdo = null) public function criar(ContribuicaoLog $contribuicaoLog){ $sqlInserirContribuicaoLog = "INSERT INTO contribuicao_log ( - id_socio, + id_socio, + id_gateway, + id_meio_pagamento, codigo, valor, data_geracao, @@ -29,6 +31,8 @@ public function criar(ContribuicaoLog $contribuicaoLog){ ) VALUES ( :idSocio, + :idGateway, + :idMeioPagamento, :codigo, :valor, :dataGeracao, @@ -39,6 +43,8 @@ public function criar(ContribuicaoLog $contribuicaoLog){ $stmt = $this->pdo->prepare($sqlInserirContribuicaoLog); $stmt->bindParam(':idSocio', $contribuicaoLog->getSocio()->getId()); + $stmt->bindParam(':idGateway', $contribuicaoLog->getGatewayPagamento()->getId()); + $stmt->bindParam(':idMeioPagamento', $contribuicaoLog->getMeioPagamento()->getId()); $stmt->bindParam(':codigo', $contribuicaoLog->getCodigo()); $stmt->bindParam(':valor', $contribuicaoLog->getValor()); $stmt->bindParam(':dataGeracao', $contribuicaoLog->getDataGeracao()); diff --git a/html/apoio/dao/MeioPagamentoDAO.php b/html/apoio/dao/MeioPagamentoDAO.php index 490a03f1..aed0a56b 100755 --- a/html/apoio/dao/MeioPagamentoDAO.php +++ b/html/apoio/dao/MeioPagamentoDAO.php @@ -52,7 +52,7 @@ public function buscaTodos() * Retorna o meio de pagamento com nome equivalente ao passado como parâmetro */ public function buscarPorNome(string $nome){ - $sqlBuscarPorNome = 'SELECT meio, id_plataforma, status FROM contribuicao_meioPagamento WHERE meio=:nome'; + $sqlBuscarPorNome = 'SELECT id, meio, id_plataforma, status FROM contribuicao_meioPagamento WHERE meio=:nome'; $stmt = $this->pdo->prepare($sqlBuscarPorNome); $stmt->bindParam(':nome', $nome); @@ -64,7 +64,10 @@ public function buscarPorNome(string $nome){ $meioPagamentoArray = $stmt->fetch(PDO::FETCH_ASSOC); - return new MeioPagamento($meioPagamentoArray['meio'], $meioPagamentoArray['id_plataforma'], $meioPagamentoArray['status']); + $meioPagamento = new MeioPagamento($meioPagamentoArray['meio'], $meioPagamentoArray['id_plataforma'], $meioPagamentoArray['status']); + $meioPagamento->setId($meioPagamentoArray['id']); + + return $meioPagamento; } /** diff --git a/html/apoio/model/ContribuicaoLog.php b/html/apoio/model/ContribuicaoLog.php index afa0f812..134abc07 100755 --- a/html/apoio/model/ContribuicaoLog.php +++ b/html/apoio/model/ContribuicaoLog.php @@ -1,5 +1,7 @@ gatewayPagamento; + } + + /** + * Set the value of gatewayPagamento + * + * @return self + */ + public function setGatewayPagamento(GatewayPagamento $gatewayPagamento) + { + $this->gatewayPagamento = $gatewayPagamento; + + return $this; + } + + /** + * Get the value of meioPagamento + */ + public function getMeioPagamento() + { + return $this->meioPagamento; + } + + /** + * Set the value of meioPagamento + * + * @return self + */ + public function setMeioPagamento(MeioPagamento $meioPagamento) + { + $this->meioPagamento = $meioPagamento; + + return $this; + } } diff --git a/html/apoio/tabelas.sql b/html/apoio/tabelas.sql index 0366179b..fd055e9b 100755 --- a/html/apoio/tabelas.sql +++ b/html/apoio/tabelas.sql @@ -2,14 +2,23 @@ CREATE TABLE IF NOT EXISTS `wegia`.`contribuicao_log` ( `id` INT NULL DEFAULT NULL AUTO_INCREMENT, `id_socio` INT(11) NOT NULL, + `id_gateway` INT(11) NOT NULL, + `id_meio_pagamento` INT(11) NOT NULL, `codigo` VARCHAR(255) NOT NULL UNIQUE, `valor` DECIMAL(10,2) NOT NULL, `data_geracao` DATE NOT NULL, `data_vencimento` DATE NOT NULL, + `data_pagamento` DATE, `status_pagamento` BOOLEAN NOT NULL, PRIMARY KEY (`id`), CONSTRAINT `FK_id_socios` FOREIGN KEY (`id_socio`) - REFERENCES `wegia`.`socio` (`id_socio`) + REFERENCES `wegia`.`socio` (`id_socio`), + CONSTRAINT `FK_id_gateways` + FOREIGN KEY (`id_gateway`) + REFERENCES `wegia`.`contribuicao_gatewayPagamento` (`id`), + CONSTRAINT `FK_id_meio_pagamentos` + FOREIGN KEY (`id_meio_pagamento`) + REFERENCES `wegia`.`contribuicao_meioPagamento` (`id`) ) ENGINE = InnoDB; \ No newline at end of file From 69a66d3fd66bcfbc51f9bb6ddbb31dc3cf65931f Mon Sep 17 00:00:00 2001 From: GabrielPintoSouza Date: Tue, 26 Nov 2024 08:16:51 -0300 Subject: [PATCH 02/15] =?UTF-8?q?Preenchimento=20autom=C3=A1tico=20da=20da?= =?UTF-8?q?ta=20[Issue=20#806]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sistema/controller/import_conteudo_psociogeracao.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/html/socio/sistema/controller/import_conteudo_psociogeracao.php b/html/socio/sistema/controller/import_conteudo_psociogeracao.php index dc78085d..1e69a54d 100755 --- a/html/socio/sistema/controller/import_conteudo_psociogeracao.php +++ b/html/socio/sistema/controller/import_conteudo_psociogeracao.php @@ -85,8 +85,12 @@
+ modify('+7 days')->format('Y-m-d'); + ?> - id="data_vencimento" name="data_vencimento" placeholder="Data vencimento" required> + id="data_vencimento" name="data_vencimento" placeholder="Data vencimento" value="" required>
From a7f8119419aa1e60ee7f8e2604207a0acd5dbc50 Mon Sep 17 00:00:00 2001 From: GabrielPintoSouza Date: Tue, 26 Nov 2024 08:30:50 -0300 Subject: [PATCH 03/15] =?UTF-8?q?Resolu=C3=A7=C3=A3o=20do=20bug=20[Issue?= =?UTF-8?q?=20#808]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ContribuicaoLogController.php | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/html/apoio/controller/ContribuicaoLogController.php b/html/apoio/controller/ContribuicaoLogController.php index f8c423e5..9b2ad495 100755 --- a/html/apoio/controller/ContribuicaoLogController.php +++ b/html/apoio/controller/ContribuicaoLogController.php @@ -160,6 +160,7 @@ public function criarCarne() $gatewayPagamentoDao = new GatewayPagamentoDAO(); $gatewayPagamentoArray = $gatewayPagamentoDao->buscarPorId($meioPagamento->getGatewayId()); $gatewayPagamento = new GatewayPagamento($gatewayPagamentoArray['plataforma'], $gatewayPagamentoArray['endPoint'], $gatewayPagamentoArray['token'], $gatewayPagamentoArray['status']); + $gatewayPagamento->setId($meioPagamento->getGatewayId()); //Requisição dinâmica e instanciação da classe com base no nome do gateway de pagamento $requisicaoServico = '../service/' . $gatewayPagamento->getNome() . $formaPagamento . 'Service' . '.php'; @@ -174,7 +175,7 @@ public function criarCarne() $classeService = $gatewayPagamento->getNome() . $formaPagamento . 'Service'; if (!class_exists($classeService)) { - echo json_encode(['erro' => 'Classe não encontrada']); + echo json_encode(['erro' => 'Classe não encontrada']); exit(); } @@ -240,7 +241,9 @@ public function criarCarne() ->setCodigo($contribuicaoLog->gerarCodigo()) ->setDataGeracao($dataAtual->format('Y-m-d')) ->setDataVencimento($dataVencimento) - ->setSocio($socio); + ->setSocio($socio) + ->setGatewayPagamento($gatewayPagamento) + ->setMeioPagamento($meioPagamento); //Inserir na coleção $contribuicaoLogCollection->add($contribuicaoLog); @@ -274,7 +277,9 @@ public function criarCarne() ->setCodigo($contribuicaoLog->gerarCodigo()) ->setDataGeracao($dataAtual->format('Y-m-d')) ->setDataVencimento($dataVencimento->format('Y-m-d')) - ->setSocio($socio); + ->setSocio($socio) + ->setGatewayPagamento($gatewayPagamento) + ->setMeioPagamento($meioPagamento); //Inserir na coleção $contribuicaoLogCollection->add($contribuicaoLog); @@ -296,7 +301,7 @@ public function criarCarne() $socioDao->registrarLog($contribuicaoLog->getSocio(), $mensagem); //Chamada do método de serviço de pagamento requisitado - $caminhoCarne = $servicoPagamento->gerarCarne($contribuicaoLogCollection); + $caminhoCarne = $servicoPagamento->gerarCarne($contribuicaoLogCollection); if (!$caminhoCarne || empty($caminhoCarne)) { $this->pdo->rollBack(); } else { @@ -342,6 +347,7 @@ public function criarQrCode() $gatewayPagamentoDao = new GatewayPagamentoDAO(); $gatewayPagamentoArray = $gatewayPagamentoDao->buscarPorId($meioPagamento->getGatewayId()); $gatewayPagamento = new GatewayPagamento($gatewayPagamentoArray['plataforma'], $gatewayPagamentoArray['endPoint'], $gatewayPagamentoArray['token'], $gatewayPagamentoArray['status']); + $gatewayPagamento->setId($meioPagamento->getGatewayId()); //Requisição dinâmica e instanciação da classe com base no nome do gateway de pagamento $requisicaoServico = '../service/' . $gatewayPagamento->getNome() . $formaPagamento . 'Service' . '.php'; @@ -377,7 +383,9 @@ public function criarQrCode() ->setCodigo($contribuicaoLog->gerarCodigo()) ->setDataGeracao($dataGeracao) ->setDataVencimento($dataVencimento) - ->setSocio($socio); + ->setSocio($socio) + ->setGatewayPagamento($gatewayPagamento) + ->setMeioPagamento($meioPagamento); try { /*Controle de transação para que o log só seja registrado From b51caad6db2e65fd40145f00473d12f04b4fa4d5 Mon Sep 17 00:00:00 2001 From: GabrielPintoSouza Date: Tue, 26 Nov 2024 10:41:36 -0300 Subject: [PATCH 04/15] =?UTF-8?q?M=C3=A9todo=20criarBoleto=20agora=20inser?= =?UTF-8?q?e=20no=20banco=20de=20dados=20o=20c=C3=B3digo=20retornado=20pel?= =?UTF-8?q?a=20API=20[Issue=20#807]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ContribuicaoLogController.php | 7 +++++-- html/apoio/dao/ContribuicaoLogDAO.php | 15 +++++++++++++++ html/apoio/service/PagarMeBoletoService.php | 5 ++++- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/html/apoio/controller/ContribuicaoLogController.php b/html/apoio/controller/ContribuicaoLogController.php index 9b2ad495..2fc1eb0e 100755 --- a/html/apoio/controller/ContribuicaoLogController.php +++ b/html/apoio/controller/ContribuicaoLogController.php @@ -108,16 +108,19 @@ public function criarBoleto() //Talvez seja melhor separar em: criarBoleto, cria caso o serviço de pagamento tenha sido executado*/ $this->pdo->beginTransaction(); $contribuicaoLogDao = new ContribuicaoLogDAO($this->pdo); - $contribuicaoLogDao->criar($contribuicaoLog); + $contribuicaoLog = $contribuicaoLogDao->criar($contribuicaoLog); //Registrar na tabela de socio_log $mensagem = "Boleto gerado recentemente"; $socioDao->registrarLog($contribuicaoLog->getSocio(), $mensagem); + $codigoApi = $servicoPagamento->gerarBoleto($contribuicaoLog); + //Chamada do método de serviço de pagamento requisitado - if (!$servicoPagamento->gerarBoleto($contribuicaoLog)) { + if (!$codigoApi) { $this->pdo->rollBack(); } else { + $contribuicaoLogDao->alterarCodigoPorId($codigoApi, $contribuicaoLog->getId()); $this->pdo->commit(); } } catch (PDOException $e) { diff --git a/html/apoio/dao/ContribuicaoLogDAO.php b/html/apoio/dao/ContribuicaoLogDAO.php index c8cf4b96..5c9ec627 100755 --- a/html/apoio/dao/ContribuicaoLogDAO.php +++ b/html/apoio/dao/ContribuicaoLogDAO.php @@ -52,6 +52,21 @@ public function criar(ContribuicaoLog $contribuicaoLog){ $stmt->bindParam(':statusPagamento', $contribuicaoLog->getStatusPagamento()); $stmt->execute(); + + $ultimoId = $this->pdo->lastInsertId(); + $contribuicaoLog->setId($ultimoId); + + return $contribuicaoLog; + } + + public function alterarCodigoPorId($codigo, $id){ + $sqlPagarPorId = "UPDATE contribuicao_log SET codigo =:codigo WHERE id=:id"; + + $stmt = $this->pdo->prepare($sqlPagarPorId); + $stmt->bindParam(':codigo', $codigo); + $stmt->bindParam(':id', $id); + + $stmt->execute(); } public function pagarPorId($id){ diff --git a/html/apoio/service/PagarMeBoletoService.php b/html/apoio/service/PagarMeBoletoService.php index 24e50547..3e8371c2 100755 --- a/html/apoio/service/PagarMeBoletoService.php +++ b/html/apoio/service/PagarMeBoletoService.php @@ -110,6 +110,9 @@ public function gerarBoleto(ContribuicaoLog $contribuicaoLog) $responseData = json_decode($response, true); $pdf_link = $responseData['charges'][0]['last_transaction']['pdf']; + //pegar o código da plataforma + $codigoPagarMe = $responseData['code']; + //armazena copía para segunda via $this->guardarSegundaVia($pdf_link, $contribuicaoLog); @@ -128,7 +131,7 @@ public function gerarBoleto(ContribuicaoLog $contribuicaoLog) } } - return true; + return $codigoPagarMe; } public function guardarSegundaVia($pdf_link, ContribuicaoLog $contribuicaoLog) { From b2b915da08119a70de0b3dcd300ebf427d3a9b8c Mon Sep 17 00:00:00 2001 From: GabrielPintoSouza Date: Wed, 27 Nov 2024 08:01:19 -0300 Subject: [PATCH 05/15] =?UTF-8?q?M=C3=A9todo=20criarCarne=20agora=20insere?= =?UTF-8?q?=20no=20banco=20de=20dados=20o=20c=C3=B3digo=20retornado=20pela?= =?UTF-8?q?=20API=20[Issue=20#807]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ContribuicaoLogController.php | 204 +++++++++--------- html/apoio/service/PagarMeCarneService.php | 10 +- 2 files changed, 112 insertions(+), 102 deletions(-) diff --git a/html/apoio/controller/ContribuicaoLogController.php b/html/apoio/controller/ContribuicaoLogController.php index 2fc1eb0e..15692e67 100755 --- a/html/apoio/controller/ContribuicaoLogController.php +++ b/html/apoio/controller/ContribuicaoLogController.php @@ -183,120 +183,115 @@ public function criarCarne() } $servicoPagamento = new $classeService; - } catch (PDOException $e) { - //implementar tratamento de erro - echo json_encode(['erro' => $e->getMessage()]); - exit(); - } - //Criar coleção de contribuições - $contribuicaoLogCollection = new ContribuicaoLogCollection(); + /*Controle de transação para que o log só seja registrado + caso o serviço de pagamento tenha sido executado*/ + $this->pdo->beginTransaction(); - if (!$qtdParcelas || $qtdParcelas < 2) { - //implementar mensagem de erro - exit('O mínimo de parcelas deve ser 2'); - } + $contribuicaoLogDao = new ContribuicaoLogDAO($this->pdo); - // Pegar a data atual - $dataAtual = new DateTime(); + //Criar coleção de contribuições + $contribuicaoLogCollection = new ContribuicaoLogCollection(); - if (isset($_POST['tipoGeracao']) && !empty($_POST['tipoGeracao'])) { - //verificar autenticação do funcionário - require_once '../../permissao/permissao.php'; + if (!$qtdParcelas || $qtdParcelas < 2) { + //implementar mensagem de erro + exit('O mínimo de parcelas deve ser 2'); + } - session_start(); - permissao($_SESSION['id_pessoa'], 4); + // Pegar a data atual + $dataAtual = new DateTime(); - //escolher qual ação tomar - $tipoGeracao = $_POST['tipoGeracao']; - - //chamar funções - require_once '../helper/Util.php'; - - $datasVencimento; - - $diaVencimento = ($_POST['dia']); - - $qtd_p = intval($_POST['parcelas']); - - switch ($tipoGeracao) { - case '1': - $datasVencimento = Util::mensalidadeInterna(1, $qtd_p, $diaVencimento); - break; - case '2': - $datasVencimento = Util::mensalidadeInterna(2, $qtd_p, $diaVencimento); - break; - case '3': - $datasVencimento = Util::mensalidadeInterna(3, $qtd_p, $diaVencimento); - break; - case '6': - $datasVencimento = Util::mensalidadeInterna(6, $qtd_p, $diaVencimento); - break; - default: - echo json_encode(['erro' => 'O tipo de geração é inválido.']); - exit(); - } + if (isset($_POST['tipoGeracao']) && !empty($_POST['tipoGeracao'])) { + //verificar autenticação do funcionário + require_once '../../permissao/permissao.php'; - foreach ($datasVencimento as $dataVencimento) { - $contribuicaoLog = new ContribuicaoLog(); - $contribuicaoLog - ->setValor($valor) - ->setCodigo($contribuicaoLog->gerarCodigo()) - ->setDataGeracao($dataAtual->format('Y-m-d')) - ->setDataVencimento($dataVencimento) - ->setSocio($socio) - ->setGatewayPagamento($gatewayPagamento) - ->setMeioPagamento($meioPagamento); - - //Inserir na coleção - $contribuicaoLogCollection->add($contribuicaoLog); - } - } else { + session_start(); + permissao($_SESSION['id_pessoa'], 4); - // Verificar se o dia informado já passou neste mês - if ($diaVencimento <= $dataAtual->format('d')) { - // Se o dia informado já passou, começar a partir do próximo mês - $dataAtual->modify('first day of next month'); - } + //escolher qual ação tomar + $tipoGeracao = $_POST['tipoGeracao']; + + //chamar funções + require_once '../helper/Util.php'; - for ($i = 0; $i < $qtdParcelas; $i++) { - // Clonar a data atual para evitar modificar o objeto original - $dataVencimento = clone $dataAtual; + $datasVencimento; - // Adicionar os meses de acordo com o índice da parcela - $dataVencimento->modify("+{$i} month"); + $diaVencimento = ($_POST['dia']); - // Definir o dia do vencimento para o dia informado - $dataVencimento->setDate($dataVencimento->format('Y'), $dataVencimento->format('m'), $diaVencimento); + $qtd_p = intval($_POST['parcelas']); - // Ajustar a data caso o mês não tenha o dia informado (por exemplo, 30 de fevereiro) - if ($dataVencimento->format('d') != $diaVencimento) { - $dataVencimento->modify('last day of previous month'); + switch ($tipoGeracao) { + case '1': + $datasVencimento = Util::mensalidadeInterna(1, $qtd_p, $diaVencimento); + break; + case '2': + $datasVencimento = Util::mensalidadeInterna(2, $qtd_p, $diaVencimento); + break; + case '3': + $datasVencimento = Util::mensalidadeInterna(3, $qtd_p, $diaVencimento); + break; + case '6': + $datasVencimento = Util::mensalidadeInterna(6, $qtd_p, $diaVencimento); + break; + default: + echo json_encode(['erro' => 'O tipo de geração é inválido.']); + exit(); } - $contribuicaoLog = new ContribuicaoLog(); - $contribuicaoLog - ->setValor($valor) - ->setCodigo($contribuicaoLog->gerarCodigo()) - ->setDataGeracao($dataAtual->format('Y-m-d')) - ->setDataVencimento($dataVencimento->format('Y-m-d')) - ->setSocio($socio) - ->setGatewayPagamento($gatewayPagamento) - ->setMeioPagamento($meioPagamento); - - //Inserir na coleção - $contribuicaoLogCollection->add($contribuicaoLog); - } - } + foreach ($datasVencimento as $dataVencimento) { + $contribuicaoLog = new ContribuicaoLog(); + $contribuicaoLog + ->setValor($valor) + ->setCodigo($contribuicaoLog->gerarCodigo()) + ->setDataGeracao($dataAtual->format('Y-m-d')) + ->setDataVencimento($dataVencimento) + ->setSocio($socio) + ->setGatewayPagamento($gatewayPagamento) + ->setMeioPagamento($meioPagamento); + + //inserir na collection o resultado do método criar de contribuicaoDao + $contribuicaoLog = $contribuicaoLogDao->criar($contribuicaoLog); + + $contribuicaoLogCollection->add($contribuicaoLog); + } + } else { - try { - /*Controle de transação para que o log só seja registrado - caso o serviço de pagamento tenha sido executado*/ - $this->pdo->beginTransaction(); + // Verificar se o dia informado já passou neste mês + if ($diaVencimento <= $dataAtual->format('d')) { + // Se o dia informado já passou, começar a partir do próximo mês + $dataAtual->modify('first day of next month'); + } + + for ($i = 0; $i < $qtdParcelas; $i++) { + // Clonar a data atual para evitar modificar o objeto original + $dataVencimento = clone $dataAtual; - foreach ($contribuicaoLogCollection as $contribuicaoLog) { - $contribuicaoLogDao = new ContribuicaoLogDAO($this->pdo); - $contribuicaoLogDao->criar($contribuicaoLog); + // Adicionar os meses de acordo com o índice da parcela + $dataVencimento->modify("+{$i} month"); + + // Definir o dia do vencimento para o dia informado + $dataVencimento->setDate($dataVencimento->format('Y'), $dataVencimento->format('m'), $diaVencimento); + + // Ajustar a data caso o mês não tenha o dia informado (por exemplo, 30 de fevereiro) + if ($dataVencimento->format('d') != $diaVencimento) { + $dataVencimento->modify('last day of previous month'); + } + + $contribuicaoLog = new ContribuicaoLog(); + $contribuicaoLog + ->setValor($valor) + ->setCodigo($contribuicaoLog->gerarCodigo()) + ->setDataGeracao($dataAtual->format('Y-m-d')) + ->setDataVencimento($dataVencimento->format('Y-m-d')) + ->setSocio($socio) + ->setGatewayPagamento($gatewayPagamento) + ->setMeioPagamento($meioPagamento); + + //inserir na collection o resultado do método criar de contribuicaoDao + $contribuicaoLog = $contribuicaoLogDao->criar($contribuicaoLog); + + $contribuicaoLogCollection->add($contribuicaoLog); + } } //Registrar na tabela de socio_log @@ -304,13 +299,20 @@ public function criarCarne() $socioDao->registrarLog($contribuicaoLog->getSocio(), $mensagem); //Chamada do método de serviço de pagamento requisitado - $caminhoCarne = $servicoPagamento->gerarCarne($contribuicaoLogCollection); - if (!$caminhoCarne || empty($caminhoCarne)) { + + //Método deverá retornar o caminho do carne e um array de contribuicões log + $resultado = $servicoPagamento->gerarCarne($contribuicaoLogCollection); + if (!$resultado || empty($resultado)) { $this->pdo->rollBack(); } else { + //loop foreach para alterar o código no banco de dados das respectivas contribuições recebidas + foreach($resultado['contribuicoes'] as $contribuicao){ + $contribuicaoLogDao->alterarCodigoPorId($contribuicao->getCodigo(), $contribuicao->getId()); + } + $this->pdo->commit(); - echo json_encode(['link' => WWW . 'html/apoio/' . $caminhoCarne]); + echo json_encode(['link' => WWW . 'html/apoio/' . $resultado['link']]); } } catch (PDOException $e) { //implementar tratamento de erro diff --git a/html/apoio/service/PagarMeCarneService.php b/html/apoio/service/PagarMeCarneService.php index 6f4be815..b9881b69 100755 --- a/html/apoio/service/PagarMeCarneService.php +++ b/html/apoio/service/PagarMeCarneService.php @@ -90,6 +90,7 @@ public function gerarCarne(ContribuicaoLogCollection $contribuicaoLogCollection) //Implementar requisição para API $pdf_links = []; + $codigosAPI = []; // Iniciar a requisição cURL $ch = curl_init(); @@ -123,6 +124,7 @@ public function gerarCarne(ContribuicaoLogCollection $contribuicaoLogCollection) if ($httpCode === 200 || $httpCode === 201) { $responseData = json_decode($response, true); $pdf_links[] = $responseData['charges'][0]['last_transaction']['pdf']; + $codigosAPI[] = $responseData['code']; } else { echo json_encode(['Erro' => 'A API retornou o código de status HTTP ' . $httpCode]); return false; @@ -150,7 +152,13 @@ public function gerarCarne(ContribuicaoLogCollection $contribuicaoLogCollection) return false; } - return $caminho; + //Pega os códigos retornados pela API e atribuí na propriedade codigo das contribuicoes de contribuicaoLogCollection + foreach($contribuicaoLogCollection as $index => $contribuicaoLog){ + $contribuicaoLog->setCodigo($codigosAPI[$index]); + } + + //Retorna o link e a coleção de contribuições + return ['link' => $caminho, 'contribuicoes' => $contribuicaoLogCollection]; } public function salvarTemp($pdf_links) From bc953f10a1b15d1e1daf3582d50885e98542c3d3 Mon Sep 17 00:00:00 2001 From: GabrielPintoSouza Date: Wed, 27 Nov 2024 09:35:44 -0300 Subject: [PATCH 06/15] =?UTF-8?q?Configura=C3=A7=C3=A3o=20do=20comportamen?= =?UTF-8?q?to=20do=20bot=C3=A3o=20de=20avanca-contato=20[Issue=20#767]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html/apoio/public/js/boleto.js | 4 +++ html/apoio/public/js/util.js | 47 ++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/html/apoio/public/js/boleto.js b/html/apoio/public/js/boleto.js index 76f44d70..2c577902 100644 --- a/html/apoio/public/js/boleto.js +++ b/html/apoio/public/js/boleto.js @@ -27,11 +27,13 @@ function buscarSocio() { //Exibir o sócio console.log(data); formAutocomplete(data.resultado); + alternarPaginas('pag3', 'pag2'); }else{//Enviar para a página de confirmação de geração de boletos alternarPaginas('pag5', 'pag2'); } } else { console.log(data.resultado); + alternarPaginas('pag3', 'pag2'); } //alternarPaginas('pag2'); @@ -45,5 +47,7 @@ function buscarSocio() { configurarAvancaValor(verificarValor); configurarVoltaValor(); +configurarVoltaCpf(); +configurarAvancaContato(verificarContato); configurarMudancaOpcao(alternarPfPj); configurarConsulta(buscarSocio); \ No newline at end of file diff --git a/html/apoio/public/js/util.js b/html/apoio/public/js/util.js index f1ece579..2e9a41cb 100644 --- a/html/apoio/public/js/util.js +++ b/html/apoio/public/js/util.js @@ -168,6 +168,24 @@ function configurarVoltaValor(){ }); } +function configurarVoltaCpf(){ + const btnVoltaCpf = document.getElementById('volta-cpf'); + btnVoltaCpf.addEventListener('click', ()=>{ + alternarPaginas('pag2', 'pag3'); + }); +} + +function configurarAvancaContato(funcao){ + const btnAvancaContato = document.getElementById('avanca-contato'); + btnAvancaContato.addEventListener('click', ()=>{ + if(!funcao()){ + return; + } + + alternarPaginas('pag4', 'pag3'); + }) +} + /** * Verifica se alguma propriedade de um objeto do tipo Socio está vazia */ @@ -224,6 +242,35 @@ function verificarSocio({bairro, cep, cidade, complemento, documento, email, est return true; } +function verificarContato(){ + const nome = document.getElementById('nome').value; + const dataNascimento = document.getElementById('data_nascimento').value; + const email = document.getElementById('email').value; + const telefone = document.getElementById('telefone').value; + + if(!nome || nome.length < 3){ + alert('O nome não pode estar vazio.'); + return false; + } + + if(!dataNascimento){ + alert('A data de nascimento não pode estar vazia'); + return false; + } + + if(!email){ + alert('O e-mail não pode estar vazio.'); + return false; + } + + if(!telefone){ + alert('O telefone não pode estar vazio.'); + return false; + } + + return true; +} + /** * Recebe como parâmetro um objeto do tipo Socio e preenche os campos do formulário automaticamente * @param {*} param0 From 729d562f3f88d9f8afea9a5bf89d507b8375b4ca Mon Sep 17 00:00:00 2001 From: GabrielPintoSouza Date: Wed, 27 Nov 2024 10:41:31 -0300 Subject: [PATCH 07/15] =?UTF-8?q?Cria=C3=A7=C3=A3o=20do=20comportamento=20?= =?UTF-8?q?do=20bot=C3=A3o=20avanca-endereco=20[Issue=20#767]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html/apoio/public/js/boleto.js | 2 + html/apoio/public/js/util.js | 59 +++++++++++++++++++ .../view/components/contribuicao_endereco.php | 2 +- 3 files changed, 62 insertions(+), 1 deletion(-) diff --git a/html/apoio/public/js/boleto.js b/html/apoio/public/js/boleto.js index 2c577902..4dbe6259 100644 --- a/html/apoio/public/js/boleto.js +++ b/html/apoio/public/js/boleto.js @@ -48,6 +48,8 @@ function buscarSocio() { configurarAvancaValor(verificarValor); configurarVoltaValor(); configurarVoltaCpf(); +configurarVoltaContato(); +configurarAvancaEndereco(verificarEndereco); configurarAvancaContato(verificarContato); configurarMudancaOpcao(alternarPfPj); configurarConsulta(buscarSocio); \ No newline at end of file diff --git a/html/apoio/public/js/util.js b/html/apoio/public/js/util.js index 2e9a41cb..fe67cea2 100644 --- a/html/apoio/public/js/util.js +++ b/html/apoio/public/js/util.js @@ -175,6 +175,13 @@ function configurarVoltaCpf(){ }); } +function configurarVoltaContato(){ + const btnVoltaContato = document.getElementById('volta-contato'); + btnVoltaContato.addEventListener('click', ()=>{ + alternarPaginas('pag3', 'pag4'); + }); +} + function configurarAvancaContato(funcao){ const btnAvancaContato = document.getElementById('avanca-contato'); btnAvancaContato.addEventListener('click', ()=>{ @@ -186,6 +193,17 @@ function configurarAvancaContato(funcao){ }) } +function configurarAvancaEndereco(funcao){ + const btnAvancaEndereco = document.getElementById('avanca-endereco'); + btnAvancaEndereco.addEventListener('click', ()=>{ + if(!funcao()){ + return; + } + + alternarPaginas('pag5', 'pag4'); + }); +} + /** * Verifica se alguma propriedade de um objeto do tipo Socio está vazia */ @@ -242,6 +260,47 @@ function verificarSocio({bairro, cep, cidade, complemento, documento, email, est return true; } +function verificarEndereco(){ + const cep = document.getElementById('cep').value; + const rua = document.getElementById('rua').value; + const numeroEndereco = document.getElementById('numero'); + const bairro = document.getElementById('bairro'); + const uf = document.getElementById('uf'); + const cidade = document.getElementById('cidade'); + + if(!cep || cep.length != 9){ + alert ('O CEP informado não está no formato válido'); + return false; + } + + if(!rua || rua.length < 1){ + alert('A rua não pode estar vazia.'); + return false; + } + + if(!numeroEndereco || numeroEndereco.length < 1){ + alert('O número de endereço não pode estar vazio.'); + return false; + } + + if(!bairro || bairro.length < 1){ + alert('O bairro não pode estar vazio.'); + return false; + } + + if(!uf || uf.length < 1){ + alert('O estado não pode estar vazio.'); + return false; + } + + if(!cidade || cidade.length < 1){ + alert('A cidade não pode estar vazia.'); + return false; + } + + return true; +} + function verificarContato(){ const nome = document.getElementById('nome').value; const dataNascimento = document.getElementById('data_nascimento').value; diff --git a/html/apoio/view/components/contribuicao_endereco.php b/html/apoio/view/components/contribuicao_endereco.php index 8e0e7598..f281eb70 100644 --- a/html/apoio/view/components/contribuicao_endereco.php +++ b/html/apoio/view/components/contribuicao_endereco.php @@ -65,7 +65,7 @@
- From b44f668d22b4aa374019bf6e0314ed2f4fdea8d7 Mon Sep 17 00:00:00 2001 From: GabrielPintoSouza Date: Thu, 28 Nov 2024 08:54:51 -0300 Subject: [PATCH 08/15] =?UTF-8?q?Cria=C3=A7=C3=A3o=20da=20fun=C3=A7=C3=A3o?= =?UTF-8?q?=20gerarBoleto=20em=20boleto.js=20[Issue=20#767]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html/apoio/public/js/boleto.js | 51 ++++++++++++++++++++++++++++- html/apoio/public/js/util.js | 33 ++++++++++++++++++- html/apoio/view/boleto.php | 60 ++++++++++++++++++---------------- 3 files changed, 114 insertions(+), 30 deletions(-) diff --git a/html/apoio/public/js/boleto.js b/html/apoio/public/js/boleto.js index 4dbe6259..cf830c0c 100644 --- a/html/apoio/public/js/boleto.js +++ b/html/apoio/public/js/boleto.js @@ -1,3 +1,5 @@ +let acao = 'boleto'; + function buscarSocio() { const documento = pegarDocumento(); @@ -27,12 +29,14 @@ function buscarSocio() { //Exibir o sócio console.log(data); formAutocomplete(data.resultado); + acao = 'atualizar'; alternarPaginas('pag3', 'pag2'); - }else{//Enviar para a página de confirmação de geração de boletos + } else {//Enviar para a página de confirmação de geração de boletos alternarPaginas('pag5', 'pag2'); } } else { console.log(data.resultado); + acao = 'cadastrar'; alternarPaginas('pag3', 'pag2'); } @@ -45,11 +49,56 @@ function buscarSocio() { console.log("Consulta realizada"); } +function decidirAcao() { + switch (acao) { + case 'boleto': gerarBoleto(); break; + case 'cadastrar': console.log('Cadastrar Sócio'); break;//colocar chamada para função de cadastrar sócio + case 'atualizar': console.log('Atualizar Sócio'); break;//colocar chamada para função de atualizar sócio + default: console.log('Ação indefinida'); + } +} + +function gerarBoleto() { + const form = document.getElementById('formulario'); + const formData = new FormData(form); + + const documento = pegarDocumento(); + + formData.append('nomeClasse', 'ContribuicaoLogController'); + formData.append('metodo', 'criarBoleto'); + formData.append('documento_socio', documento); + + fetch("../controller/control.php", { + method: "POST", + body: formData + }) + .then(response => { + if (!response.ok) { + throw new Error("Erro na requisição: " + response.status); + } + return response.json(); // Converte a resposta para JSON + }) + .then(resposta => { + if (resposta.link) { + console.log(resposta.link); + // Redirecionar o usuário para o link do boleto em uma nova aba + window.open(resposta.link, '_blank'); + } else { + alert("Ops! Ocorreu um problema na geração da sua forma de pagamento, tente novamente, se o erro persistir contate o suporte."); + } + + }) + .catch(error => { + console.error("Erro:", error); + }); +} + configurarAvancaValor(verificarValor); configurarVoltaValor(); configurarVoltaCpf(); configurarVoltaContato(); configurarAvancaEndereco(verificarEndereco); configurarAvancaContato(verificarContato); +configurarAvancaTerminar(decidirAcao); configurarMudancaOpcao(alternarPfPj); configurarConsulta(buscarSocio); \ No newline at end of file diff --git a/html/apoio/public/js/util.js b/html/apoio/public/js/util.js index fe67cea2..b9c762e1 100644 --- a/html/apoio/public/js/util.js +++ b/html/apoio/public/js/util.js @@ -119,7 +119,8 @@ function alternarPaginas(idProxima, idAtual) { */ function configurarConsulta(funcao) { const btnConsulta = document.getElementById("consultar-btn"); - btnConsulta.addEventListener("click", function () { + btnConsulta.addEventListener("click", function (ev) { + ev.preventDefault(); funcao(); }) } @@ -204,6 +205,17 @@ function configurarAvancaEndereco(funcao){ }); } +function configurarAvancaTerminar(funcao){ + const btnAvancaTerminar = document.getElementById('avanca-terminar'); + btnAvancaTerminar.addEventListener('click', (ev)=>{ + ev.preventDefault(); + btnAvancaTerminar.disabled = true; + btnAvancaTerminar.classList.add('disabled'); + setLoader(btnAvancaTerminar); + funcao(); + }); +} + /** * Verifica se alguma propriedade de um objeto do tipo Socio está vazia */ @@ -360,4 +372,23 @@ function formAutocomplete({bairro, cep, cidade, complemento, documento, email, e ufObject.value = estado; cidadeObject.value = cidade; complementoObject.value = complemento; +} + +function setLoader(btn) { + // Esconde o primeiro elemento filho (ícone) + btn.firstElementChild.style.display = "none"; + + // Remove o texto do botão sem remover os elementos filhos + btn.childNodes.forEach(node => { + if (node.nodeType === Node.TEXT_NODE) { + node.textContent = ''; + } + }); + + // Adiciona o loader se não houver outros elementos filhos além do ícone + if (btn.childElementCount == 1) { + var loader = document.createElement("DIV"); + loader.className = "loader"; + btn.appendChild(loader); + } } \ No newline at end of file diff --git a/html/apoio/view/boleto.php b/html/apoio/view/boleto.php index 081e4712..adea3f5a 100644 --- a/html/apoio/view/boleto.php +++ b/html/apoio/view/boleto.php @@ -12,34 +12,38 @@ - - -
- - -
- - - - - - - - +
+ + + +
+ + +
+ + + + + + + +
+ + @@ -48,8 +52,8 @@ - - + + \ No newline at end of file From b5b74e5f8acce7a8e1823de5829a07a4836e2300 Mon Sep 17 00:00:00 2001 From: GabrielPintoSouza Date: Thu, 28 Nov 2024 09:56:30 -0300 Subject: [PATCH 09/15] =?UTF-8?q?Cria=C3=A7=C3=A3o=20da=20fun=C3=A7=C3=A3o?= =?UTF-8?q?=20cadastrarSocio=20em=20util.js=20[Issue=20#767]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html/apoio/controller/SocioController.php | 6 + html/apoio/controller/control.php | 1 + html/apoio/public/js/boleto.js | 2 +- html/apoio/public/js/util.js | 127 ++++++++++++++-------- 4 files changed, 91 insertions(+), 45 deletions(-) diff --git a/html/apoio/controller/SocioController.php b/html/apoio/controller/SocioController.php index bca86d7e..71e2badc 100755 --- a/html/apoio/controller/SocioController.php +++ b/html/apoio/controller/SocioController.php @@ -4,6 +4,12 @@ require_once '../helper/Util.php'; class SocioController { + + public function criarSocio(){ + $request = $_REQUEST; + echo json_encode(['mensagem' => 'Recebido com sucesso', 'data' => $request]); + } + /** * Extraí o documento de um sócio da requisição e retorna os dados pertecentes a esse sócio. */ diff --git a/html/apoio/controller/control.php b/html/apoio/controller/control.php index e07bf936..4364c341 100755 --- a/html/apoio/controller/control.php +++ b/html/apoio/controller/control.php @@ -12,6 +12,7 @@ [ 'exibirBoletosPorCpf', 'buscarPorDocumento', + 'criarSocio', ]; //Blocks execution for unauthorized access diff --git a/html/apoio/public/js/boleto.js b/html/apoio/public/js/boleto.js index cf830c0c..3d799eca 100644 --- a/html/apoio/public/js/boleto.js +++ b/html/apoio/public/js/boleto.js @@ -52,7 +52,7 @@ function buscarSocio() { function decidirAcao() { switch (acao) { case 'boleto': gerarBoleto(); break; - case 'cadastrar': console.log('Cadastrar Sócio'); break;//colocar chamada para função de cadastrar sócio + case 'cadastrar': cadastrarSocio(); break;//colocar chamada para função de cadastrar sócio case 'atualizar': console.log('Atualizar Sócio'); break;//colocar chamada para função de atualizar sócio default: console.log('Ação indefinida'); } diff --git a/html/apoio/public/js/util.js b/html/apoio/public/js/util.js index b9c762e1..03cc60d2 100644 --- a/html/apoio/public/js/util.js +++ b/html/apoio/public/js/util.js @@ -30,7 +30,8 @@ function configurarMudancaOpcao(funcao) { */ function configurarConsulta(funcao) { const btnConsulta = document.getElementById("consultar-btn"); - btnConsulta.addEventListener("click", function () { + btnConsulta.addEventListener("click", function (ev) { + ev.preventDefault(); funcao(); }) } @@ -146,9 +147,9 @@ function verificarValor(valor) { function configurarAvancaValor(funcao) { const btnAvancaValor = document.getElementById('avanca-valor'); - btnAvancaValor.addEventListener('click', () => { + btnAvancaValor.addEventListener('click', (ev) => { const valor = document.getElementById('valor').value; - + ev.preventDefault(); if (!funcao(valor)) { alert('O valor informado está abaixo do mínimo permitido.'); return; @@ -161,32 +162,36 @@ function configurarAvancaValor(funcao) { /** * Configura o comportamento do botão volta-valor */ -function configurarVoltaValor(){ +function configurarVoltaValor() { const btnVoltaValor = document.getElementById('volta-valor'); - btnVoltaValor.addEventListener('click', ()=>{ + btnVoltaValor.addEventListener('click', (ev) => { + ev.preventDefault(); alternarPaginas('pag1', 'pag2'); }); } -function configurarVoltaCpf(){ +function configurarVoltaCpf() { const btnVoltaCpf = document.getElementById('volta-cpf'); - btnVoltaCpf.addEventListener('click', ()=>{ + btnVoltaCpf.addEventListener('click', (ev) => { + ev.preventDefault(); alternarPaginas('pag2', 'pag3'); - }); + }); } -function configurarVoltaContato(){ +function configurarVoltaContato() { const btnVoltaContato = document.getElementById('volta-contato'); - btnVoltaContato.addEventListener('click', ()=>{ + btnVoltaContato.addEventListener('click', (ev) => { + ev.preventDefault(); alternarPaginas('pag3', 'pag4'); }); } -function configurarAvancaContato(funcao){ +function configurarAvancaContato(funcao) { const btnAvancaContato = document.getElementById('avanca-contato'); - btnAvancaContato.addEventListener('click', ()=>{ - if(!funcao()){ + btnAvancaContato.addEventListener('click', (ev) => { + ev.preventDefault(); + if (!funcao()) { return; } @@ -194,10 +199,11 @@ function configurarAvancaContato(funcao){ }) } -function configurarAvancaEndereco(funcao){ +function configurarAvancaEndereco(funcao) { const btnAvancaEndereco = document.getElementById('avanca-endereco'); - btnAvancaEndereco.addEventListener('click', ()=>{ - if(!funcao()){ + btnAvancaEndereco.addEventListener('click', (ev) => { + ev.preventDefault(); + if (!funcao()) { return; } @@ -205,9 +211,9 @@ function configurarAvancaEndereco(funcao){ }); } -function configurarAvancaTerminar(funcao){ +function configurarAvancaTerminar(funcao) { const btnAvancaTerminar = document.getElementById('avanca-terminar'); - btnAvancaTerminar.addEventListener('click', (ev)=>{ + btnAvancaTerminar.addEventListener('click', (ev) => { ev.preventDefault(); btnAvancaTerminar.disabled = true; btnAvancaTerminar.classList.add('disabled'); @@ -219,17 +225,17 @@ function configurarAvancaTerminar(funcao){ /** * Verifica se alguma propriedade de um objeto do tipo Socio está vazia */ -function verificarSocio({bairro, cep, cidade, complemento, documento, email, estado, id, logradouro, nome, numeroEndereco, telefone}){ +function verificarSocio({ bairro, cep, cidade, complemento, documento, email, estado, id, logradouro, nome, numeroEndereco, telefone }) { //verificar propriedades - if(!bairro || bairro.length < 1){ + if (!bairro || bairro.length < 1) { return false; } - if(!cep || cep.length < 1){ + if (!cep || cep.length < 1) { return false; } - if(!cidade || cidade.length < 1){ + if (!cidade || cidade.length < 1) { return false; } @@ -237,42 +243,75 @@ function verificarSocio({bairro, cep, cidade, complemento, documento, email, est return false; }*/ - if(!documento || documento.length < 1){ + if (!documento || documento.length < 1) { return false; } - if(!email || email.length < 1){ + if (!email || email.length < 1) { return false; } - if(!estado || estado.length < 1){ + if (!estado || estado.length < 1) { return false; } - if(!id || id.length < 1){ + if (!id || id.length < 1) { return false; } - if(!logradouro || logradouro.length < 1){ + if (!logradouro || logradouro.length < 1) { return false; } - if(!nome || nome.length < 1){ + if (!nome || nome.length < 1) { return false; } - if(!numeroEndereco || numeroEndereco.length < 1){ + if (!numeroEndereco || numeroEndereco.length < 1) { return false; } - if(!telefone || telefone.length < 1){ + if (!telefone || telefone.length < 1) { return false; } return true; } -function verificarEndereco(){ +function cadastrarSocio() { + const form = document.getElementById('formulario'); + const formData = new FormData(form); + + const documento = pegarDocumento(); + + formData.append('nomeClasse', 'SocioController'); + formData.append('metodo', 'criarSocio'); + formData.append('documento_socio', documento); + + fetch("../controller/control.php", { + method: "POST", + body: formData + }) + .then(response => { + if (!response.ok) { + throw new Error("Erro na requisição: " + response.status); + } + return response.json(); // Converte a resposta para JSON + }) + .then(resposta => { + if (resposta.mensagem) { + console.log(resposta.mensagem); + } else { + alert("Ops! Ocorreu um problema durante o seu cadastro, se o erro persistir contate o suporte."); + } + + }) + .catch(error => { + console.error("Erro:", error); + }); +} + +function verificarEndereco() { const cep = document.getElementById('cep').value; const rua = document.getElementById('rua').value; const numeroEndereco = document.getElementById('numero'); @@ -280,32 +319,32 @@ function verificarEndereco(){ const uf = document.getElementById('uf'); const cidade = document.getElementById('cidade'); - if(!cep || cep.length != 9){ - alert ('O CEP informado não está no formato válido'); + if (!cep || cep.length != 9) { + alert('O CEP informado não está no formato válido'); return false; } - if(!rua || rua.length < 1){ + if (!rua || rua.length < 1) { alert('A rua não pode estar vazia.'); return false; } - if(!numeroEndereco || numeroEndereco.length < 1){ + if (!numeroEndereco || numeroEndereco.length < 1) { alert('O número de endereço não pode estar vazio.'); return false; } - if(!bairro || bairro.length < 1){ + if (!bairro || bairro.length < 1) { alert('O bairro não pode estar vazio.'); return false; } - if(!uf || uf.length < 1){ + if (!uf || uf.length < 1) { alert('O estado não pode estar vazio.'); return false; } - if(!cidade || cidade.length < 1){ + if (!cidade || cidade.length < 1) { alert('A cidade não pode estar vazia.'); return false; } @@ -313,28 +352,28 @@ function verificarEndereco(){ return true; } -function verificarContato(){ +function verificarContato() { const nome = document.getElementById('nome').value; const dataNascimento = document.getElementById('data_nascimento').value; const email = document.getElementById('email').value; const telefone = document.getElementById('telefone').value; - if(!nome || nome.length < 3){ + if (!nome || nome.length < 3) { alert('O nome não pode estar vazio.'); return false; } - if(!dataNascimento){ + if (!dataNascimento) { alert('A data de nascimento não pode estar vazia'); return false; } - if(!email){ + if (!email) { alert('O e-mail não pode estar vazio.'); return false; } - if(!telefone){ + if (!telefone) { alert('O telefone não pode estar vazio.'); return false; } @@ -346,7 +385,7 @@ function verificarContato(){ * Recebe como parâmetro um objeto do tipo Socio e preenche os campos do formulário automaticamente * @param {*} param0 */ -function formAutocomplete({bairro, cep, cidade, complemento, documento, email, estado, id, logradouro, nome, numeroEndereco, telefone}){ +function formAutocomplete({ bairro, cep, cidade, complemento, documento, email, estado, id, logradouro, nome, numeroEndereco, telefone }) { //Definir elementos do HTML const nomeObject = document.getElementById('nome'); From 6e6302353b7d4a2593f0001ad19e242650c27b49 Mon Sep 17 00:00:00 2001 From: GabrielPintoSouza Date: Thu, 28 Nov 2024 12:14:00 -0300 Subject: [PATCH 10/15] =?UTF-8?q?Implementa=C3=A7=C3=A3o=20do=20m=C3=A9tod?= =?UTF-8?q?o=20criarSocio=20em=20SocioController=20[Issue=20#809]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html/apoio/controller/SocioController.php | 146 +++++++++++++++++++++- html/apoio/dao/SocioDAO.php | 102 ++++++++++++--- html/apoio/helper/Util.php | 51 ++++++++ html/apoio/model/Socio.php | 63 ++++++++++ 4 files changed, 345 insertions(+), 17 deletions(-) diff --git a/html/apoio/controller/SocioController.php b/html/apoio/controller/SocioController.php index 71e2badc..ceb9068f 100755 --- a/html/apoio/controller/SocioController.php +++ b/html/apoio/controller/SocioController.php @@ -5,9 +5,149 @@ class SocioController { - public function criarSocio(){ - $request = $_REQUEST; - echo json_encode(['mensagem' => 'Recebido com sucesso', 'data' => $request]); + public function criarSocio() + { + $dados = $this->extrairPost(); + $socio = new Socio(); + $socio + ->setNome($dados['nome']) + ->setDataNascimento($dados['dataNascimento']) + ->setTelefone($dados['telefone']) + ->setEmail($dados['email']) + ->setEstado($dados['uf']) + ->setCidade($dados['cidade']) + ->setBairro($dados['bairro']) + ->setComplemento($dados['complemento']) + ->setCep($dados['cep']) + ->setNumeroEndereco($dados['numero']) + ->setLogradouro($dados['rua']) + ->setDocumento($dados['cpf']) + ->setIbge($dados['ibge']) + ->setValor($dados['valor']); + + try{ + $socioDao = new SocioDAO(); + $socioDao->criarSocio($socio); + + http_response_code(200); + echo json_encode(['mensagem' => 'Sócio criado com sucesso!']); + }catch(PDOException $e){ + http_response_code(500); + echo json_encode(['erro' => $e->getMessage()]); + } + } + + /** + * Pega os dados do formulário e retorna um array caso todas as informações passem pelas validações + */ + function extrairPost() + { + //extrair dados da requisição (considerar separar em uma função própria) + $cpf = trim(filter_input(INPUT_POST, 'documento_socio')); + $nome = trim(filter_input(INPUT_POST, 'nome')); + $telefone = trim(filter_input(INPUT_POST, 'telefone')); + $dataNascimento = trim(filter_input(INPUT_POST, 'data_nascimento')); + $cep = trim(filter_input(INPUT_POST, 'cep')); + $rua = trim(filter_input(INPUT_POST, 'rua')); + $bairro = trim(filter_input(INPUT_POST, 'bairro')); + $uf = trim(filter_input(INPUT_POST, 'uf')); + $cidade = trim(filter_input(INPUT_POST, 'cidade')); + $complemento = trim(filter_input(INPUT_POST, 'complemento')); + $numero = trim(filter_input(INPUT_POST, 'numero')); + $ibge = trim(filter_input(INPUT_POST, 'ibge')); + $email = trim(filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL)); + $valor = trim(filter_input(INPUT_POST, 'valor')); + + //validar dados (considerar separar em uma função própria) + try { + //validação do CPF + require_once('../helper/Util.php'); + $util = new Util(); + + if (!$util->validarCPF($cpf)) { + throw new InvalidArgumentException('O CPF informado não é válido'); + } + + //validação do nome + if (!$nome || strlen($nome) < 3) { + throw new InvalidArgumentException('O nome informado não pode ser vazio'); + } + + //validação do telefone + if (!$telefone || strlen($telefone) != 14) { //considerar melhorar a validação posteriormente + throw new InvalidArgumentException('O telefone informado não está no formato válido'); + } + + //validação da data de nascimento + $hoje = new DateTime(); + $hoje = $hoje->format('Y-m-d'); + + if ($dataNascimento > $hoje) { + throw new InvalidArgumentException('A data de nascimento não pode ser maior que a data atual'); + } + + //validação do CEP + if (!$cep || strlen($cep) != 9) { + throw new InvalidArgumentException('O CEP informado não está no formato válido'); + } + + //validação da rua + if (!$rua || empty($rua)) { + throw new InvalidArgumentException('A rua informada não pode ser vazia'); + } + + //validação do bairro + if (!$bairro || empty($bairro)) { + throw new InvalidArgumentException('O bairro informado não pode ser vazio'); + } + + //validação do estado + if (!$uf || strlen($uf) != 2) { + throw new InvalidArgumentException('O Estado informada não pode ser vazio'); + } + + //validação da cidade + if (!$cidade || empty($cidade)) { + throw new InvalidArgumentException('A cidade informada não pode ser vazia'); + } + + //validação do número da residência + if (!$numero || empty($numero)) { + throw new InvalidArgumentException('O número da residência informada não pode ser vazio'); + } + + //validação do email + if (!$email || empty($email)) { + throw new InvalidArgumentException('O email informado não está em um formato válido'); + } + + //validação do valor + if (!$valor || $valor < 30) { //Pegar o valor de maneira dinâmica posteriormente + throw new InvalidArgumentException('O valor informado deve ser de no mínimo 30 reais.'); + } + + } catch (InvalidArgumentException $e) { + http_response_code(400); + echo json_encode(['erro' => $e->getMessage()]); + exit(); + } + + return [ + 'cpf' => $cpf, + 'nome' => $nome, + 'telefone' => $telefone, + 'dataNascimento' => $dataNascimento, + 'cep' => $cep, + 'rua' => $rua, + 'bairro' => $bairro, + 'uf' => $uf, + 'cidade' => $cidade, + 'complemento' => $complemento, + 'numero' => $numero, + 'ibge' => $ibge, + 'email' => $email, + 'valor' => $valor, + ]; } /** diff --git a/html/apoio/dao/SocioDAO.php b/html/apoio/dao/SocioDAO.php index 88088a0e..b08c899c 100755 --- a/html/apoio/dao/SocioDAO.php +++ b/html/apoio/dao/SocioDAO.php @@ -4,19 +4,21 @@ //requisitar model require_once '../model/Socio.php'; -class SocioDAO{ +class SocioDAO +{ private $pdo; public function __construct(PDO $pdo = null) { - if(is_null($pdo)){ + if (is_null($pdo)) { $this->pdo = ConexaoDAO::conectar(); - }else{ + } else { $this->pdo = $pdo; } } - public function montarSocio($socioArray){ + public function montarSocio($socioArray) + { $socio = new Socio(); $socio ->setId($socioArray['id_socio']) @@ -36,9 +38,79 @@ public function montarSocio($socioArray){ return $socio; } - public function buscarPorId($id){ - $sqlBuscaPorDocumento = - "SELECT + public function criarSocio(Socio $socio) + { + $this->pdo->beginTransaction(); + + //criar pessoa + $sqlPessoa = 'INSERT INTO pessoa(cpf, nome, telefone, data_nascimento, cep, estado, cidade, bairro, logradouro, numero_endereco, complemento, ibge) VALUES(:cpf, :nome, :telefone, :dataNascimento, :cep, :estado, :cidade, :bairro, :logradouro, :numeroEndereco, :complemento, :ibge)'; + + $stmtPessoa = $this->pdo->prepare($sqlPessoa); + + $stmtPessoa->bindParam(':cpf', $socio->getDocumento()); + $stmtPessoa->bindParam(':nome', $socio->getNome()); + $stmtPessoa->bindParam(':telefone', $socio->getTelefone()); + $stmtPessoa->bindParam(':dataNascimento', $socio->getDataNascimento()); + $stmtPessoa->bindParam(':cep', $socio->getCep()); + $stmtPessoa->bindParam(':estado', $socio->getEstado()); + $stmtPessoa->bindParam(':cidade', $socio->getCidade()); + $stmtPessoa->bindParam(':bairro', $socio->getBairro()); + $stmtPessoa->bindParam(':logradouro', $socio->getLogradouro()); + $stmtPessoa->bindParam(':numeroEndereco', $socio->getNumeroEndereco()); + $stmtPessoa->bindParam(':complemento', $socio->getComplemento()); + $stmtPessoa->bindParam(':ibge', $socio->getIbge()); + + $stmtPessoa->execute(); + $idPessoa = $this->pdo->lastInsertId(); + + //criar socio + $idSocioStatus = 3; //Define o status do sócio como Inativo temporariamente + + $tagSolicitante = $this->pdo->query("SELECT * FROM socio_tag WHERE tag='Solicitante'")->fetch(PDO::FETCH_ASSOC); + + $idSocioTag = $tagSolicitante['id_sociotag']; //Define o grupo do sócio como Solicitante + + $sqlSocio = 'INSERT INTO socio(id_pessoa, id_sociostatus, id_sociotipo, id_sociotag, email, valor_periodo, data_referencia) VALUES(:idPessoa, :idSocioStatus, :idSocioTipo, :idSocioTag, :email, :valor, :dataReferencia)'; + + $stmtSocio = $this->pdo->prepare($sqlSocio); + + $periodicidade = 0; + $dataReferencia = new DateTime(); + $dataReferencia = $dataReferencia->format('Y-m-d'); + + $stmtSocio->bindParam(':idPessoa', $idPessoa); + $stmtSocio->bindParam(':idSocioStatus', $idSocioStatus); + $stmtSocio->bindParam(':idSocioTipo', $periodicidade); + $stmtSocio->bindParam(':idSocioTag', $idSocioTag); + $stmtSocio->bindParam(':email', $socio->getEmail()); + $stmtSocio->bindParam(':valor', $socio->getValor()); + $stmtSocio->bindParam(':dataReferencia', $dataReferencia); + + $stmtSocio->execute(); + + //registrar no socio_log + $idSocio = $this->pdo->lastInsertId(); + + $sqlRegistrarSocioLog = "INSERT INTO socio_log (id_socio, descricao) + VALUES (:idSocio,'Inscrição recente')"; + + $stmtSocioLog = $this->pdo->prepare($sqlRegistrarSocioLog); + $stmtSocioLog->bindParam(':idSocio', $idSocio); + + if ($stmtSocioLog->execute()) { + $this->pdo->commit(); + } else { + $this->pdo->rollBack(); + http_response_code(500); + echo json_encode(['erro' => 'Erro ao cadastrar sócio no sistema']); + exit(); + } + } + + public function buscarPorId($id) + { + $sqlBuscaPorDocumento = + "SELECT pessoa.id_pessoa, pessoa.nome, pessoa.telefone, @@ -61,7 +133,7 @@ public function buscarPorId($id){ $stmt->execute(); - if($stmt->rowCount() === 0){ + if ($stmt->rowCount() === 0) { return null; } @@ -72,9 +144,10 @@ public function buscarPorId($id){ return $socio; } - public function buscarPorDocumento($documento){ - $sqlBuscaPorDocumento = - "SELECT + public function buscarPorDocumento($documento) + { + $sqlBuscaPorDocumento = + "SELECT pessoa.id_pessoa, pessoa.nome, pessoa.telefone, @@ -97,7 +170,7 @@ public function buscarPorDocumento($documento){ $stmt->execute(); - if($stmt->rowCount() === 0){ + if ($stmt->rowCount() === 0) { return null; } @@ -108,7 +181,8 @@ public function buscarPorDocumento($documento){ return $socio; } - public function registrarLog(Socio $socio, string $mensagem){ + public function registrarLog(Socio $socio, string $mensagem) + { $sqlRegistrarSocioLog = "INSERT INTO socio_log (id_socio, descricao) VALUES (:idSocio, :mensagem)"; @@ -118,4 +192,4 @@ public function registrarLog(Socio $socio, string $mensagem){ return $stmt->execute(); } -} \ No newline at end of file +} diff --git a/html/apoio/helper/Util.php b/html/apoio/helper/Util.php index 30945e01..abe6a2cf 100755 --- a/html/apoio/helper/Util.php +++ b/html/apoio/helper/Util.php @@ -86,4 +86,55 @@ public static function listarArquivos(string $diretorio) return $arquivos; } + + public static function validarCPF(string $cpf){ + //Limpar formatação + $cpfLimpo = preg_replace('/[^0-9]/', '', $cpf); + + //Validação do tamanho da string informada + if (strlen($cpfLimpo) != 11) { + return false; + } + + // Validação de CPFs conhecidos como inválidos + if (preg_match('/(\d)\1{10}/', $cpfLimpo)) { + return false; + } + + //Validação do primeiro dígito verificador + $soma = 0; + $resto = 0; + + for ($i = 0; $i < 9; $i++) { // Cálculo da soma + $soma += $cpfLimpo[$i] * (10 - $i); + } + + $resto = $soma % 11; + + $digitoVerificador1 = $resto < 2 ? 0 : 11 - $resto; + + if ($digitoVerificador1 != $cpfLimpo[9]) { + return false; + } + + //Validação do segundo dígito verificador + $soma = 0; + $resto = 0; + //$digitoVerificador2 = 0; + + for ($i = 0; $i < 10; $i++) { // Cálculo da soma + $soma += $cpfLimpo[$i] * (11 - $i); + } + + $resto = $soma % 11; + + $digitoVerificador2 = $resto < 2 ? 0 : 11 - $resto; + + if ($digitoVerificador2 != $cpfLimpo[10]) { + return false; + } + + //Retornar resultado + return true; + } } diff --git a/html/apoio/model/Socio.php b/html/apoio/model/Socio.php index 30b4d2cb..5baa1933 100755 --- a/html/apoio/model/Socio.php +++ b/html/apoio/model/Socio.php @@ -3,6 +3,7 @@ class Socio implements JsonSerializable{ private $id; private $nome; + private $dataNascimento; private $telefone; private $email; private $estado; @@ -13,6 +14,8 @@ class Socio implements JsonSerializable{ private $numeroEndereco; private $logradouro; private $documento; + private $ibge; + private $valor; //métodos de lógica @@ -275,4 +278,64 @@ public function setDocumento($documento) return $this; } + + /** + * Get the value of dataNascimento + */ + public function getDataNascimento() + { + return $this->dataNascimento; + } + + /** + * Set the value of dataNascimento + * + * @return self + */ + public function setDataNascimento($dataNascimento) + { + $this->dataNascimento = $dataNascimento; + + return $this; + } + + /** + * Get the value of ibge + */ + public function getIbge() + { + return $this->ibge; + } + + /** + * Set the value of ibge + * + * @return self + */ + public function setIbge($ibge) + { + $this->ibge = $ibge; + + return $this; + } + + /** + * Get the value of valor + */ + public function getValor() + { + return $this->valor; + } + + /** + * Set the value of valor + * + * @return self + */ + public function setValor($valor) + { + $this->valor = $valor; + + return $this; + } } \ No newline at end of file From f6a62b9b0fe7d12f4b4009cc0c67fa9bdcf0e87c Mon Sep 17 00:00:00 2001 From: GabrielPintoSouza Date: Mon, 2 Dec 2024 07:52:40 -0300 Subject: [PATCH 11/15] =?UTF-8?q?Implementa=C3=A7=C3=A3o=20POO=20do=20m?= =?UTF-8?q?=C3=A9todo=20atualizarSocio=20do=20m=C3=B3dulo=20de=20contribui?= =?UTF-8?q?=C3=A7=C3=A3o=20[Issue=20#810]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html/apoio/controller/SocioController.php | 64 ++++++++++++- html/apoio/controller/control.php | 1 + html/apoio/dao/SocioDAO.php | 107 +++++++++++++++++++++- html/apoio/model/Socio.php | 1 + html/apoio/public/js/boleto.js | 2 +- html/apoio/public/js/util.js | 38 +++++++- 6 files changed, 206 insertions(+), 7 deletions(-) diff --git a/html/apoio/controller/SocioController.php b/html/apoio/controller/SocioController.php index ceb9068f..f55b67d2 100755 --- a/html/apoio/controller/SocioController.php +++ b/html/apoio/controller/SocioController.php @@ -2,8 +2,15 @@ require_once '../model/Socio.php'; require_once '../dao/SocioDAO.php'; require_once '../helper/Util.php'; +require_once '../dao/ConexaoDAO.php'; class SocioController { + private PDO $pdo; + + public function __construct() + { + $this->pdo = ConexaoDAO::conectar(); + } public function criarSocio() { @@ -25,18 +32,70 @@ public function criarSocio() ->setIbge($dados['ibge']) ->setValor($dados['valor']); - try{ + try { $socioDao = new SocioDAO(); $socioDao->criarSocio($socio); http_response_code(200); echo json_encode(['mensagem' => 'Sócio criado com sucesso!']); - }catch(PDOException $e){ + } catch (PDOException $e) { http_response_code(500); echo json_encode(['erro' => $e->getMessage()]); } } + public function atualizarSocio() + { + $dados = $this->extrairPost(); + $socio = new Socio(); + $socio + ->setNome($dados['nome']) + ->setDataNascimento($dados['dataNascimento']) + ->setTelefone($dados['telefone']) + ->setEmail($dados['email']) + ->setEstado($dados['uf']) + ->setCidade($dados['cidade']) + ->setBairro($dados['bairro']) + ->setComplemento($dados['complemento']) + ->setCep($dados['cep']) + ->setNumeroEndereco($dados['numero']) + ->setLogradouro($dados['rua']) + ->setDocumento($dados['cpf']) + ->setIbge($dados['ibge']) + ->setValor($dados['valor']); + + try { + $socioDao = new SocioDAO($this->pdo); + + //Verifica se o sócio é um funcionário ou atendido + if ($socioDao->verificarInternoPorDocumento($socio->getDocumento())) { + http_response_code(403); + echo json_encode(['erro' => 'Você não possuí permissão para alterar os dados desse CPF']); + exit(); + } + + $this->pdo->beginTransaction(); + $socioDao->registrarLogPorDocumento($socio->getDocumento(), 'Atualização recente'); + + if($socioDao->atualizarSocio($socio)){ + $this->pdo->commit(); + http_response_code(200); + echo json_encode(['mensagem' => 'Atualizado com sucesso!']); + exit(); + }else{ + $this->pdo->rollBack(); + http_response_code(500); + echo json_encode(['erro' => 'Erro ao atualizar sócio no sistema']); + exit(); + } + + } catch (PDOException $e) { + http_response_code(500); + echo json_encode(['erro' => $e->getMessage()]); + exit(); + } + } + /** * Pega os dados do formulário e retorna um array caso todas as informações passem pelas validações */ @@ -125,7 +184,6 @@ function extrairPost() if (!$valor || $valor < 30) { //Pegar o valor de maneira dinâmica posteriormente throw new InvalidArgumentException('O valor informado deve ser de no mínimo 30 reais.'); } - } catch (InvalidArgumentException $e) { http_response_code(400); echo json_encode(['erro' => $e->getMessage()]); diff --git a/html/apoio/controller/control.php b/html/apoio/controller/control.php index 4364c341..5120b987 100755 --- a/html/apoio/controller/control.php +++ b/html/apoio/controller/control.php @@ -13,6 +13,7 @@ 'exibirBoletosPorCpf', 'buscarPorDocumento', 'criarSocio', + 'atualizarSocio', ]; //Blocks execution for unauthorized access diff --git a/html/apoio/dao/SocioDAO.php b/html/apoio/dao/SocioDAO.php index b08c899c..be54adc9 100755 --- a/html/apoio/dao/SocioDAO.php +++ b/html/apoio/dao/SocioDAO.php @@ -23,6 +23,7 @@ public function montarSocio($socioArray) $socio ->setId($socioArray['id_socio']) ->setNome($socioArray['nome']) + ->setDataNascimento($socioArray['data_nascimento']) ->setTelefone($socioArray['telefone']) ->setEmail($socioArray['email']) ->setEstado($socioArray['estado']) @@ -107,12 +108,99 @@ public function criarSocio(Socio $socio) } } + public function atualizarSocio(Socio $socio){ + //atualizar os dados de pessoa + $sqlAtualizarPessoa = + 'UPDATE pessoa + SET + nome=:nome, + telefone=:telefone, + data_nascimento=:dataNascimento, + cep=:cep, + estado=:estado, + cidade=:cidade, + bairro=:bairro, + logradouro=:logradouro, + numero_endereco=:numeroEndereco, + complemento=:complemento, + ibge=:ibge + WHERE cpf=:cpf'; + + $stmtPessoa = $this->pdo->prepare($sqlAtualizarPessoa); + + $stmtPessoa->bindParam(':nome', $socio->getNome()); + $stmtPessoa->bindParam(':telefone', $socio->getTelefone()); + $stmtPessoa->bindParam(':dataNascimento', $socio->getDataNascimento()); + $stmtPessoa->bindParam(':cep', $socio->getCep()); + $stmtPessoa->bindParam(':estado', $socio->getEstado()); + $stmtPessoa->bindParam(':cidade', $socio->getCidade()); + $stmtPessoa->bindParam(':bairro', $socio->getBairro()); + $stmtPessoa->bindParam(':logradouro', $socio->getLogradouro()); + $stmtPessoa->bindParam(':numeroEndereco', $socio->getNumeroEndereco()); + $stmtPessoa->bindParam(':complemento', $socio->getComplemento()); + $stmtPessoa->bindParam(':ibge', $socio->getIbge()); + $stmtPessoa->bindParam(':cpf', $socio->getDocumento()); + + $stmtPessoa->execute(); + + //atualizar os dados de socio + + //verificar se possuí o status de Ativo + $sqlBuscaAtivo = "SELECT s.id_sociotag FROM socio s JOIN pessoa p ON (s.id_pessoa=p.id_pessoa) WHERE cpf=:cpf AND s.id_sociostatus =0"; + + $stmtStatusAtivo = $this->pdo->prepare($sqlBuscaAtivo); + $stmtStatusAtivo->bindParam(':cpf', $socio->getDocumento()); + $stmtStatusAtivo->execute(); + + if ($stmtStatusAtivo->rowCount() > 0) { + $idSocioTag = $stmtStatusAtivo->fetch(PDO::FETCH_ASSOC)['id_sociotag']; + } else { + $tagSolicitante = $this->pdo->query("SELECT * FROM socio_tag WHERE tag='Solicitante'")->fetch(PDO::FETCH_ASSOC); + $idSocioTag = $tagSolicitante['id_sociotag']; //Define o grupo do sócio como Solicitante + } + + $sqlAtualizarSocio = + 'UPDATE socio s + JOIN pessoa p ON s.id_pessoa = p.id_pessoa + SET + s.email = :email, + s.valor_periodo = :valor, + s.id_sociotag =:tag + WHERE p.cpf = :cpf'; + + $stmtSocio = $this->pdo->prepare($sqlAtualizarSocio); + + $stmtSocio->bindParam(':email', $socio->getEmail()); + $stmtSocio->bindParam(':valor', $socio->getValor()); + $stmtSocio->bindParam(':cpf', $socio->getDocumento()); + $stmtSocio->bindParam(':tag', $idSocioTag); + + return $stmtSocio->execute(); + + } + + public function verificarInternoPorDocumento($documento) + { + $sqlVerificarInterno = 'SELECT p.id_pessoa FROM pessoa p JOIN socio s ON (s.id_pessoa=p.id_pessoa) LEFT JOIN atendido a ON(a.pessoa_id_pessoa=p.id_pessoa) LEFT JOIN funcionario f ON(f.id_pessoa=p.id_pessoa) WHERE p.cpf=:cpf AND (a.pessoa_id_pessoa IS NOT NULL OR f.id_pessoa IS NOT NULL)'; + + $stmt = $this->pdo->prepare($sqlVerificarInterno); + $stmt->bindParam(':cpf', $documento); + $stmt->execute(); + + if ($stmt->rowCount() > 0) { + return true; + } + + return false; + } + public function buscarPorId($id) { $sqlBuscaPorDocumento = "SELECT pessoa.id_pessoa, - pessoa.nome, + pessoa.nome, + pessoa.data_nascimento, pessoa.telefone, pessoa.cep, pessoa.estado, @@ -192,4 +280,21 @@ public function registrarLog(Socio $socio, string $mensagem) return $stmt->execute(); } + + public function registrarLogPorDocumento(string $documento, string $mensagem) + { + $sqlRegistrarSocioLog = "INSERT INTO socio_log (id_socio, descricao) + VALUES ( + (SELECT s.id_socio + FROM socio s + JOIN pessoa p ON s.id_pessoa = p.id_pessoa + WHERE p.cpf =:cpf), + :mensagem + )"; + + $stmtSocioLog = $this->pdo->prepare($sqlRegistrarSocioLog); + $stmtSocioLog->bindParam(':cpf', $documento); + $stmtSocioLog->bindParam(':mensagem', $mensagem); + $stmtSocioLog->execute(); + } } diff --git a/html/apoio/model/Socio.php b/html/apoio/model/Socio.php index 5baa1933..d1bdf2ec 100755 --- a/html/apoio/model/Socio.php +++ b/html/apoio/model/Socio.php @@ -24,6 +24,7 @@ public function jsonSerialize(): mixed return [ 'id' => $this->id, 'nome' => $this->nome, + 'dataNascimento' => $this->dataNascimento, 'telefone' => $this->telefone, 'email' => $this->email, 'estado' => $this->estado, diff --git a/html/apoio/public/js/boleto.js b/html/apoio/public/js/boleto.js index 3d799eca..106f7966 100644 --- a/html/apoio/public/js/boleto.js +++ b/html/apoio/public/js/boleto.js @@ -53,7 +53,7 @@ function decidirAcao() { switch (acao) { case 'boleto': gerarBoleto(); break; case 'cadastrar': cadastrarSocio(); break;//colocar chamada para função de cadastrar sócio - case 'atualizar': console.log('Atualizar Sócio'); break;//colocar chamada para função de atualizar sócio + case 'atualizar': atualizarSocio(); break;//colocar chamada para função de atualizar sócio default: console.log('Ação indefinida'); } } diff --git a/html/apoio/public/js/util.js b/html/apoio/public/js/util.js index 03cc60d2..caf0b0d0 100644 --- a/html/apoio/public/js/util.js +++ b/html/apoio/public/js/util.js @@ -311,6 +311,39 @@ function cadastrarSocio() { }); } +function atualizarSocio() { + const form = document.getElementById('formulario'); + const formData = new FormData(form); + + const documento = pegarDocumento(); + + formData.append('nomeClasse', 'SocioController'); + formData.append('metodo', 'atualizarSocio'); + formData.append('documento_socio', documento); + + fetch("../controller/control.php", { + method: "POST", + body: formData + }) + .then(response => { + if (!response.ok) { + throw new Error("Erro na requisição: " + response.status); + } + return response.json(); // Converte a resposta para JSON + }) + .then(resposta => { + if (resposta.mensagem) { + console.log(resposta.mensagem); + } else { + alert("Ops! Ocorreu um problema durante o seu cadastro, se o erro persistir contate o suporte."); + } + + }) + .catch(error => { + console.error("Erro:", error); + }); +} + function verificarEndereco() { const cep = document.getElementById('cep').value; const rua = document.getElementById('rua').value; @@ -385,11 +418,11 @@ function verificarContato() { * Recebe como parâmetro um objeto do tipo Socio e preenche os campos do formulário automaticamente * @param {*} param0 */ -function formAutocomplete({ bairro, cep, cidade, complemento, documento, email, estado, id, logradouro, nome, numeroEndereco, telefone }) { +function formAutocomplete({ bairro, cep, cidade, complemento, dataNascimento, documento, email, estado, id, logradouro, nome, numeroEndereco, telefone }) { //Definir elementos do HTML const nomeObject = document.getElementById('nome'); - //const dataNascimento = document.getElementById('data_nascimento'); + const dataNascimentoObject = document.getElementById('data_nascimento'); const emailObject = document.getElementById('email'); const telefoneObject = document.getElementById('telefone'); const cepObject = document.getElementById('cep'); @@ -402,6 +435,7 @@ function formAutocomplete({ bairro, cep, cidade, complemento, documento, email, //Atribuir valor aos campos nomeObject.value = nome; + dataNascimentoObject.value = dataNascimento; emailObject.value = email; telefoneObject.value = telefone; cepObject.value = cep; From f93184f04551e27e49f234ca2c5544184484ded6 Mon Sep 17 00:00:00 2001 From: GabrielPintoSouza Date: Mon, 2 Dec 2024 10:40:26 -0300 Subject: [PATCH 12/15] =?UTF-8?q?Alterada=20a=20informa=C3=A7=C3=A3o=20que?= =?UTF-8?q?=20=C3=A9=20guardada=20no=20campo=20codigo=20da=20tabela=20cont?= =?UTF-8?q?ribuicao=5Flog=20[Issue=20#807]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html/apoio/service/PagarMeBoletoService.php | 6 +++--- html/apoio/service/PagarMeCarneService.php | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/html/apoio/service/PagarMeBoletoService.php b/html/apoio/service/PagarMeBoletoService.php index 3e8371c2..d2247adf 100755 --- a/html/apoio/service/PagarMeBoletoService.php +++ b/html/apoio/service/PagarMeBoletoService.php @@ -110,8 +110,8 @@ public function gerarBoleto(ContribuicaoLog $contribuicaoLog) $responseData = json_decode($response, true); $pdf_link = $responseData['charges'][0]['last_transaction']['pdf']; - //pegar o código da plataforma - $codigoPagarMe = $responseData['code']; + //pegar o id do pedido na plataforma + $idPagarMe = $responseData['id']; //armazena copía para segunda via $this->guardarSegundaVia($pdf_link, $contribuicaoLog); @@ -131,7 +131,7 @@ public function gerarBoleto(ContribuicaoLog $contribuicaoLog) } } - return $codigoPagarMe; + return $idPagarMe; } public function guardarSegundaVia($pdf_link, ContribuicaoLog $contribuicaoLog) { diff --git a/html/apoio/service/PagarMeCarneService.php b/html/apoio/service/PagarMeCarneService.php index b9881b69..583e31a8 100755 --- a/html/apoio/service/PagarMeCarneService.php +++ b/html/apoio/service/PagarMeCarneService.php @@ -124,7 +124,7 @@ public function gerarCarne(ContribuicaoLogCollection $contribuicaoLogCollection) if ($httpCode === 200 || $httpCode === 201) { $responseData = json_decode($response, true); $pdf_links[] = $responseData['charges'][0]['last_transaction']['pdf']; - $codigosAPI[] = $responseData['code']; + $codigosAPI[] = $responseData['id']; } else { echo json_encode(['Erro' => 'A API retornou o código de status HTTP ' . $httpCode]); return false; From c605e57944af6fc83f1b3d378e3a4b54a069fd5e Mon Sep 17 00:00:00 2001 From: GabrielPintoSouza Date: Tue, 3 Dec 2024 08:05:06 -0300 Subject: [PATCH 13/15] =?UTF-8?q?Altera=C3=A7=C3=A3o=20do=20campo=20id=20d?= =?UTF-8?q?e=20contribuicao=5Flog=20para=20NOT=20NULL=20[Issue=20#804]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html/apoio/tabelas.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/html/apoio/tabelas.sql b/html/apoio/tabelas.sql index fd055e9b..627c72c6 100755 --- a/html/apoio/tabelas.sql +++ b/html/apoio/tabelas.sql @@ -1,6 +1,6 @@ -- Posteriormente adicionar as tabelas desse arquivo ao banco de dados central do sistema CREATE TABLE IF NOT EXISTS `wegia`.`contribuicao_log` ( - `id` INT NULL DEFAULT NULL AUTO_INCREMENT, + `id` INT NOT NULL AUTO_INCREMENT, `id_socio` INT(11) NOT NULL, `id_gateway` INT(11) NOT NULL, `id_meio_pagamento` INT(11) NOT NULL, From 9603d8484c2b6b9b82c5d6afeefb61bcfd196758 Mon Sep 17 00:00:00 2001 From: GabrielPintoSouza Date: Tue, 3 Dec 2024 09:29:55 -0300 Subject: [PATCH 14/15] =?UTF-8?q?Ao=20realizar=20o=20cadastro=20ou=20atual?= =?UTF-8?q?iza=C3=A7=C3=A3o=20do=20s=C3=B3cio=20o=20boleto=20j=C3=A1=20?= =?UTF-8?q?=C3=A9=20gerado=20automaticamente=20[Issue=20#767]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html/apoio/public/js/boleto.js | 6 +-- html/apoio/public/js/util.js | 82 +++++++++++++++++----------------- 2 files changed, 43 insertions(+), 45 deletions(-) diff --git a/html/apoio/public/js/boleto.js b/html/apoio/public/js/boleto.js index 106f7966..6bfd57cd 100644 --- a/html/apoio/public/js/boleto.js +++ b/html/apoio/public/js/boleto.js @@ -49,11 +49,11 @@ function buscarSocio() { console.log("Consulta realizada"); } -function decidirAcao() { +async function decidirAcao() { switch (acao) { case 'boleto': gerarBoleto(); break; - case 'cadastrar': cadastrarSocio(); break;//colocar chamada para função de cadastrar sócio - case 'atualizar': atualizarSocio(); break;//colocar chamada para função de atualizar sócio + case 'cadastrar': await cadastrarSocio(); gerarBoleto(); break;//colocar chamada para função de cadastrar sócio + case 'atualizar': await atualizarSocio(); gerarBoleto(); break;//colocar chamada para função de atualizar sócio default: console.log('Ação indefinida'); } } diff --git a/html/apoio/public/js/util.js b/html/apoio/public/js/util.js index caf0b0d0..bdb751e4 100644 --- a/html/apoio/public/js/util.js +++ b/html/apoio/public/js/util.js @@ -278,7 +278,7 @@ function verificarSocio({ bairro, cep, cidade, complemento, documento, email, es return true; } -function cadastrarSocio() { +async function cadastrarSocio() { const form = document.getElementById('formulario'); const formData = new FormData(form); @@ -288,30 +288,29 @@ function cadastrarSocio() { formData.append('metodo', 'criarSocio'); formData.append('documento_socio', documento); - fetch("../controller/control.php", { - method: "POST", - body: formData - }) - .then(response => { - if (!response.ok) { - throw new Error("Erro na requisição: " + response.status); - } - return response.json(); // Converte a resposta para JSON - }) - .then(resposta => { - if (resposta.mensagem) { - console.log(resposta.mensagem); - } else { - alert("Ops! Ocorreu um problema durante o seu cadastro, se o erro persistir contate o suporte."); - } - - }) - .catch(error => { - console.error("Erro:", error); + try { + const response = await fetch("../controller/control.php", { + method: "POST", + body: formData }); + + if (!response.ok) { + throw new Error("Erro na requisição: " + response.status); + } + + const resposta = await response.json(); // Converte a resposta para JSON + + if (resposta.mensagem) { + console.log(resposta.mensagem); + } else { + alert("Ops! Ocorreu um problema durante o seu cadastro, se o erro persistir contate o suporte."); + } + } catch (error) { + console.error("Erro:", error); + } } -function atualizarSocio() { +async function atualizarSocio() { const form = document.getElementById('formulario'); const formData = new FormData(form); @@ -321,27 +320,26 @@ function atualizarSocio() { formData.append('metodo', 'atualizarSocio'); formData.append('documento_socio', documento); - fetch("../controller/control.php", { - method: "POST", - body: formData - }) - .then(response => { - if (!response.ok) { - throw new Error("Erro na requisição: " + response.status); - } - return response.json(); // Converte a resposta para JSON - }) - .then(resposta => { - if (resposta.mensagem) { - console.log(resposta.mensagem); - } else { - alert("Ops! Ocorreu um problema durante o seu cadastro, se o erro persistir contate o suporte."); - } - - }) - .catch(error => { - console.error("Erro:", error); + try { + const response = await fetch("../controller/control.php", { + method: "POST", + body: formData }); + + if (!response.ok) { + throw new Error("Erro na requisição: " + response.status); + } + + const resposta = await response.json(); // Converte a resposta para JSON + + if (resposta.mensagem) { + console.log(resposta.mensagem); + } else { + alert("Ops! Ocorreu um problema durante o seu cadastro, se o erro persistir contate o suporte."); + } + } catch (error) { + console.error("Erro:", error); + } } function verificarEndereco() { From 78b349ab2ad50a4154812ed620543700338b3764 Mon Sep 17 00:00:00 2001 From: GabrielPintoSouza Date: Wed, 4 Dec 2024 08:56:47 -0300 Subject: [PATCH 15/15] =?UTF-8?q?incluindo=20tabela=20no=20arquivo=20de=20?= =?UTF-8?q?cria=C3=A7=C3=A3o=20do=20banco?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BD/wegia001.sql | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/BD/wegia001.sql b/BD/wegia001.sql index 8669341b..fce8ccee 100755 --- a/BD/wegia001.sql +++ b/BD/wegia001.sql @@ -819,6 +819,33 @@ CREATE TABLE `wegia`.`contribuicao_conjuntoRegras` ( CONSTRAINT `unico_meioPagamento_regra` UNIQUE (`id_meioPagamento`, `id_regra`) ) ENGINE = InnoDB; +-- ----------------------------------------------------- +-- Table `wegia`.`contribuicao_log` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS wegia.contribuicao_log ( +id INT NOT NULL AUTO_INCREMENT, +id_socio INT(11) NOT NULL, +id_gateway INT(11) NOT NULL, +id_meio_pagamento INT(11) NOT NULL, +codigo VARCHAR(255) NOT NULL UNIQUE, +valor DECIMAL(10,2) NOT NULL, +data_geracao DATE NOT NULL, +data_vencimento DATE NOT NULL, +data_pagamento DATE, +status_pagamento BOOLEAN NOT NULL, +PRIMARY KEY (id), +CONSTRAINT FK_id_socios +FOREIGN KEY (id_socio) +REFERENCES wegia.socio (id_socio), +CONSTRAINT FK_id_gateways +FOREIGN KEY (id_gateway) +REFERENCES wegia.contribuicao_gatewayPagamento (id), +CONSTRAINT FK_id_meio_pagamentos +FOREIGN KEY (id_meio_pagamento) +REFERENCES wegia.contribuicao_meioPagamento (id) +) +ENGINE = InnoDB; + -- ----------------------------------------------------- -- Table `wegia`.`socio_status`