using Microsoft.AspNetCore.Mvc; using System.Linq; namespace BpsRwApp.Controllers { public class RincianTargetRumahMemilahController : AppControllerBase { public IActionResult Index() { return View(); } [HttpGet] public IActionResult Table() { var wilayahDefinitions = new[] { new { Name = "Jakarta Pusat", Kelurahan = new[] { "Cempaka Putih Barat", "Cempaka Putih Timur", "Johar Baru", "Galur", "Kebon Melati", "Kebon Kacang", "Petamburan", "Kampung Bali", "Bendungan Hilir", "Karet Tengsin", } }, new { Name = "Jakarta Barat", Kelurahan = new[] { "Tomang", "Kedoya Selatan", "Duri Kepa", "Palmerah", "Kebon Jeruk", "Kembangan Selatan", "Kembangan Utara", "Cengkareng Barat", "Tegal Alur", "Kamal", } }, new { Name = "Jakarta Selatan", Kelurahan = new[] { "Cipete Selatan", "Cipete Utara", "Pondok Pinang", "Pondok Indah", "Bangka", "Tegal Parang", "Ragunan", "Cipedak", "Pesanggrahan", "Ulujami", } }, new { Name = "Jakarta Timur", Kelurahan = new[] { "Cakung Timur", "Penggilingan", "Pulo Gebang", "Rawa Terate", "Duren Sawit", "Pondok Kelapa", "Klender", "Cipinang Melayu", "Halim Perdanakusuma", "Matraman", } }, new { Name = "Jakarta Utara", Kelurahan = new[] { "Kelapa Gading Timur", "Pegangsaan Dua", "Sunter Agung", "Sunter Jaya", "Tanjung Priok", "Pademangan Barat", "Ancol", "Penjaringan", "Pluit", "Marunda", } }, }; var wilayahData = wilayahDefinitions .Select((definition, wilayahIndex) => { var targets = definition.Kelurahan .Select((kelurahan, targetIndex) => { var baseline = 35 + wilayahIndex * 5 + targetIndex * 3; return new TargetRow( kelurahan, baseline, baseline + 4, baseline + 12); }) .ToArray(); var totalJumlahPjlp = targets.Sum(target => target.JumlahPjlp); var totalTargetBulan = targets.Sum(target => target.TargetBulan); var totalTargetDelapanBulan = targets.Sum(target => target.TargetDelapanBulan); return new WilayahRow( No: wilayahIndex + 1, Wilayah: definition.Name, TotalJumlahPjlp: totalJumlahPjlp, TotalTargetBulan: totalTargetBulan, TotalTargetDelapanBulan: totalTargetDelapanBulan, Targets: targets); }) .ToArray(); var data = wilayahData .SelectMany(region => region.Targets.Select((target, index) => new { no = region.No, row_number = $"{region.No}.{index + 1}", wilayah = region.Wilayah, kelurahan = target.Kelurahan, jumlah_pjlp = target.JumlahPjlp, target_bulan = target.TargetBulan, target_8_bulan = target.TargetDelapanBulan, total_jumlah_pjlp = region.TotalJumlahPjlp, total_target_bulan = region.TotalTargetBulan, total_target_8_bulan = region.TotalTargetDelapanBulan })) .ToArray(); return Json(new { data }); } private sealed record WilayahRow(int No, string Wilayah, int TotalJumlahPjlp, int TotalTargetBulan, int TotalTargetDelapanBulan, TargetRow[] Targets); private sealed record TargetRow(string Kelurahan, int JumlahPjlp, int TargetBulan, int TargetDelapanBulan); } }