265 lines
10 KiB
C#
265 lines
10 KiB
C#
using Microsoft.AspNetCore.Mvc;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
|
|
namespace BpsRwApp.Controllers
|
|
{
|
|
public class LaporanCapaianWilayahController : AppControllerBase
|
|
{
|
|
public IActionResult Index()
|
|
{
|
|
return View();
|
|
}
|
|
|
|
[HttpGet]
|
|
public IActionResult GetData(string bulanAwal, string bulanAkhir, string wilayah)
|
|
{
|
|
try
|
|
{
|
|
// Default date range
|
|
DateTime startDate = DateTime.Now.AddMonths(-2);
|
|
DateTime endDate = DateTime.Now;
|
|
|
|
if (!string.IsNullOrEmpty(bulanAwal))
|
|
{
|
|
if (!DateTime.TryParse(bulanAwal + "-01", out startDate))
|
|
{
|
|
startDate = DateTime.Now.AddMonths(-2);
|
|
}
|
|
}
|
|
|
|
if (!string.IsNullOrEmpty(bulanAkhir))
|
|
{
|
|
if (!DateTime.TryParse(bulanAkhir + "-01", out endDate))
|
|
{
|
|
endDate = DateTime.Now;
|
|
}
|
|
}
|
|
|
|
var periode = $"{startDate.ToString("MMMM", new System.Globalization.CultureInfo("id-ID"))} - {endDate.ToString("MMMM yyyy", new System.Globalization.CultureInfo("id-ID"))}";
|
|
|
|
// Labels bulan
|
|
var monthLabels = new List<string>();
|
|
var currentMonth = startDate;
|
|
while (currentMonth <= endDate)
|
|
{
|
|
monthLabels.Add(currentMonth.ToString("MMMM yyyy", new System.Globalization.CultureInfo("id-ID")));
|
|
currentMonth = currentMonth.AddMonths(1);
|
|
}
|
|
|
|
string locationText;
|
|
if (!string.IsNullOrEmpty(wilayah))
|
|
{
|
|
locationText = $"Kota Administrasi {wilayah}";
|
|
}
|
|
else
|
|
{
|
|
locationText = "DKI Jakarta";
|
|
}
|
|
|
|
var random = new Random();
|
|
|
|
var data = new
|
|
{
|
|
bulanAwal = startDate.ToString("yyyy-MM"),
|
|
bulanAkhir = endDate.ToString("yyyy-MM"),
|
|
periode,
|
|
countMonthLabels = monthLabels.Count,
|
|
wilayah = wilayah ?? "",
|
|
locationText,
|
|
|
|
// Tingkat Kepatuhan PJLP
|
|
tingkatKepatuhanPjlp = monthLabels.Select(m => new
|
|
{
|
|
bulan = m,
|
|
ceklis = random.Next(40, 80),
|
|
belumCeklis = random.Next(10, 30)
|
|
}).Select(x => new
|
|
{
|
|
x.bulan,
|
|
x.ceklis,
|
|
x.belumCeklis,
|
|
total = x.ceklis + x.belumCeklis,
|
|
}).ToList(),
|
|
|
|
// Status Validasi SATPEL
|
|
statusValidasiSatpel = monthLabels.Select(m => new
|
|
{
|
|
bulan = m,
|
|
sudah = random.Next(300, 600),
|
|
belum = random.Next(0, 150)
|
|
}).Select(x => new
|
|
{
|
|
x.bulan,
|
|
x.sudah,
|
|
x.belum,
|
|
total = x.sudah + x.belum,
|
|
}).ToList(),
|
|
|
|
// Status Validasi SUDIN
|
|
statusValidasiSudin = monthLabels.Select(m => new
|
|
{
|
|
bulan = m,
|
|
sudah = random.Next(300, 600),
|
|
belum = random.Next(0, 100)
|
|
}).Select(x => new
|
|
{
|
|
x.bulan,
|
|
x.sudah,
|
|
x.belum,
|
|
total = x.sudah + x.belum,
|
|
}).ToList(),
|
|
|
|
// Capaian Rumah Memilah
|
|
capaianRumahMemilah = monthLabels.Select(m => new
|
|
{
|
|
bulan = m,
|
|
konsisten = random.Next(2000, 5000),
|
|
tidakKonsisten = random.Next(500, 1500),
|
|
}).Select(x => new
|
|
{
|
|
x.bulan,
|
|
x.konsisten,
|
|
x.tidakKonsisten,
|
|
total = x.konsisten + x.tidakKonsisten,
|
|
}).ToList(),
|
|
|
|
// Volume Timbulan Sampah
|
|
volumeTimbulanSampah = monthLabels.Select(m => new
|
|
{
|
|
bulan = m,
|
|
terurai = Math.Round(random.NextDouble() * 0.3 + 0.1, 2),
|
|
tidakTerurai = Math.Round(random.NextDouble() * 0.2 + 0.05, 2),
|
|
}).Select(x => new
|
|
{
|
|
x.bulan,
|
|
x.terurai,
|
|
x.tidakTerurai,
|
|
total = Math.Round(x.terurai + x.tidakTerurai, 2)
|
|
}).ToList(),
|
|
|
|
// Realisasi Terhadap Target
|
|
realisasiTarget = monthLabels.Select(m => new
|
|
{
|
|
bulan = m,
|
|
rmKonsisten = random.Next(3000, 6000),
|
|
rmTidakKonsisten = random.Next(-4000, -1000),
|
|
target = random.Next(6000, 8000)
|
|
}).Select(x => new
|
|
{
|
|
x.bulan,
|
|
x.rmKonsisten,
|
|
x.rmTidakKonsisten,
|
|
x.target,
|
|
}).ToList(),
|
|
|
|
// volume sampah
|
|
volumeSampahInfo = new
|
|
{
|
|
jumlahRumah = random.Next(5000, 6000),
|
|
periode,
|
|
totalVolume = Math.Round(random.NextDouble() * 10000 + 20000, 2).ToString("N2")
|
|
}
|
|
};
|
|
|
|
return Json(data);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return StatusCode(500, new { error = ex.Message, stackTrace = ex.StackTrace });
|
|
}
|
|
}
|
|
|
|
[HttpGet]
|
|
public IActionResult GetDataKepatuhanPeriode(string bulan, string wilayah)
|
|
{
|
|
try
|
|
{
|
|
// default bulan
|
|
DateTime selectedDate = DateTime.Now;
|
|
|
|
if (!string.IsNullOrEmpty(bulan))
|
|
{
|
|
if (!DateTime.TryParse(bulan + "-01", out selectedDate))
|
|
{
|
|
selectedDate = DateTime.Now;
|
|
}
|
|
}
|
|
|
|
var periode = selectedDate.ToString("MMMM yyyy", new System.Globalization.CultureInfo("id-ID"));
|
|
|
|
// Data kecamatan
|
|
var kecamatanData = new Dictionary<string, string[]>
|
|
{
|
|
{ "Jakarta Pusat", new[] { "Gambir", "Tanah Abang", "Menteng", "Senen", "Cempaka Putih", "Johar Baru", "Kemayoran", "Sawah Besar" } },
|
|
{ "Jakarta Utara", new[] { "Penjaringan", "Pademangan", "Tanjung Priok", "Koja", "Kelapa Gading", "Cilincing" } },
|
|
{ "Jakarta Barat", new[] { "Cengkareng", "Grogol Petamburan", "Taman Sari", "Tambora", "Kebon Jeruk", "Kalideres", "Palmerah", "Kembangan" } },
|
|
{ "Jakarta Selatan", new[] { "Kebayoran Baru", "Kebayoran Lama", "Pesanggrahan", "Cilandak", "Pasar Minggu", "Jagakarsa", "Mampang Prapatan", "Pancoran", "Tebet", "Setiabudi" } },
|
|
{ "Jakarta Timur", new[] { "Matraman", "Pulo Gadung", "Jatinegara", "Kramat Jati", "Pasar Rebo", "Cakung", "Duren Sawit", "Makasar", "Ciracas", "Cipayung" } },
|
|
{ "Kepulauan Seribu", new[] { "Kepulauan Seribu Utara", "Kepulauan Seribu Selatan" } }
|
|
};
|
|
|
|
string[] kecamatanLabels;
|
|
string locationText;
|
|
|
|
if (!string.IsNullOrEmpty(wilayah) && kecamatanData.ContainsKey(wilayah))
|
|
{
|
|
kecamatanLabels = kecamatanData[wilayah];
|
|
locationText = $"Kota Administrasi {wilayah}";
|
|
}
|
|
else
|
|
{
|
|
kecamatanLabels = kecamatanData["Jakarta Barat"];
|
|
locationText = "DKI Jakarta";
|
|
}
|
|
|
|
var random = new Random();
|
|
|
|
// Tingkat Kepatuhan PJLP Periode
|
|
var tingkatKepatuhanPeriode = kecamatanLabels.Select(w => new
|
|
{
|
|
wilayah = w,
|
|
ceklis = random.Next(40, 60),
|
|
belumCeklis = random.Next(40, 60),
|
|
total = random.Next(90, 100)
|
|
}).ToList();
|
|
|
|
// Total Pjlp
|
|
var totalPjlp = tingkatKepatuhanPeriode.Sum(x => x.total);
|
|
var totalSudahCeklis = tingkatKepatuhanPeriode.Sum(x => x.ceklis);
|
|
var totalBelumCeklis = tingkatKepatuhanPeriode.Sum(x => x.belumCeklis);
|
|
var persentaseSudah = totalPjlp > 0 ? Math.Round((double)totalSudahCeklis / totalPjlp * 100, 0) : 0;
|
|
var persentaseBelum = totalPjlp > 0 ? Math.Round((double)totalBelumCeklis / totalPjlp * 100, 0) : 0;
|
|
|
|
var data = new
|
|
{
|
|
bulan = selectedDate.ToString("yyyy-MM"),
|
|
periode,
|
|
wilayah = wilayah ?? "",
|
|
locationText,
|
|
|
|
// Tingkat Kepatuhan PJLP Periode
|
|
tingkatKepatuhanPeriode,
|
|
|
|
// Data cards PJLP
|
|
pjlpStats = new
|
|
{
|
|
total = totalPjlp,
|
|
sudahCeklis = totalSudahCeklis,
|
|
belumCeklis = totalBelumCeklis,
|
|
persentaseSudah = (int)persentaseSudah,
|
|
persentaseBelum = (int)persentaseBelum
|
|
}
|
|
};
|
|
|
|
return Json(data);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return StatusCode(500, new { error = ex.Message, stackTrace = ex.StackTrace });
|
|
}
|
|
}
|
|
}
|
|
}
|