feat(api): implement multiple realisasi for APBDes
Schema Changes: - Add RealisasiItem model for multiple realizations per APBDesItem - Replace realisasi field with totalRealisasi (auto-calculated sum) - Add selisih and persentase as auto-calculated fields - Cascade delete realisasi when item is deleted API Changes: - Update index.ts: Add realisasi CRUD endpoints - POST /:itemId/realisasi - Create realisasi - PUT /realisasi/:realisasiId - Update realisasi - DELETE /realisasi/:realisasiId - Delete realisasi - Update create.ts: Auto-calculate totalRealisasi=0, selisih, persentase - Update updt.ts: Reset calculations when items updated - Update findUnique.ts: Include realisasiItems in response - Update findMany.ts: Include realisasiItems in response - Remove realisasi field from ApbdesItemSchema New Files: - realisasi/create.ts - Create realisasi with auto-calculation - realisasi/update.ts - Update realisasi with recalculation - realisasi/delete.ts - Soft delete with recalculation Features: - Auto-calculate totalRealisasi from sum of all realisasiItems - Auto-calculate selisih = totalRealisasi - anggaran - Auto-calculate persentase = (totalRealisasi / anggaran) * 100 - Support for bukti file attachment - Support for keterangan (notes) per realisasi - Soft delete support for audit trail UI Updates: - Update admin detail page to use totalRealisasi instead of realisasi - Update landing page realisasiTable to use totalRealisasi Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
This commit is contained in:
@@ -209,16 +209,22 @@ model APBDesItem {
|
||||
kode String // contoh: "4", "4.1", "4.1.2"
|
||||
uraian String // nama item, contoh: "Pendapatan Asli Desa", "Hasil Usaha"
|
||||
anggaran Float // dalam satuan Rupiah (bisa DECIMAL di DB, tapi Float umum di TS/JS)
|
||||
realisasi Float
|
||||
selisih Float // realisasi - anggaran
|
||||
persentase Float
|
||||
tipe String? // (realisasi / anggaran) * 100
|
||||
tipe String? // "pendapatan" | "belanja" | "pembiayaan" | null
|
||||
level Int // 1 = kelompok utama, 2 = sub-kelompok, 3 = detail
|
||||
parentId String? // untuk relasi hierarki
|
||||
parent APBDesItem? @relation("APBDesItemParent", fields: [parentId], references: [id])
|
||||
children APBDesItem[] @relation("APBDesItemParent")
|
||||
apbdesId String
|
||||
apbdes APBDes @relation(fields: [apbdesId], references: [id])
|
||||
|
||||
// Field kalkulasi (auto-calculated dari realisasi items)
|
||||
totalRealisasi Float @default(0) // Sum dari semua realisasi
|
||||
selisih Float @default(0) // totalRealisasi - anggaran
|
||||
persentase Float @default(0) // (totalRealisasi / anggaran) * 100
|
||||
|
||||
// Relasi ke realisasi items
|
||||
realisasiItems RealisasiItem[]
|
||||
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
deletedAt DateTime?
|
||||
@@ -229,6 +235,26 @@ model APBDesItem {
|
||||
@@index([apbdesId])
|
||||
}
|
||||
|
||||
// Model baru untuk multiple realisasi per item
|
||||
model RealisasiItem {
|
||||
id String @id @default(cuid())
|
||||
apbdesItemId String
|
||||
apbdesItem APBDesItem @relation(fields: [apbdesItemId], references: [id], onDelete: Cascade)
|
||||
|
||||
jumlah Float // Jumlah realisasi dalam Rupiah
|
||||
tanggal DateTime @db.Date // Tanggal realisasi
|
||||
keterangan String? @db.Text // Keterangan tambahan (opsional)
|
||||
buktiFileId String? // FileStorage ID untuk bukti/foto (opsional)
|
||||
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
deletedAt DateTime?
|
||||
isActive Boolean @default(true)
|
||||
|
||||
@@index([apbdesItemId])
|
||||
@@index([tanggal])
|
||||
}
|
||||
|
||||
//========================================= PRESTASI DESA ========================================= //
|
||||
model PrestasiDesa {
|
||||
id String @id @default(cuid())
|
||||
|
||||
Reference in New Issue
Block a user