diff --git a/src/app/DRE/analitico.tsx b/src/app/DRE/analitico.tsx index 1b1b566..f1439f3 100644 --- a/src/app/DRE/analitico.tsx +++ b/src/app/DRE/analitico.tsx @@ -154,10 +154,10 @@ export default function AnaliticoComponent({ filtros }: AnaliticoProps) { header: "Código da Conta", filterFn: "advancedText", }, - { - accessorKey: "conta", - header: "Nome da Conta", - filterFn: "advancedText" + { + accessorKey: "conta", + header: "Nome da Conta", + filterFn: "advancedText", }, { accessorKey: "valor", @@ -205,9 +205,9 @@ export default function AnaliticoComponent({ filtros }: AnaliticoProps) { header: "Histórico 2", filterFn: "advancedText", }, - { - accessorKey: "numero_lancamento", - header: "Número do Lançamento", + { + accessorKey: "numero_lancamento", + header: "Número do Lançamento", filterFn: "advancedText", cell: () => "-", }, @@ -312,32 +312,50 @@ export default function AnaliticoComponent({ filtros }: AnaliticoProps) { React.useEffect(() => { // Usar dados filtrados da tabela em vez dos dados originais - const filteredData = table.getRowModel().rows.map(row => row.original); + const filteredData = table.getRowModel().rows.map((row) => row.original); const newTotal = filteredData.reduce((sum, item) => { - const valor = + const valor = typeof item.valor === "string" ? parseFloat(item.valor) : item.valor; - return sum + (isNaN(valor) ? 0 : valor); - }, 0); - - console.log('🔄 Calculando total:', { + return sum + (isNaN(valor) ? 0 : valor); + }, 0); + + console.log("🔄 Calculando total:", { totalRows: table.getRowModel().rows.length, originalDataLength: data.length, newTotal, columnFilters: columnFilters.length, - globalFilter + globalFilter, }); - + setTotalValor(newTotal); }, [table, data, columnFilters, globalFilter]); + // Calcular totais das colunas de valores para o footer - mesmo princípio do Valor Total + const columnTotals = React.useMemo(() => { + // Usar dados filtrados da tabela em vez dos dados originais - MESMA LÓGICA DO totalValor + const filteredData = table.getRowModel().rows.map((row) => row.original); + const valorRealizado = filteredData.reduce((sum, item) => { + const valor = + typeof item.valor === "string" ? parseFloat(item.valor) : item.valor; + return sum + (isNaN(valor) ? 0 : valor); + }, 0); + + return { + valorRealizado, + valorPrevisto: 0, // Sempre 0 pois não há dados + valorConfirmado: 0, // Sempre 0 pois não há dados + valorPago: 0, // Sempre 0 pois não há dados + }; + }, [table]); + const exportToExcel = () => { if (data.length === 0) return; // Usar dados filtrados da tabela em vez dos dados originais - const filteredData = table.getRowModel().rows.map(row => row.original); - + const filteredData = table.getRowModel().rows.map((row) => row.original); + if (filteredData.length === 0) { - alert('Nenhum dado filtrado para exportar'); + alert("Nenhum dado filtrado para exportar"); return; } @@ -371,7 +389,10 @@ export default function AnaliticoComponent({ filtros }: AnaliticoProps) { const resumoData = [ { Métrica: "Total de Registros", Valor: filteredData.length }, { Métrica: "Valor Total", Valor: totalValor }, - { Métrica: "Filtros Aplicados", Valor: columnFilters.length > 0 || globalFilter ? "Sim" : "Não" }, + { + Métrica: "Filtros Aplicados", + Valor: columnFilters.length > 0 || globalFilter ? "Sim" : "Não", + }, ]; const wsResumo = XLSX.utils.json_to_sheet(resumoData); @@ -383,7 +404,9 @@ export default function AnaliticoComponent({ filtros }: AnaliticoProps) { const now = new Date(); const timestamp = now.toISOString().slice(0, 19).replace(/:/g, "-"); const hasFilters = columnFilters.length > 0 || globalFilter; - const fileName = `analitico${hasFilters ? '_filtrado' : ''}_${timestamp}.xlsx`; + const fileName = `analitico${ + hasFilters ? "_filtrado" : "" + }_${timestamp}.xlsx`; // Fazer download XLSX.writeFile(wb, fileName); @@ -452,17 +475,17 @@ export default function AnaliticoComponent({ filtros }: AnaliticoProps) { Limpar Filtros )} - {data.length > 0 && ( - - )} + > + + Exportar XLSX + + )} @@ -472,23 +495,39 @@ export default function AnaliticoComponent({ filtros }: AnaliticoProps) { {/* Table Header */}
-
Data de Vencimento
+
+ Data de Vencimento +
Data de Caixa
Entidade
-
Código do Fornecedor
-
Nome do Fornecedor
+
+ Código do Fornecedor +
+
+ Nome do Fornecedor +
Centro de Custo
Código da Conta
Nome da Conta
-
Valor Realizado
-
Valor Previsto
-
Valor Confirmado
-
Valor Pago
+
+ Valor Realizado +
+
+ Valor Previsto +
+
+ Valor Confirmado +
+
+ Valor Pago +
Histórico
Histórico 2
-
Número do Lançamento
+
+ Número do Lançamento +
+
- {/* Table Body */}

Carregando dados...

-
- + + ) : virtualRows.length === 0 ? (
@@ -523,10 +562,10 @@ export default function AnaliticoComponent({ filtros }: AnaliticoProps) { d="M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z" /> -
+

Nenhum dado encontrado

- - + + ) : (
+
{new Date(row.original.data_caixa).toLocaleDateString( "pt-BR" )} -
-
-
+ +
+ - +
{row.original.codigo_fornecedor} -
+
{row.original.nome_fornecedor} -
+
{row.original.codigo_centrocusto} -
+
{row.original.codigo_conta} -
+
{row.original.conta} -
+
-
-
-
-
-
-
-
+
+
+ - +
+
+ - +
+
+ - +
+
{row.original.historico} -
-
+
+
{row.original.historico2} -
-
-
-
+ +
+ - +
+ ); })} - + )} + + + {/* Footer com Totalizador das Colunas */} + {data.length > 0 && ( +
+
+
+ TOTAL: {table.getRowModel().rows.length} registros
+
+
+
+
+
+
+
+
+ {new Intl.NumberFormat("pt-BR", { + style: "currency", + currency: "BRL", + }).format(columnTotals.valorRealizado)} +
+
+ - +
+
+ - +
+
+ - +
+
+
+
+
+
+ )} {/* Summary Footer - Integrado */} - {data.length > 0 && ( -
-
-
- {/*
- - - -
*/} -
-

- Total de Registros:{" "} - - {table.getRowModel().rows.length} - -

-

- Transações encontradas -

-
-
-
-

- - Valor Total:{" "} - {new Intl.NumberFormat("pt-BR", { - style: "currency", - currency: "BRL", - }).format(totalValor)} - -

-

- Soma de todos os valores -

-
-
-
- )} + { + // data.length > 0 && ( + //
+ //
+ //
+ //
+ //

+ // Total de Registros:{" "} + // + // {table.getRowModel().rows.length} + // + //

+ //

+ // Transações encontradas + //

+ //
+ //
+ //
+ //

+ // + // Valor Total:{" "} + // {new Intl.NumberFormat("pt-BR", { + // style: "currency", + // currency: "BRL", + // }).format(totalValor)} + // + //

+ //

+ // Soma de todos os valores + //

+ //
+ //
+ //
+ // ) + } @@ -698,7 +782,7 @@ export default function AnaliticoComponent({ filtros }: AnaliticoProps) { ))} - +
+ {!( cond.operator === "empty" || cond.operator === "notEmpty" @@ -745,7 +829,7 @@ export default function AnaliticoComponent({ filtros }: AnaliticoProps) { placeholder="Digite o valor" className="w-full bg-white border-gray-300" /> - + )} {conditions.length > 1 && ( @@ -761,8 +845,8 @@ export default function AnaliticoComponent({ filtros }: AnaliticoProps) { > ✕ - - )} + + )} ))}