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() {
- ${getKedatanganUploadStateMarkup(tps)}
-
@@ -438,6 +436,8 @@ document.addEventListener('DOMContentLoaded', async function() {
+
+
${getKedatanganUploadStateMarkup(tps)}
@@ -471,12 +471,12 @@ document.addEventListener('DOMContentLoaded', async function() {
- ${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 () {
${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
}
]
}