bps-rw/Controllers/RincianTargetRumahMemilahCo...

159 lines
5.6 KiB
C#

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);
}
}