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({
|
||||
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>
|
||||
|
|
|
|||
Loading…
Reference in New Issue