using BpsRwApp.Models.ProfilRw; using Microsoft.AspNetCore.Mvc; namespace BpsRwApp.Controllers { public class ProfilRwController : AppControllerBase { private static readonly string[][] JadwalCombinations = { new[] { "Senin", "Rabu", "Jumat" }, new[] { "Selasa", "Kamis" }, new[] { "Sabtu", "Minggu" }, new[] { "Senin", "Selasa", "Kamis" }, new[] { "Rabu", "Jumat" } }; private static readonly string[] JenisPetugasOptions = { "Petugas Harian Lepas", "DLH", "Swadaya Warga", "Kader Lingkungan", "Relawan" }; private static readonly string[] TpsOptions = { "TPS Jakarta Timur", "TPS Cililitan", "TPS Duren Sawit", "TPS Kampung Melayu", "TPS Pondok Bambu", "TPS Pulogadung" }; private static readonly List SampleAlatPengumpul = Enumerable.Range(1, 100) .Select(index => { var wilayah = ControllerSampleData.WilayahSeeds[index % ControllerSampleData.WilayahSeeds.Length]; var namaPetugas = ControllerSampleData.PersonNames[index % ControllerSampleData.PersonNames.Length]; var jadwal = JadwalCombinations[index % JadwalCombinations.Length]; return new AlatPengumpulSampahViewModel { Id = index, Kelurahan = $"Kelurahan {wilayah.Kelurahan}", Rw = ((index % 15) + 1).ToString("D3"), Rt = ((index % 20) + 1).ToString("D3"), GerobakDorong = 1 + (index % 4), GerobakMotor = 1 + (index % 3), MobilPickup = index % 2, Truk = index % 3 == 0 ? 1 : 0, Dustbin = 4 + (index % 5), Container = 1 + (index % 2), Landasan = 1 + (index % 3), JenisPetugas = JenisPetugasOptions[index % JenisPetugasOptions.Length], NamaPetugas = namaPetugas, Jadwal = jadwal.ToList(), TpsTujuan = TpsOptions[index % TpsOptions.Length] }; }) .ToList(); public IActionResult Index() { return View(); } [HttpGet] public IActionResult TableLokasi() { var data = Enumerable.Range(0, 100) .Select(index => { var wilayah = ControllerSampleData.WilayahSeeds[index % ControllerSampleData.WilayahSeeds.Length]; var street = ControllerSampleData.StreetNames[index % ControllerSampleData.StreetNames.Length]; var pemilik = ControllerSampleData.PersonNames[(index + 3) % ControllerSampleData.PersonNames.Length]; var luas = 300 + (index * 11 % 900); var statusLahan = (index % 3) switch { 0 => "Inventaris", 1 => "Sewa", _ => "Milik Warga" }; return new { id = index + 1, usulan = $"Lokasi {index + 1:000}", alamat = ControllerSampleData.FormatAlamat(wilayah, street, 5 + index), statusLahan, pemilikLahan = pemilik, luasLahan = $"{luas} m²", statusUsulan = BuildLokasiStatusBadge(index), aksi = BuildLokasiActionButtons(index + 1) }; }) .ToArray(); return Json(new { data }); } [HttpGet] public IActionResult TableSuratUsulan() { var namaSuratTemplates = new[] { "Surat Permohonan Perbaikan Jalan Lingkungan", "Surat Rekomendasi Pengajuan Kredit UMKM", "Surat Pernyataan Persetujuan Pembangunan Pos Kamling", "Surat Keterangan Tidak Mampu untuk Berobat", "Laporan Keuangan RW Triwulan", "Surat Keputusan Jadwal Ronda Malam", "Surat Pemberitahuan Kerja Bakti Rutin", "Surat Edaran Pembayaran Iuran Sampah", "Surat Pengantar Pembuatan KTP", "Surat Undangan Pertemuan PKK" }; var fileTemplates = new[] { "Surat Pengantar Proposal", "Surat Undangan Rapat Warga", "Surat Pemberitahuan Gotong Royong", "Surat Keputusan Ketua RW", "Surat Edaran Kebersihan", "Surat Rekomendasi Usaha", "Laporan Kegiatan RW", "Surat Keterangan Domisili", "Surat Permohonan Bantuan Dana", "Surat Pernyataan Kesanggupan" }; var startDate = new DateTime(2023, 1, 1); var data = Enumerable.Range(0, 100) .Select(index => { var namaSurat = namaSuratTemplates[index % namaSuratTemplates.Length]; var fileUpload = fileTemplates[(index + 3) % fileTemplates.Length]; var status = (index % 5) switch { 0 => BuildStatusPill("Menunggu", "warning"), 1 => BuildStatusPill("Ditinjau", "info"), _ => BuildStatusPill("Aktif", "success") }; return new { id = index + 1, nama_surat = namaSurat, tanggal_surat = ControllerSampleData.FormatTanggal(startDate.AddDays(index * 2)), file_upload = fileUpload, status, aksi = BuildCrudActionButtons(index + 1) }; }) .ToArray(); return Json(new { data }); } [HttpGet] public IActionResult TablePengadaanWadah() { var data = Enumerable.Range(0, 100) .Select(index => { var jumlahKk = 40 + (index * 5 % 200); var totalWadah = 4 + (index % 12); var status = index % 7 == 0 ? BuildStatusPill("Menunggu", "warning") : BuildStatusPill("Aktif", "success"); return new { rt = ((index % 25) + 1).ToString("D3"), jumlah_kepala_keluarga = jumlahKk.ToString("D2"), total_wadah_unit = totalWadah.ToString("D2"), status }; }) .ToArray(); return Json(new { data }); } [HttpGet] public IActionResult TableKebutuhanSarpras() { var startDate = new DateTime(2023, 4, 1); var data = Enumerable.Range(0, 100) .Select(index => { var jumlahUnit = 480 + (index * 7 % 120); return new { rt = ((index % 40) + 1).ToString("D3"), tanggal = ControllerSampleData.FormatTanggal(startDate.AddDays(index)), jumlah_unit = jumlahUnit.ToString(), aksi = BuildCrudActionButtons(index + 1) }; }) .ToArray(); return Json(new { data }); } [HttpGet] public IActionResult CreateKebutuhanSarpras() { return View(); } [HttpGet] public IActionResult TableAlatPengumpulSampah() { string BuildActionButtons(int id) { var detailUrl = Url.Action("DetailAlatPengumpulSampah", "ProfilRw", new { id }) ?? "#"; var editUrl = Url.Action("EditAlatPengumpulSampah", "ProfilRw", new { id }) ?? "#"; return "
" + $"Detail" + $"Edit" + $"" + "
"; } string CreateAlatBadge(string label, int value) { return $"
{label} = {value}
"; } string BuildAlatPengumpulBadges(int gerobakDorong, int gerobakMotor, int mobilPickup, int truk, int dustbin, int container, int landasan) { return string.Concat( CreateAlatBadge("Gerobak Dorong", gerobakDorong), CreateAlatBadge("Gerobak Motor", gerobakMotor), CreateAlatBadge("Mobil Pickup", mobilPickup), CreateAlatBadge("Truk", truk), CreateAlatBadge("Dustbin", dustbin), CreateAlatBadge("Container", container), CreateAlatBadge("Landasan", landasan) ); } string CreateJadwalBadge(string hari) { return $"
{hari}
"; } string BuildJadwalBadges(IEnumerable jadwal) { return string.Concat(jadwal.Select(CreateJadwalBadge)); } var data = SampleAlatPengumpul.Select(item => new { id = item.Id, wilayah = $"{item.Kelurahan} - RW {item.Rw} / RT {item.Rt}", kelurahan = item.Kelurahan, rw = item.Rw, rt = item.Rt, gerobakDorong = item.GerobakDorong, gerobakMotor = item.GerobakMotor, mobilPickup = item.MobilPickup, truk = item.Truk, dustbin = item.Dustbin, container = item.Container, landasan = item.Landasan, jenisPetugas = item.JenisPetugas, jadwalList = item.Jadwal, alat_pengumpul = BuildAlatPengumpulBadges(item.GerobakDorong, item.GerobakMotor, item.MobilPickup, item.Truk, item.Dustbin, item.Container, item.Landasan), petugas = item.NamaPetugas, jadwal = BuildJadwalBadges(item.Jadwal), tps_tujuan = item.TpsTujuan, aksi = BuildActionButtons(item.Id) }).ToList(); return Json(new { data }); } private static string BuildLokasiStatusBadge(int index) { var statuses = new[] { ("Aktif", "success"), ("Dalam Review", "warning"), ("Tidak Aktif", "error") }; var status = statuses[index % statuses.Length]; return $"{status.Item1}"; } private static string BuildLokasiActionButtons(int id) => BuildCrudActionButtons(id); private static string BuildStatusPill(string label, string tone) => $"
{label}
"; private static string BuildCrudActionButtons(int id) => "
" + $"" + $"" + $"" + "
"; [HttpGet] public IActionResult DetailAlatPengumpulSampah(int id) { var data = SampleAlatPengumpul.FirstOrDefault(x => x.Id == id); if (data == null) { return NotFound(); } return View(data); } [HttpGet] public IActionResult EditAlatPengumpulSampah(int id) { var data = SampleAlatPengumpul.FirstOrDefault(x => x.Id == id); if (data == null) { return NotFound(); } return View(data); } [HttpGet] public IActionResult CreateAlatPengumpulSampah() { return View(); } } }