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)