187 lines
6.4 KiB
C#
187 lines
6.4 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 DetailPendamping(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 TableDetailPendamping(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/DetailPendamping?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 });
|
|
}
|
|
|
|
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>";
|
|
}
|
|
}
|