Compare commits
No commits in common. "a5c9e6985d9cbfe4cdb6cc8f609874332b20bd10" and "76ab77fb5183ce9a68cfa77eba6c610005dab654" have entirely different histories.
a5c9e6985d
...
76ab77fb51
File diff suppressed because it is too large
Load Diff
|
|
@ -1,5 +1,5 @@
|
||||||
import { executeOracleQuery } from '@/db/oracle';
|
|
||||||
import { NextRequest, NextResponse } from 'next/server';
|
import { NextRequest, NextResponse } from 'next/server';
|
||||||
|
import { executeOracleQuery } from '@/db/oracle';
|
||||||
|
|
||||||
export async function GET(request: NextRequest) {
|
export async function GET(request: NextRequest) {
|
||||||
try {
|
try {
|
||||||
|
|
@ -16,18 +16,14 @@ export async function GET(request: NextRequest) {
|
||||||
const codigoGrupo = searchParams.get('codigoGrupo');
|
const codigoGrupo = searchParams.get('codigoGrupo');
|
||||||
const codigoSubgrupo = searchParams.get('codigoSubgrupo');
|
const codigoSubgrupo = searchParams.get('codigoSubgrupo');
|
||||||
const codigoConta = searchParams.get('codigoConta');
|
const codigoConta = searchParams.get('codigoConta');
|
||||||
|
|
||||||
// Parâmetros para exclusão de valores específicos
|
// Parâmetros para exclusão de valores específicos
|
||||||
const excluirCentroCusto = searchParams.get('excluirCentroCusto');
|
const excluirCentroCusto = searchParams.get('excluirCentroCusto');
|
||||||
const excluirCodigoConta = searchParams.get('excluirCodigoConta');
|
const excluirCodigoConta = searchParams.get('excluirCodigoConta');
|
||||||
|
|
||||||
// Novos parâmetros para códigos selecionados no filtro
|
// Novos parâmetros para códigos selecionados no filtro
|
||||||
const codigosCentrosCustoSelecionados = searchParams.get(
|
const codigosCentrosCustoSelecionados = searchParams.get('codigosCentrosCustoSelecionados');
|
||||||
'codigosCentrosCustoSelecionados'
|
const codigosContasSelecionadas = searchParams.get('codigosContasSelecionadas');
|
||||||
);
|
|
||||||
const codigosContasSelecionadas = searchParams.get(
|
|
||||||
'codigosContasSelecionadas'
|
|
||||||
);
|
|
||||||
|
|
||||||
console.log('🎯 Filtros recebidos na API:', {
|
console.log('🎯 Filtros recebidos na API:', {
|
||||||
dataInicio,
|
dataInicio,
|
||||||
|
|
@ -39,17 +35,14 @@ export async function GET(request: NextRequest) {
|
||||||
excluirCentroCusto,
|
excluirCentroCusto,
|
||||||
excluirCodigoConta,
|
excluirCodigoConta,
|
||||||
codigosCentrosCustoSelecionados,
|
codigosCentrosCustoSelecionados,
|
||||||
codigosContasSelecionadas,
|
codigosContasSelecionadas
|
||||||
});
|
});
|
||||||
console.log('🔍 Verificação específica de centroCusto:', {
|
console.log('🔍 Verificação específica de centroCusto:', {
|
||||||
centroCusto,
|
centroCusto,
|
||||||
tipo: typeof centroCusto,
|
tipo: typeof centroCusto,
|
||||||
vazio:
|
vazio: centroCusto === null || centroCusto === undefined || centroCusto === '',
|
||||||
centroCusto === null || centroCusto === undefined || centroCusto === '',
|
|
||||||
codigosCentrosCustoSelecionados,
|
codigosCentrosCustoSelecionados,
|
||||||
codigosCentrosCustoSelecionadosVazio:
|
codigosCentrosCustoSelecionadosVazio: !codigosCentrosCustoSelecionados || codigosCentrosCustoSelecionados === ''
|
||||||
!codigosCentrosCustoSelecionados ||
|
|
||||||
codigosCentrosCustoSelecionados === '',
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// Construir query SQL com filtros usando a view DESPESA_ENTIDADE_ANALITICO
|
// Construir query SQL com filtros usando a view DESPESA_ENTIDADE_ANALITICO
|
||||||
|
|
@ -59,17 +52,10 @@ export async function GET(request: NextRequest) {
|
||||||
|
|
||||||
// Filtro por período (usando ANOMESCOMP)
|
// Filtro por período (usando ANOMESCOMP)
|
||||||
if (dataInicio && dataFim) {
|
if (dataInicio && dataFim) {
|
||||||
sql += ` AND ANOMESCOMP >= :${paramIndex} AND ANOMESCOMP <= :${
|
sql += ` AND ANOMESCOMP >= :${paramIndex} AND ANOMESCOMP <= :${paramIndex + 1}`;
|
||||||
paramIndex + 1
|
|
||||||
}`;
|
|
||||||
params.push(dataInicio, dataFim);
|
params.push(dataInicio, dataFim);
|
||||||
paramIndex += 2;
|
paramIndex += 2;
|
||||||
console.log(
|
console.log('📅 Adicionando filtro de período:', dataInicio, 'a', dataFim);
|
||||||
'📅 Adicionando filtro de período:',
|
|
||||||
dataInicio,
|
|
||||||
'a',
|
|
||||||
dataFim
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Filtro por código do grupo
|
// Filtro por código do grupo
|
||||||
|
|
@ -101,15 +87,12 @@ export async function GET(request: NextRequest) {
|
||||||
console.log('🔍 Antes de aplicar filtro de centro de custo:', {
|
console.log('🔍 Antes de aplicar filtro de centro de custo:', {
|
||||||
codigosCentrosCustoSelecionados,
|
codigosCentrosCustoSelecionados,
|
||||||
centroCusto,
|
centroCusto,
|
||||||
codigosCentrosCustoSelecionadosVazio:
|
codigosCentrosCustoSelecionadosVazio: !codigosCentrosCustoSelecionados || codigosCentrosCustoSelecionados.trim() === '',
|
||||||
!codigosCentrosCustoSelecionados ||
|
|
||||||
codigosCentrosCustoSelecionados.trim() === '',
|
|
||||||
centroCustoVazio: !centroCusto || centroCusto.trim() === '',
|
centroCustoVazio: !centroCusto || centroCusto.trim() === '',
|
||||||
centroCustoLength: centroCusto?.length,
|
centroCustoLength: centroCusto?.length,
|
||||||
codigosCentrosCustoSelecionadosLength:
|
codigosCentrosCustoSelecionadosLength: codigosCentrosCustoSelecionados?.length
|
||||||
codigosCentrosCustoSelecionados?.length,
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// IMPORTANTE: Quando centroCusto individual é fornecido (clique na célula), ele tem PRIORIDADE ABSOLUTA
|
// IMPORTANTE: Quando centroCusto individual é fornecido (clique na célula), ele tem PRIORIDADE ABSOLUTA
|
||||||
// e deve filtrar APENAS por ele, ignorando codigosCentrosCustoSelecionados do filtro geral
|
// e deve filtrar APENAS por ele, ignorando codigosCentrosCustoSelecionados do filtro geral
|
||||||
if (centroCusto && centroCusto.trim() !== '') {
|
if (centroCusto && centroCusto.trim() !== '') {
|
||||||
|
|
@ -118,44 +101,21 @@ export async function GET(request: NextRequest) {
|
||||||
sql += ` AND CODIGOCENTROCUSTO = :${paramIndex}`;
|
sql += ` AND CODIGOCENTROCUSTO = :${paramIndex}`;
|
||||||
params.push(centroCusto);
|
params.push(centroCusto);
|
||||||
paramIndex++;
|
paramIndex++;
|
||||||
console.log(
|
console.log('🏢 PRIORIDADE: Filtrando APENAS por centroCusto individual (clique na célula):', centroCusto);
|
||||||
'🏢 PRIORIDADE: Filtrando APENAS por centroCusto individual (clique na célula):',
|
console.log('⚠️ Ignorando codigosCentrosCustoSelecionados do filtro geral quando há centroCusto individual');
|
||||||
centroCusto
|
console.log('📝 SQL após adicionar filtro =:', sql.substring(0, 200) + '...');
|
||||||
);
|
} else if (codigosCentrosCustoSelecionados && codigosCentrosCustoSelecionados.trim() !== '') {
|
||||||
console.log(
|
|
||||||
'⚠️ Ignorando codigosCentrosCustoSelecionados do filtro geral quando há centroCusto individual'
|
|
||||||
);
|
|
||||||
console.log(
|
|
||||||
'📝 SQL após adicionar filtro =:',
|
|
||||||
sql.substring(0, 200) + '...'
|
|
||||||
);
|
|
||||||
} else if (
|
|
||||||
codigosCentrosCustoSelecionados &&
|
|
||||||
codigosCentrosCustoSelecionados.trim() !== ''
|
|
||||||
) {
|
|
||||||
// Se só codigosCentrosCustoSelecionados existe (sem clique na célula), usar ele
|
// Se só codigosCentrosCustoSelecionados existe (sem clique na célula), usar ele
|
||||||
const codigosArray = codigosCentrosCustoSelecionados
|
const codigosArray = codigosCentrosCustoSelecionados.split(',').filter(c => c.trim() !== '');
|
||||||
.split(',')
|
|
||||||
.filter((c) => c.trim() !== '');
|
|
||||||
if (codigosArray.length > 0) {
|
if (codigosArray.length > 0) {
|
||||||
const placeholders = codigosArray
|
const placeholders = codigosArray.map(() => `:${paramIndex++}`).join(',');
|
||||||
.map(() => `:${paramIndex++}`)
|
|
||||||
.join(',');
|
|
||||||
sql += ` AND CODIGOCENTROCUSTO IN (${placeholders})`;
|
sql += ` AND CODIGOCENTROCUSTO IN (${placeholders})`;
|
||||||
params.push(...codigosArray);
|
params.push(...codigosArray);
|
||||||
console.log(
|
console.log('🏢 Filtrando por códigos de centros de custo selecionados (filtro geral):', codigosArray);
|
||||||
'🏢 Filtrando por códigos de centros de custo selecionados (filtro geral):',
|
console.log('📝 SQL após adicionar filtro IN:', sql.substring(0, 200) + '...');
|
||||||
codigosArray
|
|
||||||
);
|
|
||||||
console.log(
|
|
||||||
'📝 SQL após adicionar filtro IN:',
|
|
||||||
sql.substring(0, 200) + '...'
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
console.log(
|
console.log('⚠️ Nenhum filtro de centro de custo aplicado - ambos estão vazios');
|
||||||
'⚠️ Nenhum filtro de centro de custo aplicado - ambos estão vazios'
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Exclusão de centro de custo específico (quando desmarcado)
|
// Exclusão de centro de custo específico (quando desmarcado)
|
||||||
|
|
@ -187,33 +147,19 @@ export async function GET(request: NextRequest) {
|
||||||
sql += ` ORDER BY DTVENC, CODFORNEC, CODCONTA`;
|
sql += ` ORDER BY DTVENC, CODFORNEC, CODCONTA`;
|
||||||
|
|
||||||
// Log detalhado da query SQL final
|
// Log detalhado da query SQL final
|
||||||
console.log(
|
console.log('═══════════════════════════════════════════════════════════════');
|
||||||
'═══════════════════════════════════════════════════════════════'
|
|
||||||
);
|
|
||||||
console.log('🗄️ QUERY SQL FINAL:');
|
console.log('🗄️ QUERY SQL FINAL:');
|
||||||
console.log(
|
console.log('═══════════════════════════════════════════════════════════════');
|
||||||
'═══════════════════════════════════════════════════════════════'
|
|
||||||
);
|
|
||||||
console.log(sql);
|
console.log(sql);
|
||||||
console.log(
|
console.log('═══════════════════════════════════════════════════════════════');
|
||||||
'═══════════════════════════════════════════════════════════════'
|
console.log('📋 PARÂMETROS FINAIS (na ordem dos placeholders :1, :2, :3, ...):');
|
||||||
);
|
console.log('═══════════════════════════════════════════════════════════════');
|
||||||
console.log(
|
|
||||||
'📋 PARÂMETROS FINAIS (na ordem dos placeholders :1, :2, :3, ...):'
|
|
||||||
);
|
|
||||||
console.log(
|
|
||||||
'═══════════════════════════════════════════════════════════════'
|
|
||||||
);
|
|
||||||
params.forEach((param, index) => {
|
params.forEach((param, index) => {
|
||||||
console.log(` :${index + 1} = ${param} (${typeof param})`);
|
console.log(` :${index + 1} = ${param} (${typeof param})`);
|
||||||
});
|
});
|
||||||
console.log(
|
console.log('═══════════════════════════════════════════════════════════════');
|
||||||
'═══════════════════════════════════════════════════════════════'
|
|
||||||
);
|
|
||||||
console.log('📊 RESUMO DOS FILTROS APLICADOS:');
|
console.log('📊 RESUMO DOS FILTROS APLICADOS:');
|
||||||
console.log(
|
console.log('═══════════════════════════════════════════════════════════════');
|
||||||
'═══════════════════════════════════════════════════════════════'
|
|
||||||
);
|
|
||||||
console.log({
|
console.log({
|
||||||
temPeriodo: dataInicio && dataFim,
|
temPeriodo: dataInicio && dataFim,
|
||||||
periodo: dataInicio && dataFim ? `${dataInicio} a ${dataFim}` : 'N/A',
|
periodo: dataInicio && dataFim ? `${dataInicio} a ${dataFim}` : 'N/A',
|
||||||
|
|
@ -232,111 +178,60 @@ export async function GET(request: NextRequest) {
|
||||||
temExcluirCentroCusto: !!excluirCentroCusto,
|
temExcluirCentroCusto: !!excluirCentroCusto,
|
||||||
excluirCentroCusto: excluirCentroCusto || 'N/A',
|
excluirCentroCusto: excluirCentroCusto || 'N/A',
|
||||||
temExcluirCodigoConta: !!excluirCodigoConta,
|
temExcluirCodigoConta: !!excluirCodigoConta,
|
||||||
excluirCodigoConta: excluirCodigoConta || 'N/A',
|
excluirCodigoConta: excluirCodigoConta || 'N/A'
|
||||||
});
|
});
|
||||||
console.log(
|
console.log('═══════════════════════════════════════════════════════════════');
|
||||||
'═══════════════════════════════════════════════════════════════'
|
|
||||||
);
|
|
||||||
|
|
||||||
// Se há centroCusto individual, destacar especialmente
|
// Se há centroCusto individual, destacar especialmente
|
||||||
if (centroCusto && centroCusto.trim() !== '') {
|
if (centroCusto && centroCusto.trim() !== '') {
|
||||||
console.log(
|
console.log('🎯 FILTRO INDIVIDUAL DE CENTRO DE CUSTO ATIVO (clique na célula)');
|
||||||
'🎯 FILTRO INDIVIDUAL DE CENTRO DE CUSTO ATIVO (clique na célula)'
|
|
||||||
);
|
|
||||||
console.log(` Centro de Custo: ${centroCusto}`);
|
console.log(` Centro de Custo: ${centroCusto}`);
|
||||||
console.log(
|
console.log(' ⚠️ Este filtro tem PRIORIDADE sobre codigosCentrosCustoSelecionados');
|
||||||
' ⚠️ Este filtro tem PRIORIDADE sobre codigosCentrosCustoSelecionados'
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
console.log(
|
console.log('═══════════════════════════════════════════════════════════════');
|
||||||
'═══════════════════════════════════════════════════════════════'
|
|
||||||
);
|
|
||||||
|
|
||||||
const data = await executeOracleQuery(sql, params);
|
const data = await executeOracleQuery(sql, params);
|
||||||
|
|
||||||
console.log(
|
console.log('✅ Query executada com sucesso:', data.length, 'registros encontrados');
|
||||||
'✅ Query executada com sucesso:',
|
|
||||||
data.length,
|
|
||||||
'registros encontrados'
|
|
||||||
);
|
|
||||||
console.log('📝 Primeiros 3 registros:', data.slice(0, 3));
|
console.log('📝 Primeiros 3 registros:', data.slice(0, 3));
|
||||||
|
|
||||||
// Transformar os dados do Oracle para o formato esperado pelo componente
|
// Transformar os dados do Oracle para o formato esperado pelo componente
|
||||||
// Usando a view DESPESA_ENTIDADE_ANALITICO
|
// Usando a view DESPESA_ENTIDADE_ANALITICO
|
||||||
const transformedData = data.map((item: any, index: number) => {
|
const transformedData = data.map((item: any) => {
|
||||||
// Gerar ID único: combinar NUMLANC com índice para garantir unicidade
|
|
||||||
// Se NUMLANC for null/undefined, usar índice + outros campos para criar ID único
|
|
||||||
const numLanc =
|
|
||||||
item.NUMLANC !== null && item.NUMLANC !== undefined
|
|
||||||
? item.NUMLANC
|
|
||||||
: null;
|
|
||||||
const uniqueId =
|
|
||||||
numLanc !== null
|
|
||||||
? `${numLanc}-${item.CODFORNEC || ''}-${item.CODCONTA || ''}-${
|
|
||||||
item.CODIGOCENTROCUSTO || ''
|
|
||||||
}-${index}`
|
|
||||||
: `row-${item.CODFORNEC || ''}-${item.CODCONTA || ''}-${
|
|
||||||
item.CODIGOCENTROCUSTO || ''
|
|
||||||
}-${item.DTVENC || ''}-${index}`;
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
codigo_grupo: item.CODGRUPO || '',
|
codigo_grupo: item.CODGRUPO || "",
|
||||||
codigo_subgrupo: item.SUBGRUPO || '', // SUBGRUPO existe na nova view
|
codigo_subgrupo: item.SUBGRUPO || "", // SUBGRUPO existe na nova view
|
||||||
codigo_fornecedor: item.CODFORNEC || '',
|
codigo_fornecedor: item.CODFORNEC || "",
|
||||||
nome_fornecedor: item.FORNECEDOR || '',
|
nome_fornecedor: item.FORNECEDOR || "",
|
||||||
id: uniqueId,
|
id: item.NUMLANC || 0,
|
||||||
codfilial: '001', // Valor padrão
|
codfilial: "001", // Valor padrão
|
||||||
recnum: numLanc !== null ? numLanc : index,
|
recnum: item.NUMLANC || 0,
|
||||||
data_competencia: item.ANOMESCOMP || '',
|
data_competencia: item.ANOMESCOMP || "",
|
||||||
data_vencimento: item.DTVENC
|
data_vencimento: item.DTVENC ? new Date(item.DTVENC).toISOString().split('T')[0] : "",
|
||||||
? new Date(item.DTVENC).toISOString().split('T')[0]
|
data_pagamento: item.DTPAGTO ? new Date(item.DTPAGTO).toISOString().split('T')[0] : "",
|
||||||
: '',
|
data_caixa: item.DTCAIXA ? new Date(item.DTCAIXA).toISOString().split('T')[0] : "",
|
||||||
data_pagamento: item.DTPAGTO
|
codigo_conta: item.CODCONTA || "",
|
||||||
? new Date(item.DTPAGTO).toISOString().split('T')[0]
|
conta: item.CONTA || "",
|
||||||
: '',
|
codigo_centrocusto: item.CODIGOCENTROCUSTO || "",
|
||||||
data_caixa: item.DTCAIXA
|
centro_custo: item.CENTROCUSTO || "",
|
||||||
? new Date(item.DTCAIXA).toISOString().split('T')[0]
|
valor: item.VLREALIZADO !== null && item.VLREALIZADO !== undefined ? Number(item.VLREALIZADO) : 0,
|
||||||
: '',
|
historico: item.HISTORICO || "",
|
||||||
codigo_conta: item.CODCONTA || '',
|
historico2: item.HISTORICO2 || "",
|
||||||
conta: item.CONTA || '',
|
|
||||||
codigo_centrocusto: item.CODIGOCENTROCUSTO || '',
|
|
||||||
centro_custo: item.CENTROCUSTO || '',
|
|
||||||
valor:
|
|
||||||
item.VLREALIZADO !== null && item.VLREALIZADO !== undefined
|
|
||||||
? Number(item.VLREALIZADO)
|
|
||||||
: 0,
|
|
||||||
historico: item.HISTORICO || '',
|
|
||||||
historico2: item.HISTORICO2 || '',
|
|
||||||
created_at: new Date().toISOString(),
|
created_at: new Date().toISOString(),
|
||||||
updated_at: new Date().toISOString(),
|
updated_at: new Date().toISOString(),
|
||||||
// Campos adicionais do Oracle
|
// Campos adicionais do Oracle
|
||||||
entidade: item.ENTIDADE || '',
|
entidade: item.ENTIDADE || "",
|
||||||
tipo_parceiro: item.TIPOPARCEIRO || '',
|
tipo_parceiro: item.TIPOPARCEIRO || "",
|
||||||
valor_previsto:
|
valor_previsto: item.VLPREVISTO !== null && item.VLPREVISTO !== undefined ? Number(item.VLPREVISTO) : 0,
|
||||||
item.VLPREVISTO !== null && item.VLPREVISTO !== undefined
|
valor_confirmado: item.VLCONFIRMADO !== null && item.VLCONFIRMADO !== undefined ? Number(item.VLCONFIRMADO) : 0,
|
||||||
? Number(item.VLPREVISTO)
|
valor_pago: item.VLPAGO !== null && item.VLPAGO !== undefined ? Number(item.VLPAGO) : 0,
|
||||||
: 0,
|
|
||||||
valor_confirmado:
|
|
||||||
item.VLCONFIRMADO !== null && item.VLCONFIRMADO !== undefined
|
|
||||||
? Number(item.VLCONFIRMADO)
|
|
||||||
: 0,
|
|
||||||
valor_pago:
|
|
||||||
item.VLPAGO !== null && item.VLPAGO !== undefined
|
|
||||||
? Number(item.VLPAGO)
|
|
||||||
: 0,
|
|
||||||
numero_lancamento: item.NUMLANC || 0,
|
numero_lancamento: item.NUMLANC || 0,
|
||||||
ano_mes_comp: item.ANOMESCOMP || '',
|
ano_mes_comp: item.ANOMESCOMP || "",
|
||||||
codgrupo: item.CODGRUPO || '',
|
codgrupo: item.CODGRUPO || "",
|
||||||
// Novos campos
|
// Novos campos
|
||||||
data_lancamento: item.DTLANC
|
data_lancamento: item.DTLANC ? new Date(item.DTLANC).toISOString().split('T')[0] : "",
|
||||||
? new Date(item.DTLANC).toISOString().split('T')[0]
|
data_compensacao: item.DTCOMPENSACAO ? new Date(item.DTCOMPENSACAO).toISOString().split('T')[0] : "",
|
||||||
: '',
|
data_pagto: item.DTPAGTO ? new Date(item.DTPAGTO).toISOString().split('T')[0] : ""
|
||||||
data_compensacao: item.DTCOMPENSACAO
|
|
||||||
? new Date(item.DTCOMPENSACAO).toISOString().split('T')[0]
|
|
||||||
: '',
|
|
||||||
data_pagto: item.DTPAGTO
|
|
||||||
? new Date(item.DTPAGTO).toISOString().split('T')[0]
|
|
||||||
: '',
|
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -344,6 +239,7 @@ export async function GET(request: NextRequest) {
|
||||||
console.log('📝 Primeiros 3 transformados:', transformedData.slice(0, 3));
|
console.log('📝 Primeiros 3 transformados:', transformedData.slice(0, 3));
|
||||||
|
|
||||||
return NextResponse.json(transformedData);
|
return NextResponse.json(transformedData);
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('❌ Erro ao buscar dados analíticos do Oracle:', error);
|
console.error('❌ Erro ao buscar dados analíticos do Oracle:', error);
|
||||||
|
|
||||||
|
|
@ -351,9 +247,10 @@ export async function GET(request: NextRequest) {
|
||||||
{
|
{
|
||||||
success: false,
|
success: false,
|
||||||
error: error instanceof Error ? error.message : 'Erro desconhecido',
|
error: error instanceof Error ? error.message : 'Erro desconhecido',
|
||||||
details: error instanceof Error ? error.stack : undefined,
|
details: error instanceof Error ? error.stack : undefined
|
||||||
},
|
},
|
||||||
{ status: 500 }
|
{ status: 500 }
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -235,30 +235,15 @@ WHERE 1=1`;
|
||||||
|
|
||||||
// Transformar os dados do Oracle para o formato esperado pelo componente
|
// Transformar os dados do Oracle para o formato esperado pelo componente
|
||||||
// Usando a view VB_DRE_FILIAL_DESPESA_ANALITICO
|
// Usando a view VB_DRE_FILIAL_DESPESA_ANALITICO
|
||||||
const transformedData = data.map((item: any, index: number) => {
|
const transformedData = data.map((item: any) => {
|
||||||
// Gerar ID único: combinar NUMLANC com índice para garantir unicidade
|
|
||||||
// Se NUMLANC for null/undefined, usar índice + outros campos para criar ID único
|
|
||||||
const numLanc =
|
|
||||||
item.NUMLANC !== null && item.NUMLANC !== undefined
|
|
||||||
? item.NUMLANC
|
|
||||||
: null;
|
|
||||||
const uniqueId =
|
|
||||||
numLanc !== null
|
|
||||||
? `${numLanc}-${item.CODFORNEC || ''}-${item.CODCONTA || ''}-${
|
|
||||||
item.CODIGOCENTROCUSTO || ''
|
|
||||||
}-${index}`
|
|
||||||
: `row-${item.CODFORNEC || ''}-${item.CODCONTA || ''}-${
|
|
||||||
item.CODIGOCENTROCUSTO || ''
|
|
||||||
}-${item.DTVENC || ''}-${index}`;
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
codigo_grupo: item.CODGRUPO || "",
|
codigo_grupo: item.CODGRUPO || "",
|
||||||
codigo_subgrupo: item.SUBGRUPO || "", // SUBGRUPO existe na nova view
|
codigo_subgrupo: item.SUBGRUPO || "", // SUBGRUPO existe na nova view
|
||||||
codigo_fornecedor: item.CODFORNEC || "",
|
codigo_fornecedor: item.CODFORNEC || "",
|
||||||
nome_fornecedor: item.FORNECEDOR || "",
|
nome_fornecedor: item.FORNECEDOR || "",
|
||||||
id: uniqueId,
|
id: item.NUMLANC || 0,
|
||||||
codfilial: item.CODFILIAL || item.FILIAL || "001", // Usar CODFILIAL do JOIN ou FILIAL da view
|
codfilial: item.CODFILIAL || item.FILIAL || "001", // Usar CODFILIAL do JOIN ou FILIAL da view
|
||||||
recnum: numLanc !== null ? numLanc : index,
|
recnum: item.NUMLANC || 0,
|
||||||
data_competencia: item.ANOMESCOMP || "",
|
data_competencia: item.ANOMESCOMP || "",
|
||||||
data_vencimento: item.DTVENC ? new Date(item.DTVENC).toISOString().split('T')[0] : "",
|
data_vencimento: item.DTVENC ? new Date(item.DTVENC).toISOString().split('T')[0] : "",
|
||||||
data_pagamento: item.DTPAGTO ? new Date(item.DTPAGTO).toISOString().split('T')[0] : "",
|
data_pagamento: item.DTPAGTO ? new Date(item.DTPAGTO).toISOString().split('T')[0] : "",
|
||||||
|
|
|
||||||
|
|
@ -119,7 +119,7 @@ export async function GET(request: NextRequest) {
|
||||||
console.log('📝 Primeiros 3 registros:', data.slice(0, 3));
|
console.log('📝 Primeiros 3 registros:', data.slice(0, 3));
|
||||||
|
|
||||||
// Transformar os dados do Oracle para o formato esperado pelo componente
|
// Transformar os dados do Oracle para o formato esperado pelo componente
|
||||||
const transformedData = data.map((item: any, index: number) => {
|
const transformedData = data.map((item: any) => {
|
||||||
// Debug dos valores monetários
|
// Debug dos valores monetários
|
||||||
// console.log('🔍 Item original:', {
|
// console.log('🔍 Item original:', {
|
||||||
// VLREALIZADO: item.VLREALIZADO,
|
// VLREALIZADO: item.VLREALIZADO,
|
||||||
|
|
@ -129,29 +129,14 @@ export async function GET(request: NextRequest) {
|
||||||
// tipo_VLREALIZADO: typeof item.VLREALIZADO
|
// tipo_VLREALIZADO: typeof item.VLREALIZADO
|
||||||
// });
|
// });
|
||||||
|
|
||||||
// Gerar ID único: combinar NUMLANC com índice para garantir unicidade
|
|
||||||
// Se NUMLANC for null/undefined, usar índice + outros campos para criar ID único
|
|
||||||
const numLanc =
|
|
||||||
item.NUMLANC !== null && item.NUMLANC !== undefined
|
|
||||||
? item.NUMLANC
|
|
||||||
: null;
|
|
||||||
const uniqueId =
|
|
||||||
numLanc !== null
|
|
||||||
? `${numLanc}-${item.CODFORNEC || ''}-${item.CODCONTA || ''}-${
|
|
||||||
item.CODIGOCENTROCUSTO || ''
|
|
||||||
}-${index}`
|
|
||||||
: `row-${item.CODFORNEC || ''}-${item.CODCONTA || ''}-${
|
|
||||||
item.CODIGOCENTROCUSTO || ''
|
|
||||||
}-${item.DTVENC || ''}-${index}`;
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
codigo_grupo: item.CODGRUPO || "",
|
codigo_grupo: item.CODGRUPO || "",
|
||||||
codigo_subgrupo: "", // Não existe na tabela Oracle
|
codigo_subgrupo: "", // Não existe na tabela Oracle
|
||||||
codigo_fornecedor: item.CODFORNEC || "",
|
codigo_fornecedor: item.CODFORNEC || "",
|
||||||
nome_fornecedor: item.FORNECEDOR || "",
|
nome_fornecedor: item.FORNECEDOR || "",
|
||||||
id: uniqueId,
|
id: item.NUMLANC || 0,
|
||||||
codfilial: "001", // Valor padrão
|
codfilial: "001", // Valor padrão
|
||||||
recnum: numLanc !== null ? numLanc : index,
|
recnum: item.NUMLANC || 0,
|
||||||
data_competencia: item.ANOMESCOMP || "",
|
data_competencia: item.ANOMESCOMP || "",
|
||||||
data_vencimento: item.DTVENC ? new Date(item.DTVENC).toISOString().split('T')[0] : "",
|
data_vencimento: item.DTVENC ? new Date(item.DTVENC).toISOString().split('T')[0] : "",
|
||||||
data_pagamento: item.DTPAGTO ? new Date(item.DTPAGTO).toISOString().split('T')[0] : "",
|
data_pagamento: item.DTPAGTO ? new Date(item.DTPAGTO).toISOString().split('T')[0] : "",
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -57,7 +57,7 @@ interface AnaliticoItem {
|
||||||
codigo_subgrupo: string;
|
codigo_subgrupo: string;
|
||||||
codigo_fornecedor: string;
|
codigo_fornecedor: string;
|
||||||
nome_fornecedor: string;
|
nome_fornecedor: string;
|
||||||
id: string | number; // Pode ser string (gerado pela API) ou number (legado)
|
id: number;
|
||||||
codfilial: string;
|
codfilial: string;
|
||||||
recnum: number;
|
recnum: number;
|
||||||
data_competencia: string;
|
data_competencia: string;
|
||||||
|
|
@ -501,25 +501,10 @@ export default function AnaliticoComponent({ filtros }: AnaliticoProps) {
|
||||||
return filterValues.includes(stringValue);
|
return filterValues.includes(stringValue);
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
.map((row, index) => {
|
.map((row, index) => ({
|
||||||
// Garantir ID único: usar o id original se existir, senão criar baseado em recnum e índice
|
...row,
|
||||||
const originalId =
|
id: `filtered-${row.id || row.recnum || index}`, // Garantir ID único e estável
|
||||||
row.id !== null && row.id !== undefined
|
}));
|
||||||
? typeof row.id === 'string' && row.id !== ''
|
|
||||||
? row.id
|
|
||||||
: String(row.id)
|
|
||||||
: null;
|
|
||||||
const recnumValue =
|
|
||||||
row.recnum !== null && row.recnum !== undefined ? row.recnum : null;
|
|
||||||
const uniqueId = originalId
|
|
||||||
? `filtered-${originalId}`
|
|
||||||
: `filtered-${recnumValue !== null ? recnumValue : 'idx'}-${index}`;
|
|
||||||
|
|
||||||
return {
|
|
||||||
...row,
|
|
||||||
id: uniqueId, // Garantir ID único e estável (agora é string)
|
|
||||||
};
|
|
||||||
});
|
|
||||||
}, [data, columnFilters]);
|
}, [data, columnFilters]);
|
||||||
|
|
||||||
// Função para renderizar header com filtro Excel
|
// Função para renderizar header com filtro Excel
|
||||||
|
|
@ -1125,24 +1110,9 @@ export default function AnaliticoComponent({ filtros }: AnaliticoProps) {
|
||||||
disableColumnSorting={true}
|
disableColumnSorting={true}
|
||||||
pagination={false}
|
pagination={false}
|
||||||
disableVirtualization={false}
|
disableVirtualization={false}
|
||||||
getRowId={(row: any) => {
|
getRowId={(row: any) =>
|
||||||
// Usar verificação explícita para garantir que id seja usado mesmo se for string vazia
|
row.id || `row-${row.recnum || Math.random()}`
|
||||||
if (
|
}
|
||||||
row.id !== null &&
|
|
||||||
row.id !== undefined &&
|
|
||||||
row.id !== ''
|
|
||||||
) {
|
|
||||||
return String(row.id);
|
|
||||||
}
|
|
||||||
// Fallback: usar recnum se disponível, senão criar ID único
|
|
||||||
const recnumValue =
|
|
||||||
row.recnum !== null && row.recnum !== undefined
|
|
||||||
? row.recnum
|
|
||||||
: null;
|
|
||||||
return recnumValue !== null
|
|
||||||
? `row-${recnumValue}`
|
|
||||||
: `row-${Math.random()}-${Date.now()}`;
|
|
||||||
}}
|
|
||||||
sx={{
|
sx={{
|
||||||
height: '100%',
|
height: '100%',
|
||||||
width: '100%',
|
width: '100%',
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue