using Microsoft.AspNetCore.Mvc; using System.Globalization; namespace BpsRwApp.Controllers { [Route("[controller]/[action]")] public class LaporanCapaianBulananController : AppControllerBase { public IActionResult Index() { return View(); } [HttpGet] public IActionResult GetData(string? bulanAwal, string? bulanAkhir) { var culture = new CultureInfo("id-ID"); // Default date range var startDate = string.IsNullOrEmpty(bulanAwal) ? DateTime.Now.AddMonths(-1) : DateTime.Parse(bulanAwal + "-01"); var endDate = string.IsNullOrEmpty(bulanAkhir) ? DateTime.Now : DateTime.Parse(bulanAkhir + "-01"); // Periode text string periode = startDate.ToString("MMMM", culture); if (!(startDate.Year == endDate.Year && startDate.Month == endDate.Month)) periode += " - " + endDate.ToString("MMMM yyyy", culture); // Labels bulan var labels = new List(); var cursor = new DateTime(startDate.Year, startDate.Month, 1); var last = new DateTime(endDate.Year, endDate.Month, 1); while (cursor <= last) { labels.Add(cursor.ToString("MMMM", culture)); cursor = cursor.AddMonths(1); } int count = labels.Count; // seed data int Seed(DateTime date) => date.Year * 100 + date.Month; var rand = new Random(Seed(startDate)); // Kepatuhan PJLP var kepatuhanCeklis = Enumerable.Range(0, count).Select(i => 85 + (i * 2)).ToArray(); var kepatuhanBelumCeklis = Enumerable.Range(0, count).Select(i => 15 - (i * 1)).ToArray(); // Rumah Memilah int baseKonsisten = 5; int baseTidak = 12; int target = 18; var rmKonsisten = new List(); var rmTidak = new List(); var rmTarget = new List(); for (int i = 0; i < count; i++) { rmKonsisten.Add(baseKonsisten + i); rmTidak.Add(baseTidak - (i / 2)); rmTarget.Add(target); } // SATPEL var satpel1Sudah = Enumerable.Range(0, count).Select(i => 100 + (i * 10)).ToArray(); var satpel1Belum = Enumerable.Range(0, count).Select(i => 25 - (i * 2)).ToArray(); var satpel2Sudah = Enumerable.Range(0, count).Select(i => 90 + (i * 12)).ToArray(); var satpel2Belum = Enumerable.Range(0, count).Select(i => 28 - (i * 2)).ToArray(); // Volume Sampah var mudah = Enumerable.Range(0, count).Select(i => 20000 + (i * 800)).ToArray(); var daur = Enumerable.Range(0, count).Select(i => 8000 + (i * 600)).ToArray(); var b3 = Enumerable.Range(0, count).Select(i => 3000 + (i * 50)).ToArray(); var residu = Enumerable.Range(0, count).Select(i => 8000 + (i * 200)).ToArray(); var data = new { periode, labels, kepatuhanPjlp = new { title = "Tingkat Kepatuhan PJLP", subtitle = "Tingkat Kepatuhan PJLP Pendamping BPS RW dalam Menjalankan Instruksi Kepala Dinas", location = "DKI Jakarta", labels, ceklis = kepatuhanCeklis, belumCeklis = kepatuhanBelumCeklis }, capaianRumah = new { title = "Capaian Rumah Memilah", subtitle = $"Capaian Rumah Memilah Periode {periode}", location = "DKI Jakarta", labels, rumahMemilahKonsisten = rmKonsisten, rumahMemilahTidakKonsisten = rmTidak, target = rmTarget }, validasiSatpel = new[] { new { validator = "SATPEL", title = "Status Validasi SATPEL", subtitle = $"Status Validasi SATPEL Periode {periode}", labels, sudah = satpel1Sudah, belum = satpel1Belum, description = labels.Select(l => $"Periode bulan {l} terdapat {rand.Next(8, 15)} aktifitas ceklis yang tidak tervalidasi" ).ToArray() }, new { validator = "SATPEL", title = "Status Validasi SATPEL", subtitle = $"Status Validasi SATPEL Periode {periode}", labels, sudah = satpel2Sudah, belum = satpel2Belum, description = labels.Select(l => $"Periode bulan {l} terdapat {rand.Next(8, 15)} aktifitas ceklis yang tidak tervalidasi" ).ToArray() } }, volumeSampah = new { title = "Volume Sampah", subtitle = $"Volume Sampah Periode {periode}", labels, mudahTerurai = mudah, materialDaur = daur, b3, residu } }; return Json(data); } } }