340 lines
13 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|