Skip to content

Commit

Permalink
Método criarCarne agora insere no banco de dados o código retornado p…
Browse files Browse the repository at this point in the history
…ela API [Issue #807]
  • Loading branch information
GabrielPintoSouza committed Nov 27, 2024
1 parent b51caad commit b2b915d
Show file tree
Hide file tree
Showing 2 changed files with 112 additions and 102 deletions.
204 changes: 103 additions & 101 deletions html/apoio/controller/ContribuicaoLogController.php
Original file line number Diff line number Diff line change
Expand Up @@ -183,134 +183,136 @@ 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
$mensagem = "Carnê gerado recentemente";
$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
Expand Down
10 changes: 9 additions & 1 deletion html/apoio/service/PagarMeCarneService.php
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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)
Expand Down

0 comments on commit b2b915d

Please sign in to comment.