From 17b738dbf397af0f1cc04d66c3202ed82136f3d3 Mon Sep 17 00:00:00 2001 From: mehrdad_adabi Date: Tue, 9 Sep 2025 18:16:19 +0330 Subject: [PATCH] fix: bugs reports --- .../digital-innovation-page.tsx | 63 +++++++++---------- .../green-innovation-page.tsx | 1 + .../innovation-built-inside-page.tsx | 1 + .../mange-ideas-tech-page.tsx | 57 ++++------------- .../process-innovation-page.tsx | 6 +- .../project-management-page.tsx | 22 ++----- app/lib/utils.ts | 9 +++ 7 files changed, 59 insertions(+), 100 deletions(-) diff --git a/app/components/dashboard/project-management/digital-innovation-page.tsx b/app/components/dashboard/project-management/digital-innovation-page.tsx index 080e16a..e272da2 100644 --- a/app/components/dashboard/project-management/digital-innovation-page.tsx +++ b/app/components/dashboard/project-management/digital-innovation-page.tsx @@ -1,10 +1,30 @@ -import { useState, useEffect, useCallback, useRef, useMemo } from "react"; -import { DashboardLayout } from "../layout"; -import { Card, CardContent } from "~/components/ui/card"; -import { Button } from "~/components/ui/button"; -import { Badge } from "~/components/ui/badge"; -import { Checkbox } from "~/components/ui/checkbox"; +import { + BrainCircuit, + ChevronDown, + ChevronUp, + Database, + Key, + LoaderCircle, + RefreshCw, + Sprout, + TrendingDown, + TrendingUp, + Zap, +} from "lucide-react"; import moment from "moment-jalaali"; +import { useCallback, useEffect, useMemo, useRef, useState } from "react"; +import toast from "react-hot-toast"; +import { Badge } from "~/components/ui/badge"; +import { Button } from "~/components/ui/button"; +import { Card, CardContent } from "~/components/ui/card"; +import { Checkbox } from "~/components/ui/checkbox"; +import { CustomBarChart } from "~/components/ui/custom-bar-chart"; +import { + Dialog, + DialogContent, + DialogHeader, + DialogTitle, +} from "~/components/ui/dialog"; import { Table, TableBody, @@ -13,26 +33,9 @@ import { TableHeader, TableRow, } from "~/components/ui/table"; -import { - Dialog, - DialogContent, - DialogHeader, - DialogTitle, -} from "~/components/ui/dialog"; -import { ChevronUp, ChevronDown, RefreshCw } from "lucide-react"; import apiService from "~/lib/api"; -import toast from "react-hot-toast"; -import { - Database, - Zap, - TrendingDown, - TrendingUp, - Key, - Sprout, - BrainCircuit, - LoaderCircle, -} from "lucide-react"; -import { CustomBarChart } from "~/components/ui/custom-bar-chart"; +import { formatCurrency } from "~/lib/utils"; +import { DashboardLayout } from "../layout"; moment.loadPersian({ usePersianDigits: true }); @@ -492,16 +495,6 @@ export function DigitalInnovationPage() { // fetchStats(); // }; - const formatCurrency = (amount: string | number) => { - if (!amount) return "0 ریال"; - const numericAmount = - typeof amount === "string" - ? parseFloat(amount.replace(/,/g, "")) - : amount; - if (isNaN(numericAmount)) return "0 ریال"; - return new Intl.NumberFormat("fa-IR").format(numericAmount) + " ریال"; - }; - const renderProgress = useMemo(() => { const total = 10; for (let i = 0; i < rating.length; i++) { diff --git a/app/components/dashboard/project-management/green-innovation-page.tsx b/app/components/dashboard/project-management/green-innovation-page.tsx index cfc9d05..7e4f191 100644 --- a/app/components/dashboard/project-management/green-innovation-page.tsx +++ b/app/components/dashboard/project-management/green-innovation-page.tsx @@ -44,6 +44,7 @@ import { } from "lucide-react"; import toast from "react-hot-toast"; import apiService from "~/lib/api"; +import { formatCurrency } from "~/lib/utils"; import DashboardLayout from "../layout"; moment.loadPersian({ usePersianDigits: true }); diff --git a/app/components/dashboard/project-management/innovation-built-inside-page.tsx b/app/components/dashboard/project-management/innovation-built-inside-page.tsx index 6d7f46f..9501b85 100644 --- a/app/components/dashboard/project-management/innovation-built-inside-page.tsx +++ b/app/components/dashboard/project-management/innovation-built-inside-page.tsx @@ -40,6 +40,7 @@ import { XAxis, } from "recharts"; import apiService from "~/lib/api"; +import { formatCurrency } from "~/lib/utils"; import DashboardLayout from "../layout"; moment.loadPersian({ usePersianDigits: true }); diff --git a/app/components/dashboard/project-management/mange-ideas-tech-page.tsx b/app/components/dashboard/project-management/mange-ideas-tech-page.tsx index 0d9bc8d..a156de2 100644 --- a/app/components/dashboard/project-management/mange-ideas-tech-page.tsx +++ b/app/components/dashboard/project-management/mange-ideas-tech-page.tsx @@ -12,7 +12,7 @@ import { TableRow, } from "~/components/ui/table"; import apiService from "~/lib/api"; -import { formatNumber } from "~/lib/utils"; +import { formatCurrency, formatNumber } from "~/lib/utils"; import { DashboardLayout } from "../layout"; interface ProjectData { @@ -152,6 +152,12 @@ type ColumnDef = { const columns: ColumnDef[] = [ { key: "idea_title", label: "عنوان ایده", sortable: true, width: "200px" }, + { + key: "idea_status", + label: "وضعیت ایده", + sortable: true, + width: "260px", + }, { key: "idea_axis", label: "محور ایده", sortable: true, width: "160px" }, { key: "idea_current_status_description", @@ -171,12 +177,6 @@ const columns: ColumnDef[] = [ sortable: true, width: "160px", }, - { - key: "idea_status", - label: "وضعیت ایده", - sortable: true, - width: "260px", - }, { key: "personnel_number", label: "شماره پرسنلی", @@ -229,8 +229,6 @@ const columns: ColumnDef[] = [ }, ]; -// idea_income , idea_registration_date , idea_originality , personnel_number - export function ManageIdeasTechPage() { const [projects, setProjects] = useState([]); const [loading, setLoading] = useState(false); @@ -402,7 +400,7 @@ export function ManageIdeasTechPage() { try { const response = await apiService.select({ ProcessName: "idea", - OutputFields: ["count(idea_no)"], + OutputFields: ["count(idea_title)"], Conditions: [], }); @@ -412,7 +410,7 @@ export function ManageIdeasTechPage() { try { const parsedData = JSON.parse(dataString); if (Array.isArray(parsedData) && parsedData[0]) { - setActualTotalCount(parsedData[0].project_no_count || 0); + setActualTotalCount(parsedData[0].idea_title_count || 0); } } catch (parseError) { console.error("Error parsing count data:", parseError); @@ -424,24 +422,6 @@ export function ManageIdeasTechPage() { } }; - const formatCurrency = (amount: string | number) => { - if (!amount) return "0 ریال"; - // Remove commas and convert to number - const numericAmount = - typeof amount === "string" - ? parseFloat(amount.replace(/,/g, "")) - : amount; - if (isNaN(numericAmount)) return "0 ریال"; - return new Intl.NumberFormat("fa-IR").format(numericAmount) + " ریال"; - }; - - // const formatNumber = (value: string | number) => { - // if (value === undefined || value === null || value === "") return "0"; - // const numericValue = typeof value === "string" ? Number(value) : value; - // if (Number.isNaN(numericValue)) return "0"; - // return new Intl.NumberFormat("fa-IR").format(numericValue as number); - // }; - const toPersianDigits = (input: string | number): string => { const str = String(input); const map: Record = { @@ -607,21 +587,6 @@ export function ManageIdeasTechPage() { ); } - // case "strategic_theme": - // case "value_technology_and_innovation": - // case "type_of_innovation": - // case "innovation": - // return ( - // - // {String(value) || "-"} - // - // - // ); case "idea_income": return ( @@ -631,7 +596,9 @@ export function ManageIdeasTechPage() { case "personnel_number": // case "idea_originality": return ( - {formatNumber(value as any)} + + {toPersianDigits(value as any)}{" "} + ); case "idea_registration_date": return ( diff --git a/app/components/dashboard/project-management/process-innovation-page.tsx b/app/components/dashboard/project-management/process-innovation-page.tsx index 1512902..83d5ca3 100644 --- a/app/components/dashboard/project-management/process-innovation-page.tsx +++ b/app/components/dashboard/project-management/process-innovation-page.tsx @@ -439,7 +439,7 @@ export function ProcessInnovationPage() { const stats = data[0]; const normalized: InnovationStats = { totalProjects: parseNum(stats?.count_innovation_process_projects), - averageScore: parseNum(stats?.average_project_score), + averageScore: parseFloat(data[0].average_project_score), productionStopsPreventionSum: parseNum(stats?.sum_stopping_production), bottleneckRemovalCount: parseNum(stats?.count_throat_removal), currencyReductionSum: parseNum(stats?.sum_reduction_value_currency), @@ -828,9 +828,7 @@ export function ProcessInnovationPage() {
میانگین :‌
- {formatNumber( - ((stats.averageScore ?? 0) as number).toFixed?.(1) ?? 0 - )} + {formatNumber(((stats.averageScore ?? 0) as number) ?? 0)}
diff --git a/app/components/dashboard/project-management/project-management-page.tsx b/app/components/dashboard/project-management/project-management-page.tsx index 44401bd..032277e 100644 --- a/app/components/dashboard/project-management/project-management-page.tsx +++ b/app/components/dashboard/project-management/project-management-page.tsx @@ -1,7 +1,8 @@ -import { useState, useEffect, useCallback, useRef } from "react"; -import { DashboardLayout } from "../layout"; -import { Card, CardContent } from "~/components/ui/card"; +import { ChevronDown, ChevronUp, RefreshCw } from "lucide-react"; +import { useCallback, useEffect, useRef, useState } from "react"; +import toast from "react-hot-toast"; import { Badge } from "~/components/ui/badge"; +import { Card, CardContent } from "~/components/ui/card"; import { Table, TableBody, @@ -10,9 +11,9 @@ import { TableHeader, TableRow, } from "~/components/ui/table"; -import { ChevronUp, ChevronDown, RefreshCw } from "lucide-react"; import apiService from "~/lib/api"; -import toast from "react-hot-toast"; +import { formatCurrency } from "~/lib/utils"; +import { DashboardLayout } from "../layout"; interface ProjectData { WorkflowID: number; @@ -351,17 +352,6 @@ export function ProjectManagementPage() { fetchTotalCount(); }; - const formatCurrency = (amount: string | number) => { - if (!amount) return "0 ریال"; - // Remove commas and convert to number - const numericAmount = - typeof amount === "string" - ? parseFloat(amount.replace(/,/g, "")) - : amount; - if (isNaN(numericAmount)) return "0 ریال"; - return new Intl.NumberFormat("fa-IR").format(numericAmount) + " ریال"; - }; - const formatNumber = (value: string | number) => { if (value === undefined || value === null || value === "") return "0"; const numericValue = typeof value === "string" ? Number(value) : value; diff --git a/app/lib/utils.ts b/app/lib/utils.ts index 2cee588..dc79b88 100644 --- a/app/lib/utils.ts +++ b/app/lib/utils.ts @@ -11,3 +11,12 @@ export const formatNumber = (value: string | number) => { if (isNaN(numericValue)) return "0"; return new Intl.NumberFormat("fa-IR").format(numericValue); }; + +export const formatCurrency = (amount: string | number) => { + if (!amount) return "0 ریال"; + // Remove commas and convert to number + const numericAmount = + typeof amount === "string" ? parseFloat(amount.replace(/,/g, "")) : amount; + if (isNaN(numericAmount)) return "0 ریال"; + return new Intl.NumberFormat("fa-IR").format(numericAmount) + " ریال"; +};