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