fix: ajuste no calculo totalizador
This commit is contained in:
parent
900fad9707
commit
0ea85582fa
|
|
@ -52,11 +52,14 @@ 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;
|
|
||||||
|
// Verificar se há múltiplas filiais (separadas por vírgula)
|
||||||
|
const filiaisArray = codFilial ? codFilial.split(',').map(f => f.trim()).filter(f => f !== '') : [];
|
||||||
|
const temJoin = filiaisArray.length > 0;
|
||||||
const prefixo = temJoin ? 'VB.' : ''; // Usar prefixo apenas quando há JOIN
|
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 (temJoin) {
|
||||||
sql = `SELECT FC.CODFILIAL, VB.*
|
sql = `SELECT FC.CODFILIAL, VB.*
|
||||||
FROM VB_DRE_FILIAL_DESPESA_ANALITICO VB
|
FROM VB_DRE_FILIAL_DESPESA_ANALITICO VB
|
||||||
INNER JOIN FILIAL_CC FC ON FC.CC = VB.CODIGOCENTROCUSTO
|
INNER JOIN FILIAL_CC FC ON FC.CC = VB.CODIGOCENTROCUSTO
|
||||||
|
|
@ -66,11 +69,21 @@ WHERE 1=1`;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Filtro por filial (usando JOIN com FILIAL_CC)
|
// Filtro por filial (usando JOIN com FILIAL_CC)
|
||||||
if (codFilial) {
|
// Se houver múltiplas filiais, usar IN; caso contrário, usar =
|
||||||
sql += ` AND FC.CODFILIAL = :${paramIndex}`;
|
if (temJoin) {
|
||||||
params.push(codFilial);
|
if (filiaisArray.length === 1) {
|
||||||
paramIndex++;
|
// Uma única filial - usar =
|
||||||
console.log('🏢 Adicionando filtro de filial (CODFILIAL):', codFilial);
|
sql += ` AND FC.CODFILIAL = :${paramIndex}`;
|
||||||
|
params.push(filiaisArray[0]);
|
||||||
|
paramIndex++;
|
||||||
|
console.log('🏢 Adicionando filtro de filial única (CODFILIAL):', filiaisArray[0]);
|
||||||
|
} else {
|
||||||
|
// Múltiplas filiais - usar IN
|
||||||
|
const placeholders = filiaisArray.map(() => `:${paramIndex++}`).join(',');
|
||||||
|
sql += ` AND FC.CODFILIAL IN (${placeholders})`;
|
||||||
|
params.push(...filiaisArray);
|
||||||
|
console.log('🏢 Adicionando filtro de múltiplas filiais (CODFILIAL IN):', filiaisArray);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Filtro por período (usando ANOMESCOMP)
|
// Filtro por período (usando ANOMESCOMP)
|
||||||
|
|
|
||||||
|
|
@ -485,7 +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
|
// Se é um totalizador (mesSelecionado presente mas filialSelecionada não), incluir todas as filiais selecionadas
|
||||||
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
|
||||||
|
|
@ -505,9 +505,30 @@ export default function Teste() {
|
||||||
codFilialFiltro = filialSelecionada;
|
codFilialFiltro = filialSelecionada;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if (mesSelecionado) {
|
||||||
|
// Se mesSelecionado está presente mas filialSelecionada não, é um totalizador
|
||||||
|
// Incluir todas as filiais selecionadas (ou todas disponíveis se nenhuma estiver selecionada)
|
||||||
|
const filiaisParaTotalizador = filiaisSelecionadas.length > 0
|
||||||
|
? filiaisSelecionadas
|
||||||
|
: opcoesFiliais;
|
||||||
|
|
||||||
|
// Converter nomes de filiais para códigos CODFILIAL
|
||||||
|
const codigosFiliais = filiaisParaTotalizador.map(filial => {
|
||||||
|
if (/^\d+$/.test(filial)) {
|
||||||
|
return filial;
|
||||||
|
} else {
|
||||||
|
const itemComFilial = data.find((item: DREItem) => {
|
||||||
|
const itemFilial = item.filial || item.codfilial || "";
|
||||||
|
return itemFilial === filial;
|
||||||
|
});
|
||||||
|
return itemComFilial?.codfilial || filial;
|
||||||
|
}
|
||||||
|
}).filter(Boolean);
|
||||||
|
|
||||||
|
// Passar como string separada por vírgula para a API processar com IN
|
||||||
|
codFilialFiltro = codigosFiliais.join(',');
|
||||||
|
console.log('📊 Totalizador: incluindo todas as filiais selecionadas:', codigosFiliais);
|
||||||
}
|
}
|
||||||
// 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,
|
||||||
|
|
@ -527,7 +548,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');
|
console.log('📊 É totalizador?', mesSelecionado && !filialSelecionada ? 'SIM' : 'NÃO');
|
||||||
setAnaliticoFiltros(novosFiltros);
|
setAnaliticoFiltros(novosFiltros);
|
||||||
}, [data]);
|
}, [data, filiaisSelecionadas, opcoesFiliais]);
|
||||||
|
|
||||||
const toggleGrupo = useCallback((codigoGrupo: string) => {
|
const toggleGrupo = useCallback((codigoGrupo: string) => {
|
||||||
setExpandedGrupos(prev => {
|
setExpandedGrupos(prev => {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue