refactor: lokasi & reduksi sampah

main
Yuri Dimas 2025-12-24 13:20:54 +07:00
parent f3b29fb925
commit f4e9664dfe
No known key found for this signature in database
GPG Key ID: 9FD7E44BC294C68C
14 changed files with 1123 additions and 1506 deletions

View File

@ -1,254 +0,0 @@
using Microsoft.AspNetCore.Mvc;
namespace BankSampahApp.Controllers.Main
{
[Route("Main/[controller]/[action]")]
public class ReduksiSampahDinasController : Controller
{
public IActionResult Index()
{
return View("~/Views/Main/ReduksiSampahDinas/Index.cshtml");
}
[HttpGet]
public IActionResult Table()
{
var data = new[] {
new {
id = 1,
periode_bulan = "Jan 2025",
nama_lokasi = "Jakarta Pusat",
alamat = @"
<div class=""flex flex-col gap-1"">
<span class=""text-sm font-semibold text-gray-900"">Tanah Abang</span>
<div class=""flex items-center gap-1 text-xs text-gray-500"">
<span>Cideng</span>
<span>RT 002</span>
<span>RW 001</span>
</div>
</div>",
jenis_lokasi = "Maggot",
berat_maggot = 1,
berat_komposting = 5,
berat_bank_sampah = 6,
aksi = @"<div class=""flex gap-2"">
<a href=""#"" class=""btn btn-circle btn-warning text-white btn-sm btn-edit""><i class=""ph ph-note-pencil""></i></a>
<a href=""#"" class=""btn btn-circle btn-success text-white btn-sm btn-preview""><i class=""ph ph-eye""></i></a>
<a href=""#"" class=""btn btn-circle bg-blue-500 text-white btn-sm btn-history""><i class=""ph ph-clock-counter-clockwise""></i></a>
</div>",
},
new {
id = 2,
periode_bulan = "Feb 2025",
nama_lokasi = "Jakarta Barat",
alamat = @"
<div class=""flex flex-col gap-1"">
<span class=""text-sm font-semibold text-gray-900"">Palmerah</span>
<div class=""flex items-center gap-1 text-xs text-gray-500"">
<span>Kemanggisan</span>
<span>RT 003</span>
<span>RW 004</span>
</div>
</div>",
jenis_lokasi = "Organik",
berat_maggot = 2,
berat_komposting = 4,
berat_bank_sampah = 3,
aksi = @"<div class=""flex gap-2"">
<a href=""#"" class=""btn btn-circle btn-warning text-white btn-sm btn-edit""><i class=""ph ph-note-pencil""></i></a>
<a href=""#"" class=""btn btn-circle btn-success text-white btn-sm btn-preview""><i class=""ph ph-eye""></i></a>
<a href=""#"" class=""btn btn-circle bg-blue-500 text-white btn-sm btn-history""><i class=""ph ph-clock-counter-clockwise""></i></a>
</div>",
},
new {
id = 3,
periode_bulan = "Mar 2025",
nama_lokasi = "Jakarta Selatan",
alamat = @"
<div class=""flex flex-col gap-1"">
<span class=""text-sm font-semibold text-gray-900"">Tebet</span>
<div class=""flex items-center gap-1 text-xs text-gray-500"">
<span>Manggarai</span>
<span>RT 001</span>
<span>RW 002</span>
</div>
</div>",
jenis_lokasi = "Maggot",
berat_maggot = 3,
berat_komposting = 6,
berat_bank_sampah = 2,
aksi = @"<div class=""flex gap-2"">
<a href=""#"" class=""btn btn-circle btn-warning text-white btn-sm btn-edit""><i class=""ph ph-note-pencil""></i></a>
<a href=""#"" class=""btn btn-circle btn-success text-white btn-sm btn-preview""><i class=""ph ph-eye""></i></a>
<a href=""#"" class=""btn btn-circle bg-blue-500 text-white btn-sm btn-history""><i class=""ph ph-clock-counter-clockwise""></i></a>
</div>",
},
new {
id = 4,
periode_bulan = "Apr 2025",
nama_lokasi = "Jakarta Timur",
alamat = @"
<div class=""flex flex-col gap-1"">
<span class=""text-sm font-semibold text-gray-900"">Cakung</span>
<div class=""flex items-center gap-1 text-xs text-gray-500"">
<span>Jatinegara</span>
<span>RT 004</span>
<span>RW 006</span>
</div>
</div>",
jenis_lokasi = "Anorganik",
berat_maggot = 1,
berat_komposting = 3,
berat_bank_sampah = 7,
aksi = @"<div class=""flex gap-2"">
<a href=""#"" class=""btn btn-circle btn-warning text-white btn-sm btn-edit""><i class=""ph ph-note-pencil""></i></a>
<a href=""#"" class=""btn btn-circle btn-success text-white btn-sm btn-preview""><i class=""ph ph-eye""></i></a>
<a href=""#"" class=""btn btn-circle bg-blue-500 text-white btn-sm btn-history""><i class=""ph ph-clock-counter-clockwise""></i></a>
</div>",
},
new {
id = 5,
periode_bulan = "Mei 2025",
nama_lokasi = "Jakarta Utara",
alamat = @"
<div class=""flex flex-col gap-1"">
<span class=""text-sm font-semibold text-gray-900"">Koja</span>
<div class=""flex items-center gap-1 text-xs text-gray-500"">
<span>Lagoa</span>
<span>RT 005</span>
<span>RW 003</span>
</div>
</div>",
jenis_lokasi = "Maggot",
berat_maggot = 4,
berat_komposting = 5,
berat_bank_sampah = 1,
aksi = @"<div class=""flex gap-2"">
<a href=""#"" class=""btn btn-circle btn-warning text-white btn-sm btn-edit""><i class=""ph ph-note-pencil""></i></a>
<a href=""#"" class=""btn btn-circle btn-success text-white btn-sm btn-preview""><i class=""ph ph-eye""></i></a>
<a href=""#"" class=""btn btn-circle bg-blue-500 text-white btn-sm btn-history""><i class=""ph ph-clock-counter-clockwise""></i></a>
</div>",
},
new {
id = 6,
periode_bulan = "Jun 2025",
nama_lokasi = "Depok",
alamat = @"
<div class=""flex flex-col gap-1"">
<span class=""text-sm font-semibold text-gray-900"">Beji</span>
<div class=""flex items-center gap-1 text-xs text-gray-500"">
<span>Kukusan</span>
<span>RT 002</span>
<span>RW 007</span>
</div>
</div>",
jenis_lokasi = "Organik",
berat_maggot = 2,
berat_komposting = 6,
berat_bank_sampah = 4,
aksi = @"<div class=""flex gap-2"">
<a href=""#"" class=""btn btn-circle btn-warning text-white btn-sm btn-edit""><i class=""ph ph-note-pencil""></i></a>
<a href=""#"" class=""btn btn-circle btn-success text-white btn-sm btn-preview""><i class=""ph ph-eye""></i></a>
<a href=""#"" class=""btn btn-circle bg-blue-500 text-white btn-sm btn-history""><i class=""ph ph-clock-counter-clockwise""></i></a>
</div>",
},
new {
id = 7,
periode_bulan = "Jul 2025",
nama_lokasi = "Bekasi",
alamat = @"
<div class=""flex flex-col gap-1"">
<span class=""text-sm font-semibold text-gray-900"">Pondok Gede</span>
<div class=""flex items-center gap-1 text-xs text-gray-500"">
<span>Jatibening</span>
<span>RT 006</span>
<span>RW 002</span>
</div>
</div>",
jenis_lokasi = "Maggot",
berat_maggot = 5,
berat_komposting = 3,
berat_bank_sampah = 2,
aksi = @"<div class=""flex gap-2"">
<a href=""#"" class=""btn btn-circle btn-warning text-white btn-sm btn-edit""><i class=""ph ph-note-pencil""></i></a>
<a href=""#"" class=""btn btn-circle btn-success text-white btn-sm btn-preview""><i class=""ph ph-eye""></i></a>
<a href=""#"" class=""btn btn-circle bg-blue-500 text-white btn-sm btn-history""><i class=""ph ph-clock-counter-clockwise""></i></a>
</div>",
},
new {
id = 8,
periode_bulan = "Agu 2025",
nama_lokasi = "Tangerang",
alamat = @"
<div class=""flex flex-col gap-1"">
<span class=""text-sm font-semibold text-gray-900"">Ciledug</span>
<div class=""flex items-center gap-1 text-xs text-gray-500"">
<span>Paninggilan</span>
<span>RT 001</span>
<span>RW 005</span>
</div>
</div>",
jenis_lokasi = "Anorganik",
berat_maggot = 1,
berat_komposting = 2,
berat_bank_sampah = 6,
aksi = @"<div class=""flex gap-2"">
<a href=""#"" class=""btn btn-circle btn-warning text-white btn-sm btn-edit""><i class=""ph ph-note-pencil""></i></a>
<a href=""#"" class=""btn btn-circle btn-success text-white btn-sm btn-preview""><i class=""ph ph-eye""></i></a>
<a href=""#"" class=""btn btn-circle bg-blue-500 text-white btn-sm btn-history""><i class=""ph ph-clock-counter-clockwise""></i></a>
</div>",
},
new {
id = 9,
periode_bulan = "Sep 2025",
nama_lokasi = "Bogor",
alamat = @"
<div class=""flex flex-col gap-1"">
<span class=""text-sm font-semibold text-gray-900"">Cibinong</span>
<div class=""flex items-center gap-1 text-xs text-gray-500"">
<span>Pabuaran</span>
<span>RT 003</span>
<span>RW 004</span>
</div>
</div>",
jenis_lokasi = "Organik",
berat_maggot = 2,
berat_komposting = 5,
berat_bank_sampah = 3,
aksi = @"<div class=""flex gap-2"">
<a href=""#"" class=""btn btn-circle btn-warning text-white btn-sm btn-edit""><i class=""ph ph-note-pencil""></i></a>
<a href=""#"" class=""btn btn-circle btn-success text-white btn-sm btn-preview""><i class=""ph ph-eye""></i></a>
<a href=""#"" class=""btn btn-circle bg-blue-500 text-white btn-sm btn-history""><i class=""ph ph-clock-counter-clockwise""></i></a>
</div>",
},
new {
id = 10,
periode_bulan = "Okt 2025",
nama_lokasi = "Jakarta Selatan",
alamat = @"
<div class=""flex flex-col gap-1"">
<span class=""text-sm font-semibold text-gray-900"">Pasar Minggu</span>
<div class=""flex items-center gap-1 text-xs text-gray-500"">
<span>Pejaten</span>
<span>RT 007</span>
<span>RW 008</span>
</div>
</div>",
jenis_lokasi = "Maggot",
berat_maggot = 6,
berat_komposting = 4,
berat_bank_sampah = 2,
aksi = @"<div class=""flex gap-2"">
<a href=""#"" class=""btn btn-circle btn-warning text-white btn-sm btn-edit""><i class=""ph ph-note-pencil""></i></a>
<a href=""#"" class=""btn btn-circle btn-success text-white btn-sm btn-preview""><i class=""ph ph-eye""></i></a>
<a href=""#"" class=""btn btn-circle bg-blue-500 text-white btn-sm btn-history""><i class=""ph ph-clock-counter-clockwise""></i></a>
</div>",
}
};
return Json(new { data = data });
}
}
}

View File

@ -1,234 +0,0 @@
using Microsoft.AspNetCore.Mvc;
namespace BankSampahApp.Controllers.Main
{
[Route("Main/[controller]/[action]")]
public class ReduksiSampahSatpelController : Controller
{
public IActionResult Index()
{
return View("~/Views/Main/ReduksiSampahSatpel/Index.cshtml");
}
[HttpGet]
public IActionResult Table()
{
var data = new[]
{
new {
id=1,
nama_lokasi = "Jakarta Pusat",
alamat = @"
<div class=""flex flex-col gap-1"">
<span class=""text-sm font-semibold text-gray-900"">Tanah Abang</span>
<div class=""flex items-center gap-1 text-xs text-gray-500"">
<span class=""flex items-center gap-0"">Cideng</span>
<span>RT 002</span>
<span>RW 001</span>
</div>
</div>",
jenis_lokasi = "Maggot",
berat = 1,
gambar = @"<a href=""#"" class=""btn bg-gray-500 text-white rounded-lg""><i class=""ph ph-file-text""></i></a>",
aksi = "<div class=\"flex gap-2\">" +
"<a href=\"#\" class=\"btn btn-circle btn-warning text-white btn-sm btn-edit\"><i class=\"ph ph-note-pencil\"></i></a>" +
"<a href=\"#\" class=\"btn btn-circle btn-error delete text-white btn-sm btn-delete\"><i class=\"ph ph-trash\"></i></a>" +
"<a href=\"#\" class=\"btn btn-circle btn-success text-white btn-sm btn-preview\"><i class=\"ph ph-eye\"></i></a>" +
"</div>",
},
new {
id=2,
nama_lokasi = "Jakarta Selatan",
alamat = @"
<div class=""flex flex-col gap-1"">
<span class=""text-sm font-semibold text-gray-900"">Kebayoran Baru</span>
<div class=""flex items-center gap-1 text-xs text-gray-500"">
<span>Gandaria Utara</span>
<span>RT 005</span>
<span>RW 003</span>
</div>
</div>",
jenis_lokasi = "Komposting",
berat = 2,
gambar = @"<a href=""#"" class=""btn bg-gray-500 text-white rounded-lg""><i class=""ph ph-file-text""></i></a>",
aksi = "<div class=\"flex gap-2\">" +
"<a href=\"#\" class=\"btn btn-circle btn-warning text-white btn-sm btn-edit\"><i class=\"ph ph-note-pencil\"></i></a>" +
"<a href=\"#\" class=\"btn btn-circle btn-error delete text-white btn-sm btn-delete\"><i class=\"ph ph-trash\"></i></a>" +
"<a href=\"#\" class=\"btn btn-circle btn-success text-white btn-sm btn-preview\"><i class=\"ph ph-eye\"></i></a>" +
"</div>",
},
new {
id=3,
nama_lokasi = "Jakarta Barat",
alamat = @"
<div class=""flex flex-col gap-1"">
<span class=""text-sm font-semibold text-gray-900"">Palmerah</span>
<div class=""flex items-center gap-1 text-xs text-gray-500"">
<span>Kemanggisan</span>
<span>RT 004</span>
<span>RW 002</span>
</div>
</div>",
jenis_lokasi = "Maggot",
berat = 3,
gambar = @"<a href=""#"" class=""btn bg-gray-500 text-white rounded-lg""><i class=""ph ph-file-text""></i></a>",
aksi = "<div class=\"flex gap-2\">" +
"<a href=\"#\" class=\"btn btn-circle btn-warning text-white btn-sm btn-edit\"><i class=\"ph ph-note-pencil\"></i></a>" +
"<a href=\"#\" class=\"btn btn-circle btn-error delete text-white btn-sm btn-delete\"><i class=\"ph ph-trash\"></i></a>" +
"<a href=\"#\" class=\"btn btn-circle btn-success text-white btn-sm btn-preview\"><i class=\"ph ph-eye\"></i></a>" +
"</div>",
},
new {
id=4,
nama_lokasi = "Jakarta Timur",
alamat = @"
<div class=""flex flex-col gap-1"">
<span class=""text-sm font-semibold text-gray-900"">Cakung</span>
<div class=""flex items-center gap-1 text-xs text-gray-500"">
<span>Pulo Gebang</span>
<span>RT 007</span>
<span>RW 005</span>
</div>
</div>",
jenis_lokasi = "Komposting",
berat = 4,
gambar = @"<a href=""#"" class=""btn bg-gray-500 text-white rounded-lg""><i class=""ph ph-file-text""></i></a>",
aksi = "<div class=\"flex gap-2\">" +
"<a href=\"#\" class=\"btn btn-circle btn-warning text-white btn-sm btn-edit\"><i class=\"ph ph-note-pencil\"></i></a>" +
"<a href=\"#\" class=\"btn btn-circle btn-error delete text-white btn-sm btn-delete\"><i class=\"ph ph-trash\"></i></a>" +
"<a href=\"#\" class=\"btn btn-circle btn-success text-white btn-sm btn-preview\"><i class=\"ph ph-eye\"></i></a>" +
"</div>",
},
new {
id=5,
nama_lokasi = "Jakarta Utara",
alamat = @"
<div class=""flex flex-col gap-1"">
<span class=""text-sm font-semibold text-gray-900"">Tanjung Priok</span>
<div class=""flex items-center gap-1 text-xs text-gray-500"">
<span>Sunter Jaya</span>
<span>RT 003</span>
<span>RW 001</span>
</div>
</div>",
jenis_lokasi = "Maggot",
berat = 2,
gambar = @"<a href=""#"" class=""btn bg-gray-500 text-white rounded-lg""><i class=""ph ph-file-text""></i></a>",
aksi = "<div class=\"flex gap-2\">" +
"<a href=\"#\" class=\"btn btn-circle btn-warning text-white btn-sm btn-edit\"><i class=\"ph ph-note-pencil\"></i></a>" +
"<a href=\"#\" class=\"btn btn-circle btn-error delete text-white btn-sm btn-delete\"><i class=\"ph ph-trash\"></i></a>" +
"<a href=\"#\" class=\"btn btn-circle btn-success text-white btn-sm btn-preview\"><i class=\"ph ph-eye\"></i></a>" +
"</div>",
},
new {
id=6,
nama_lokasi = "Depok",
alamat = @"
<div class=""flex flex-col gap-1"">
<span class=""text-sm font-semibold text-gray-900"">Beji</span>
<div class=""flex items-center gap-1 text-xs text-gray-500"">
<span>Beji Timur</span>
<span>RT 006</span>
<span>RW 002</span>
</div>
</div>",
jenis_lokasi = "Komposting",
berat = 3,
gambar = @"<a href=""#"" class=""btn bg-gray-500 text-white rounded-lg""><i class=""ph ph-file-text""></i></a>",
aksi = "<div class=\"flex gap-2\">" +
"<a href=\"#\" class=\"btn btn-circle btn-warning text-white btn-sm btn-edit\"><i class=\"ph ph-note-pencil\"></i></a>" +
"<a href=\"#\" class=\"btn btn-circle btn-error delete text-white btn-sm btn-delete\"><i class=\"ph ph-trash\"></i></a>" +
"<a href=\"#\" class=\"btn btn-circle btn-success text-white btn-sm btn-preview\"><i class=\"ph ph-eye\"></i></a>" +
"</div>",
},
new {
id=7,
nama_lokasi = "Bogor",
alamat = @"
<div class=""flex flex-col gap-1"">
<span class=""text-sm font-semibold text-gray-900"">Bogor Utara</span>
<div class=""flex items-center gap-1 text-xs text-gray-500"">
<span>Kedunghalang</span>
<span>RT 001</span>
<span>RW 004</span>
</div>
</div>",
jenis_lokasi = "Maggot",
berat = 5,
gambar = @"<a href=""#"" class=""btn bg-gray-500 text-white rounded-lg""><i class=""ph ph-file-text""></i></a>",
aksi = "<div class=\"flex gap-2\">" +
"<a href=\"#\" class=\"btn btn-circle btn-warning text-white btn-sm btn-edit\"><i class=\"ph ph-note-pencil\"></i></a>" +
"<a href=\"#\" class=\"btn btn-circle btn-error delete text-white btn-sm btn-delete\"><i class=\"ph ph-trash\"></i></a>" +
"<a href=\"#\" class=\"btn btn-circle btn-success text-white btn-sm btn-preview\"><i class=\"ph ph-eye\"></i></a>" +
"</div>",
},
new {
id=8,
nama_lokasi = "Tangerang",
alamat = @"
<div class=""flex flex-col gap-1"">
<span class=""text-sm font-semibold text-gray-900"">Karawaci</span>
<div class=""flex items-center gap-1 text-xs text-gray-500"">
<span>Nusa Jaya</span>
<span>RT 008</span>
<span>RW 003</span>
</div>
</div>",
jenis_lokasi = "Komposting",
berat = 2,
gambar = @"<a href=""#"" class=""btn bg-gray-500 text-white rounded-lg""><i class=""ph ph-file-text""></i></a>",
aksi = "<div class=\"flex gap-2\">" +
"<a href=\"#\" class=\"btn btn-circle btn-warning text-white btn-sm btn-edit\"><i class=\"ph ph-note-pencil\"></i></a>" +
"<a href=\"#\" class=\"btn btn-circle btn-error delete text-white btn-sm btn-delete\"><i class=\"ph ph-trash\"></i></a>" +
"<a href=\"#\" class=\"btn btn-circle btn-success text-white btn-sm btn-preview\"><i class=\"ph ph-eye\"></i></a>" +
"</div>",
},
new {
id=9,
nama_lokasi = "Bekasi",
alamat = @"
<div class=""flex flex-col gap-1"">
<span class=""text-sm font-semibold text-gray-900"">Bekasi Timur</span>
<div class=""flex items-center gap-1 text-xs text-gray-500"">
<span>Margahayu</span>
<span>RT 009</span>
<span>RW 005</span>
</div>
</div>",
jenis_lokasi = "Maggot",
berat = 3,
gambar = @"<a href=""#"" class=""btn bg-gray-500 text-white rounded-lg""><i class=""ph ph-file-text""></i></a>",
aksi = "<div class=\"flex gap-2\">" +
"<a href=\"#\" class=\"btn btn-circle btn-warning text-white btn-sm btn-edit\"><i class=\"ph ph-note-pencil\"></i></a>" +
"<a href=\"#\" class=\"btn btn-circle btn-error delete text-white btn-sm btn-delete\"><i class=\"ph ph-trash\"></i></a>" +
"<a href=\"#\" class=\"btn btn-circle btn-success text-white btn-sm btn-preview\"><i class=\"ph ph-eye\"></i></a>" +
"</div>",
},
new {
id=10,
nama_lokasi = "Bandung",
alamat = @"
<div class=""flex flex-col gap-1"">
<span class=""text-sm font-semibold text-gray-900"">Coblong</span>
<div class=""flex items-center gap-1 text-xs text-gray-500"">
<span>Dago</span>
<span>RT 002</span>
<span>RW 001</span>
</div>
</div>",
jenis_lokasi = "Komposting",
berat = 1,
gambar = @"<a href=""#"" class=""btn bg-gray-500 text-white rounded-lg""><i class=""ph ph-file-text""></i></a>",
aksi = "<div class=\"flex gap-2\">" +
"<a href=\"#\" class=\"btn btn-circle btn-warning text-white btn-sm btn-edit\"><i class=\"ph ph-note-pencil\"></i></a>" +
"<a href=\"#\" class=\"btn btn-circle btn-error delete text-white btn-sm btn-delete\"><i class=\"ph ph-trash\"></i></a>" +
"<a href=\"#\" class=\"btn btn-circle btn-success text-white btn-sm btn-preview\"><i class=\"ph ph-eye\"></i></a>" +
"</div>",
},
};
return Json(new { data = data });
}
}
}

View File

@ -1,194 +0,0 @@
using Microsoft.AspNetCore.Mvc;
namespace BankSampahApp.Controllers.Main
{
[Route("Main/[controller]/[action]")]
public class ReduksiSampahSudinController : Controller
{
public IActionResult Index()
{
return View("~/Views/Main/ReduksiSampahSudin/Index.cshtml");
}
[HttpGet]
public IActionResult Table()
{
var data = new[] {
new {
nama_lokasi = "Jakarta Pusat",
alamat = @"
<div class=""flex flex-col gap-1"">
<span class=""text-sm font-semibold text-gray-900"">Tanah Abang</span>
<div class=""flex items-center gap-1 text-xs text-gray-500"">
<span>Cideng</span>
<span>RT 002</span>
<span>RW 001</span>
</div>
</div>",
jenis_lokasi = "Maggot",
berat = 1,
gambar = @"<a href=""#"" class=""btn bg-gray-500 text-white rounded-lg""><i class=""ph ph-file-text""></i></a>",
aksi = @"<div class=""flex gap-2"">
<a href=""#"" class=""btn btn-circle btn-warning text-white btn-sm btn-validation""><i class=""ph ph-check""></i></a>
<a href=""#"" class=""btn btn-circle btn-success text-white btn-sm btn-preview""><i class=""ph ph-eye""></i></a>
</div>",
},
new {
nama_lokasi = "Jakarta Barat",
alamat = @"
<div class=""flex flex-col gap-1"">
<span class=""text-sm font-semibold text-gray-900"">Palmerah</span>
<div class=""flex items-center gap-1 text-xs text-gray-500"">
<span>Kemanggisan</span>
<span>RT 003</span>
<span>RW 004</span>
</div>
</div>",
jenis_lokasi = "Organik",
berat = 2,
gambar = @"<a href=""#"" class=""btn bg-gray-500 text-white rounded-lg""><i class=""ph ph-file-text""></i></a>",
aksi = @"<div class=""flex gap-2"">
<a href=""#"" class=""btn btn-circle btn-warning text-white btn-sm""><i class=""ph ph-check""></i></a>
<a href=""#"" class=""btn btn-circle btn-success text-white btn-sm""><i class=""ph ph-eye""></i></a>
</div>",
},
new {
nama_lokasi = "Jakarta Selatan",
alamat = @"
<div class=""flex flex-col gap-1"">
<span class=""text-sm font-semibold text-gray-900"">Tebet</span>
<div class=""flex items-center gap-1 text-xs text-gray-500"">
<span>Manggarai</span>
<span>RT 001</span>
<span>RW 002</span>
</div>
</div>",
jenis_lokasi = "Maggot",
berat = 3,
gambar = @"<a href=""#"" class=""btn bg-gray-500 text-white rounded-lg""><i class=""ph ph-file-text""></i></a>",
aksi = @"<div class=""flex gap-2"">
<a href=""#"" class=""btn btn-circle btn-warning text-white btn-sm""><i class=""ph ph-check""></i></a>
<a href=""#"" class=""btn btn-circle btn-success text-white btn-sm""><i class=""ph ph-eye""></i></a>
</div>",
},
new {
nama_lokasi = "Jakarta Timur",
alamat = @"
<div class=""flex flex-col gap-1"">
<span class=""text-sm font-semibold text-gray-900"">Cakung</span>
<div class=""flex items-center gap-1 text-xs text-gray-500"">
<span>Jatinegara</span>
<span>RT 004</span>
<span>RW 006</span>
</div>
</div>",
jenis_lokasi = "Anorganik",
berat = 5,
gambar = @"<a href=""#"" class=""btn bg-gray-500 text-white rounded-lg""><i class=""ph ph-file-text""></i></a>",
aksi = @"<div class=""flex gap-2"">
<a href=""#"" class=""btn btn-circle btn-warning text-white btn-sm""><i class=""ph ph-check""></i></a>
<a href=""#"" class=""btn btn-circle btn-success text-white btn-sm""><i class=""ph ph-eye""></i></a>
</div>",
},
new {
nama_lokasi = "Jakarta Utara",
alamat = @"
<div class=""flex flex-col gap-1"">
<span class=""text-sm font-semibold text-gray-900"">Koja</span>
<div class=""flex items-center gap-1 text-xs text-gray-500"">
<span>Lagoa</span>
<span>RT 005</span>
<span>RW 003</span>
</div>
</div>",
jenis_lokasi = "Maggot",
berat = 4,
gambar = @"<a href=""#"" class=""btn bg-gray-500 text-white rounded-lg""><i class=""ph ph-file-text""></i></a>",
aksi = @"<div class=""flex gap-2"">
<a href=""#"" class=""btn btn-circle btn-warning text-white btn-sm""><i class=""ph ph-check""></i></a>
<a href=""#"" class=""btn btn-circle btn-success text-white btn-sm""><i class=""ph ph-eye""></i></a>
</div>",
},
new {
nama_lokasi = "Depok",
alamat = @"
<div class=""flex flex-col gap-1"">
<span class=""text-sm font-semibold text-gray-900"">Beji</span>
<div class=""flex items-center gap-1 text-xs text-gray-500"">
<span>Kukusan</span>
<span>RT 002</span>
<span>RW 007</span>
</div>
</div>",
jenis_lokasi = "Organik",
berat = 2,
gambar = @"<a href=""#"" class=""btn bg-gray-500 text-white rounded-lg""><i class=""ph ph-file-text""></i></a>",
aksi = @"<div class=""flex gap-2"">
<a href=""#"" class=""btn btn-circle btn-warning text-white btn-sm""><i class=""ph ph-check""></i></a>
<a href=""#"" class=""btn btn-circle btn-success text-white btn-sm""><i class=""ph ph-eye""></i></a>
</div>",
},
new {
nama_lokasi = "Bekasi",
alamat = @"
<div class=""flex flex-col gap-1"">
<span class=""text-sm font-semibold text-gray-900"">Pondok Gede</span>
<div class=""flex items-center gap-1 text-xs text-gray-500"">
<span>Jatibening</span>
<span>RT 006</span>
<span>RW 002</span>
</div>
</div>",
jenis_lokasi = "Maggot",
berat = 6,
gambar = @"<a href=""#"" class=""btn bg-gray-500 text-white rounded-lg""><i class=""ph ph-file-text""></i></a>",
aksi = @"<div class=""flex gap-2"">
<a href=""#"" class=""btn btn-circle btn-warning text-white btn-sm""><i class=""ph ph-check""></i></a>
<a href=""#"" class=""btn btn-circle btn-success text-white btn-sm""><i class=""ph ph-eye""></i></a>
</div>",
},
new {
nama_lokasi = "Tangerang",
alamat = @"
<div class=""flex flex-col gap-1"">
<span class=""text-sm font-semibold text-gray-900"">Ciledug</span>
<div class=""flex items-center gap-1 text-xs text-gray-500"">
<span>Paninggilan</span>
<span>RT 001</span>
<span>RW 005</span>
</div>
</div>",
jenis_lokasi = "Anorganik",
berat = 3,
gambar = @"<a href=""#"" class=""btn bg-gray-500 text-white rounded-lg""><i class=""ph ph-file-text""></i></a>",
aksi = @"<div class=""flex gap-2"">
<a href=""#"" class=""btn btn-circle btn-warning text-white btn-sm""><i class=""ph ph-check""></i></a>
<a href=""#"" class=""btn btn-circle btn-success text-white btn-sm""><i class=""ph ph-eye""></i></a>
</div>",
},
new {
nama_lokasi = "Bogor",
alamat = @"
<div class=""flex flex-col gap-1"">
<span class=""text-sm font-semibold text-gray-900"">Cibinong</span>
<div class=""flex items-center gap-1 text-xs text-gray-500"">
<span>Pabuaran</span>
<span>RT 003</span>
<span>RW 004</span>
</div>
</div>",
jenis_lokasi = "Organik",
berat = 4,
gambar = @"<a href=""#"" class=""btn bg-gray-500 text-white rounded-lg""><i class=""ph ph-file-text""></i></a>",
aksi = @"<div class=""flex gap-2"">
<a href=""#"" class=""btn btn-circle btn-warning text-white btn-sm""><i class=""ph ph-check""></i></a>
<a href=""#"" class=""btn btn-circle btn-success text-white btn-sm""><i class=""ph ph-eye""></i></a>
</div>",
}
};
return Json(new { data = data });
}
}
}

View File

@ -0,0 +1,27 @@
using System.Linq;
using Microsoft.AspNetCore.Mvc;
namespace BankSampahApp.Controllers.ReduksiSampah
{
[Route("ReduksiSampah/[controller]/[action]")]
public class KompostingController : Controller
{
private const string Jenis = "Komposting";
public IActionResult Index()
{
return View("~/Views/ReduksiSampah/Komposting/Index.cshtml");
}
[HttpGet]
public IActionResult Table([FromQuery] string? bulan)
{
var data = ReduksiSampahDataStore
.GetItems(Jenis)
.Where(item => ReduksiSampahDataStore.MatchesBulan(item, bulan))
.Select(ReduksiSampahDataStore.ToResponse);
return Json(new { data });
}
}
}

View File

@ -1,13 +1,13 @@
using Microsoft.AspNetCore.Mvc;
namespace BankSampahApp.Controllers.Master
namespace BankSampahApp.Controllers.ReduksiSampah
{
[Route("Master/[controller]/[action]")]
[Route("ReduksiSampah/[controller]/[action]")]
public class LokasiController : Controller
{
public IActionResult Index()
{
return View("~/Views/Master/Lokasi/Index.cshtml");
return View("~/Views/ReduksiSampah/Lokasi/Index.cshtml");
}
[HttpGet]

View File

@ -0,0 +1,27 @@
using System.Linq;
using Microsoft.AspNetCore.Mvc;
namespace BankSampahApp.Controllers.ReduksiSampah
{
[Route("ReduksiSampah/[controller]/[action]")]
public class MaggotController : Controller
{
private const string Jenis = "Maggot";
public IActionResult Index()
{
return View("~/Views/ReduksiSampah/Maggot/Index.cshtml");
}
[HttpGet]
public IActionResult Table([FromQuery] string? bulan)
{
var data = ReduksiSampahDataStore
.GetItems(Jenis)
.Where(item => ReduksiSampahDataStore.MatchesBulan(item, bulan))
.Select(ReduksiSampahDataStore.ToResponse);
return Json(new { data });
}
}
}

View File

@ -0,0 +1,173 @@
using System;
using System.Collections.Generic;
using System.Linq;
namespace BankSampahApp.Controllers.ReduksiSampah
{
internal static class ReduksiSampahDataStore
{
private static readonly IReadOnlyList<ReduksiSampahItem> Items = new List<ReduksiSampahItem>
{
new()
{
Id = 1,
PeriodeBulan = "Jan 2025",
NamaLokasi = "Jakarta Pusat",
JenisLokasi = "Maggot",
BeratReduksi = 8,
BeratSampah = 15,
Alamat = AddressBlock("Tanah Abang", "Cideng", "002", "001")
},
new()
{
Id = 2,
PeriodeBulan = "Feb 2025",
NamaLokasi = "Jakarta Barat",
JenisLokasi = "Maggot",
BeratReduksi = 10,
BeratSampah = 20,
Alamat = AddressBlock("Palmerah", "Kemanggisan", "003", "004")
},
new()
{
Id = 3,
PeriodeBulan = "Mar 2025",
NamaLokasi = "Jakarta Selatan",
JenisLokasi = "Maggot",
BeratReduksi = 7,
BeratSampah = 14,
Alamat = AddressBlock("Tebet", "Manggarai", "001", "002")
},
new()
{
Id = 4,
PeriodeBulan = "Apr 2025",
NamaLokasi = "Jakarta Timur",
JenisLokasi = "Maggot",
BeratReduksi = 6,
BeratSampah = 12,
Alamat = AddressBlock("Cakung", "Jatinegara", "004", "006")
},
new()
{
Id = 5,
PeriodeBulan = "Mei 2025",
NamaLokasi = "Jakarta Utara",
JenisLokasi = "Maggot",
BeratReduksi = 9,
BeratSampah = 16,
Alamat = AddressBlock("Koja", "Lagoa", "005", "003")
},
new()
{
Id = 6,
PeriodeBulan = "Jun 2025",
NamaLokasi = "Depok",
JenisLokasi = "Komposting",
BeratReduksi = 11,
BeratSampah = 18,
Alamat = AddressBlock("Beji", "Beji Timur", "006", "002")
},
new()
{
Id = 7,
PeriodeBulan = "Jul 2025",
NamaLokasi = "Bekasi",
JenisLokasi = "Komposting",
BeratReduksi = 13,
BeratSampah = 21,
Alamat = AddressBlock("Bekasi Timur", "Margahayu", "009", "005")
},
new()
{
Id = 8,
PeriodeBulan = "Agu 2025",
NamaLokasi = "Bogor",
JenisLokasi = "Komposting",
BeratReduksi = 9,
BeratSampah = 15,
Alamat = AddressBlock("Bogor Utara", "Kedunghalang", "001", "004")
},
new()
{
Id = 9,
PeriodeBulan = "Sep 2025",
NamaLokasi = "Tangerang",
JenisLokasi = "Komposting",
BeratReduksi = 8,
BeratSampah = 13,
Alamat = AddressBlock("Karawaci", "Nusa Jaya", "008", "003")
},
new()
{
Id = 10,
PeriodeBulan = "Okt 2025",
NamaLokasi = "Cilegon",
JenisLokasi = "Komposting",
BeratReduksi = 12,
BeratSampah = 19,
Alamat = AddressBlock("Ciwandan", "Kebonsari", "010", "002")
}
};
private const string ActionButtons = @"<div class=""flex gap-2"">
<a href=""#"" class=""btn btn-circle btn-warning text-white btn-sm btn-edit""><i class=""ph ph-note-pencil""></i></a>
<a href=""#"" class=""btn btn-circle btn-error text-white btn-sm btn-delete""><i class=""ph ph-trash""></i></a>
<a href=""#"" class=""btn btn-circle btn-success text-white btn-sm btn-preview""><i class=""ph ph-eye""></i></a>
<a href=""#"" class=""btn btn-circle bg-blue-500 text-white btn-sm btn-history""><i class=""ph ph-clock-counter-clockwise""></i></a>
<a href=""#"" class=""btn btn-circle btn-warning text-white btn-sm btn-validation""><i class=""ph ph-check""></i></a>
</div>";
private const string ProofButton = @"<a href=""#"" class=""btn bg-gray-500 text-white rounded-lg""><i class=""ph ph-file-text""></i></a>";
public static IEnumerable<ReduksiSampahItem> GetItems(string jenisLokasi) =>
Items.Where(item => string.Equals(item.JenisLokasi, jenisLokasi, StringComparison.OrdinalIgnoreCase));
public static bool MatchesBulan(ReduksiSampahItem item, string? bulan)
{
if (string.IsNullOrWhiteSpace(bulan))
{
return true;
}
return item.PeriodeBulan.Contains(bulan.Trim(), StringComparison.OrdinalIgnoreCase);
}
public static object ToResponse(ReduksiSampahItem item) => new
{
id = item.Id,
periode_bulan = item.PeriodeBulan,
nama_lokasi = item.NamaLokasi,
alamat = item.Alamat,
jenis_lokasi = item.JenisLokasi,
berat_reduksi = item.BeratReduksi,
berat_sampah = item.BeratSampah,
gambar = ProofButton,
aksi = ActionButtons
};
private static string AddressBlock(string kecamatan, string kelurahan, string rt, string rw)
{
return $@"
<div class=""flex flex-col gap-1"">
<span class=""text-sm font-semibold text-gray-900"">{kecamatan}</span>
<div class=""flex items-center gap-1 text-xs text-gray-500"">
<span>{kelurahan}</span>
<span>RT {rt}</span>
<span>RW {rw}</span>
</div>
</div>";
}
public class ReduksiSampahItem
{
public int Id { get; set; }
public string PeriodeBulan { get; set; } = string.Empty;
public string NamaLokasi { get; set; } = string.Empty;
public string Alamat { get; set; } = string.Empty;
public string JenisLokasi { get; set; } = string.Empty;
public double BeratReduksi { get; set; }
public double BeratSampah { get; set; }
}
}
}

View File

@ -1,338 +0,0 @@
@{
ViewData["Title"] = "Reduksi Sampah Dinas";
}
<div class="flex flex-col gap-2 md:flex-row md:justify-between md:gap-0 items-center">
<div class="prose">
<span class="text-xl font-semibold text-black">
Reduksi Sampah Dinas
</span>
</div>
<div class="flex gap-2 items-center">
<select class="select rounded-full">
<option disabled selected>Pilih Tahun</option>
<option>2025</option>
<option>2024</option>
<option>2023</option>
<option>2022</option>
<option>2021</option>
<option>2020</option>
</select>
</div>
</div>
<!-- Modal History -->
<dialog id="modal_history" class="modal">
<div class="modal-box max-w-md">
<form method="dialog">
<button class="btn btn-sm btn-circle btn-ghost absolute right-2 top-2">✕</button>
</form>
<h3 class="text-lg font-bold">History Data</h3>
<p class="py-4 text-base font-['Plus_Jakarta_Sans']">Terdapat 30 History perubahan data</p>
<div class="px-3 pt-4 pb-8 bg-gray-50">
<div class="flex flex-col gap-4 pl-4 border-l-2 border-gray-300">
<div class="flex flex-col gap-1">
<div class="text-gray-500 text-xs leading-4">Admin Subandri</div>
<div class="text-primary-500 text-base">Current Version</div>
</div>
<div class="flex flex-col gap-1">
<div class="text-gray-500 text-xs leading-4">Admin Subandri</div>
<div class="text-gray-600 text-base">12:26 pm</div>
</div>
<div class="flex flex-col gap-1">
<div class="text-gray-500 text-xs leading-4">Admin Subandri</div>
<div class="text-gray-600 text-base">24 Nov 2025, 12:26 pm</div>
</div>
<div class="flex flex-col gap-1">
<div class="text-gray-500 text-xs leading-4">Admin Subandri</div>
<div class="text-gray-600 text-base">23 Nov 2025, 12:26 pm</div>
</div>
<div class="flex flex-col gap-1">
<div class="text-gray-500 text-xs leading-4">Admin Subandri</div>
<div class="text-gray-600 text-base">22 Nov 2025, 12:26 pm</div>
</div>
</div>
</div>
</div>
</dialog>
<!-- End Modal History -->
<!-- Modal Tambah/Edit Data -->
<dialog id="modal_tambah" class="modal modal-bottom sm:modal-middle">
<div class="modal-box w-full max-w-2xl p-6 bg-white rounded-2xl">
<h3 id="modal_title" class="text-gray-900 text-xl font-semibold font-['Plus_Jakarta_Sans'] leading-8 mb-8">Tambah Reduksi Sampah</h3>
<form id="formTambah" onsubmit="submitForm(event)">
<input type="hidden" id="edit_mode" value="false">
<input type="hidden" id="reduksi_sampah_id" value="">
<div class="flex flex-col gap-6">
<!-- Fiel Jenis Lokasi -->
<div class="flex flex-col">
<fieldset class="fieldset">
<legend class="fieldset-legend">
Jenis Lokasi
<span class="text-red-500">*</span>
</legend>
<select id="jenis_lokasi" class="select w-full" required>
<option value="" disabled selected>Pilih salah satu</option>
<option value="Komposting">Komposting</option>
<option value="Maggot">Maggot</option>
</select>
</fieldset>
</div>
<div id="formDetail" class="hidden flex flex-col gap-6">
<!-- Field Lokasi -->
<div class="flex flex-col">
<fieldset class="fieldset">
<legend class="fieldset-legend">
Lokasi<span class="text-red-500">*</span>
</legend>
<select id="lokasi" class="select w-full" required>
<option value="" disabled selected>Pilih salah satu</option>
</select>
</fieldset>
</div>
<!-- Field alamat -->
<div class="flex flex-col">
<fieldset class="fieldset">
<legend class="fieldset-legend">
Alamat
</legend>
<textarea id="alamat" rows="4" readonly class="textarea textarea-bordered w-full"></textarea>
</fieldset>
</div>
<!-- Field Bukti Kegiatan -->
<div class="flex flex-col">
<fieldset class="fieldset">
<legend class="fieldset-legend">
Bukti Kegiatan
<span class="text-red-500">*</span>
</legend>
<input type="file" class="file-input w-full" />
<label class="label">Ukuran Maksimal 5MB</label>
</fieldset>
</div>
<!-- Field Keterangan -->
<div class="flex flex-col">
<fieldset class="fieldset">
<legend class="fieldset-legend">
Keterangan Kegiatan<span class="text-red-500">*</span>
</legend>
<textarea id="keterangan_kegiatan" rows="4" required placeholder="Keterangan Kegiatan" class="textarea textarea-bordered w-full"></textarea>
</fieldset>
</div>
<!-- Field Tanggal Pelaksanaan Kegiatan -->
<div class="flex flex-col">
<fieldset class="fieldset">
<legend class="fieldset-legend">
Tanggal Pelaksanaan Kegiatan
<span class="text-red-500">*</span>
</legend>
<input type="date" id="tgl_pelaksanaan_kegiatan" class="input w-full" required />
</fieldset>
</div>
<!-- Pelaksana kegiatan -->
<div class="flex flex-col">
<fieldset class="fieldset">
<legend class="fieldset-legend">
Pelaksana Kegiatan<span class="text-red-500">*</span>
</legend>
<input type="text" id="preview" class="input w-full" placeholder="Pelaksana Kegiatan" required />
</fieldset>
</div>
</div>
<!-- Buttons -->
<div class="flex flex-col sm:flex-row gap-3 justify-end">
<button type="button" class="px-8 py-2.5 bg-white rounded-full outline outline-1 -outline-offset-1 outline-gray-300 text-slate-800 text-base font-semibold font-['Plus_Jakarta_Sans'] leading-6 hover:bg-gray-50 w-full sm:w-auto" onclick="closeModal()">
Batal
</button>
<button type="submit" class="px-8 py-2.5 bg-green-800 rounded-full text-white text-base font-semibold font-['Plus_Jakarta_Sans'] leading-6 hover:bg-green-900 w-full sm:w-auto">
Simpan
</button>
</div>
</div>
</form>
</div>
<form method="dialog" class="modal-backdrop">
<button>close</button>
</form>
</dialog>
<!-- /modal tambah/edit -->
<div class="h-6"></div>
<div class="card bg-white shadow-sm">
<div class="card-body p-2">
<div class="w-full overflow-x-auto">
<table class="table-zebra table w-full" id="example">
<!-- head -->
<thead>
<tr>
<th>No</th>
<th>Periode</th>
<th>Nama Lokasi</th>
<th>Alamat</th>
<th>Berat Maggot(Kg)</th>
<th>Berat Komposting(Kg)</th>
<th>Berat Bank Sampah(Kg)</th>
<th>Total Reduksi(Kg)</th>
<th>Aksi</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</div>
@section Scripts {
<script type="text/javascript">
var table;
var allLokasi = [];
$(document).ready(function () {
$.ajax({
url: '/Master/Lokasi/Table',
method: 'GET',
success: function (response) {
// ambil semua data kecuali 'aksi'
allLokasi = (response.data || []).map(item => {
return {
jenis_lokasi: item.jenis_lokasi,
nama_lokasi: item.nama_lokasi,
kecamatan: item.kecamatan,
kelurahan: item.kelurahan,
detail_alamat: item.detail_alamat,
rt: item.rt,
rw: item.rw
};
});
},
error: function () {
console.error("Gagal mengambil data lokasi dari /Master/Lokasi/Table");
}
});
table = new DataTable('#example', {
ajax: '/Main/ReduksiSampahDinas/Table',
scrollX: true,
autoWidth: false,
initComplete: function () {
$('div.dt-scroll-body thead').css('visibility', 'collapse');
},
columns: [
{ data: null, render: (d, t, r, m) => m.row + 1, orderable: false, searchable: false },
{ data: 'periode_bulan' },
{ data: 'nama_lokasi' },
{ data: 'alamat' },
{ data: 'berat_maggot' },
{ data: 'berat_komposting' },
{ data: 'berat_bank_sampah' },
{
data: null,
render: function (data, type, row) {
let maggot = parseFloat(row.berat_maggot) || 0;
let komposting = parseFloat(row.berat_komposting) || 0;
let bankSampah = parseFloat(row.berat_bank_sampah) || 0;
let total = maggot + komposting + bankSampah;
return total;
}
},
{ data: 'aksi', orderable: false, searchable: false },
]
});
$('#example').on('click', '.btn-history', function (e) {
e.preventDefault();
modal_history.showModal();
});
$('#jenis_lokasi').on('change', function() {
const jenisLokasi = $(this).val();
if (jenisLokasi) {
$('#formDetail').removeClass('hidden').hide().fadeIn(300);
populateNamaLokasiDropdown(jenisLokasi);
// $('#formTambah')[0].reset();
} else {
$('#formDetail').fadeOut(300);
}
});
// 🔹 Event: ketika nama_lokasi dipilih
$('#lokasi').on('change', function () {
const nama = $(this).val();
if (!nama) {
$('#alamat').val(''); // reset jika tidak ada pilihan
return;
}
// cari lokasi yang sesuai
const lokasi = allLokasi.find(item => item.nama_lokasi === nama);
if (lokasi) {
// format: Kecamatan, Kelurahan, RT, RW, Detail Alamat
const formattedAlamat = `${lokasi.kecamatan}, ${lokasi.kelurahan}, RT ${lokasi.rt}, RW ${lokasi.rw}, ${lokasi.detail_alamat}`;
$('#alamat').val(formattedAlamat);
}
});
$('#example').on('click', '.btn-edit', function (e) {
e.preventDefault();
// Get row data
var row = table.row($(this).parents('tr')).data();
// Set edit mode
$('#edit_mode').val('true');
$('#reduksi_sampah_id').val(row.id);
$('#jenis_lokasi').val(row.jenis_lokasi).trigger("change");
$("#lokasi").val(row.nama_lokasi).trigger("change");
$('#modal_title').text('Edit Reduksi Sampah');
// Open modal
modal_tambah.showModal();
});
});
function populateNamaLokasiDropdown(jenisLokasi) {
let options = '<option value="">Pilih salah satu</option>';
if (jenisLokasi) {
// filter lokasi berdasarkan jenis_lokasi
const filtered = allLokasi.filter(item => item.jenis_lokasi === jenisLokasi);
filtered.forEach(item => {
options += `<option value="${item.nama_lokasi}">${item.nama_lokasi}</option>`;
});
}
$('#lokasi').html(options);
}
function closeModal() {
// Reset form
$('#formTambah')[0].reset();
$('#edit_mode').val('false');
$('#modal_title').text('Tambah Reduksi Sampah');
// Close modal
modal_tambah.close();
}
</script>
}

View File

@ -1,283 +0,0 @@
@{
ViewData["Title"] = "Reduksi Sampah";
}
<div class="flex flex-col gap-2 md:flex-row md:justify-between md:gap-0 items-center">
<div class="prose">
<span class="text-xl font-semibold text-black">
Reduksi Sampah
</span>
</div>
<div class="flex gap-2 items-center">
<select class="select rounded-full">
<option disabled selected>Pilih Tahun</option>
<option>2025</option>
<option>2024</option>
<option>2023</option>
<option>2022</option>
<option>2021</option>
<option>2020</option>
</select>
<button type="button" class="btn btn-sm bg-bank-sampah-primary-500 rounded-full text-white" onclick="modal_tambah.showModal()"><i class="ph ph-plus"></i>Tambah</button>
</div>
</div>
<!-- Modal Tambah/Edit Data -->
<dialog id="modal_tambah" class="modal modal-bottom sm:modal-middle">
<div class="modal-box w-full max-w-2xl p-6 bg-white rounded-2xl">
<h3 id="modal_title" class="text-gray-900 text-xl font-semibold font-['Plus_Jakarta_Sans'] leading-8 mb-8">Tambah Reduksi Sampah</h3>
<form id="formTambah" onsubmit="submitForm(event)">
<input type="hidden" id="edit_mode" value="false">
<input type="hidden" id="reduksi_sampah_id" value="">
<div class="flex flex-col gap-6">
<!-- Fiel Jenis Lokasi -->
<div class="flex flex-col">
<fieldset class="fieldset">
<legend class="fieldset-legend">
Jenis Lokasi
<span class="text-red-500">*</span>
</legend>
<select id="jenis_lokasi" class="select w-full" required>
<option value="" disabled selected>Pilih salah satu</option>
<option value="Komposting">Komposting</option>
<option value="Maggot">Maggot</option>
</select>
</fieldset>
</div>
<div id="formDetail" class="hidden flex flex-col gap-6">
<!-- Field Lokasi -->
<div class="flex flex-col">
<fieldset class="fieldset">
<legend class="fieldset-legend">
Lokasi<span class="text-red-500">*</span>
</legend>
<select id="lokasi" class="select w-full" required>
<option value="" disabled selected>Pilih salah satu</option>
</select>
</fieldset>
</div>
<!-- Field alamat -->
<div class="flex flex-col">
<fieldset class="fieldset">
<legend class="fieldset-legend">
Alamat
</legend>
<textarea id="alamat" rows="4" readonly class="textarea textarea-bordered w-full"></textarea>
</fieldset>
</div>
<!-- Field Bukti Kegiatan -->
<div class="flex flex-col">
<fieldset class="fieldset">
<legend class="fieldset-legend">
Bukti Kegiatan
<span class="text-red-500">*</span>
</legend>
<input type="file" class="file-input w-full" />
<label class="label">Ukuran Maksimal 5MB</label>
</fieldset>
</div>
<!-- Field Keterangan -->
<div class="flex flex-col">
<fieldset class="fieldset">
<legend class="fieldset-legend">
Keterangan Kegiatan<span class="text-red-500">*</span>
</legend>
<textarea id="keterangan_kegiatan" rows="4" required placeholder="Keterangan Kegiatan" class="textarea textarea-bordered w-full"></textarea>
</fieldset>
</div>
<!-- Field Tanggal Pelaksanaan Kegiatan -->
<div class="flex flex-col">
<fieldset class="fieldset">
<legend class="fieldset-legend">
Tanggal Pelaksanaan Kegiatan
<span class="text-red-500">*</span>
</legend>
<input type="date" id="tgl_pelaksanaan_kegiatan" class="input w-full" required />
</fieldset>
</div>
<!-- Pelaksana kegiatan -->
<div class="flex flex-col">
<fieldset class="fieldset">
<legend class="fieldset-legend">
Pelaksana Kegiatan<span class="text-red-500">*</span>
</legend>
<input type="text" id="preview" class="input w-full" placeholder="Pelaksana Kegiatan" required />
</fieldset>
</div>
</div>
<!-- Buttons -->
<div class="flex flex-col sm:flex-row gap-3 justify-end">
<button type="button" class="px-8 py-2.5 bg-white rounded-full outline outline-1 -outline-offset-1 outline-gray-300 text-slate-800 text-base font-semibold font-['Plus_Jakarta_Sans'] leading-6 hover:bg-gray-50 w-full sm:w-auto" onclick="closeModal()">
Batal
</button>
<button type="submit" class="px-8 py-2.5 bg-green-800 rounded-full text-white text-base font-semibold font-['Plus_Jakarta_Sans'] leading-6 hover:bg-green-900 w-full sm:w-auto">
Simpan
</button>
</div>
</div>
</form>
</div>
<form method="dialog" class="modal-backdrop">
<button>close</button>
</form>
</dialog>
<!-- /modal tambah/edit -->
<div class="h-6"></div>
<div class="card bg-white shadow-sm">
<div class="card-body p-2">
<div class="w-full overflow-x-auto">
<table class="table-zebra table w-full" id="example">
<!-- head -->
<thead>
<tr>
<th>No</th>
<th>Nama Lokasi</th>
<th>Alamat</th>
<th>Jenis Lokasi</th>
<th>Berat(Kg)</th>
<th>Gambar</th>
<th>Aksi</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</div>
@section Scripts {
<script type="text/javascript">
var table;
var allLokasi = [];
$(document).ready(function () {
// Load data lokasi
$.ajax({
url: '/Master/Lokasi/Table',
method: 'GET',
success: function (response) {
// ambil semua data kecuali 'aksi'
allLokasi = (response.data || []).map(item => {
return {
jenis_lokasi: item.jenis_lokasi,
nama_lokasi: item.nama_lokasi,
kecamatan: item.kecamatan,
kelurahan: item.kelurahan,
detail_alamat: item.detail_alamat,
rt: item.rt,
rw: item.rw
};
});
},
error: function () {
console.error("Gagal mengambil data lokasi dari /Master/Lokasi/Table");
}
});
table = new DataTable('#example', {
ajax: '/Main/ReduksiSampahSatpel/Table',
scrollX: true,
autoWidth: false,
initComplete: function () {
$('div.dt-scroll-body thead').css('visibility', 'collapse');
},
columns: [
{ data: null, render: (d, t, r, m) => m.row + 1, orderable: false, searchable: false },
{ data: 'nama_lokasi' },
{ data: 'alamat' },
{ data: 'jenis_lokasi' },
{ data: 'berat' },
{ data: 'gambar', orderable: false, searchable: false },
{ data: 'aksi', orderable: false, searchable: false },
]
});
$('#jenis_lokasi').on('change', function() {
const jenisLokasi = $(this).val();
if (jenisLokasi) {
$('#formDetail').removeClass('hidden').hide().fadeIn(300);
populateNamaLokasiDropdown(jenisLokasi);
// $('#formTambah')[0].reset();
} else {
$('#formDetail').fadeOut(300);
}
});
// 🔹 Event: ketika nama_lokasi dipilih
$('#lokasi').on('change', function () {
const nama = $(this).val();
if (!nama) {
$('#alamat').val(''); // reset jika tidak ada pilihan
return;
}
// cari lokasi yang sesuai
const lokasi = allLokasi.find(item => item.nama_lokasi === nama);
if (lokasi) {
// format: Kecamatan, Kelurahan, RT, RW, Detail Alamat
const formattedAlamat = `${lokasi.kecamatan}, ${lokasi.kelurahan}, RT ${lokasi.rt}, RW ${lokasi.rw}, ${lokasi.detail_alamat}`;
$('#alamat').val(formattedAlamat);
}
});
$('#example').on('click', '.btn-edit', function (e) {
e.preventDefault();
// Get row data
var row = table.row($(this).parents('tr')).data();
// Set edit mode
$('#edit_mode').val('true');
$('#reduksi_sampah_id').val(row.id);
$('#jenis_lokasi').val(row.jenis_lokasi).trigger("change");
$("#lokasi").val(row.nama_lokasi).trigger("change");
// Open modal
modal_tambah.showModal();
});
});
// 🔹 Fungsi: filter lokasi berdasarkan jenis_lokasi
function populateNamaLokasiDropdown(jenisLokasi) {
let options = '<option value="">Pilih salah satu</option>';
if (jenisLokasi) {
// filter lokasi berdasarkan jenis_lokasi
const filtered = allLokasi.filter(item => item.jenis_lokasi === jenisLokasi);
filtered.forEach(item => {
options += `<option value="${item.nama_lokasi}">${item.nama_lokasi}</option>`;
});
}
$('#lokasi').html(options);
}
function closeModal() {
// Reset form
$('#formTambah')[0].reset();
$('#edit_mode').val('false');
$('#modal_title').text('Tambah Reduksi Sampah');
// Close modal
modal_tambah.close();
}
</script>
}

View File

@ -1,151 +0,0 @@
@{
ViewData["Title"] = "Reduksi Sampah Sudin";
}
<div class="flex flex-col gap-2 md:flex-row md:justify-between md:gap-0 items-center">
<div class="prose">
<span class="text-xl font-semibold text-black">
Reduksi Sampah Sudin
</span>
</div>
<div class="flex gap-2 items-center">
<select class="select rounded-full">
<option disabled selected>Pilih Tahun</option>
<option>2025</option>
<option>2024</option>
<option>2023</option>
<option>2022</option>
<option>2021</option>
<option>2020</option>
</select>
</div>
</div>
<!-- Modal Validasi Data -->
<dialog id="modal_validasi" class="modal modal-bottom sm:modal-middle">
<div class="modal-box w-full max-w-[591px] p-6 bg-white rounded-2xl inline-flex flex-col justify-center items-end gap-6">
<!-- Header -->
<div class="self-stretch inline-flex justify-between items-center">
<div class="flex-1 justify-start text-gray-900 text-xl font-semibold font-['Plus_Jakarta_Sans'] leading-8">Validasi Data</div>
<button type="button" class="w-5 h-5 relative" onclick="closeValidasiModal()">
<i class="ph ph-x text-gray-500 text-xl"></i>
</button>
</div>
<!-- Content -->
<div class="self-stretch flex flex-col justify-center items-center">
<div class="self-stretch px-3 pt-3 pb-8 bg-gray-50 rounded-lg inline-flex justify-start items-start gap-4">
<div class="flex-1 inline-flex flex-col justify-start items-start gap-1">
<div class="self-stretch justify-start text-gray-500 text-xs font-normal font-['Plus_Jakarta_Sans'] leading-4">Tgl Pemilahan</div>
<div id="val_tgl_pemilahan" class="self-stretch justify-start text-slate-600 text-base font-normal font-['Plus_Jakarta_Sans'] leading-6">29 Juli 2024</div>
</div>
<div class="flex-1 inline-flex flex-col justify-start items-start gap-1">
<div class="self-stretch justify-start text-gray-500 text-xs font-normal font-['Plus_Jakarta_Sans'] leading-4">Nama Lokasi</div>
<div id="val_nama_bank_sampah" class="self-stretch justify-start text-slate-600 text-base font-normal font-['Plus_Jakarta_Sans'] leading-6">Jakarta Selatan</div>
</div>
<div class="flex-1 inline-flex flex-col justify-start items-start gap-1">
<div class="self-stretch justify-start text-gray-500 text-xs font-normal font-['Plus_Jakarta_Sans'] leading-4">Nama Penanggung Jawab</div>
<div id="val_nama_penanggung_jawab" class="self-stretch justify-start text-slate-600 text-base font-normal font-['Plus_Jakarta_Sans'] leading-6">Joko Widodo</div>
</div>
</div>
</div>
<!-- Question -->
<div class="self-stretch justify-start text-slate-800 text-base font-semibold font-['Plus_Jakarta_Sans'] leading-6">Anda yakin ingin melakukan validasi data ?</div>
<!-- Actions -->
<div class="self-stretch inline-flex justify-end items-center gap-3">
<button type="button"
class="px-4 py-2.5 bg-white rounded-[99px] outline outline-1 outline-offset-[-1px] outline-gray-300 flex justify-center items-center gap-2 hover:bg-gray-50"
onclick="confirmTolakValidasi()">
<div class="justify-start text-slate-800 text-sm font-semibold font-['Plus_Jakarta_Sans'] leading-5">Tolak Validasi</div>
</button>
<button type="button"
class="w-28 px-4 py-2.5 bg-green-800 rounded-[99px] flex justify-center items-center gap-2 hover:bg-green-900"
onclick="confirmValidasi()">
<div class="justify-start text-white text-sm font-semibold font-['Plus_Jakarta_Sans'] leading-5">Ya</div>
</button>
</div>
</div>
<form method="dialog" class="modal-backdrop">
<button>close</button>
</form>
</dialog>
<!-- /modal validasi -->
<div class="h-6"></div>
<div class="card bg-white shadow-sm">
<div class="card-body p-2">
<div class="w-full overflow-x-auto">
<table class="table-zebra table w-full" id="example">
<!-- head -->
<thead>
<tr>
<th>No</th>
<th>Nama Lokasi</th>
<th>Alamat</th>
<th>Jenis Lokasi</th>
<th>Berat(Kg)</th>
<th>Gambar</th>
<th>Aksi</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</div>
@section Scripts {
<script type="text/javascript">
var table;
$(document).ready(function () {
table = new DataTable('#example', {
ajax: '/Main/ReduksiSampahSudin/Table',
scrollX: true,
autoWidth: false,
initComplete: function () {
$('div.dt-scroll-body thead').css('visibility', 'collapse');
},
columns: [
{ data: null, render: (d, t, r, m) => m.row + 1, orderable: false, searchable: false },
{ data: 'nama_lokasi' },
{ data: 'alamat' },
{ data: 'jenis_lokasi' },
{ data: 'berat' },
{ data: 'gambar', orderable: false, searchable: false },
{ data: 'aksi', orderable: false, searchable: false },
]
});
$('#example').on('click', '.btn-validation', function (e) {
e.preventDefault();
modal_validasi.showModal();
});
});
function closeValidasiModal() {
window.currentValidationRow = null;
modal_validasi.close();
}
function confirmValidasi() {
// TODO: Implement actual validation API call
closeValidasiModal();
// Reload table
table.ajax.reload();
}
function confirmTolakValidasi() {
// TODO: Implement actual rejection API call
closeValidasiModal();
// Reload table
table.ajax.reload();
}
</script>
}

View File

@ -0,0 +1,422 @@
@{
var jenis = "Komposting";
var tableUrl = Url.Content("~/ReduksiSampah/Komposting/Table");
ViewData["Title"] = $"Reduksi Sampah - {jenis}";
}
<div class="flex flex-col gap-2 md:flex-row md:justify-between md:gap-0 items-center">
<div class="prose">
<span class="text-xl font-semibold text-black">
Reduksi Sampah - @jenis
</span>
</div>
<div class="flex gap-2 items-center">
<select class="select rounded-full">
<option disabled selected>Pilih Tahun</option>
<option>2025</option>
<option>2024</option>
<option>2023</option>
<option>2022</option>
<option>2021</option>
<option>2020</option>
</select>
<button type="button" class="btn btn-sm bg-bank-sampah-primary-500 rounded-full text-white"
onclick="modal_tambah.showModal()"><i class="ph ph-plus"></i>Tambah</button>
</div>
</div>
<!-- Modal History -->
<dialog id="modal_history" class="modal">
<div class="modal-box max-w-md">
<form method="dialog">
<button class="btn btn-sm btn-circle btn-ghost absolute right-2 top-2">✕</button>
</form>
<h3 class="text-lg font-bold">History Data</h3>
<p class="py-4 text-base font-['Plus Jakarta Sans']">Terdapat 30 History perubahan data</p>
<div class="px-3 pt-4 pb-8 bg-gray-50">
<div class="flex flex-col gap-4 pl-4 border-l-2 border-gray-300">
<div class="flex flex-col gap-1">
<div class="text-gray-500 text-xs leading-4">Admin Subandri</div>
<div class="text-primary-500 text-base">Current Version</div>
</div>
<div class="flex flex-col gap-1">
<div class="text-gray-500 text-xs leading-4">Admin Subandri</div>
<div class="text-gray-600 text-base">12:26 pm</div>
</div>
<div class="flex flex-col gap-1">
<div class="text-gray-500 text-xs leading-4">Admin Subandri</div>
<div class="text-gray-600 text-base">24 Nov 2025, 12:26 pm</div>
</div>
<div class="flex flex-col gap-1">
<div class="text-gray-500 text-xs leading-4">Admin Subandri</div>
<div class="text-gray-600 text-base">23 Nov 2025, 12:26 pm</div>
</div>
<div class="flex flex-col gap-1">
<div class="text-gray-500 text-xs leading-4">Admin Subandri</div>
<div class="text-gray-600 text-base">22 Nov 2025, 12:26 pm</div>
</div>
</div>
</div>
</div>
</dialog>
<!-- End Modal History -->
<!-- Modal Validasi Data -->
<dialog id="modal_validasi" class="modal modal-bottom sm:modal-middle">
<div
class="modal-box w-full max-w-[591px] p-6 bg-white rounded-2xl inline-flex flex-col justify-center items-end gap-6">
<div class="self-stretch inline-flex justify-between items-center">
<div class="flex-1 justify-start text-gray-900 text-xl font-semibold font-['Plus Jakarta Sans'] leading-8">
Validasi Data</div>
<button type="button" class="w-5 h-5 relative" onclick="closeValidasiModal()">
<i class="ph ph-x text-gray-500 text-xl"></i>
</button>
</div>
<div class="self-stretch flex flex-col justify-center items-center">
<div class="self-stretch px-3 pt-3 pb-8 bg-gray-50 rounded-lg inline-flex justify-start items-start gap-4">
<div class="flex-1 inline-flex flex-col justify-start items-start gap-1">
<div
class="self-stretch justify-start text-gray-500 text-xs font-normal font-['Plus Jakarta Sans'] leading-4">
Periode</div>
<div id="val_periode"
class="self-stretch justify-start text-slate-600 text-base font-normal font-['Plus Jakarta Sans'] leading-6">
29 Jul 2024</div>
</div>
<div class="flex-1 inline-flex flex-col justify-start items-start gap-1">
<div
class="self-stretch justify-start text-gray-500 text-xs font-normal font-['Plus Jakarta Sans'] leading-4">
Nama Lokasi</div>
<div id="val_nama_lokasi"
class="self-stretch justify-start text-slate-600 text-base font-normal font-['Plus Jakarta Sans'] leading-6">
Jakarta Selatan</div>
</div>
<div class="flex-1 inline-flex flex-col justify-start items-start gap-1">
<div
class="self-stretch justify-start text-gray-500 text-xs font-normal font-['Plus Jakarta Sans'] leading-4">
Jenis Lokasi</div>
<div id="val_jenis_lokasi"
class="self-stretch justify-start text-slate-600 text-base font-normal font-['Plus Jakarta Sans'] leading-6">
Maggot</div>
</div>
</div>
</div>
<div
class="self-stretch justify-start text-slate-800 text-base font-semibold font-['Plus Jakarta Sans'] leading-6">
Anda yakin ingin melakukan validasi data ?</div>
<div class="self-stretch inline-flex justify-end items-center gap-3">
<button type="button" class="btn btn-outline btn-sm rounded-full flex justify-center items-center gap-2"
onclick="confirmTolakValidasi()">
<div class="justify-start text-slate-800 text-sm font-semibold font-['Plus Jakarta Sans'] leading-5">
Tolak Validasi</div>
</button>
<button type="button" class="btn btn-success btn-sm rounded-full flex justify-center items-center gap-2"
onclick="confirmValidasi()">
<div class="justify-start text-white text-sm font-semibold font-['Plus Jakarta Sans'] leading-5">Ya
</div>
</button>
</div>
</div>
<form method="dialog" class="modal-backdrop">
<button>close</button>
</form>
</dialog>
<!-- /modal validasi -->
<!-- Modal Tambah/Edit Data -->
<dialog id="modal_tambah" class="modal modal-bottom sm:modal-middle">
<div class="modal-box w-full max-w-2xl p-6 bg-white rounded-2xl">
<h3 id="modal_title" class="text-gray-900 text-xl font-semibold font-['Plus Jakarta Sans'] leading-8 mb-8">
Tambah Reduksi Sampah</h3>
<form id="formTambah" onsubmit="submitForm(event)">
<input type="hidden" id="edit_mode" value="false">
<input type="hidden" id="reduksi_sampah_id" value="">
<div class="flex flex-col gap-6">
<div class="flex flex-col">
<fieldset class="fieldset">
<legend class="fieldset-legend">
Jenis Lokasi
<span class="text-red-500">*</span>
</legend>
<select id="jenis_lokasi" class="select w-full" required>
<option value="Komposting">Komposting</option>
<option value="Maggot">Maggot</option>
</select>
</fieldset>
</div>
<div id="formDetail" class="flex flex-col gap-6">
<div class="flex flex-col">
<fieldset class="fieldset">
<legend class="fieldset-legend">
Lokasi<span class="text-red-500">*</span>
</legend>
<select id="lokasi" class="select w-full" required>
<option value="" disabled selected>Pilih salah satu</option>
</select>
</fieldset>
</div>
<div class="flex flex-col">
<fieldset class="fieldset">
<legend class="fieldset-legend">
Alamat
</legend>
<textarea id="alamat" rows="4" readonly class="textarea w-full"></textarea>
</fieldset>
</div>
<div class="flex flex-col">
<fieldset class="fieldset">
<legend class="fieldset-legend">
Bukti Kegiatan
<span class="text-red-500">*</span>
</legend>
<input type="file" class="file-input file w-full" />
<label class="label">Ukuran Maksimal 5MB</label>
</fieldset>
</div>
<div class="flex flex-col">
<fieldset class="fieldset">
<legend class="fieldset-legend">
Keterangan Kegiatan<span class="text-red-500">*</span>
</legend>
<textarea id="keterangan_kegiatan" rows="4" required placeholder="Keterangan Kegiatan"
class="textarea w-full"></textarea>
</fieldset>
</div>
<div class="flex flex-col">
<fieldset class="fieldset">
<legend class="fieldset-legend">
Tanggal Pelaksanaan Kegiatan
<span class="text-red-500">*</span>
</legend>
<input type="date" id="tgl_pelaksanaan_kegiatan" class="input w-full" required />
</fieldset>
</div>
<div class="flex flex-col">
<fieldset class="fieldset">
<legend class="fieldset-legend">
Pelaksana Kegiatan<span class="text-red-500">*</span>
</legend>
<input type="text" id="preview" class="input w-full" placeholder="Pelaksana Kegiatan"
required />
</fieldset>
</div>
</div>
<div class="flex flex-col sm:flex-row gap-3 justify-end">
<button type="button" class="btn btn-outline rounded-full w-full sm:w-auto" onclick="closeModal()">
Batal
</button>
<button type="submit"
class="btn bg-bank-sampah-primary-500 rounded-full text-white w-full sm:w-auto">
Simpan
</button>
</div>
</div>
</form>
</div>
<form method="dialog" class="modal-backdrop">
<button>close</button>
</form>
</dialog>
<!-- /modal tambah/edit -->
<div class="h-6"></div>
<div class="card bg-white shadow-sm">
<div class="card-body p-2">
<div class="w-full overflow-x-auto">
<table class="table-zebra table w-full" id="example">
<thead>
<tr>
<th>No</th>
<th>Periode</th>
<th>Nama Lokasi</th>
<th>Alamat</th>
<th>Jenis Lokasi</th>
<th>Berat Reduksi (Kg)</th>
<th>Berat Sampah (Kg)</th>
<th>Bukti Kegiatan</th>
<th>Aksi</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</div>
@section Scripts {
<script type="text/javascript">
const jenisReduksi = '@jenis';
const tableAjaxUrl = '@tableUrl';
var table;
var allLokasi = [];
$(document).ready(function () {
$.ajax({
url: '/ReduksiSampah/Lokasi/Table',
method: 'GET',
success: function (response) {
allLokasi = (response.data || []).map(item => ({
jenis_lokasi: item.jenis_lokasi,
nama_lokasi: item.nama_lokasi,
kecamatan: item.kecamatan,
kelurahan: item.kelurahan,
detail_alamat: item.detail_alamat,
rt: item.rt,
rw: item.rw
}));
$('#jenis_lokasi').val(jenisReduksi).trigger('change');
$('#jenis_lokasi').prop('disabled', true);
},
error: function () {
console.error("Gagal mengambil data lokasi dari /ReduksiSampah/Lokasi/Table");
}
});
table = new DataTable('#example', {
ajax: tableAjaxUrl,
scrollX: true,
autoWidth: false,
initComplete: function () {
$('div.dt-scroll-body thead').css('visibility', 'collapse');
},
columns: [
{ data: null, render: (d, t, r, m) => m.row + 1, orderable: false, searchable: false },
{ data: 'periode_bulan' },
{ data: 'nama_lokasi' },
{ data: 'alamat' },
{ data: 'jenis_lokasi' },
{ data: 'berat_reduksi' },
{ data: 'berat_sampah' },
{ data: 'gambar', orderable: false, searchable: false },
{ data: 'aksi', orderable: false, searchable: false },
]
});
$('#example').on('click', '.btn-history', function (e) {
e.preventDefault();
modal_history.showModal();
});
$('#example').on('click', '.btn-validation', function (e) {
e.preventDefault();
const row = table.row($(this).parents('tr')).data();
if (row) {
$('#val_periode').text(row.periode_bulan);
$('#val_nama_lokasi').text(row.nama_lokasi);
$('#val_jenis_lokasi').text(row.jenis_lokasi);
}
modal_validasi.showModal();
});
$('#jenis_lokasi').on('change', function () {
const jenisLokasi = $(this).val();
if (jenisLokasi) {
$('#formDetail').removeClass('hidden').hide().fadeIn(300);
populateNamaLokasiDropdown(jenisLokasi);
} else {
$('#formDetail').fadeOut(300);
}
});
$('#lokasi').on('change', function () {
const nama = $(this).val();
if (!nama) {
$('#alamat').val('');
return;
}
const lokasi = allLokasi.find(item => item.nama_lokasi === nama);
if (lokasi) {
const formattedAlamat = `${lokasi.kecamatan}, ${lokasi.kelurahan}, RT ${lokasi.rt}, RW ${lokasi.rw}, ${lokasi.detail_alamat}`;
$('#alamat').val(formattedAlamat);
}
});
$('#example').on('click', '.btn-edit', function (e) {
e.preventDefault();
var row = table.row($(this).parents('tr')).data();
$('#edit_mode').val('true');
$('#reduksi_sampah_id').val(row.id);
$('#modal_title').text('Edit Reduksi Sampah');
modal_tambah.showModal();
});
$('#example').on('click', '.btn-delete', function (e) {
e.preventDefault();
const row = table.row($(this).parents('tr')).data();
Swal.fire({
title: 'Hapus data?',
text: `Data ${row?.nama_lokasi || ''} akan dihapus secara permanen.`,
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#d33',
cancelButtonColor: '#3085d6',
confirmButtonText: 'Ya, hapus',
cancelButtonText: 'Batal'
}).then((result) => {
if (result.isConfirmed) {
Swal.fire('Terhapus', 'Data berhasil dihapus (simulasi).', 'success');
table.ajax.reload();
}
});
});
});
function populateNamaLokasiDropdown(jenisLokasi) {
let options = '<option value=\"\">Pilih salah satu</option>';
if (jenisLokasi) {
const filtered = allLokasi.filter(item => item.jenis_lokasi === jenisLokasi);
filtered.forEach(item => {
options += `<option value="${item.nama_lokasi}">${item.nama_lokasi}</option>`;
});
}
$('#lokasi').html(options);
}
function closeModal() {
$('#formTambah')[0].reset();
$('#edit_mode').val('false');
$('#modal_title').text('Tambah Reduksi Sampah');
$('#jenis_lokasi').val(jenisReduksi);
modal_tambah.close();
}
function closeValidasiModal() {
modal_validasi.close();
}
function confirmValidasi() {
closeValidasiModal();
table.ajax.reload();
}
function confirmTolakValidasi() {
closeValidasiModal();
table.ajax.reload();
}
</script>
}

View File

@ -1,33 +1,34 @@
@{
ViewData["Title"] = "Lokasi Maggot, Bank Sampah, Composting";
ViewData["Title"] = "Reduksi Sampah - Lokasi";
}
<style>
.select2-container .select2-selection--single {
height: 3rem;
padding: 0.5rem 1rem;
border-radius: 0.5rem;
border: 1px solid #d4d4d8;
}
<style>
.select2-container .select2-selection--single {
height: 3rem;
padding: 0.5rem 1rem;
border-radius: 0.5rem;
border: 1px solid #d4d4d8;
}
.select2-selection__rendered {
line-height: 2rem !important;
}
.select2-selection__rendered {
line-height: 2rem !important;
}
.select2-selection__arrow {
height: 2rem !important;
}
</style>
.select2-selection__arrow {
height: 2rem !important;
}
</style>
<div class="flex flex-col gap-2 md:flex-row md:justify-between md:gap-0">
<div class="prose">
<span class="text-xl font-semibold text-black">
Lokasi Maggot, Bank Sampah, Composting
Reduksi Sampah - Lokasi
</span>
</div>
<div class="flex flex-col gap-2 md:flex-row">
<button class="btn btn-sm bg-green-800 max-w-full rounded-full text-white hover:bg-green-900" onclick="openModal()">
<button class="btn btn-sm bg-green-800 max-w-full rounded-full text-white hover:bg-green-900"
onclick="openModal()">
<i class="ph ph-plus"></i>
Tambah Lokasi
</button>
@ -37,7 +38,8 @@
<!-- Modal Tambah/Edit Data -->
<dialog id="modal_tambah" class="modal modal-bottom sm:modal-middle">
<div class="modal-box w-full max-w-2xl p-6 bg-white rounded-2xl">
<h3 id="modal_title" class="text-gray-900 text-xl font-semibold font-['Plus_Jakarta_Sans'] leading-8 mb-8">Tambah Lokasi</h3>
<h3 id="modal_title" class="text-gray-900 text-xl font-semibold font-['Plus_Jakarta_Sans'] leading-8 mb-8">
Tambah Lokasi</h3>
<form id="formTambah" onsubmit="submitForm(event)">
<input type="hidden" id="edit_mode" value="false">
<div class="flex flex-col gap-6">
@ -159,17 +161,21 @@
<legend class="fieldset-legend">
Detail Alamat<span class="text-red-500">*</span>
</legend>
<textarea id="detail_alamat" rows="4" required placeholder="Detail Alamat" class="textarea textarea-bordered w-full"></textarea>
<textarea id="detail_alamat" rows="4" required placeholder="Detail Alamat"
class="textarea textarea-bordered w-full"></textarea>
</fieldset>
</div>
<!-- Buttons -->
<div class="flex flex-col sm:flex-row gap-3 justify-end">
<button type="button" class="px-8 py-2.5 bg-white rounded-full outline outline-1 -outline-offset-1 outline-gray-300 text-slate-800 text-base font-semibold font-['Plus_Jakarta_Sans'] leading-6 hover:bg-gray-50 w-full sm:w-auto" onclick="closeModal()">
<button type="button"
class="px-8 py-2.5 bg-white rounded-full outline-1 -outline-offset-1 outline-gray-300 text-slate-800 text-base font-semibold font-['Plus_Jakarta_Sans'] leading-6 hover:bg-gray-50 w-full sm:w-auto"
onclick="closeModal()">
Batal
</button>
<button type="submit" class="px-8 py-2.5 bg-green-800 rounded-full text-white text-base font-semibold font-['Plus_Jakarta_Sans'] leading-6 hover:bg-green-900 w-full sm:w-auto">
<button type="submit"
class="px-8 py-2.5 bg-green-800 rounded-full text-white text-base font-semibold font-['Plus_Jakarta_Sans'] leading-6 hover:bg-green-900 w-full sm:w-auto">
Simpan
</button>
</div>
@ -212,15 +218,15 @@
@section Scripts {
<script type="text/javascript">
$('.select2').select2({
dropdownParent: $('#modal_tambah'), // Penting untuk modal
width: '100%'
}
dropdownParent: $('#modal_tambah'), // Penting untuk modal
width: '100%'
}
);
var table;
$(document).ready(function () {
table = new DataTable('#example', {
ajax: '/Master/Lokasi/Table',
ajax: '/ReduksiSampah/Lokasi/Table',
scrollX: true,
autoWidth: false,
initComplete: function () {
@ -307,8 +313,8 @@
url: '/Master/JenisSampah/table', // Ganti sesuai endpoint kamu
method: 'GET',
dataType: 'json',
success: function (response) {
// Buat HTML option dengan map
success: function (response) {
// Buat HTML option dengan map
let options = response.data
.map(item => `<option value="${item.nama}">${item.nama}</option>`)
.join("");
@ -358,4 +364,4 @@
});
}
</script>
}
}

View File

@ -0,0 +1,422 @@
@{
var jenis = "Maggot";
var tableUrl = Url.Content("~/ReduksiSampah/Maggot/Table");
ViewData["Title"] = $"Reduksi Sampah - {jenis}";
}
<div class="flex flex-col gap-2 md:flex-row md:justify-between md:gap-0 items-center">
<div class="prose">
<span class="text-xl font-semibold text-black">
Reduksi Sampah - @jenis
</span>
</div>
<div class="flex gap-2 items-center">
<select class="select rounded-full">
<option disabled selected>Pilih Tahun</option>
<option>2025</option>
<option>2024</option>
<option>2023</option>
<option>2022</option>
<option>2021</option>
<option>2020</option>
</select>
<button type="button" class="btn btn-sm bg-bank-sampah-primary-500 rounded-full text-white"
onclick="modal_tambah.showModal()"><i class="ph ph-plus"></i>Tambah</button>
</div>
</div>
<!-- Modal History -->
<dialog id="modal_history" class="modal">
<div class="modal-box max-w-md">
<form method="dialog">
<button class="btn btn-sm btn-circle btn-ghost absolute right-2 top-2">✕</button>
</form>
<h3 class="text-lg font-bold">History Data</h3>
<p class="py-4 text-base font-['Plus Jakarta Sans']">Terdapat 30 History perubahan data</p>
<div class="px-3 pt-4 pb-8 bg-gray-50">
<div class="flex flex-col gap-4 pl-4 border-l-2 border-gray-300">
<div class="flex flex-col gap-1">
<div class="text-gray-500 text-xs leading-4">Admin Subandri</div>
<div class="text-primary-500 text-base">Current Version</div>
</div>
<div class="flex flex-col gap-1">
<div class="text-gray-500 text-xs leading-4">Admin Subandri</div>
<div class="text-gray-600 text-base">12:26 pm</div>
</div>
<div class="flex flex-col gap-1">
<div class="text-gray-500 text-xs leading-4">Admin Subandri</div>
<div class="text-gray-600 text-base">24 Nov 2025, 12:26 pm</div>
</div>
<div class="flex flex-col gap-1">
<div class="text-gray-500 text-xs leading-4">Admin Subandri</div>
<div class="text-gray-600 text-base">23 Nov 2025, 12:26 pm</div>
</div>
<div class="flex flex-col gap-1">
<div class="text-gray-500 text-xs leading-4">Admin Subandri</div>
<div class="text-gray-600 text-base">22 Nov 2025, 12:26 pm</div>
</div>
</div>
</div>
</div>
</dialog>
<!-- End Modal History -->
<!-- Modal Validasi Data -->
<dialog id="modal_validasi" class="modal modal-bottom sm:modal-middle">
<div
class="modal-box w-full max-w-[591px] p-6 bg-white rounded-2xl inline-flex flex-col justify-center items-end gap-6">
<div class="self-stretch inline-flex justify-between items-center">
<div class="flex-1 justify-start text-gray-900 text-xl font-semibold font-['Plus Jakarta Sans'] leading-8">
Validasi Data</div>
<button type="button" class="w-5 h-5 relative" onclick="closeValidasiModal()">
<i class="ph ph-x text-gray-500 text-xl"></i>
</button>
</div>
<div class="self-stretch flex flex-col justify-center items-center">
<div class="self-stretch px-3 pt-3 pb-8 bg-gray-50 rounded-lg inline-flex justify-start items-start gap-4">
<div class="flex-1 inline-flex flex-col justify-start items-start gap-1">
<div
class="self-stretch justify-start text-gray-500 text-xs font-normal font-['Plus Jakarta Sans'] leading-4">
Periode</div>
<div id="val_periode"
class="self-stretch justify-start text-slate-600 text-base font-normal font-['Plus Jakarta Sans'] leading-6">
29 Jul 2024</div>
</div>
<div class="flex-1 inline-flex flex-col justify-start items-start gap-1">
<div
class="self-stretch justify-start text-gray-500 text-xs font-normal font-['Plus Jakarta Sans'] leading-4">
Nama Lokasi</div>
<div id="val_nama_lokasi"
class="self-stretch justify-start text-slate-600 text-base font-normal font-['Plus Jakarta Sans'] leading-6">
Jakarta Selatan</div>
</div>
<div class="flex-1 inline-flex flex-col justify-start items-start gap-1">
<div
class="self-stretch justify-start text-gray-500 text-xs font-normal font-['Plus Jakarta Sans'] leading-4">
Jenis Lokasi</div>
<div id="val_jenis_lokasi"
class="self-stretch justify-start text-slate-600 text-base font-normal font-['Plus Jakarta Sans'] leading-6">
Maggot</div>
</div>
</div>
</div>
<div
class="self-stretch justify-start text-slate-800 text-base font-semibold font-['Plus Jakarta Sans'] leading-6">
Anda yakin ingin melakukan validasi data ?</div>
<div class="self-stretch inline-flex justify-end items-center gap-3">
<button type="button" class="btn btn-outline btn-sm rounded-full flex justify-center items-center gap-2"
onclick="confirmTolakValidasi()">
<div class="justify-start text-slate-800 text-sm font-semibold font-['Plus Jakarta Sans'] leading-5">
Tolak Validasi</div>
</button>
<button type="button" class="btn btn-success btn-sm rounded-full flex justify-center items-center gap-2"
onclick="confirmValidasi()">
<div class="justify-start text-white text-sm font-semibold font-['Plus Jakarta Sans'] leading-5">Ya
</div>
</button>
</div>
</div>
<form method="dialog" class="modal-backdrop">
<button>close</button>
</form>
</dialog>
<!-- /modal validasi -->
<!-- Modal Tambah/Edit Data -->
<dialog id="modal_tambah" class="modal modal-bottom sm:modal-middle">
<div class="modal-box w-full max-w-2xl p-6 bg-white rounded-2xl">
<h3 id="modal_title" class="text-gray-900 text-xl font-semibold font-['Plus Jakarta Sans'] leading-8 mb-8">
Tambah Reduksi Sampah</h3>
<form id="formTambah" onsubmit="submitForm(event)">
<input type="hidden" id="edit_mode" value="false">
<input type="hidden" id="reduksi_sampah_id" value="">
<div class="flex flex-col gap-6">
<div class="flex flex-col">
<fieldset class="fieldset">
<legend class="fieldset-legend">
Jenis Lokasi
<span class="text-red-500">*</span>
</legend>
<select id="jenis_lokasi" class="select w-full" required>
<option value="Komposting">Komposting</option>
<option value="Maggot">Maggot</option>
</select>
</fieldset>
</div>
<div id="formDetail" class="flex flex-col gap-6">
<div class="flex flex-col">
<fieldset class="fieldset">
<legend class="fieldset-legend">
Lokasi<span class="text-red-500">*</span>
</legend>
<select id="lokasi" class="select w-full" required>
<option value="" disabled selected>Pilih salah satu</option>
</select>
</fieldset>
</div>
<div class="flex flex-col">
<fieldset class="fieldset">
<legend class="fieldset-legend">
Alamat
</legend>
<textarea id="alamat" rows="4" readonly class="textarea w-full"></textarea>
</fieldset>
</div>
<div class="flex flex-col">
<fieldset class="fieldset">
<legend class="fieldset-legend">
Bukti Kegiatan
<span class="text-red-500">*</span>
</legend>
<input type="file" class="file-input file w-full" />
<label class="label">Ukuran Maksimal 5MB</label>
</fieldset>
</div>
<div class="flex flex-col">
<fieldset class="fieldset">
<legend class="fieldset-legend">
Keterangan Kegiatan<span class="text-red-500">*</span>
</legend>
<textarea id="keterangan_kegiatan" rows="4" required placeholder="Keterangan Kegiatan"
class="textarea w-full"></textarea>
</fieldset>
</div>
<div class="flex flex-col">
<fieldset class="fieldset">
<legend class="fieldset-legend">
Tanggal Pelaksanaan Kegiatan
<span class="text-red-500">*</span>
</legend>
<input type="date" id="tgl_pelaksanaan_kegiatan" class="input w-full" required />
</fieldset>
</div>
<div class="flex flex-col">
<fieldset class="fieldset">
<legend class="fieldset-legend">
Pelaksana Kegiatan<span class="text-red-500">*</span>
</legend>
<input type="text" id="preview" class="input w-full" placeholder="Pelaksana Kegiatan"
required />
</fieldset>
</div>
</div>
<div class="flex flex-col sm:flex-row gap-3 justify-end">
<button type="button" class="btn btn-outline rounded-full w-full sm:w-auto" onclick="closeModal()">
Batal
</button>
<button type="submit"
class="btn bg-bank-sampah-primary-500 rounded-full text-white w-full sm:w-auto">
Simpan
</button>
</div>
</div>
</form>
</div>
<form method="dialog" class="modal-backdrop">
<button>close</button>
</form>
</dialog>
<!-- /modal tambah/edit -->
<div class="h-6"></div>
<div class="card bg-white shadow-sm">
<div class="card-body p-2">
<div class="w-full overflow-x-auto">
<table class="table-zebra table w-full" id="example">
<thead>
<tr>
<th>No</th>
<th>Periode</th>
<th>Nama Lokasi</th>
<th>Alamat</th>
<th>Jenis Lokasi</th>
<th>Berat Reduksi (Kg)</th>
<th>Berat Sampah (Kg)</th>
<th>Bukti Kegiatan</th>
<th>Aksi</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</div>
@section Scripts {
<script type="text/javascript">
const jenisReduksi = '@jenis';
const tableAjaxUrl = '@tableUrl';
var table;
var allLokasi = [];
$(document).ready(function () {
$.ajax({
url: '/ReduksiSampah/Lokasi/Table',
method: 'GET',
success: function (response) {
allLokasi = (response.data || []).map(item => ({
jenis_lokasi: item.jenis_lokasi,
nama_lokasi: item.nama_lokasi,
kecamatan: item.kecamatan,
kelurahan: item.kelurahan,
detail_alamat: item.detail_alamat,
rt: item.rt,
rw: item.rw
}));
$('#jenis_lokasi').val(jenisReduksi).trigger('change');
$('#jenis_lokasi').prop('disabled', true);
},
error: function () {
console.error("Gagal mengambil data lokasi dari /ReduksiSampah/Lokasi/Table");
}
});
table = new DataTable('#example', {
ajax: tableAjaxUrl,
scrollX: true,
autoWidth: false,
initComplete: function () {
$('div.dt-scroll-body thead').css('visibility', 'collapse');
},
columns: [
{ data: null, render: (d, t, r, m) => m.row + 1, orderable: false, searchable: false },
{ data: 'periode_bulan' },
{ data: 'nama_lokasi' },
{ data: 'alamat' },
{ data: 'jenis_lokasi' },
{ data: 'berat_reduksi' },
{ data: 'berat_sampah' },
{ data: 'gambar', orderable: false, searchable: false },
{ data: 'aksi', orderable: false, searchable: false },
]
});
$('#example').on('click', '.btn-history', function (e) {
e.preventDefault();
modal_history.showModal();
});
$('#example').on('click', '.btn-validation', function (e) {
e.preventDefault();
const row = table.row($(this).parents('tr')).data();
if (row) {
$('#val_periode').text(row.periode_bulan);
$('#val_nama_lokasi').text(row.nama_lokasi);
$('#val_jenis_lokasi').text(row.jenis_lokasi);
}
modal_validasi.showModal();
});
$('#jenis_lokasi').on('change', function () {
const jenisLokasi = $(this).val();
if (jenisLokasi) {
$('#formDetail').removeClass('hidden').hide().fadeIn(300);
populateNamaLokasiDropdown(jenisLokasi);
} else {
$('#formDetail').fadeOut(300);
}
});
$('#lokasi').on('change', function () {
const nama = $(this).val();
if (!nama) {
$('#alamat').val('');
return;
}
const lokasi = allLokasi.find(item => item.nama_lokasi === nama);
if (lokasi) {
const formattedAlamat = `${lokasi.kecamatan}, ${lokasi.kelurahan}, RT ${lokasi.rt}, RW ${lokasi.rw}, ${lokasi.detail_alamat}`;
$('#alamat').val(formattedAlamat);
}
});
$('#example').on('click', '.btn-edit', function (e) {
e.preventDefault();
var row = table.row($(this).parents('tr')).data();
$('#edit_mode').val('true');
$('#reduksi_sampah_id').val(row.id);
$('#modal_title').text('Edit Reduksi Sampah');
modal_tambah.showModal();
});
$('#example').on('click', '.btn-delete', function (e) {
e.preventDefault();
const row = table.row($(this).parents('tr')).data();
Swal.fire({
title: 'Hapus data?',
text: `Data ${row?.nama_lokasi || ''} akan dihapus secara permanen.`,
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#d33',
cancelButtonColor: '#3085d6',
confirmButtonText: 'Ya, hapus',
cancelButtonText: 'Batal'
}).then((result) => {
if (result.isConfirmed) {
Swal.fire('Terhapus', 'Data berhasil dihapus (simulasi).', 'success');
table.ajax.reload();
}
});
});
});
function populateNamaLokasiDropdown(jenisLokasi) {
let options = '<option value=\"\">Pilih salah satu</option>';
if (jenisLokasi) {
const filtered = allLokasi.filter(item => item.jenis_lokasi === jenisLokasi);
filtered.forEach(item => {
options += `<option value="${item.nama_lokasi}">${item.nama_lokasi}</option>`;
});
}
$('#lokasi').html(options);
}
function closeModal() {
$('#formTambah')[0].reset();
$('#edit_mode').val('false');
$('#modal_title').text('Tambah Reduksi Sampah');
$('#jenis_lokasi').val(jenisReduksi);
modal_tambah.close();
}
function closeValidasiModal() {
modal_validasi.close();
}
function confirmValidasi() {
closeValidasiModal();
table.ajax.reload();
}
function confirmTolakValidasi() {
closeValidasiModal();
table.ajax.reload();
}
</script>
}

View File

@ -150,7 +150,7 @@
<!-- Master Data -->
<li>
<details @(module == "Master" && new[] { "Aktivitas", "Artikel", "Pendamping","BadanHukum", "Fasilitas", "JenisBankSampah", "JenisNasabah", "JenisPengolahan", "Kategori", "KategoriFasilitas", "Mitra", "StatusLahan", "JenisSampah", "KategoriSampah", "SubKategoriSampah", "Lokasi" }.Contains(controller) ? "open" : "")>
<details @(module == "Master" && new[] { "Aktivitas", "Artikel", "Pendamping","BadanHukum", "Fasilitas", "JenisBankSampah", "JenisNasabah", "JenisPengolahan", "Kategori", "KategoriFasilitas", "Mitra", "StatusLahan", "JenisSampah", "KategoriSampah", "SubKategoriSampah" }.Contains(controller) ? "open" : "")>
<summary>
<i class="ph ph-database me-1 text-lg text-gray-400"></i>
Master Data
@ -171,7 +171,6 @@
<li><a href="/Master/JenisSampah/Index" class="@(module == "Master" && controller == "JenisSampah" ? "menu-active" : "")">Jenis Sampah</a></li>
<li><a href="/Master/KategoriSampah/Index" class="@(module == "Master" && controller == "KategoriSampah" ? "menu-active" : "")">Kategori Sampah</a></li>
<li><a href="/Master/SubKategoriSampah/Index" class="@(module == "Master" && controller == "SubKategoriSampah" ? "menu-active" : "")">Sub Kategori Sampah</a></li>
<li><a href="/Master/Lokasi/Index" class="@(module == "Master" && controller == "Lokasi" ? "menu-active" : "")">Lokasi</a></li>
<li><a href="/Master/Broadcast/Index" class="@(module == "Master" && controller == "Broadcast" ? "menu-active" : "")">Broadcast Informasi</a></li>
</ul>
</details>
@ -185,25 +184,20 @@
</a>
</li>
<!-- Reduksi -->
<!-- Reduksi Sampah -->
<li>
<a asp-controller="ReduksiSampahDinas" class="@(controller == "ReduksiSampahDinas" ? "menu-active" : "")">
<i class="ph ph-database me-1 text-lg text-gray-400"></i>
Reduksi Sampah Dinas
</a>
</li>
<li>
<a asp-controller="ReduksiSampahSatpel" class="@(controller == "ReduksiSampahSatpel" ? "menu-active" : "")">
<i class="ph ph-database me-1 text-lg text-gray-400"></i>
Reduksi Sampah Satpel
</a>
</li>
<li>
<a asp-controller="ReduksiSampahSudin" class="@(controller == "ReduksiSampahSudin" ? "menu-active" : "")">
<i class="ph ph-database me-1 text-lg text-gray-400"></i>
Reduksi Sampah Sudin
</a>
</li>
<details @(module == "ReduksiSampah" && new[] { "Maggot", "Komposting", "Lokasi" }.Contains(controller) ? "open" : "")>
<summary>
<i class="ph ph-database me-1 text-lg text-gray-400"></i>
Reduksi Sampah
</summary>
<ul>
<li><a href="/ReduksiSampah/Maggot/Index" class="@(module == "ReduksiSampah" && controller == "Maggot" ? "menu-active" : "")">Maggot</a></li>
<li><a href="/ReduksiSampah/Komposting/Index" class="@(module == "ReduksiSampah" && controller == "Komposting" ? "menu-active" : "")">Komposting</a></li>
<li><a href="/ReduksiSampah/Lokasi/Index" class="@(module == "ReduksiSampah" && controller == "Lokasi" ? "menu-active" : "")">Lokasi</a></li>
</ul>
</details>
</li>
<!-- <li>
<details @(new[] { "Maggot", "Composting", "ReduksiSampah", "BankSampah" }.Contains(controller) ? "open" : "")>
<summary>