Merge pull request #4 from JurunenseDevInterno/dev

Dev
This commit is contained in:
Alessandro Gonçalves 2025-10-21 12:37:57 -03:00 committed by GitHub
commit 86c1348fad
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 48 additions and 42 deletions

View File

@ -1,8 +1,7 @@
{
"extends": "next/core-web-vitals",
"extends": ["next/core-web-vitals"],
"rules": {
"@typescript-eslint/no-explicit-any": "off",
"@typescript-eslint/no-unused-vars": "off",
"@typescript-eslint/no-empty-object-type": "off"
"@typescript-eslint/no-unused-vars": "warn",
"@typescript-eslint/no-explicit-any": "warn"
}
}

View File

@ -1,25 +0,0 @@
import { dirname } from "path";
import { fileURLToPath } from "url";
import { FlatCompat } from "@eslint/eslintrc";
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const compat = new FlatCompat({
baseDirectory: __dirname,
});
const eslintConfig = [
...compat.extends("next/core-web-vitals", "next/typescript"),
{
ignores: [
"node_modules/**",
".next/**",
"out/**",
"build/**",
"next-env.d.ts",
],
},
];
export default eslintConfig;

11
package-lock.json generated
View File

@ -30,6 +30,7 @@
"devDependencies": {
"@eslint/eslintrc": "^3",
"@types/node": "^20",
"@types/oracledb": "^6.9.1",
"@types/pg": "^8.15.5",
"@types/react": "^19",
"@types/react-dom": "^19",
@ -2211,6 +2212,16 @@
"undici-types": "~6.21.0"
}
},
"node_modules/@types/oracledb": {
"version": "6.9.1",
"resolved": "https://registry.npmjs.org/@types/oracledb/-/oracledb-6.9.1.tgz",
"integrity": "sha512-rXDnApyfaki0dvHuqzQvfirK6yHbtEO5nJ4CXKHrZYdwNAx4PjddqoCXdN1dZaEnZxXFwCy9xEWyIemL8EI/NQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/pg": {
"version": "8.15.5",
"resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.15.5.tgz",

View File

@ -31,6 +31,7 @@
"devDependencies": {
"@eslint/eslintrc": "^3",
"@types/node": "^20",
"@types/oracledb": "^6.9.1",
"@types/pg": "^8.15.5",
"@types/react": "^19",
"@types/react-dom": "^19",

View File

@ -308,7 +308,7 @@ export default function AnaliticoComponent({ filtros }: AnaliticoProps) {
const conds = Array.isArray(filters) ? filters : [filters];
// A coluna deve atender a todas as condições aplicáveis a ela
return conds.every((filter) => {
return conds.every((filter: any) => {
const raw = row.getValue(columnId);
const v = raw == null ? "" : String(raw);
const op = filter.operator;
@ -417,8 +417,28 @@ export default function AnaliticoComponent({ filtros }: AnaliticoProps) {
// Calcular totais das colunas de valores para o footer - EXATAMENTE o mesmo padrão do Valor Total
const columnTotals = React.useMemo(() => {
// Garantir que sempre temos dados para calcular
if (!data || data.length === 0) {
console.log("⚠️ Sem dados para calcular totais das colunas");
return {
valorRealizado: 0,
valorPrevisto: 0,
valorConfirmado: 0,
valorPago: 0,
};
}
// Usar EXATAMENTE a mesma lógica do totalValor
const filteredData = table.getRowModel().rows.map((row) => row.original);
console.log("🔄 Calculando totais das colunas - Dados filtrados:", {
totalRows: filteredData.length,
originalDataLength: data.length,
columnFilters: columnFilters.length,
globalFilter,
firstItem: filteredData[0]
});
const valorRealizado = filteredData.reduce((sum, item) => {
const valor = typeof item.valor === "string" ? parseFloat(item.valor) : item.valor;
return sum + (isNaN(valor) ? 0 : valor);
@ -455,7 +475,7 @@ export default function AnaliticoComponent({ filtros }: AnaliticoProps) {
valorConfirmado,
valorPago,
};
}, [table, columnFilters, globalFilter]);
}, [table, columnFilters, globalFilter, data]);
const exportToExcel = () => {
if (data.length === 0) return;
@ -840,8 +860,8 @@ export default function AnaliticoComponent({ filtros }: AnaliticoProps) {
TOTAL: {table.getRowModel().rows.length} registros
</div>
<div className="w-[120px] whitespace-nowrap"></div>
<div className="w-[100px] whitespace-nowrap"></div>
<div className="w-[160px] whitespace-nowrap"></div>
<div className="w-[120px] whitespace-nowrap"></div>
<div className="w-[120px] whitespace-nowrap"></div>
<div className="w-[220px] whitespace-nowrap"></div>
<div className="w-[140px] whitespace-nowrap"></div>
<div className="w-[130px] whitespace-nowrap"></div>
@ -901,7 +921,7 @@ export default function AnaliticoComponent({ filtros }: AnaliticoProps) {
)}
</div>
<div className="w-[20px] whitespace-nowrap"></div>
<div className="w-[200px] whitespace-nowrap"></div>
<div className="w-[320px] whitespace-nowrap"></div>
<div className="w-[500px] whitespace-nowrap"></div>
<div className="w-[30px] whitespace-nowrap"></div>
</div>

View File

@ -125,23 +125,23 @@ export default function Teste() {
const dadosCompletos = await response.json();
// Extrair períodos únicos dos dados
const periodosUnicos = [...new Set(dadosCompletos.map((item: DREItem) => item.data_competencia))].sort();
const periodosUnicos = [...new Set(dadosCompletos.map((item: DREItem) => item.data_competencia))].sort() as string[];
setMesesDisponiveis(periodosUnicos);
// Extrair grupos únicos
const gruposUnicos = [...new Set(dadosCompletos.map((item: DREItem) => item.grupo))].sort();
const gruposUnicos = [...new Set(dadosCompletos.map((item: DREItem) => item.grupo))].sort() as string[];
setOpcoesGrupos(gruposUnicos);
// Extrair subgrupos únicos
const subgruposUnicos = [...new Set(dadosCompletos.map((item: DREItem) => item.subgrupo))].sort();
const subgruposUnicos = [...new Set(dadosCompletos.map((item: DREItem) => item.subgrupo))].sort() as string[];
setOpcoesSubgrupos(subgruposUnicos);
// Extrair centros de custo únicos
const centrosCustoUnicos = [...new Set(dadosCompletos.map((item: DREItem) => item.centro_custo))].sort();
const centrosCustoUnicos = [...new Set(dadosCompletos.map((item: DREItem) => item.centro_custo))].sort() as string[];
setOpcoesCentrosCusto(centrosCustoUnicos);
// Extrair contas únicas
const contasUnicas = [...new Set(dadosCompletos.map((item: DREItem) => item.conta))].sort();
const contasUnicas = [...new Set(dadosCompletos.map((item: DREItem) => item.conta))].sort() as string[];
setOpcoesContas(contasUnicas);
} catch (error) {
@ -418,7 +418,7 @@ export default function Teste() {
setFiltrosAplicados(true);
// Extrair meses únicos dos dados filtrados
const mesesUnicos = [...new Set(dadosFiltrados.map(item => item.data_competencia))].sort();
const mesesUnicos = [...new Set(dadosFiltrados.map((item: DREItem) => item.data_competencia))].sort() as string[];
setMesesDisponiveis(mesesUnicos);
} catch (error) {

View File

@ -69,7 +69,7 @@ function criarGruposCalculados(dados: any[]) {
const dadosMes = dadosPorMes[mes];
// Calcular valores por grupo usando código numérico
const valoresPorGrupo = dadosMes.reduce((acc, item) => {
const valoresPorGrupo = dadosMes.reduce((acc: Record<string, number>, item: any) => {
const codgrupo = item.codgrupo;
if (!acc[codgrupo]) acc[codgrupo] = 0;
acc[codgrupo] += parseFloat(item.valor);