Skip to content

Commit

Permalink
Merge pull request #818 from nilsonLazarin/pre-master-2411-1
Browse files Browse the repository at this point in the history
Pre master 2411 1
  • Loading branch information
nilsonLazarin authored Dec 4, 2024
2 parents dda8b98 + 9aa1cc0 commit df7556d
Show file tree
Hide file tree
Showing 19 changed files with 1,084 additions and 175 deletions.
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
9 changes: 8 additions & 1 deletion BD/wegia002.sql
Original file line number Diff line number Diff line change
Expand Up @@ -277,4 +277,11 @@ INSERT INTO `saude_tabelacid` (`CID`, `descricao`) VALUES ('B34.2', 'Infecção
-- 240621: Refatoração do módulo Contribuição, dados para as novas tabelas --
INSERT INTO `contribuicao_regras` (`regra`) VALUES
('MIN_VALUE'),
('MAX_VALUE');
('MAX_VALUE');

INSERT INTO `contribuicao_gatewayPagamento` (plataforma,endPoint,token,status) VALUES ("NAO DEFINIDA","https://localhost/api","coloque o token aqui",0);

INSERT INTO `contribuicao_meioPagamento` (meio,id_plataforma,status) VALUES ("Boleto",1,0), ("Pix",1,0), ("Carne",1,0);

INSERT INTO `contribuicao_conjuntoRegras` (id_meioPagamento,id_regra,valor,status)
VALUES (1,1,1,0), (1,2,1000,0), (2,1,1,0), (2,2,1000,0), (3,1,1,0), (3,2,1000,0);
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

0 comments on commit df7556d

Please sign in to comment.