diff --git a/Views/Admin/Transport/SpjDriverUpst/Home/Index.cshtml b/Views/Admin/Transport/SpjDriverUpst/Home/Index.cshtml index 9557ac1..2829d72 100644 --- a/Views/Admin/Transport/SpjDriverUpst/Home/Index.cshtml +++ b/Views/Admin/Transport/SpjDriverUpst/Home/Index.cshtml @@ -584,12 +584,20 @@ document.addEventListener("DOMContentLoaded", function () { const rows = Array.isArray(payload?.data) ? payload.data : []; const points = []; + let tujuanPoint = null; for (const row of rows) { const coords = await getCoordinates(row); - if (coords) points.push({ ...row, ...coords }); + if (coords) { + const enriched = { ...row, ...coords }; + if (row.type === "tujuan") { + tujuanPoint = enriched; + } else { + points.push(enriched); + } + } } - if (!points.length) { + if (!points.length && !tujuanPoint) { mapEl.innerHTML = '
Titik pengangkutan tidak ditemukan
'; return; } @@ -604,11 +612,30 @@ document.addEventListener("DOMContentLoaded", function () { attribution: "© OpenStreetMap" }).addTo(mapInstance); - const pickupIcon = L.icon({ - iconUrl: "@Url.Content("~/driver/images/loc2.svg")", + function getPickupIcon(status) { + let iconUrl = "@Url.Content("~/driver/images/loc2.svg")"; + if (status === "selesai") iconUrl = "@Url.Content("~/driver/images/locSelesai.svg")"; + else if (status === "batal") iconUrl = "@Url.Content("~/driver/images/locBatal.svg")"; + return L.icon({ + iconUrl: iconUrl, + iconSize: [40, 40], + iconAnchor: [15, 30], + popupAnchor: [0, -28] + }); + } + + // Tujuan pembuangan icon based on status + let tujuanIconUrl = "@Url.Content("~/driver/images/locAkhir.svg")"; + if (tujuanPoint?.status === "selesai") { + tujuanIconUrl = "@Url.Content("~/driver/images/locSelesai.svg")"; + } else if (tujuanPoint?.status === "batal") { + tujuanIconUrl = "@Url.Content("~/driver/images/locBatal.svg")"; + } + const tujuanIcon = L.icon({ + iconUrl: tujuanIconUrl, iconSize: [40, 40], - iconAnchor: [15, 30], - popupAnchor: [0, -28] + iconAnchor: [20, 40], + popupAnchor: [0, -40] }); const latLngs = points.map(p => [p.lat, p.lng]); @@ -627,14 +654,42 @@ document.addEventListener("DOMContentLoaded", function () { `; - L.marker([point.lat, point.lng], { icon: pickupIcon }) + L.marker([point.lat, point.lng], { icon: getPickupIcon(point.status) }) .addTo(mapInstance) .bindPopup(popupContent); }); - let routeLatLngs = latLngs; - if (latLngs.length > 1) { - const routed = await getRoadRouteLatLngs(latLngs); + // Render titik tujuan pembuangan + if (tujuanPoint) { + const statusLabel = tujuanPoint.status === "selesai" ? "Selesai" + : tujuanPoint.status === "batal" ? "Batal" + : "Aktif"; + const tujuanPopup = ` +
+

Tujuan Pembuangan

+ ${tujuanPoint.name || "Tujuan"} + ${tujuanPoint.alamat || "-"} + ${statusLabel} + + BUKA DI GMAPS + +
+ `; + L.marker([tujuanPoint.lat, tujuanPoint.lng], { icon: tujuanIcon }) + .addTo(mapInstance) + .bindPopup(tujuanPopup); + } + + const allRouteLatLngs = tujuanPoint + ? [...latLngs, [tujuanPoint.lat, tujuanPoint.lng]] + : latLngs; + + let routeLatLngs = allRouteLatLngs; + if (allRouteLatLngs.length > 1) { + const routed = await getRoadRouteLatLngs(allRouteLatLngs); if (routed && routed.length > 1) { routeLatLngs = routed; } diff --git a/wwwroot/driver/css/watch.css b/wwwroot/driver/css/watch.css index e60ce04..8109ef7 100644 --- a/wwwroot/driver/css/watch.css +++ b/wwwroot/driver/css/watch.css @@ -523,6 +523,9 @@ .z-\[100\] { z-index: 100; } + .z-\[9998\] { + z-index: 9998; + } .z-\[9999\] { z-index: 9999; } @@ -2201,6 +2204,9 @@ .py-0 { padding-block: calc(var(--spacing) * 0); } + .py-0\.5 { + padding-block: calc(var(--spacing) * 0.5); + } .py-1 { padding-block: calc(var(--spacing) * 1); } diff --git a/wwwroot/driver/images/locAkhir.svg b/wwwroot/driver/images/locAkhir.svg new file mode 100644 index 0000000..bbe80fe --- /dev/null +++ b/wwwroot/driver/images/locAkhir.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/wwwroot/driver/images/locBatal.svg b/wwwroot/driver/images/locBatal.svg new file mode 100644 index 0000000..d8bc604 --- /dev/null +++ b/wwwroot/driver/images/locBatal.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/wwwroot/driver/images/locSelesai.svg b/wwwroot/driver/images/locSelesai.svg new file mode 100644 index 0000000..560038a --- /dev/null +++ b/wwwroot/driver/images/locSelesai.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/wwwroot/driver/js/detail-penjemputan-non-tps.js b/wwwroot/driver/js/detail-penjemputan-non-tps.js index 0ff151c..095487d 100644 --- a/wwwroot/driver/js/detail-penjemputan-non-tps.js +++ b/wwwroot/driver/js/detail-penjemputan-non-tps.js @@ -421,8 +421,6 @@ document.addEventListener('DOMContentLoaded', async function() { Preview foto kedatangan -
${getKedatanganUploadStateMarkup(tps)}
-
@@ -438,6 +436,8 @@ document.addEventListener('DOMContentLoaded', async function() {
+ +
${getKedatanganUploadStateMarkup(tps)}
@@ -471,12 +471,12 @@ document.addEventListener('DOMContentLoaded', async function() { Preview foto petugas
-
${getPetugasUploadStateMarkup(tps)}
-
+ +
${getPetugasUploadStateMarkup(tps)}
${actionMarkup} @@ -1332,7 +1332,6 @@ document.addEventListener('DOMContentLoaded', async function() {

${ocrInfoText}

-
${getTimbanganUploadStateMarkup(hasFile, isUploaded, weight > 0)}
@@ -1346,6 +1345,7 @@ document.addEventListener('DOMContentLoaded', async function() {
+
${getTimbanganUploadStateMarkup(hasFile, isUploaded, weight > 0)}
`; const fileInput = item.querySelector(".input-foto-timbangan"); diff --git a/wwwroot/driver/js/detail-penjemputan-tps.js b/wwwroot/driver/js/detail-penjemputan-tps.js index 84ea4f6..10d7680 100644 --- a/wwwroot/driver/js/detail-penjemputan-tps.js +++ b/wwwroot/driver/js/detail-penjemputan-tps.js @@ -806,8 +806,6 @@ const DetailPenjemputan = (function () { - -
${getKedatanganUploadStateMarkup(tps)}
@@ -824,6 +822,8 @@ const DetailPenjemputan = (function () {
+ +
${getKedatanganUploadStateMarkup(tps)}
`; } @@ -864,13 +864,11 @@ const DetailPenjemputan = (function () { - -
${getPetugasUploadStateMarkup(tps)}
-
+
${getPetugasUploadStateMarkup(tps)}
`; } @@ -1236,7 +1234,6 @@ const DetailPenjemputan = (function () { Preview foto timbangan

${ocrInfoText}

-
${getTimbanganUploadStateMarkup(hasFile, isUploaded, weight > 0)}
@@ -1249,6 +1246,8 @@ const DetailPenjemputan = (function () {
+ +
${getTimbanganUploadStateMarkup(hasFile, isUploaded, weight > 0)}
`; @@ -1388,7 +1387,7 @@ const DetailPenjemputan = (function () { return ` -

Foto siap diupload.

+

Klik tombol diatas untuk upload foto timbangan.

`; } diff --git a/wwwroot/driver/json/pengangkutan.json b/wwwroot/driver/json/pengangkutan.json index 2d40542..f9ada3c 100644 --- a/wwwroot/driver/json/pengangkutan.json +++ b/wwwroot/driver/json/pengangkutan.json @@ -1,22 +1,36 @@ { "data": [ { + "type": "pengangkutan", + "status": "batal", "name": "CV Tri Mitra Utama - Shell Radio Dalam", "alamat": "Kp. Pertanian II Rt.004 Rw.001 Kel. Klender Kec, Duren Sawit, Kota Adm. Jakarta Timur 13470", "longitude": -6.26012668512782, "latitude": 106.8712511969409 }, { + "type": "pengangkutan", + "status": "selesai", "name": "Jakarta Islamic Hospital", "alamat": "Gang Masjid Baitusalam, Jl. E No.19, RT.10/RW.11, Cipinang, Kec. Pulo Gadung, Kota Jakarta Timur, Daerah Khusus Ibukota Jakarta 13240", - "longitude": -6.2550852145095694, + "longitude": -6.2550852145095694, "latitude": 106.86310593093889 }, { + "type": "pengangkutan", + "status": "proses", "name": "Puskesmas Kelurahan Klender 1", "alamat": "Jl. Pertanian Tengah No.7, RT.4/RW.2, Klender, Kec. Duren Sawit, Kota Jakarta Timur, Daerah Khusus Ibukota Jakarta 13430", - "longitude": -6.268768227222534, + "longitude": -6.268768227222534, "latitude": 106.87026643078956 + }, + { + "type": "tujuan", + "status": "aktif", + "name": "TPST Bantar Gebang", + "alamat": "Jl. Pangkalan V No.1, Sumur Batu, Kec. Bantargebang, Kota Bekasi, Jawa Barat 17151", + "longitude": -6.372855, + "latitude": 106.993652 } ] }