fix: ajuste no calculo totalizador

This commit is contained in:
Alessandro Gonçaalves 2025-12-10 09:34:49 -03:00
parent 900fad9707
commit 0ea85582fa
2 changed files with 45 additions and 11 deletions

View File

@ -52,11 +52,14 @@ export async function GET(request: NextRequest) {
let sql = '';
const params: any[] = [];
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
// Se houver filtro por filial, fazer JOIN com FILIAL_CC
if (codFilial) {
if (temJoin) {
sql = `SELECT FC.CODFILIAL, VB.*
FROM VB_DRE_FILIAL_DESPESA_ANALITICO VB
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)
if (codFilial) {
sql += ` AND FC.CODFILIAL = :${paramIndex}`;
params.push(codFilial);
paramIndex++;
console.log('🏢 Adicionando filtro de filial (CODFILIAL):', codFilial);
// Se houver múltiplas filiais, usar IN; caso contrário, usar =
if (temJoin) {
if (filiaisArray.length === 1) {
// Uma única filial - usar =
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)

View File

@ -485,7 +485,7 @@ export default function Teste() {
}
// 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 = "";
if (filialSelecionada) {
// Se a filial selecionada já é um código numérico, usar diretamente
@ -505,9 +505,30 @@ export default function Teste() {
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 = {
dataInicio: dataInicioFiltro,
@ -527,7 +548,7 @@ export default function Teste() {
console.log('🎯 Novos filtros para analítico:', novosFiltros);
console.log('📊 É totalizador?', mesSelecionado && !filialSelecionada ? 'SIM' : 'NÃO');
setAnaliticoFiltros(novosFiltros);
}, [data]);
}, [data, filiaisSelecionadas, opcoesFiliais]);
const toggleGrupo = useCallback((codigoGrupo: string) => {
setExpandedGrupos(prev => {