Merge pull request #3 from JurunenseDevInterno/feat-migracao-oracle-integration-analitico
Feat migracao oracle integration analitico
This commit is contained in:
commit
1bb063cea1
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue