fix: adinicionado ao filtro o compo de filial

This commit is contained in:
Alessandro Gonçaalves 2025-12-09 17:22:48 -03:00
parent 3b3c8cd2c7
commit c60bd7def8
1 changed files with 47 additions and 66 deletions

View File

@ -194,22 +194,21 @@ export default function Teste() {
const [filtros, setFiltros] = useState({ const [filtros, setFiltros] = useState({
periodoDe: "", periodoDe: "",
periodoAte: "", periodoAte: "",
conta: "Todas", filial: "Todas",
}); });
// Estados para multi-seleção // Estados para multi-seleção
const [contasSelecionadas, setContasSelecionadas] = useState<string[]>([]); const [filiaisSelecionadas, setFiliaisSelecionadas] = useState<string[]>([]);
const [codigosContas, setCodigosContas] = useState<Record<string, string>>({});
const [isFilterOpen, setIsFilterOpen] = useState(false); const [isFilterOpen, setIsFilterOpen] = useState(false);
const [dadosFiltrados, setDadosFiltrados] = useState<DREItem[]>([]); const [dadosFiltrados, setDadosFiltrados] = useState<DREItem[]>([]);
const [filtrosAplicados, setFiltrosAplicados] = useState(false); const [filtrosAplicados, setFiltrosAplicados] = useState(false);
// Estados para opções dos filtros // Estados para opções dos filtros
const [opcoesGrupos, setOpcoesGrupos] = useState<string[]>([]); const [opcoesGrupos, setOpcoesGrupos] = useState<string[]>([]);
const [opcoesContas, setOpcoesContas] = useState<string[]>([]); const [opcoesFiliais, setOpcoesFiliais] = useState<string[]>([]);
// Estados para filtros de busca nos campos de seleção // Estados para filtros de busca nos campos de seleção
const [filtroConta, setFiltroConta] = useState<string>(""); const [filtroFilial, setFiltroFilial] = useState<string>("");
// Estados para analítico // Estados para analítico
const [analiticoFiltros, setAnaliticoFiltros] = useState({ const [analiticoFiltros, setAnaliticoFiltros] = useState({
@ -250,21 +249,12 @@ export default function Teste() {
const gruposUnicos = [...new Set(dadosCompletos.map((item: DREItem) => item.grupo))].sort() as string[]; const gruposUnicos = [...new Set(dadosCompletos.map((item: DREItem) => item.grupo))].sort() as string[];
setOpcoesGrupos(gruposUnicos); setOpcoesGrupos(gruposUnicos);
// Extrair contas únicas // Extrair filiais únicas
const contasUnicas = [...new Set(dadosCompletos.map((item: DREItem) => item.conta))].sort() as string[]; const filiaisUnicas = [...new Set(dadosCompletos.map((item: DREItem) => item.filial || item.codfilial).filter(Boolean))].sort() as string[];
setOpcoesContas(contasUnicas); setOpcoesFiliais(filiaisUnicas);
// Criar objeto de códigos das contas // Inicializar com todas as filiais selecionadas
const codigosContasObj: Record<string, string> = {}; setFiliaisSelecionadas(filiaisUnicas);
dadosCompletos.forEach((item: DREItem) => {
if (item.conta && item.codigo_conta) {
codigosContasObj[item.conta] = item.codigo_conta.toString();
}
});
setCodigosContas(codigosContasObj);
// Inicializar com todas as contas selecionadas
setContasSelecionadas(contasUnicas);
// Inicializar filtros de período com o ano corrente // Inicializar filtros de período com o ano corrente
const agora = new Date(); const agora = new Date();
@ -396,15 +386,6 @@ export default function Teste() {
codigoContaFiltro = row.codigo_conta?.toString() || ""; codigoContaFiltro = row.codigo_conta?.toString() || "";
} }
// Obter códigos das contas selecionadas no filtro
const codigosContasSelecionadas = contasSelecionadas
.map(conta => {
const item = data.find((d: DREItem) => d.conta === conta);
return item?.codigo_conta?.toString();
})
.filter(codigo => codigo)
.join(',');
const novosFiltros = { const novosFiltros = {
dataInicio: dataInicioFiltro, dataInicio: dataInicioFiltro,
dataFim: dataFimFiltro, dataFim: dataFimFiltro,
@ -416,7 +397,7 @@ export default function Teste() {
excluirCentroCusto: "", excluirCentroCusto: "",
excluirCodigoConta: "", excluirCodigoConta: "",
codigosCentrosCustoSelecionados: "", codigosCentrosCustoSelecionados: "",
codigosContasSelecionadas, codigosContasSelecionadas: "",
}; };
console.log('🎯 Novos filtros para analítico:', novosFiltros); console.log('🎯 Novos filtros para analítico:', novosFiltros);
@ -435,22 +416,22 @@ export default function Teste() {
}); });
}, []); }, []);
const toggleConta = (conta: string) => { const toggleFilial = (filial: string) => {
setContasSelecionadas(prev => { setFiliaisSelecionadas(prev => {
if (prev.includes(conta)) { if (prev.includes(filial)) {
return prev.filter(c => c !== conta); return prev.filter(f => f !== filial);
} else { } else {
return [...prev, conta]; return [...prev, filial];
} }
}); });
}; };
const selecionarTodasContas = () => { const selecionarTodasFiliais = () => {
setContasSelecionadas(opcoesContas); setFiliaisSelecionadas(opcoesFiliais);
}; };
const limparContas = () => { const limparFiliais = () => {
setContasSelecionadas([]); setFiliaisSelecionadas([]);
}; };
// Função auxiliar para calcular valores por mês // Função auxiliar para calcular valores por mês
@ -838,10 +819,11 @@ export default function Teste() {
}); });
} }
// Filtro por conta (multi-seleção) // Filtro por filial (multi-seleção)
if (contasSelecionadas.length > 0) { if (filiaisSelecionadas.length > 0) {
dadosFiltrados = dadosFiltrados.filter((item: DREItem) => { dadosFiltrados = dadosFiltrados.filter((item: DREItem) => {
return contasSelecionadas.includes(item.conta); const filialItem = item.filial || item.codfilial || "";
return filiaisSelecionadas.includes(filialItem);
}); });
} }
@ -889,10 +871,10 @@ export default function Teste() {
setFiltros({ setFiltros({
periodoDe: `${anoAtual}-01`, periodoDe: `${anoAtual}-01`,
periodoAte: periodoAtual, periodoAte: periodoAtual,
conta: "Todas", filial: "Todas",
}); });
setContasSelecionadas([]); setFiliaisSelecionadas([]);
setData([]); setData([]);
setDadosFiltrados([]); setDadosFiltrados([]);
setFiltrosAplicados(false); setFiltrosAplicados(false);
@ -973,7 +955,7 @@ export default function Teste() {
const resumoData = [ const resumoData = [
{ 'Informação': 'Período', 'Valor': `${filtros.periodoDe} a ${filtros.periodoAte}` }, { 'Informação': 'Período', 'Valor': `${filtros.periodoDe} a ${filtros.periodoAte}` },
{ 'Informação': 'Conta', 'Valor': filtros.conta }, { 'Informação': 'Filial', 'Valor': filtros.filial },
{ 'Informação': 'Total de Registros', 'Valor': dadosCompletosExpandidos.length }, { 'Informação': 'Total de Registros', 'Valor': dadosCompletosExpandidos.length },
{ 'Informação': 'Data de Exportação', 'Valor': new Date().toLocaleString('pt-BR') }, { 'Informação': 'Data de Exportação', 'Valor': new Date().toLocaleString('pt-BR') },
]; ];
@ -1093,16 +1075,16 @@ export default function Teste() {
</div> </div>
</div> </div>
{/* Conta */} {/* Filial */}
<div className="grid gap-2"> <div className="grid gap-2">
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<Label htmlFor="conta">CONTA</Label> <Label htmlFor="filial">FILIAL</Label>
<div className="flex gap-1"> <div className="flex gap-1">
<Button <Button
type="button" type="button"
variant="outline" variant="outline"
size="sm" size="sm"
onClick={selecionarTodasContas} onClick={selecionarTodasFiliais}
className="text-xs h-5 px-2" className="text-xs h-5 px-2"
> >
Todas Todas
@ -1111,7 +1093,7 @@ export default function Teste() {
type="button" type="button"
variant="outline" variant="outline"
size="sm" size="sm"
onClick={limparContas} onClick={limparFiliais}
className="text-xs h-5 px-2" className="text-xs h-5 px-2"
> >
Limpar Limpar
@ -1119,38 +1101,37 @@ export default function Teste() {
</div> </div>
</div> </div>
<Input <Input
placeholder="Filtrar contas..." placeholder="Filtrar filiais..."
value={filtroConta} value={filtroFilial}
onChange={(e) => setFiltroConta(e.target.value)} onChange={(e) => setFiltroFilial(e.target.value)}
className="h-8 text-sm" className="h-8 text-sm"
/> />
<div className="max-h-32 overflow-y-auto border rounded-md p-1 space-y-1"> <div className="max-h-32 overflow-y-auto border rounded-md p-1 space-y-1">
{opcoesContas {opcoesFiliais
.filter(conta => { .filter(filial => {
if (!filtroConta) return true; if (!filtroFilial) return true;
const termo = filtroConta.toLowerCase(); const termo = filtroFilial.toLowerCase();
const nomeCompleto = `${conta}${codigosContas[conta] ? ` - ${codigosContas[conta]}` : ''}`; return filial.toLowerCase().includes(termo);
return nomeCompleto.toLowerCase().includes(termo);
}) })
.map(conta => ( .map(filial => (
<div key={conta} className="flex items-center space-x-1"> <div key={filial} className="flex items-center space-x-1">
<Checkbox <Checkbox
id={`conta-${conta}`} id={`filial-${filial}`}
checked={contasSelecionadas.includes(conta)} checked={filiaisSelecionadas.includes(filial)}
onCheckedChange={() => toggleConta(conta)} onCheckedChange={() => toggleFilial(filial)}
/> />
<Label <Label
htmlFor={`conta-${conta}`} htmlFor={`filial-${filial}`}
className="text-sm font-normal cursor-pointer flex-1" className="text-sm font-normal cursor-pointer flex-1"
> >
{conta}{codigosContas[conta] ? ` - ${codigosContas[conta]}` : ''} {filial}
</Label> </Label>
</div> </div>
))} ))}
</div> </div>
{contasSelecionadas.length > 0 && ( {filiaisSelecionadas.length > 0 && (
<div className="text-xs text-gray-500"> <div className="text-xs text-gray-500">
{contasSelecionadas.length} conta(s) selecionada(s) {filiaisSelecionadas.length} filial(is) selecionada(s)
</div> </div>
)} )}
</div> </div>