diff --git a/Controllers/SpjAdminController/SpjAdminController.cs b/Controllers/SpjAdminController/SpjAdminController.cs index 659e422..f320788 100644 --- a/Controllers/SpjAdminController/SpjAdminController.cs +++ b/Controllers/SpjAdminController/SpjAdminController.cs @@ -7,6 +7,8 @@ namespace eSPJ.Controllers.SpjAdminController; [Route("admin")] public class SpjAdminController : Controller { + private static readonly Guid DummySpjGuid = new Guid("9f5b8f3a-1c2d-4a5b-9a7c-1234567890ab"); + private const string DummySpjNumber = "SPJ/08-2025/PKM/000519"; [HttpGet("")] public IActionResult Index() @@ -32,4 +34,58 @@ public class SpjAdminController : Controller ViewData["Id"] = id; return View("~/Views/Admin/Transport/SpjAdmin/History/Details.cshtml"); } + + [ValidateAntiForgeryToken] + [HttpPost("scan/process/{id:guid}", Name = "Admin_Scan_Process")] + public IActionResult Process(Guid id) + { + // Dummy rule: hanya GUID dummy yang dianggap valid + if (id == DummySpjGuid) + { + return Json(new { success = true, data = new { id, status = "Valid" } }); + } + return Json(new { success = false, message = "SPJ tidak ditemukan." }); + } + + // Resolve kode SPJ (contoh: "SPJ/08-2025/PKM/000519") menjadi GUID. + // Catatan: Saat ini dummy (development): setiap format SPJ yang valid bakal ke GUID baru. + // Integrasi produksi: ganti dengan query DB untuk mencari SPJ berdasarkan nomor, lalu kembalikan Id GUID yang sebenarnya. + [ValidateAntiForgeryToken] + [HttpPost("scan/resolve", Name = "Admin_Scan_Resolve")] + public IActionResult Resolve([FromForm] string code) + { + if (string.IsNullOrWhiteSpace(code)) + { + return Json(new { success = false, message = "Kode kosong." }); + } + + code = code.Trim(); + + // Jika sudah GUID, langsung kembalikan (tetap izinkan test langsung GUID dummy) + if (Guid.TryParse(code, out var guid)) + { + return Json(new { success = true, id = guid }); + } + + // Pola SPJ + var isSpj = System.Text.RegularExpressions.Regex.IsMatch( + code, + @"^SPJ/\d{2}-\d{4}/[A-Z]+/\d{6}$", + System.Text.RegularExpressions.RegexOptions.IgnoreCase + ); + + if (!isSpj) + { + return Json(new { success = false, message = "Format kode tidak dikenali." }); + } + + // Dummy mapping: jika persis sesuai nomor di atas, kembalikan GUID tetap; selain itu anggap tidak ditemukan + if (string.Equals(code, DummySpjNumber, StringComparison.OrdinalIgnoreCase)) + { + return Json(new { success = true, id = DummySpjGuid }); + } + + return Json(new { success = false, message = "SPJ tidak ditemukan." }); + } + } diff --git a/Views/Admin/Transport/SpjAdmin/Scan/Index.cshtml b/Views/Admin/Transport/SpjAdmin/Scan/Index.cshtml index a47efe5..c7da8b9 100644 --- a/Views/Admin/Transport/SpjAdmin/Scan/Index.cshtml +++ b/Views/Admin/Transport/SpjAdmin/Scan/Index.cshtml @@ -105,7 +105,7 @@