bps-rw/Controllers/ProfilRwController.cs

340 lines
13 KiB
C#

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<AlatPengumpulSampahViewModel> 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 "<div class='flex gap-2 '>" +
$"<a href='{detailUrl}' class='btn btn-xs bg-white btn-detail rounded-full'>Detail</a>" +
$"<a href='{editUrl}' class='btn btn-xs bg-white btn-edit rounded-full'>Edit</a>" +
$"<button type='button' class='btn btn-xs btn-error btn-outline btn-delete rounded-full' data-id='{id}'>Delete</button>" +
"</div>";
}
string CreateAlatBadge(string label, int value)
{
return $"<div class='badge m-1 badge-primary rounded-full'>{label} = {value}</div>";
}
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 $"<div class='badge badge-soft m-1 badge-primary rounded-full'>{hari}</div>";
}
string BuildJadwalBadges(IEnumerable<string> 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 $"<span class=\"badge badge-{status.Item2} badge-soft badge-sm rounded-full font-medium\">{status.Item1}</span>";
}
private static string BuildLokasiActionButtons(int id) => BuildCrudActionButtons(id);
private static string BuildStatusPill(string label, string tone) =>
$"<div class=\"badge badge-{tone} badge-soft rounded-full\">{label}</div>";
private static string BuildCrudActionButtons(int id) =>
"<div class=\"flex gap-2 \">" +
$"<button type=\"button\" class=\"btn btn-xs bg-white btn-detail rounded-full\" data-id=\"{id}\">Detail</button>" +
$"<button type=\"button\" class=\"btn btn-xs bg-white btn-edit rounded-full\" data-id=\"{id}\">Edit</button>" +
$"<button type=\"button\" class=\"btn btn-xs btn-error btn-outline btn-delete rounded-full\" data-id=\"{id}\">Delete</button>" +
"</div>";
[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();
}
}
}