From 144ac37e122a621f23433080bca0b0f813ee6224 Mon Sep 17 00:00:00 2001 From: nico Date: Thu, 5 Mar 2026 11:27:28 +0800 Subject: [PATCH] fix(public-apbdes): fix realisasi display on public APBDes page MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fix types.ts transformAPBDesData to map totalRealisasi → realisasi - Backend returns totalRealisasi, frontend expects realisasi - Add fallback to use item.realisasi if totalRealisasi not available - Fix grafikRealisasi.tsx to use realisasi field - Update Summary component to use i.realisasi || i.totalRealisasi - Update total calculation to use realisasi field - Fix apbDesaTable.tsx to use realisasi field - Update total calculation to use item.realisasi - Fix apbDesaProgress.tsx to use realisasi field - Update calcTotal to use item.realisasi with fallback Root cause: Backend Prisma schema uses 'totalRealisasi' field, but public page components were expecting 'realisasi' field. Co-authored-by: Qwen-Coder --- src/app/darmasaba/(tambahan)/apbdes/lib/apbDesaProgress.tsx | 3 ++- src/app/darmasaba/(tambahan)/apbdes/lib/apbDesaTable.tsx | 1 + src/app/darmasaba/(tambahan)/apbdes/lib/types.ts | 3 ++- .../darmasaba/_com/main-page/apbdes/lib/grafikRealisasi.tsx | 6 ++++-- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/app/darmasaba/(tambahan)/apbdes/lib/apbDesaProgress.tsx b/src/app/darmasaba/(tambahan)/apbdes/lib/apbDesaProgress.tsx index a1d3df88..cf93ab32 100644 --- a/src/app/darmasaba/(tambahan)/apbdes/lib/apbDesaProgress.tsx +++ b/src/app/darmasaba/(tambahan)/apbdes/lib/apbDesaProgress.tsx @@ -78,7 +78,8 @@ function APBDesProgress({ apbdesData }: APBDesProgressProps) { // Hitung total per kategori const calcTotal = (items: { anggaran: number; realisasi: number }[]) => { const anggaran = items.reduce((sum, item) => sum + item.anggaran, 0); - const realisasi = items.reduce((sum, item) => sum + item.realisasi, 0); + // Use realisasi field (already mapped from totalRealisasi in transformAPBDesData) + const realisasi = items.reduce((sum, item) => sum + (item.realisasi || 0), 0); const persen = anggaran > 0 ? (realisasi / anggaran) * 100 : 0; return { anggaran, realisasi, persen }; }; diff --git a/src/app/darmasaba/(tambahan)/apbdes/lib/apbDesaTable.tsx b/src/app/darmasaba/(tambahan)/apbdes/lib/apbDesaTable.tsx index 9b0791f8..c4e4de6a 100644 --- a/src/app/darmasaba/(tambahan)/apbdes/lib/apbDesaTable.tsx +++ b/src/app/darmasaba/(tambahan)/apbdes/lib/apbDesaTable.tsx @@ -68,6 +68,7 @@ function APBDesTable({ apbdesData }: APBDesTableProps) { // Calculate totals const totalAnggaran = items.reduce((sum, item) => sum + (item.anggaran || 0), 0); + // Use realisasi field (already mapped from totalRealisasi in transformAPBDesData) const totalRealisasi = items.reduce((sum, item) => sum + (item.realisasi || 0), 0); const totalSelisih = totalAnggaran - totalRealisasi; const totalPersentase = totalAnggaran > 0 ? (totalRealisasi / totalAnggaran) * 100 : 0; diff --git a/src/app/darmasaba/(tambahan)/apbdes/lib/types.ts b/src/app/darmasaba/(tambahan)/apbdes/lib/types.ts index 3c6dde79..fcef7b0a 100644 --- a/src/app/darmasaba/(tambahan)/apbdes/lib/types.ts +++ b/src/app/darmasaba/(tambahan)/apbdes/lib/types.ts @@ -51,7 +51,8 @@ export function transformAPBDesData(data: any): APBDesData { kode: item.kode || '', uraian: item.uraian || '', anggaran: typeof item.anggaran === 'number' ? item.anggaran : 0, - realisasi: typeof item.realisasi === 'number' ? item.realisasi : 0, + // Map totalRealisasi from backend to realisasi field + realisasi: typeof item.totalRealisasi === 'number' ? item.totalRealisasi : (typeof item.realisasi === 'number' ? item.realisasi : 0), selisih: typeof item.selisih === 'number' ? item.selisih : 0, persentase: typeof item.persentase === 'number' ? item.persentase : 0, level: typeof item.level === 'number' ? item.level : 1, diff --git a/src/app/darmasaba/_com/main-page/apbdes/lib/grafikRealisasi.tsx b/src/app/darmasaba/_com/main-page/apbdes/lib/grafikRealisasi.tsx index 3cd7e150..4d73d0e2 100644 --- a/src/app/darmasaba/_com/main-page/apbdes/lib/grafikRealisasi.tsx +++ b/src/app/darmasaba/_com/main-page/apbdes/lib/grafikRealisasi.tsx @@ -5,7 +5,8 @@ function Summary({ title, data }: any) { if (!data || data.length === 0) return null; const totalAnggaran = data.reduce((s: number, i: any) => s + i.anggaran, 0); - const totalRealisasi = data.reduce((s: number, i: any) => s + i.totalRealisasi, 0); + // Use realisasi field (already mapped from totalRealisasi in transformAPBDesData) + const totalRealisasi = data.reduce((s: number, i: any) => s + (i.realisasi || i.totalRealisasi || 0), 0); const persen = totalAnggaran > 0 ? (totalRealisasi / totalAnggaran) * 100 : 0; @@ -87,7 +88,8 @@ export default function GrafikRealisasi({ apbdesData }: any) { // Hitung total keseluruhan const totalAnggaranSemua = items.reduce((s: number, i: any) => s + i.anggaran, 0); - const totalRealisasiSemua = items.reduce((s: number, i: any) => s + i.totalRealisasi, 0); + // Use realisasi field (already mapped from totalRealisasi in transformAPBDesData) + const totalRealisasiSemua = items.reduce((s: number, i: any) => s + (i.realisasi || i.totalRealisasi || 0), 0); const persenSemua = totalAnggaranSemua > 0 ? (totalRealisasiSemua / totalAnggaranSemua) * 100 : 0; const formatRupiah = (angka: number) => {