bps-rw/Controllers/DataPendampingRwController.cs

234 lines
7.9 KiB
C#

using Microsoft.AspNetCore.Mvc;
using System.Linq;
namespace BpsRwApp.Controllers
{
[Route("[controller]/[action]")]
public class DataPendampingRwController : AppControllerBase
{
public IActionResult Index()
{
return View();
}
[HttpGet]
public IActionResult Detail(string nama, string rw)
{
if (string.IsNullOrEmpty(nama) || string.IsNullOrEmpty(rw))
return RedirectToAction("Index");
ViewBag.Nama = nama;
ViewBag.RW = rw;
return View();
}
[HttpGet]
public IActionResult TableDetail(string rw)
{
var data = Enumerable.Range(1, 10)
.Select(i => new
{
id = i,
tanggal = "2025-09-22",
rw = rw ?? "04",
kelurahan = "Tomang",
mudah_terurai = "17/4",
materi_daur = "17/4",
b3 = "17/4",
residu_jumlah = "17/4",
photo = 0
})
.ToList();
return Json(new { data });
}
[HttpGet]
public IActionResult TableRapot()
{
var data = Enumerable.Range(0, 100)
.Select(index =>
{
var nama = ControllerSampleData.PersonNames[index % ControllerSampleData.PersonNames.Length];
var checklistCount = 8 + (index % 15);
var totalBeratSampah = 40 + (index * 3 % 70);
var fotoCount = 5 + (index * 4 % 250);
var rumahAktif = (index * 3) % 15;
return new
{
nama,
checklist = BuildMetricBadge(checklistCount, 8, 12),
berat_sampah = BuildMetricBadge(totalBeratSampah, 50, 90),
foto = BuildFotoIndicator(fotoCount),
rumah_aktif_memilah = BuildMetricBadge(rumahAktif, 3, 9),
status = BuildStatusBadge(index),
};
})
.ToArray();
return Json(new { data });
}
[HttpGet]
public IActionResult TableChecklist()
{
var data = Enumerable.Range(0, 100)
.Select(index =>
{
var nama = ControllerSampleData.PersonNames[index % ControllerSampleData.PersonNames.Length];
var checklistCount = 9 + (index % 18);
var fotoCount = 3 + (index * 2 % 180);
var targetRumah = 8 + (index % 10);
var rumahAktif = targetRumah - (index % 5);
if (rumahAktif < 0)
{
rumahAktif = 0;
}
var rw = (index % 10 + 1).ToString("D2");
var detailUrl = $"/DataPendampingRw/Detail?nama={System.Web.HttpUtility.UrlEncode(nama)}&rw={rw}";
return new
{
nama,
checklist = BuildMetricBadge(checklistCount, 10, 15),
foto = BuildFotoIndicator(fotoCount),
rumah_aktif_memilah = BuildRatioBadge(rumahAktif, targetRumah),
aksi = BuildDetailAction(detailUrl),
};
})
.ToArray();
return Json(new { data });
}
[HttpGet]
public IActionResult TableBeratSampah()
{
var data = Enumerable.Range(0, 100)
.Select(index =>
{
var nama = ControllerSampleData.PersonNames[index % ControllerSampleData.PersonNames.Length];
var mudahTerurai = 40 + (index * 2 % 80);
var materialDaurUlang = 25 + (index * 3 % 60);
var b3 = 5 + index % 7;
var residu = 10 + index % 9;
var totalBerat = mudahTerurai + materialDaurUlang + b3 + residu;
return new
{
nama,
total_berat = totalBerat,
mudah_terurai = mudahTerurai,
material_daur_ulang = materialDaurUlang,
b3,
residu,
};
})
.ToArray();
return Json(new { data });
}
[HttpGet]
public IActionResult DetailPendamping(string nama, string rw, string tanggal)
{
if (string.IsNullOrEmpty(nama) || string.IsNullOrEmpty(rw))
return RedirectToAction("Index");
ViewBag.Nama = nama;
ViewBag.RW = rw;
ViewBag.Tanggal = tanggal ?? DateTime.Now.ToString("yyyy-MM-dd");
return View();
}
[HttpGet]
public IActionResult TableDetailPendamping(string rw, string tanggal)
{
var random = new Random();
var data = Enumerable.Range(1, 50)
.Select(i => new
{
no = i,
alamat_rumah = GenerateAlamat(i),
rw = rw ?? "04",
mudah_terurai = true,
material_daur = true,
b3 = true,
residu = true,
photo = random.Next(0, 5)
})
.ToList();
return Json(new { data });
}
private static string GenerateAlamat(int index)
{
var streetNames = new[]
{
"Kedongan", "Jambu", "Mangga", "Durian", "Sawo",
"Mangga", "Rambutan", "Salak", "Nangka", "Duku"
};
var randomStreet = streetNames[index % streetNames.Length];
var houseNumber = (index * 11) % 100 + 1;
return $"Jalan {randomStreet} No. {houseNumber}";
}
private static string BuildMetricBadge(int value, int warningThreshold, int successThreshold)
{
string tone;
if (value <= 0)
{
tone = "error";
}
else if (value < warningThreshold)
{
tone = "warning";
}
else if (value < successThreshold)
{
tone = "info";
}
else
{
tone = "success";
}
return BuildBadge(value.ToString(), tone);
}
private static string BuildRatioBadge(int achieved, int target)
{
var tone = achieved <= 0 ? "error" : achieved < target ? "warning" : "success";
return BuildBadge($"{achieved}/{target}", tone);
}
private static string BuildBadge(string label, string tone) =>
$"<div class=\"badge badge-{tone} badge-soft rounded-xs px-12\">{label}</div>";
private static string BuildFotoIndicator(int totalFoto) =>
"<button class=\"btn btn-xs btn-square me-2\" disabled><span class=\"icon icon-outline text-sm text-black\">image</span></button>" + totalFoto;
private static string BuildStatusBadge(int index)
{
var status = (index % 3) switch
{
0 => ("Sangat Baik", "info"),
1 => ("Baik", "success"),
_ => ("Perlu Pendampingan", "warning")
};
return $"<div class=\"badge badge-{status.Item2} badge-soft rounded-full\">{status.Item1}</div>";
}
private static string BuildDetailAction(string url) =>
"<div class=\"flex gap-2\">" +
$"<a href=\"{url}\" class=\"btn bg-white rounded-full btn-xs\">Detail</a>" +
"</div>";
}
}