+
+ {/*
= */}
- )}
-
-
handleRowClick(row)}
- className="flex-1 text-left hover:bg-blue-50/50 p-2 rounded-lg cursor-pointer transition-all duration-200 truncate"
- >
-
-
- {row.grupo}
-
- {row.codigo_grupo && (
- //
- // {row.codigo_grupo}
- //
- <>>
- )}
-
-
- );
- case "calculado":
- return (
-
- );
- case "conta":
- return (
-
-
- •
-
-
handleRowClick(row)}
- className="flex-1 text-left hover:bg-blue-50/50 p-2 rounded-lg cursor-pointer transition-all duration-200 truncate"
- >
-
-
- {row.conta}
-
- {row.codigo_conta && (
-
- {row.codigo_conta}
+
-
-
- );
- default:
- return null;
- }
- }, [toggleGrupo, handleRowClick]);
+
+ );
+ case 'conta':
+ return (
+
+
+ •
+
+
handleRowClick(row)}
+ className="flex-1 text-left hover:bg-blue-50/50 p-2 rounded-lg cursor-pointer transition-all duration-200 truncate"
+ >
+
+
+ {row.conta}
+
+ {row.codigo_conta && (
+
+ {row.codigo_conta}
+
+ )}
+
+
+
+ );
+ default:
+ return null;
+ }
+ },
+ [toggleGrupo, handleRowClick]
+ );
const toggleExpandAll = () => {
if (isAllExpanded) {
setExpandedGrupos(new Set());
setIsAllExpanded(false);
} else {
- const todosGrupos = [...new Set(data.map(item => item.codgrupo || item.codigo_grupo).filter(Boolean))];
+ const todosGrupos = [
+ ...new Set(
+ data.map((item) => item.codgrupo || item.codigo_grupo).filter(Boolean)
+ ),
+ ];
setExpandedGrupos(new Set(todosGrupos));
setIsAllExpanded(true);
}
@@ -1065,58 +1351,60 @@ export default function Teste() {
const aplicarFiltros = async () => {
setIsFilterOpen(false);
-
+
setTimeout(async () => {
try {
setLoading(true);
setError(null);
-
- const response = await fetch("/api/dre-filial-oracle");
+
+ const response = await fetch('/api/dre-filial-oracle');
if (!response.ok) {
throw new Error(`Erro HTTP: ${response.status}`);
}
-
+
const dadosCompletos = await response.json();
-
+
// Aplicar filtros nos dados
let dadosFiltrados = dadosCompletos;
-
+
// Filtro por período
if (filtros.periodoDe && filtros.periodoAte) {
dadosFiltrados = dadosFiltrados.filter((item: DREItem) => {
const dataItem = item.data_competencia;
- return dataItem >= filtros.periodoDe && dataItem <= filtros.periodoAte;
+ return (
+ dataItem >= filtros.periodoDe && dataItem <= filtros.periodoAte
+ );
});
}
-
- // Filtro por filial (multi-seleção)
+
+ // Filtro por filial (multi-seleção)
if (filiaisSelecionadas.length > 0) {
dadosFiltrados = dadosFiltrados.filter((item: DREItem) => {
- const filialItem = item.filial || item.codfilial || "";
+ const filialItem = item.filial || item.codfilial || '';
return filiaisSelecionadas.includes(filialItem);
});
}
-
+
setDadosFiltrados(dadosFiltrados);
setData(dadosFiltrados);
setFiltrosAplicados(true);
-
+
// Limpar filtros do analítico ao aplicar novos filtros na tabela
setAnaliticoFiltros({
- dataInicio: "",
- dataFim: "",
- centroCusto: "",
- codigoGrupo: "",
- codigoSubgrupo: "",
- codigoConta: "",
- codFilial: "",
- linhaSelecionada: "",
- excluirCentroCusto: "",
- excluirCodigoConta: "",
- codigosCentrosCustoSelecionados: "",
- codigosContasSelecionadas: "",
+ dataInicio: '',
+ dataFim: '',
+ centroCusto: '',
+ codigoGrupo: '',
+ codigoSubgrupo: '',
+ codigoConta: '',
+ codFilial: '',
+ linhaSelecionada: '',
+ excluirCentroCusto: '',
+ excluirCodigoConta: '',
+ codigosCentrosCustoSelecionados: '',
+ codigosContasSelecionadas: '',
});
-
+
// Extrair meses únicos dos dados filtrados
const meses = [
...new Set(
@@ -1124,9 +1412,8 @@ export default function Teste() {
),
].sort() as string[];
setMesesDisponiveis(meses);
-
} catch (err) {
- setError(err instanceof Error ? err.message : "Erro desconhecido");
+ setError(err instanceof Error ? err.message : 'Erro desconhecido');
} finally {
setLoading(false);
}
@@ -1138,13 +1425,13 @@ export default function Teste() {
const anoAtual = agora.getFullYear();
const mesAtual = String(agora.getMonth() + 1).padStart(2, '0');
const periodoAtual = `${anoAtual}-${mesAtual}`;
-
- setFiltros({
- periodoDe: `${anoAtual}-01`,
- periodoAte: periodoAtual,
- filial: "Todas",
- });
-
+
+ setFiltros({
+ periodoDe: `${anoAtual}-01`,
+ periodoAte: periodoAtual,
+ filial: 'Todas',
+ });
+
setFiliaisSelecionadas([]);
setData([]);
setDadosFiltrados([]);
@@ -1152,23 +1439,23 @@ export default function Teste() {
setMesesDisponiveis([]);
setIsAllExpanded(false);
setIsFilterOpen(false);
-
+
// Limpar filtros do analítico também
setAnaliticoFiltros({
- dataInicio: "",
- dataFim: "",
- centroCusto: "",
- codigoGrupo: "",
- codigoSubgrupo: "",
- codigoConta: "",
- codFilial: "",
- linhaSelecionada: "",
- excluirCentroCusto: "",
- excluirCodigoConta: "",
- codigosCentrosCustoSelecionados: "",
- codigosContasSelecionadas: "",
+ dataInicio: '',
+ dataFim: '',
+ centroCusto: '',
+ codigoGrupo: '',
+ codigoSubgrupo: '',
+ codigoConta: '',
+ codFilial: '',
+ linhaSelecionada: '',
+ excluirCentroCusto: '',
+ excluirCodigoConta: '',
+ codigosCentrosCustoSelecionados: '',
+ codigosContasSelecionadas: '',
});
-
+
carregarPeriodosDisponiveis();
};
@@ -1179,20 +1466,20 @@ export default function Teste() {
}
const dadosCompletosExpandidos = buildHierarchicalData();
-
+
const dadosExportacao = dadosCompletosExpandidos.map((row, index) => {
const linha: any = {
- 'Linha': index + 1,
- 'Tipo': row.type,
- 'Nível': row.level,
- 'Grupo': row.grupo || '',
+ Linha: index + 1,
+ Tipo: row.type,
+ Nível: row.level,
+ Grupo: row.grupo || '',
'Código Grupo': row.codigo_grupo || '',
- 'Conta': row.conta || '',
+ Conta: row.conta || '',
'Código Conta': row.codigo_conta || '',
- 'Total': row.total || 0,
+ Total: row.total || 0,
};
- mesesDisponiveis.forEach(mes => {
+ mesesDisponiveis.forEach((mes) => {
const valor = row.valoresPorMes?.[mes] || 0;
const percentual = row.percentuaisPorMes?.[mes] || 0;
linha[`Valor ${mes}`] = valor;
@@ -1204,43 +1491,52 @@ export default function Teste() {
const wb = XLSX.utils.book_new();
const ws = XLSX.utils.json_to_sheet(dadosExportacao);
-
+
const colWidths = [
- { wch: 8 }, // Linha
- { wch: 15 }, // Tipo
- { wch: 8 }, // Nível
- { wch: 25 }, // Grupo
- { wch: 15 }, // Código Grupo
- { wch: 35 }, // Conta
- { wch: 12 }, // Código Conta
- { wch: 15 }, // Total
+ { wch: 8 }, // Linha
+ { wch: 15 }, // Tipo
+ { wch: 8 }, // Nível
+ { wch: 25 }, // Grupo
+ { wch: 15 }, // Código Grupo
+ { wch: 35 }, // Conta
+ { wch: 12 }, // Código Conta
+ { wch: 15 }, // Total
];
-
+
mesesDisponiveis.forEach(() => {
colWidths.push({ wch: 15 }); // Valor
colWidths.push({ wch: 10 }); // %
});
-
+
ws['!cols'] = colWidths;
-
+
XLSX.utils.book_append_sheet(wb, ws, 'DRE Filial Completo');
-
- const resumoData = [
- { 'Informação': 'Período', 'Valor': `${filtros.periodoDe} a ${filtros.periodoAte}` },
- { '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') },
+
+ const resumoData = [
+ {
+ Informação: 'Período',
+ Valor: `${filtros.periodoDe} a ${filtros.periodoAte}`,
+ },
+ { 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'),
+ },
];
-
+
const wsResumo = XLSX.utils.json_to_sheet(resumoData);
wsResumo['!cols'] = [{ wch: 20 }, { wch: 30 }];
XLSX.utils.book_append_sheet(wb, wsResumo, 'Resumo');
-
+
const dataAtual = new Date().toISOString().split('T')[0];
const nomeArquivo = `DRE_Filial_Completo_${dataAtual}.xlsx`;
-
+
XLSX.writeFile(wb, nomeArquivo);
-
+
console.log('✅ Arquivo XLSX completo exportado:', nomeArquivo);
};
@@ -1259,12 +1555,14 @@ export default function Teste() {
-
Despesa Filial
+
+ Despesa Filial
+
Demonstração do Resultado do Exercício
+
-
{/* Controles */}
@@ -1297,7 +1595,7 @@ export default function Teste() {
Expandir Tudo
>
)}
-
+
@@ -1314,10 +1612,11 @@ export default function Teste() {
Filtros
- Ajuste os critérios e clique em Pesquisar para atualizar a visão.
+ Ajuste os critérios e clique em Pesquisar para atualizar a
+ visão.
-
+
{/* Período */}
@@ -1325,27 +1624,57 @@ export default function Teste() {
Período
- DE
- setFiltros(prev => ({ ...prev, periodoDe: value }))}>
+
+ DE
+
+
+ setFiltros((prev) => ({
+ ...prev,
+ periodoDe: value,
+ }))
+ }
+ >
- {mesesDisponiveis.map(mes => (
- {mes}
+ {mesesDisponiveis.map((mes) => (
+
+ {mes}
+
))}
- ATÉ
- setFiltros(prev => ({ ...prev, periodoAte: value }))}>
+
+ ATÉ
+
+
+ setFiltros((prev) => ({
+ ...prev,
+ periodoAte: value,
+ }))
+ }
+ >
- {mesesDisponiveis.map(mes => (
- {mes}
+ {mesesDisponiveis.map((mes) => (
+
+ {mes}
+
))}
@@ -1353,74 +1682,85 @@ export default function Teste() {
- {/* Filial */}
-
-
-
FILIAL
-
-
- Todas
-
-
- Limpar
-
+ {/* Filial */}
+
+
+
FILIAL
+
+
+ Todas
+
+
+ Limpar
+
+
-
-
setFiltroFilial(e.target.value)}
- className="h-8 text-sm"
- />
-
- {opcoesFiliais
- .filter(filial => {
- if (!filtroFilial) return true;
- const termo = filtroFilial.toLowerCase();
- return filial.toLowerCase().includes(termo);
- })
- .map(filial => (
-
-
toggleFilial(filial)}
- />
- setFiltroFilial(e.target.value)}
+ className="h-8 text-sm"
+ />
+
+ {opcoesFiliais
+ .filter((filial) => {
+ if (!filtroFilial) return true;
+ const termo = filtroFilial.toLowerCase();
+ return filial.toLowerCase().includes(termo);
+ })
+ .map((filial) => (
+
- {filial}
-
-
- ))}
-
- {filiaisSelecionadas.length > 0 && (
-
- {filiaisSelecionadas.length} filial(is) selecionada(s)
+ toggleFilial(filial)}
+ />
+
+ {filial}
+
+
+ ))}
- )}
-
+ {filiaisSelecionadas.length > 0 && (
+
+ {filiaisSelecionadas.length} filial(is) selecionada(s)
+
+ )}
+
-
+
Limpar Filtros
- setIsFilterOpen(false)} className="flex-1">
+ setIsFilterOpen(false)}
+ className="flex-1"
+ >
Cancelar
@@ -1429,8 +1769,8 @@ export default function Teste() {
-
-
+
+