fix: adinicionado ao filtro o compo de filial
This commit is contained in:
parent
3b3c8cd2c7
commit
c60bd7def8
|
|
@ -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>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue