Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Alteração da informação que é salva no campo codigo de contribuicao_log - Equipe laje 241125 #813

Merged
merged 15 commits into from
Dec 4, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
15 commits
Select commit Hold shift + click to select a range
cd5a2f2
Alteração da tabela contribuicao_log [Issue #804]
GabrielPintoSouza Nov 26, 2024
69a66d3
Preenchimento automático da data [Issue #806]
GabrielPintoSouza Nov 26, 2024
a7f8119
Resolução do bug [Issue #808]
GabrielPintoSouza Nov 26, 2024
b51caad
Método criarBoleto agora insere no banco de dados o código retornado …
GabrielPintoSouza Nov 26, 2024
b2b915d
Método criarCarne agora insere no banco de dados o código retornado p…
GabrielPintoSouza Nov 27, 2024
bc953f1
Configuração do comportamento do botão de avanca-contato [Issue #767]
GabrielPintoSouza Nov 27, 2024
729d562
Criação do comportamento do botão avanca-endereco [Issue #767]
GabrielPintoSouza Nov 27, 2024
b44f668
Criação da função gerarBoleto em boleto.js [Issue #767]
GabrielPintoSouza Nov 28, 2024
b5b74e5
Criação da função cadastrarSocio em util.js [Issue #767]
GabrielPintoSouza Nov 28, 2024
6e63023
Implementação do método criarSocio em SocioController [Issue #809]
GabrielPintoSouza Nov 28, 2024
f6a62b9
Implementação POO do método atualizarSocio do módulo de contribuição …
GabrielPintoSouza Dec 2, 2024
f93184f
Alterada a informação que é guardada no campo codigo da tabela contri…
GabrielPintoSouza Dec 2, 2024
c605e57
Alteração do campo id de contribuicao_log para NOT NULL [Issue #804]
GabrielPintoSouza Dec 3, 2024
9603d84
Ao realizar o cadastro ou atualização do sócio o boleto já é gerado a…
GabrielPintoSouza Dec 3, 2024
78b349a
incluindo tabela no arquivo de criação do banco
GabrielPintoSouza Dec 4, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions BD/wegia001.sql
Original file line number Diff line number Diff line change
Expand Up @@ -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`
Expand Down
218 changes: 117 additions & 101 deletions html/apoio/controller/ContribuicaoLogController.php
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down Expand Up @@ -98,23 +99,28 @@ 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
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) {
Expand Down Expand Up @@ -157,6 +163,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';
Expand All @@ -171,135 +178,141 @@ 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();
}

$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);

//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);
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 {

//Inserir na coleção
$contribuicaoLogCollection->add($contribuicaoLog);
}
}
// 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');
}

try {
/*Controle de transação para que o log só seja registrado
caso o serviço de pagamento tenha sido executado*/
$this->pdo->beginTransaction();
for ($i = 0; $i < $qtdParcelas; $i++) {
// Clonar a data atual para evitar modificar o objeto original
$dataVencimento = clone $dataAtual;

// 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);

foreach ($contribuicaoLogCollection as $contribuicaoLog) {
$contribuicaoLogDao = new ContribuicaoLogDAO($this->pdo);
$contribuicaoLogDao->criar($contribuicaoLog);
//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 Expand Up @@ -339,6 +352,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';
Expand Down Expand Up @@ -374,7 +388,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
Expand Down
Loading