fix: totalizador
This commit is contained in:
parent
5ab2e45966
commit
900fad9707
|
|
@ -52,6 +52,8 @@ export async function GET(request: NextRequest) {
|
||||||
let sql = '';
|
let sql = '';
|
||||||
const params: any[] = [];
|
const params: any[] = [];
|
||||||
let paramIndex = 1;
|
let paramIndex = 1;
|
||||||
|
const temJoin = !!codFilial;
|
||||||
|
const prefixo = temJoin ? 'VB.' : ''; // Usar prefixo apenas quando há JOIN
|
||||||
|
|
||||||
// Se houver filtro por filial, fazer JOIN com FILIAL_CC
|
// Se houver filtro por filial, fazer JOIN com FILIAL_CC
|
||||||
if (codFilial) {
|
if (codFilial) {
|
||||||
|
|
@ -73,7 +75,7 @@ WHERE 1=1`;
|
||||||
|
|
||||||
// Filtro por período (usando ANOMESCOMP)
|
// Filtro por período (usando ANOMESCOMP)
|
||||||
if (dataInicio && dataFim) {
|
if (dataInicio && dataFim) {
|
||||||
sql += ` AND VB.ANOMESCOMP >= :${paramIndex} AND VB.ANOMESCOMP <= :${paramIndex + 1}`;
|
sql += ` AND ${prefixo}ANOMESCOMP >= :${paramIndex} AND ${prefixo}ANOMESCOMP <= :${paramIndex + 1}`;
|
||||||
params.push(dataInicio, dataFim);
|
params.push(dataInicio, dataFim);
|
||||||
paramIndex += 2;
|
paramIndex += 2;
|
||||||
console.log('📅 Adicionando filtro de período:', dataInicio, 'a', dataFim);
|
console.log('📅 Adicionando filtro de período:', dataInicio, 'a', dataFim);
|
||||||
|
|
@ -81,7 +83,7 @@ WHERE 1=1`;
|
||||||
|
|
||||||
// Filtro por código do grupo
|
// Filtro por código do grupo
|
||||||
if (codigoGrupo) {
|
if (codigoGrupo) {
|
||||||
sql += ` AND VB.CODGRUPO = :${paramIndex}`;
|
sql += ` AND ${prefixo}CODGRUPO = :${paramIndex}`;
|
||||||
params.push(codigoGrupo);
|
params.push(codigoGrupo);
|
||||||
paramIndex++;
|
paramIndex++;
|
||||||
console.log('📊 Adicionando filtro de grupo:', codigoGrupo);
|
console.log('📊 Adicionando filtro de grupo:', codigoGrupo);
|
||||||
|
|
@ -89,7 +91,7 @@ WHERE 1=1`;
|
||||||
|
|
||||||
// Filtro por subgrupo (DIRETO, INDIRETO, SEM CC, etc.)
|
// Filtro por subgrupo (DIRETO, INDIRETO, SEM CC, etc.)
|
||||||
if (codigoSubgrupo) {
|
if (codigoSubgrupo) {
|
||||||
sql += ` AND VB.SUBGRUPO = :${paramIndex}`;
|
sql += ` AND ${prefixo}SUBGRUPO = :${paramIndex}`;
|
||||||
params.push(codigoSubgrupo);
|
params.push(codigoSubgrupo);
|
||||||
paramIndex++;
|
paramIndex++;
|
||||||
console.log('📊 Adicionando filtro de subgrupo:', codigoSubgrupo);
|
console.log('📊 Adicionando filtro de subgrupo:', codigoSubgrupo);
|
||||||
|
|
@ -97,7 +99,7 @@ WHERE 1=1`;
|
||||||
|
|
||||||
// Filtro por código da conta
|
// Filtro por código da conta
|
||||||
if (codigoConta) {
|
if (codigoConta) {
|
||||||
sql += ` AND VB.CODCONTA = :${paramIndex}`;
|
sql += ` AND ${prefixo}CODCONTA = :${paramIndex}`;
|
||||||
params.push(codigoConta);
|
params.push(codigoConta);
|
||||||
paramIndex++;
|
paramIndex++;
|
||||||
console.log('💰 Adicionando filtro de conta:', codigoConta);
|
console.log('💰 Adicionando filtro de conta:', codigoConta);
|
||||||
|
|
@ -119,7 +121,7 @@ WHERE 1=1`;
|
||||||
if (centroCusto && centroCusto.trim() !== '') {
|
if (centroCusto && centroCusto.trim() !== '') {
|
||||||
// Quando há centroCusto individual (clique na célula), usar APENAS ele
|
// Quando há centroCusto individual (clique na célula), usar APENAS ele
|
||||||
// Ignorar codigosCentrosCustoSelecionados do filtro geral para garantir filtro preciso
|
// Ignorar codigosCentrosCustoSelecionados do filtro geral para garantir filtro preciso
|
||||||
sql += ` AND VB.CODIGOCENTROCUSTO = :${paramIndex}`;
|
sql += ` AND ${prefixo}CODIGOCENTROCUSTO = :${paramIndex}`;
|
||||||
params.push(centroCusto);
|
params.push(centroCusto);
|
||||||
paramIndex++;
|
paramIndex++;
|
||||||
console.log('🏢 PRIORIDADE: Filtrando APENAS por centroCusto individual (clique na célula):', centroCusto);
|
console.log('🏢 PRIORIDADE: Filtrando APENAS por centroCusto individual (clique na célula):', centroCusto);
|
||||||
|
|
@ -130,7 +132,7 @@ WHERE 1=1`;
|
||||||
const codigosArray = codigosCentrosCustoSelecionados.split(',').filter(c => c.trim() !== '');
|
const codigosArray = codigosCentrosCustoSelecionados.split(',').filter(c => c.trim() !== '');
|
||||||
if (codigosArray.length > 0) {
|
if (codigosArray.length > 0) {
|
||||||
const placeholders = codigosArray.map(() => `:${paramIndex++}`).join(',');
|
const placeholders = codigosArray.map(() => `:${paramIndex++}`).join(',');
|
||||||
sql += ` AND VB.CODIGOCENTROCUSTO IN (${placeholders})`;
|
sql += ` AND ${prefixo}CODIGOCENTROCUSTO IN (${placeholders})`;
|
||||||
params.push(...codigosArray);
|
params.push(...codigosArray);
|
||||||
console.log('🏢 Filtrando por códigos de centros de custo selecionados (filtro geral):', codigosArray);
|
console.log('🏢 Filtrando por códigos de centros de custo selecionados (filtro geral):', codigosArray);
|
||||||
console.log('📝 SQL após adicionar filtro IN:', sql.substring(0, 200) + '...');
|
console.log('📝 SQL após adicionar filtro IN:', sql.substring(0, 200) + '...');
|
||||||
|
|
@ -142,7 +144,7 @@ WHERE 1=1`;
|
||||||
// Exclusão de centro de custo específico (quando desmarcado)
|
// Exclusão de centro de custo específico (quando desmarcado)
|
||||||
// Só aplicar se não houver codigosCentrosCustoSelecionados, para evitar conflito
|
// Só aplicar se não houver codigosCentrosCustoSelecionados, para evitar conflito
|
||||||
if (excluirCentroCusto && !codigosCentrosCustoSelecionados) {
|
if (excluirCentroCusto && !codigosCentrosCustoSelecionados) {
|
||||||
sql += ` AND VB.CODIGOCENTROCUSTO != :${paramIndex}`;
|
sql += ` AND ${prefixo}CODIGOCENTROCUSTO != :${paramIndex}`;
|
||||||
params.push(excluirCentroCusto);
|
params.push(excluirCentroCusto);
|
||||||
paramIndex++;
|
paramIndex++;
|
||||||
console.log('🚫 Excluindo centro de custo:', excluirCentroCusto);
|
console.log('🚫 Excluindo centro de custo:', excluirCentroCusto);
|
||||||
|
|
@ -150,7 +152,7 @@ WHERE 1=1`;
|
||||||
|
|
||||||
// Exclusão de código de conta específico (quando desmarcado)
|
// Exclusão de código de conta específico (quando desmarcado)
|
||||||
if (excluirCodigoConta) {
|
if (excluirCodigoConta) {
|
||||||
sql += ` AND VB.CODCONTA != :${paramIndex}`;
|
sql += ` AND ${prefixo}CODCONTA != :${paramIndex}`;
|
||||||
params.push(excluirCodigoConta);
|
params.push(excluirCodigoConta);
|
||||||
paramIndex++;
|
paramIndex++;
|
||||||
console.log('🚫 Excluindo código de conta:', excluirCodigoConta);
|
console.log('🚫 Excluindo código de conta:', excluirCodigoConta);
|
||||||
|
|
@ -160,12 +162,12 @@ WHERE 1=1`;
|
||||||
if (codigosContasSelecionadas) {
|
if (codigosContasSelecionadas) {
|
||||||
const codigosArray = codigosContasSelecionadas.split(',');
|
const codigosArray = codigosContasSelecionadas.split(',');
|
||||||
const placeholders = codigosArray.map(() => `:${paramIndex++}`).join(',');
|
const placeholders = codigosArray.map(() => `:${paramIndex++}`).join(',');
|
||||||
sql += ` AND VB.CODCONTA IN (${placeholders})`;
|
sql += ` AND ${prefixo}CODCONTA IN (${placeholders})`;
|
||||||
params.push(...codigosArray);
|
params.push(...codigosArray);
|
||||||
console.log('💰 Filtrando por códigos de contas:', codigosArray);
|
console.log('💰 Filtrando por códigos de contas:', codigosArray);
|
||||||
}
|
}
|
||||||
|
|
||||||
sql += ` ORDER BY VB.DTVENC, VB.CODFORNEC, VB.CODCONTA`;
|
sql += ` ORDER BY ${prefixo}DTVENC, ${prefixo}CODFORNEC, ${prefixo}CODCONTA`;
|
||||||
|
|
||||||
// Log detalhado da query SQL final
|
// Log detalhado da query SQL final
|
||||||
console.log('═══════════════════════════════════════════════════════════════');
|
console.log('═══════════════════════════════════════════════════════════════');
|
||||||
|
|
|
||||||
|
|
@ -417,6 +417,7 @@ export default function Teste() {
|
||||||
const handleRowClick = React.useCallback((row: HierarchicalRow, mesSelecionado?: string, filialSelecionada?: string) => {
|
const handleRowClick = React.useCallback((row: HierarchicalRow, mesSelecionado?: string, filialSelecionada?: string) => {
|
||||||
console.log('🖱️ Clique na linha:', row);
|
console.log('🖱️ Clique na linha:', row);
|
||||||
console.log('📅 Mês selecionado:', mesSelecionado);
|
console.log('📅 Mês selecionado:', mesSelecionado);
|
||||||
|
console.log('🏢 Filial selecionada:', filialSelecionada);
|
||||||
|
|
||||||
// Linhas calculadas não devem abrir o componente analítico
|
// Linhas calculadas não devem abrir o componente analítico
|
||||||
if (row.type === "calculado") {
|
if (row.type === "calculado") {
|
||||||
|
|
@ -453,6 +454,15 @@ export default function Teste() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Se é um totalizador (mesSelecionado presente mas filialSelecionada não), não filtrar por filial
|
||||||
|
// Caso contrário, filtrar por filial se especificada
|
||||||
|
if (filialSelecionada) {
|
||||||
|
const itemFilial = item.filial || item.codfilial || "";
|
||||||
|
if (itemFilial !== filialSelecionada) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (row.type === "grupo") {
|
if (row.type === "grupo") {
|
||||||
return item.codigo_grupo === row.codigo_grupo || item.codgrupo === row.codigo_grupo;
|
return item.codigo_grupo === row.codigo_grupo || item.codgrupo === row.codigo_grupo;
|
||||||
} else if (row.type === "conta") {
|
} else if (row.type === "conta") {
|
||||||
|
|
@ -475,6 +485,7 @@ export default function Teste() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determinar CODFILIAL baseado na filial selecionada
|
// Determinar CODFILIAL baseado na filial selecionada
|
||||||
|
// Se é um totalizador (mesSelecionado presente mas filialSelecionada não), deixar vazio para incluir todas as filiais
|
||||||
let codFilialFiltro = "";
|
let codFilialFiltro = "";
|
||||||
if (filialSelecionada) {
|
if (filialSelecionada) {
|
||||||
// Se a filial selecionada já é um código numérico, usar diretamente
|
// Se a filial selecionada já é um código numérico, usar diretamente
|
||||||
|
|
@ -495,6 +506,8 @@ export default function Teste() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Se mesSelecionado está presente mas filialSelecionada não, é um totalizador
|
||||||
|
// Deixar codFilialFiltro vazio para incluir todas as filiais daquele mês
|
||||||
|
|
||||||
const novosFiltros = {
|
const novosFiltros = {
|
||||||
dataInicio: dataInicioFiltro,
|
dataInicio: dataInicioFiltro,
|
||||||
|
|
@ -503,7 +516,7 @@ export default function Teste() {
|
||||||
codigoGrupo: codigoGrupoFiltro,
|
codigoGrupo: codigoGrupoFiltro,
|
||||||
codigoSubgrupo: "", // Não aplicável na hierarquia filial
|
codigoSubgrupo: "", // Não aplicável na hierarquia filial
|
||||||
codigoConta: codigoContaFiltro,
|
codigoConta: codigoContaFiltro,
|
||||||
codFilial: codFilialFiltro,
|
codFilial: codFilialFiltro, // Vazio para totalizador = todas as filiais do mês
|
||||||
linhaSelecionada: row.grupo || row.conta || "",
|
linhaSelecionada: row.grupo || row.conta || "",
|
||||||
excluirCentroCusto: "",
|
excluirCentroCusto: "",
|
||||||
excluirCodigoConta: "",
|
excluirCodigoConta: "",
|
||||||
|
|
@ -512,6 +525,7 @@ export default function Teste() {
|
||||||
};
|
};
|
||||||
|
|
||||||
console.log('🎯 Novos filtros para analítico:', novosFiltros);
|
console.log('🎯 Novos filtros para analítico:', novosFiltros);
|
||||||
|
console.log('📊 É totalizador?', mesSelecionado && !filialSelecionada ? 'SIM' : 'NÃO');
|
||||||
setAnaliticoFiltros(novosFiltros);
|
setAnaliticoFiltros(novosFiltros);
|
||||||
}, [data]);
|
}, [data]);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue