bps-rw/Controllers/LaporanCapaianBulananContro...

154 lines
5.6 KiB
C#

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<string>();
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<int>();
var rmTidak = new List<int>();
var rmTarget = new List<int>();
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);
}
}
}