242 lines
5.8 KiB
JavaScript
242 lines
5.8 KiB
JavaScript
const quitacoesCreditoService = require('../services/quitacoesCredito.service');
|
|
|
|
function resolverIdUsuario(req) {
|
|
return Number(req.user?.idusuarios || req.user?.id);
|
|
}
|
|
|
|
function tratarErro(error, res, mensagemPadrao) {
|
|
if (error?.statusCode) {
|
|
return res.status(error.statusCode).json({
|
|
ok: false,
|
|
message: error.message,
|
|
code: error.code || undefined,
|
|
});
|
|
}
|
|
|
|
return res.status(500).json({
|
|
ok: false,
|
|
message: mensagemPadrao,
|
|
});
|
|
}
|
|
|
|
function validarCriacao(dados) {
|
|
if (!dados.idBancoCredito && !dados.idbancos_p) {
|
|
return 'Banco de crédito é obrigatório.';
|
|
}
|
|
|
|
if (!dados.idBancoPagamento && !dados.idbancos) {
|
|
return 'Banco de pagamento é obrigatório.';
|
|
}
|
|
|
|
const idsContas = dados.idsContas || dados.contas;
|
|
|
|
if (!Array.isArray(idsContas) || idsContas.length === 0) {
|
|
return 'Selecione pelo menos uma conta para quitar.';
|
|
}
|
|
|
|
if (dados.valorQuitado !== undefined && dados.valorQuitado !== null && dados.valorQuitado !== '') {
|
|
const valor = Number(dados.valorQuitado);
|
|
|
|
if (!Number.isFinite(valor) || valor <= 0) {
|
|
return 'Valor quitado inválido.';
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
async function listarBancosCredito(req, res) {
|
|
try {
|
|
const idUsuario = resolverIdUsuario(req);
|
|
|
|
if (!idUsuario) {
|
|
return res.status(401).json({
|
|
ok: false,
|
|
message: 'Usuário inválido.',
|
|
});
|
|
}
|
|
|
|
const bancos = await quitacoesCreditoService.listarBancosCredito(idUsuario);
|
|
|
|
return res.json({
|
|
ok: true,
|
|
data: bancos,
|
|
});
|
|
} catch (error) {
|
|
console.error('Erro ao listar bancos de crédito:', error);
|
|
return tratarErro(error, res, 'Erro ao listar bancos de crédito.');
|
|
}
|
|
}
|
|
|
|
async function listarBancosPagamento(req, res) {
|
|
try {
|
|
const idUsuario = resolverIdUsuario(req);
|
|
|
|
if (!idUsuario) {
|
|
return res.status(401).json({
|
|
ok: false,
|
|
message: 'Usuário inválido.',
|
|
});
|
|
}
|
|
|
|
const bancos = await quitacoesCreditoService.listarBancosPagamento(idUsuario);
|
|
|
|
return res.json({
|
|
ok: true,
|
|
data: bancos,
|
|
});
|
|
} catch (error) {
|
|
console.error('Erro ao listar bancos de pagamento:', error);
|
|
return tratarErro(error, res, 'Erro ao listar bancos de pagamento.');
|
|
}
|
|
}
|
|
|
|
async function preview(req, res) {
|
|
try {
|
|
const idUsuario = resolverIdUsuario(req);
|
|
|
|
if (!idUsuario) {
|
|
return res.status(401).json({
|
|
ok: false,
|
|
message: 'Usuário inválido.',
|
|
});
|
|
}
|
|
|
|
const resultado = await quitacoesCreditoService.previewQuitacao(idUsuario, {
|
|
idBancoCredito: req.query.idBancoCredito || req.query.idbancos,
|
|
dataInicio: req.query.dataInicio,
|
|
dataFim: req.query.dataFim,
|
|
busca: req.query.busca,
|
|
limite: req.query.limite,
|
|
offset: req.query.offset,
|
|
page: req.query.page,
|
|
});
|
|
|
|
return res.json({
|
|
ok: true,
|
|
data: resultado,
|
|
});
|
|
} catch (error) {
|
|
console.error('Erro ao gerar preview de quitação de crédito:', error);
|
|
return tratarErro(error, res, 'Erro ao gerar preview de quitação de crédito.');
|
|
}
|
|
}
|
|
|
|
async function criar(req, res) {
|
|
try {
|
|
const erroValidacao = validarCriacao(req.body);
|
|
|
|
if (erroValidacao) {
|
|
return res.status(400).json({
|
|
ok: false,
|
|
message: erroValidacao,
|
|
});
|
|
}
|
|
|
|
const idUsuario = resolverIdUsuario(req);
|
|
|
|
if (!idUsuario) {
|
|
return res.status(401).json({
|
|
ok: false,
|
|
message: 'Usuário inválido.',
|
|
});
|
|
}
|
|
|
|
const resultado = await quitacoesCreditoService.criarQuitacaoCredito(idUsuario, req.body);
|
|
|
|
return res.status(201).json({
|
|
ok: true,
|
|
message: 'Crédito quitado com sucesso.',
|
|
data: resultado.quitacao,
|
|
contasQuitadas: resultado.contasQuitadas,
|
|
valorQuitado: resultado.valorQuitado,
|
|
impactoSaldo: resultado.impactoSaldo || [],
|
|
});
|
|
} catch (error) {
|
|
console.error('Erro ao quitar crédito:', error);
|
|
return tratarErro(error, res, 'Erro ao quitar crédito.');
|
|
}
|
|
}
|
|
|
|
async function listarHistorico(req, res) {
|
|
try {
|
|
const idUsuario = resolverIdUsuario(req);
|
|
|
|
if (!idUsuario) {
|
|
return res.status(401).json({
|
|
ok: false,
|
|
message: 'Usuário inválido.',
|
|
});
|
|
}
|
|
|
|
const resultado = await quitacoesCreditoService.listarHistorico(idUsuario, {
|
|
limite: req.query.limite,
|
|
offset: req.query.offset,
|
|
page: req.query.page,
|
|
idBancoCredito: req.query.idBancoCredito,
|
|
idBancoPagamento: req.query.idBancoPagamento,
|
|
dataInicio: req.query.dataInicio,
|
|
dataFim: req.query.dataFim,
|
|
busca: req.query.busca,
|
|
});
|
|
|
|
return res.json({
|
|
ok: true,
|
|
data: resultado.data,
|
|
pagination: resultado.pagination,
|
|
summary: resultado.summary,
|
|
});
|
|
} catch (error) {
|
|
console.error('Erro ao listar histórico de quitações:', error);
|
|
return tratarErro(error, res, 'Erro ao listar histórico de quitações.');
|
|
}
|
|
}
|
|
|
|
async function buscarPorId(req, res) {
|
|
try {
|
|
const id = Number(req.params.id);
|
|
|
|
if (!id) {
|
|
return res.status(400).json({
|
|
ok: false,
|
|
message: 'ID inválido.',
|
|
});
|
|
}
|
|
|
|
const idUsuario = resolverIdUsuario(req);
|
|
|
|
if (!idUsuario) {
|
|
return res.status(401).json({
|
|
ok: false,
|
|
message: 'Usuário inválido.',
|
|
});
|
|
}
|
|
|
|
const quitacao = await quitacoesCreditoService.buscarQuitacaoPorId(id, idUsuario);
|
|
|
|
if (!quitacao) {
|
|
return res.status(404).json({
|
|
ok: false,
|
|
message: 'Quitação não encontrada.',
|
|
});
|
|
}
|
|
|
|
return res.json({
|
|
ok: true,
|
|
data: quitacao,
|
|
});
|
|
} catch (error) {
|
|
console.error('Erro ao buscar quitação:', error);
|
|
return tratarErro(error, res, 'Erro ao buscar quitação.');
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
listarBancosCredito,
|
|
listarBancosPagamento,
|
|
preview,
|
|
criar,
|
|
listarHistorico,
|
|
buscarPorId,
|
|
};
|