TopSapp: fix busca de faturas por serviço
Signed-off-by: Rodrigo Bertoldo de Sousa Martins <rodrigo.sousa.577@gmail.com>
This commit is contained in:
1 parent
187a85f776
commit
1218eb32b6
2 files changed
+55
-114
No files matched your search
+13
-6
@@ -627,19 +627,26 @@ class TopSappAPI {
|
||||
|
||||
/**
|
||||
* Obter faturas em aberto do cliente
|
||||
* @param {number|string} idServico - opcional, filtra pelo serviço específico
|
||||
*/
|
||||
async obterFaturas(idCliente, location = '', credentials) {
|
||||
async obterFaturas(idCliente, location = '', credentials, idServico = null) {
|
||||
const instance = this.getInstanceByLocation(location);
|
||||
|
||||
// Obter o idUsuario da sessão atual
|
||||
const session = await this.getValidSession(instance, credentials);
|
||||
|
||||
return await this.makeRequest('ObterDocReceber', {
|
||||
const payload = {
|
||||
idCliente,
|
||||
idUsuario: session.idUsuario || 1, // Usar ID do usuário da sessão
|
||||
status: 0, // 0 = Faturas abertas
|
||||
situacaoFatura: 0 // 0 = Faturas ativas
|
||||
}, instance, credentials);
|
||||
idUsuario: session.idUsuario || 1,
|
||||
status: 0,
|
||||
situacaoFatura: 0
|
||||
};
|
||||
|
||||
if (idServico) {
|
||||
payload.idServico = idServico;
|
||||
}
|
||||
|
||||
return await this.makeRequest('ObterDocReceber', payload, instance, credentials);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+42
-108
@@ -259,80 +259,66 @@ class TopSappManager {
|
||||
try {
|
||||
const credentials = this.config.getCredentialsByLocation(location);
|
||||
|
||||
// Obter faturas e serviços em paralelo
|
||||
const [faturas, servicos] = await Promise.all([
|
||||
this.api.obterFaturas(idCliente, location, credentials),
|
||||
this.api.obterServicosCliente(idCliente, location, credentials)
|
||||
]);
|
||||
|
||||
if (!faturas.success) {
|
||||
return faturas;
|
||||
}
|
||||
// Buscar serviços do cliente primeiro
|
||||
const servicos = await this.api.obterServicosCliente(idCliente, location, credentials);
|
||||
|
||||
if (!servicos.success) {
|
||||
return servicos;
|
||||
}
|
||||
|
||||
const servicosData = servicos.data.dados || servicos.data.servicos || [];
|
||||
const faturasData = faturas.data.dados || [];
|
||||
|
||||
// Organizar faturas por serviço
|
||||
// Organizar faturas por serviço buscando cada serviço individualmente
|
||||
const faturasPorServico = [];
|
||||
|
||||
for (const servico of servicosData) {
|
||||
const faturasDoServico = [];
|
||||
|
||||
// Buscar faturas relacionadas a este serviço
|
||||
// Buscar faturas filtradas pelo id_servico diretamente na API
|
||||
const faturasServico = await this.api.obterFaturas(
|
||||
idCliente, location, credentials, servico.id_servico
|
||||
);
|
||||
|
||||
const faturasData = (faturasServico.success && faturasServico.data)
|
||||
? (faturasServico.data.dados || [])
|
||||
: [];
|
||||
|
||||
for (const fatura of faturasData) {
|
||||
// Verificar se a fatura pertence a este serviço
|
||||
// Pode usar id_servico, periodo, ou outros critérios de associação
|
||||
if (fatura.id_servico === servico.id_servico ||
|
||||
fatura.codigo_cliente === servico.id_cliente) {
|
||||
// Obter dados detalhados da fatura (linha digitável e PIX)
|
||||
const dadosFatura = await this.api.obterDadosFatura(
|
||||
fatura.id,
|
||||
fatura.codigo_cliente || idCliente,
|
||||
location,
|
||||
credentials
|
||||
);
|
||||
|
||||
// Obter dados detalhados da fatura (linha digitável e PIX)
|
||||
const dadosFatura = await this.api.obterDadosFatura(
|
||||
fatura.id,
|
||||
fatura.codigo_cliente || idCliente,
|
||||
location,
|
||||
credentials
|
||||
);
|
||||
const faturaDetalhada = {
|
||||
id: fatura.id,
|
||||
valor: fatura.valor,
|
||||
vencimento: fatura.vencimento,
|
||||
status: fatura.pago === 'SIM' ? 'Pago' : 'Pendente',
|
||||
descricao: fatura.historico || fatura.descricao || 'Mensalidade',
|
||||
periodo: this.formatarPeriodo(fatura.periodo_inicio, fatura.periodo_fim),
|
||||
id_servico: fatura.id_servico || servico.id_servico,
|
||||
linhaDigitavel: null,
|
||||
pixCopiaCola: null
|
||||
};
|
||||
|
||||
const faturaDetalhada = {
|
||||
id: fatura.id,
|
||||
valor: fatura.valor,
|
||||
vencimento: fatura.vencimento,
|
||||
status: fatura.pago === 'SIM' ? 'Pago' : 'Pendente',
|
||||
descricao: fatura.historico || fatura.descricao || 'Mensalidade',
|
||||
periodo: this.formatarPeriodo(fatura.periodo_inicio, fatura.periodo_fim),
|
||||
id_servico: fatura.id_servico || servico.id_servico,
|
||||
linhaDigitavel: null,
|
||||
pixCopiaCola: null
|
||||
};
|
||||
// Adicionar dados de pagamento se disponíveis
|
||||
if (dadosFatura.success && dadosFatura.data) {
|
||||
const dadosReturn = dadosFatura.data.fatura || dadosFatura.data.dados || dadosFatura.data;
|
||||
|
||||
// Adicionar dados de pagamento se disponíveis
|
||||
if (dadosFatura.success && dadosFatura.data) {
|
||||
const dadosReturn = dadosFatura.data.fatura || dadosFatura.data.dados || dadosFatura.data;
|
||||
|
||||
if (dadosReturn.linha_digitavel) {
|
||||
faturaDetalhada.linhaDigitavel = dadosReturn.linha_digitavel;
|
||||
}
|
||||
|
||||
if (dadosReturn.qrcode) {
|
||||
faturaDetalhada.pixCopiaCola = dadosReturn.qrcode;
|
||||
}
|
||||
|
||||
// Outros campos possíveis: pix_copia_cola, codigo_pix, etc.
|
||||
if (dadosReturn.pix_copia_cola) {
|
||||
faturaDetalhada.pixCopiaCola = dadosReturn.pix_copia_cola;
|
||||
}
|
||||
|
||||
if (dadosReturn.codigo_pix) {
|
||||
faturaDetalhada.pixCopiaCola = dadosReturn.codigo_pix;
|
||||
}
|
||||
if (dadosReturn.linha_digitavel) {
|
||||
faturaDetalhada.linhaDigitavel = dadosReturn.linha_digitavel;
|
||||
}
|
||||
|
||||
faturasDoServico.push(faturaDetalhada);
|
||||
faturaDetalhada.pixCopiaCola = dadosReturn.qrcode
|
||||
|| dadosReturn.pix_copia_cola
|
||||
|| dadosReturn.codigo_pix
|
||||
|| null;
|
||||
}
|
||||
|
||||
faturasDoServico.push(faturaDetalhada);
|
||||
}
|
||||
|
||||
// Se o serviço tem faturas, adicionar à lista
|
||||
@@ -352,64 +338,12 @@ class TopSappManager {
|
||||
}
|
||||
}
|
||||
|
||||
// Se não conseguiu associar por serviço, criar uma entrada genérica
|
||||
if (faturasPorServico.length === 0 && faturasData.length > 0) {
|
||||
const faturasGenericas = [];
|
||||
|
||||
for (const fatura of faturasData) {
|
||||
const dadosFatura = await this.api.obterDadosFatura(
|
||||
fatura.id,
|
||||
fatura.codigo_cliente || idCliente,
|
||||
location,
|
||||
credentials
|
||||
);
|
||||
|
||||
const faturaDetalhada = {
|
||||
id: fatura.id,
|
||||
valor: fatura.valor,
|
||||
vencimento: fatura.vencimento,
|
||||
status: fatura.pago === 'SIM' ? 'Pago' : 'Pendente',
|
||||
descricao: fatura.historico || fatura.descricao || 'Mensalidade',
|
||||
periodo: this.formatarPeriodo(fatura.periodo_inicio, fatura.periodo_fim),
|
||||
linhaDigitavel: null,
|
||||
pixCopiaCola: null
|
||||
};
|
||||
|
||||
if (dadosFatura.success && dadosFatura.data) {
|
||||
const dadosReturn = dadosFatura.data.fatura || dadosFatura.data.dados || dadosFatura.data;
|
||||
|
||||
if (dadosReturn.linha_digitavel) {
|
||||
faturaDetalhada.linhaDigitavel = dadosReturn.linha_digitavel;
|
||||
}
|
||||
|
||||
if (dadosReturn.qrcode || dadosReturn.pix_copia_cola || dadosReturn.codigo_pix) {
|
||||
faturaDetalhada.pixCopiaCola = dadosReturn.qrcode || dadosReturn.pix_copia_cola || dadosReturn.codigo_pix;
|
||||
}
|
||||
}
|
||||
|
||||
faturasGenericas.push(faturaDetalhada);
|
||||
}
|
||||
|
||||
faturasPorServico.push({
|
||||
servico: {
|
||||
id: 'geral',
|
||||
nome: 'Faturas Gerais',
|
||||
base: 'Geral',
|
||||
tecnologia: 'Não especificado',
|
||||
valor_mensal: 0,
|
||||
vencimento_dia: 'Variável',
|
||||
status: 'Geral'
|
||||
},
|
||||
faturas: faturasGenericas
|
||||
});
|
||||
}
|
||||
|
||||
return {
|
||||
success: true,
|
||||
faturasPorServico,
|
||||
totalServicos: faturasPorServico.length,
|
||||
totalFaturas: faturasPorServico.reduce((total, item) => total + item.faturas.length, 0),
|
||||
instancia: faturas.instance
|
||||
instancia: location
|
||||
};
|
||||
|
||||
} catch (error) {
|
||||
|
||||
Reference in new issue
Block a user