financeiro/financeiro-api/src/modules/quitacoesCredito/controllers/quitacoesCredito.controller.js

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,
};