Files
gps-frontend/resources/views/menu_v1/_confirmTransactions.blade.php
meusinfirmary 77bc5f10a6 update
2025-05-29 13:21:59 +07:00

1046 lines
50 KiB
PHP
Executable File

@extends('app.app')
@section('title')
User Client
@endsection
@section('content')
<div class="container-fluid">
<div class="content">
<div class="row">
<div class="col-sm-6" id="">
<div class="card">
<div class="card-header">
<div class="row d-flex align-items-center">
<div class="col">
<p class="card-title text-bold mb-0">Detail Job</p>
</div>
<div class="col text-end">
<button class="btn btn-secondary btn-sm" onclick="location.href='{{ route('view_transactions') }}'">Kembali</button>
</div>
</div>
</div>
<div class="card-body pb-0">
{{-- <div class="row d-flex align-items-center"> --}}
<div class="row d-flex">
<div class="col-5 mb-3">
<div class="row">
{{-- <div class="col-sm-12 mb-3">
<p class="text-danger text-bold mb-0">Penjemputan dan Pengantaran</p>
</div> --}}
<div class="col-sm-12 mb-3">
<label for="" class="form-label">Date</label>
<div class="card bg-light border mb-0">
<div class="card-body">
<p class="mb-0"><span id="view-pickup_date_at"></span></p>
</div>
</div>
</div>
<div class="col-sm-12 mb-3">
<label for="" class="form-label">Time</label>
<div class="card bg-light border mb-0">
<div class="card-body">
<p class="mb-0"><span id="view-pickup_time_at"></span></p>
</div>
</div>
</div>
</div>
</div>
<div class="col-sm-2"></div>
<div class="col-sm-5 mb-3">
<div class="row">
{{-- <div class="col-sm-12 col-12 mb-3">
<p class="text-danger text-bold mb-0">Layanan Yang Dipilih</p>
</div> --}}
{{-- <div class="col-sm-12 col-6 mb-3">
<label for="" class="form-label">Durasi Pengantaran</label>
<div class="card bg-light border mb-0 w-100">
<div class="card-body d-flex justify-content-between">
<p class="mb-0">{{ $order->lead_time }} Hari</p>
<p class="mb-0">
Rp{{ number_format($order->price, 0, ',', '.') }}
</p>
</div>
</div>
</div> --}}
<div class="col-sm-12 col-6 mb-3">
<label for="" class="form-label">Vehicle</label>
<div class="card bg-light border mb-0 w-100">
<div class="card-body d-flex justify-content-between">
<p class="mb-0">{{ $order->prefer_truck_type_name }}</p>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row mb-3 d-flex align-items-center">
<div class="col-5 mb-3">
<label for="" class="form-label">Origin</label>
<div class="card bg-light border mb-0">
<div class="card-body">
{{-- <p class="text-bold mb-2">Gudang Pluit SiCepat (Jakarta)</p> --}}
<p class="text-bold mb-2">{{ $order->pck_name }}</p>
{{-- <p class="mb-0">Jl. Pluit Karang Karya 2 No.33, RT.7/RW.16, Pejagalan, Kec. Penjaringan, Kota Jkt Utara, Daerah Khusus Ibukota Jakarta 14440</p> --}}
<p class="mb-0">{{ $order->pck_addr }}</p>
</div>
</div>
</div>
<div class="col-2 text-center">
<label for="" class="form-label mb-0 mt-0">&nbsp;</label>
{{-- <p class="mb-0">to</p> --}}
<span class="ion-arrow-right-c text-danger" style="font-size: 15px"></span>
</div>
<div class="col-5 mb-3">
<label for="" class="form-label">Destination</label>
<div class="card bg-light border mb-0">
<div class="card-body">
{{-- <p class="text-bold mb-2">Kantor Pusat SiCepat (yogyakarta)</p> --}}
<p class="text-bold mb-2">{{ $order->drop_name }}</p>
{{-- <p class="mb-0">Jl. Prof. Herman Yohanes No.989, Terban, Gondokusuman, Kota Yogyakarta, Daerah Istimewa Yogyakarta 55223, Indonesia</p> --}}
<p class="mb-0">{{ $order->drop_addr }}</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
{{-- <div class="col-sm-6">
<div class="card">
<div class="card-body">
<div class="col-12 mb-3">
<p class="text-danger text-bold mb-0">Pilih Vendor Langsung</p>
</div>
<div class="col-sm-5 mb-3">
<label for="" class="form-label">Pilih Vendor</label>
<select name="inputChooseVendor" id="inputChooseVendor" class="select2 form-contro">
<option value="none" selected disabled>Belum ada vendor yang dipilih</option>
@foreach ($vendors as $vdr)
<option value="{{ $vdr->vdr_id }}">{{ $vdr->first_name }}</option>
@endforeach
</select>
</div>
<div class="text-end">
<button id="btnChooseVendor" class="btn btn-danger btn-sm">Pilih</button>
<div id="group_btnChooseVdrSpinner" class="d-none">
<div class="spinner-border" role="status">
<span class="visually-hidden">Loading...</span>
</div>
</div>
</div>
</div>
</div>
</div> --}}
</div>
</div>
</div>
@endsection
@section('customcss')
<link rel="stylesheet" href="{{ asset('assets/vendor/Tiny-Vertical-Timeline-Plugin-with-jQuery-jQuery-UI/src/jquery.timeline.css') }}">
<link rel="stylesheet" href="{{ asset('assets/vendor/leaflet-1.7.1/leaflet.css') }}">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet.draw/1.0.4/leaflet.draw.css" integrity="sha512-gc3xjCmIy673V6MyOAZhIW93xhM9ei1I+gLbmFjUHIjocENRsLX/QUE1htk5q1XV2D/iie/VQ8DXI6Vu8bexvQ==" crossorigin="anonymous" referrerpolicy="no-referrer" />
<style>
#mapsOrder {
height: 50vh;
border-radius: 8px
}
/* .leaflet-control-container .leaflet-left {
display: none;
} */
.leaflet-left .leaflet-draw-edit-remove {
display: none;
}
</style>
@endsection
@section('customjs')
<script src="{{ asset('assets/vendor/leaflet-1.7.1/leaflet-src.js') }}"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet.draw/1.0.4/leaflet.draw.js" integrity="sha512-ozq8xQKq6urvuU6jNgkfqAmT7jKN2XumbrX1JiB3TnF7tI48DPI4Gy1GXKD/V3EExgAs1V+pRO7vwtS1LHg0Gw==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script src="https://cdn.jsdelivr.net/npm/leaflet-rotatedmarker@0.2.0/leaflet.rotatedMarker.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.18.2/xlsx.full.min.js" integrity="sha512-oCjkwxjURabnte5K4Zeoc+hZ/G5pQE7GI4DYl+0wl6WaJIkBjb9FvUIaMU3lOPoBMSRZZ7QrczpGQoBFAKKB1Q==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script>
// var map = L.map('mapsOrder').setView([-6.129036246308229, 106.78219675441427], 14);
// // var Leaflet.map = L.map('mapsOrder').setView([-7.1451449, 109.9776078], 8);
// L.tileLayer('https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}?access_token={accessToken}', {
// attribution: 'Map data &copy; <a href="https://www.mapbox.com/feedback/">Mapbox</a> © <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>',
// // maxZoom: 20,
// // minZoom: 4,
// id: 'mapbox/streets-v11',
// tileSize: 512,
// zoomOffset: -1,
// accessToken: 'pk.eyJ1IjoibWV1c2luZmlybWFyeSIsImEiOiJja3lsd2xveDAydGhqMnVxaHJsZ2ZncG8yIn0.f7MJAyawHUdCegw7sWjrww',
// }).addTo(map);
// L.control.scale({
// position: 'bottomright'
// }).addTo(map);
// L.control.zoom({
// position: 'bottomright'
// }).addTo(map);
// var start = L.icon({
// iconUrl: "{{ asset('images/start.png') }}",
// iconSize: [30, 30],
// iconAnchor: [15, 15]
// })
// L.marker([-6.129036246308229, 106.78219675441427], {
// icon: start
// }).addTo(map)
// var Icon = L.icon({
// iconUrl: "{{ asset('images/2active.png') }}",
// iconSize: [30, 30],
// iconAnchor: [15, 15]
// })
// var circle = L.circle([-6.129036246308229, 106.78219675441427], {
// color: '#f26e6f',
// fillColor: '#f26e6f',
// fillOpacity: 0.25,
// radius: 2000
// }).addTo(map);
// var locations = [
// ["LOCATION_1", -6.121867602926203, 106.77043796424864],
// ["LOCATION_2", -6.130444326603234, 106.78245426001234],
// ["LOCATION_3", -6.132321800548507, 106.7950284564011],
// ["LOCATION_4", -6.1342419366973875, 106.77206874715978],
// ["LOCATION_5", -6.116491079013063, 106.78417087375102],
// ["LOCATION_6", -6.166285127910627, 106.78587951080148],
// ["LOCATION_7", -6.12234047404046, 106.74981074080921],
// ["LOCATION_8", -6.153648565612386, 106.72336031035826]
// ];
// for (var i = 0; i < locations.length; i++) {
// marker = new L.marker([locations[i][1], locations[i][2]], {
// icon: Icon
// })
// .bindPopup(locations[i][0])
// .addTo(map);
// }
</script>
<script>
'use strict'
const State = {
ord_id: "{{ $order->ord_id }}",
set_pck_at: "{{ $order->set_pck_at }}",
ord_confirm_at: "{{ $order->confirm_at }}",
boundary_type: {
circle: "{{ App\Models\Zone::ZONE_BOUNDARY_CIRCLE }}",
polygon: "{{ App\Models\Zone::ZONE_BOUNDARY_POLYGON }}",
rectangle: "{{ App\Models\Zone::ZONE_BOUNDARY_RECTANGLE }}",
},
boundary_type_choose: "{{ App\Models\Zone::ZONE_BOUNDARY_CIRCLE }}",
boundary_radius: 2000, // in meters. only circle
boundary_bounds: null, // {northEast:{lat,lng},southWest:{lat,lng}}. only polygon,rectangle
default_boundary_hex: '#f26e6f',
stts_engine: {
idling: "{{ App\Models\Tracks::STTS_EN_IDLING }}",
moving: "{{ App\Models\Tracks::STTS_EN_MOVING }}",
stoping: "{{ App\Models\Tracks::STTS_EN_STOPING }}",
},
eventRemoveToolbarDraw: null,
eventRemoveListTrucks: null,
};
const Icon = {
vhcMoveIcon: function() {
return L.icon({
iconUrl: "{{ asset('images/2active.png') }}",
iconSize: [30, 30],
iconAnchor: [15, 28], // lb, rt, bottom, rb. Positive
popupAnchor: [-3, -35],
// shadowUrl: 'my-icon-shadow.png',
// shadowSize: [68, 95],
// shadowAnchor: [22, 94]
});
},
vhcIdleIcon: function() {
return L.icon({
iconUrl: "{{ asset('images/2idle.png') }}",
iconSize: [30, 30],
iconAnchor: [15, 28], // lb, rt, bottom, rb. Positive
popupAnchor: [-3, -35],
// shadowUrl: 'my-icon-shadow.png',
// shadowSize: [68, 95],
// shadowAnchor: [22, 94]
});
},
};
const Wrapper = {
activate: function() {
Wrapper.event();
OrdView.activate();
if (State.ord_confirm_at == 0) {
Leaflet.activate();
OrdSearch.activate();
};
OrdChoose.activate();
},
event: function() {
$('#view-pickup_at').text(moment.unix(State.set_pck_at).format('DD MMM YYYY HH:mm:ss'));
$('#view-pickup_date_at').text(moment.unix(State.set_pck_at).format('DD MMM YYYY'));
$('#view-pickup_time_at').text(moment.unix(State.set_pck_at).format('HH:mm:ss'));
},
};
const OrdView = {
activate: function() {
OrdView.event();
},
event: function() {
$('#btnDownloadPacking').on('click', async function(e) {
let click = $(e.target);
let ord_id = click.data('ord_id');
let packing_list = await OrdView.reqPackingList({
ord_id
});
if (packing_list.type != 'success') {
return false;
}
let package_list = packing_list.resp.data;
let download_package_list = package_list.map((row) => {
return {
'Item Code': row.item_code,
'Description': row.desc,
'Weight (kg)': row.weight,
'Qty': row.qty,
'Length (m)': row.length,
'Wide (m)': row.wide,
'Height (m)': row.height,
'Volume (m3)': row.volume,
};
});
downloadPackingList('package-list.xlsx', 'template_packing_list',
download_package_list);
});
},
reqPackingList: function(params) {
return new Promise((resolve, reject) => {
$.ajax({
url: "{{ route('api_download_package_list', '') }}/" + params
.ord_id,
method: 'GET',
crossDomain: true,
processData: true,
headers: {
'x-api-key': Helper.getCookie('_trtk'),
},
data: params,
success: (data, textStatus, jqXHR) => {
if (data.meta.type != 'success') {
resolve({
type: 'fail'
});
Helper.toast('Warning', 'just now', data.meta.message);
return false;
}
resolve({
type: 'success',
resp: data,
});
},
error: (jqXHR, textStatus, error) => {
if (jqXHR.status >= 500) {
Helper.toast('Error', 'just now', 'please try again');
} else {
Helper.toast('Error', 'just now', jqXHR.responseJSON.meta
.message);
}
resolve({
type: 'error'
});
}
})
});
},
};
const Leaflet = {
map: null,
activate: function() {
// centering java archipelago => .setView([-7.1451449, 109.9776078], 6.5);
// centering indonesia country => .setView([-1.38116, 117.6168817], 5.4);
Leaflet.map = L.map('mapsOrder').setView([-7.1451449, 109.9776078], 6.5);
L.tileLayer('https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}?access_token={accessToken}', {
attribution: 'Map data &copy; <a href="https://www.mapbox.com/feedback/">Mapbox</a> © <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>',
maxZoom: 20,
minZoom: 4,
id: 'mapbox/streets-v11',
tileSize: 512,
zoomOffset: -1,
accessToken: 'pk.eyJ1IjoibWV1c2luZmlybWFyeSIsImEiOiJja3lsd2xveDAydGhqMnVxaHJsZ2ZncG8yIn0.f7MJAyawHUdCegw7sWjrww',
}).addTo(Leaflet.map);
Leaflet.events();
},
events: function() {},
addMarkers: function(locs = [], cb = null) {
if (locs.constructor === Array) {
let markers = [];
for (let i = 0; i < locs.length; i++) {
let label = locs[i]?.label || '';
let marker = new L.marker([locs[i].lat, locs[i].lng], locs[i]?.options);
let popup = new L.Popup({
autoClose: false,
closeOnClick: true,
}).setContent(locs[i]?.label || '').setLatLng([locs[i].lat, locs[i].lng]);
// marker.bindPopup(locs[i]?.label || '');
marker.bindPopup(popup);
marker.bindTooltip(locs[i]?.label || '');
markers.push(marker);
if (cb) cb(marker);
marker.addTo(Leaflet.map);
}
return markers;
} else if (locs.constructor === Object) {
let label = locs.label;
let marker = new L.marker([locs.lat, locs.lng], locs?.options);
let popup = new L.Popup({
autoClose: false,
closeOnClick: true,
}).setContent(locs?.label || '').setLatLng([locs.lat, locs.lng]);
// marker.bindPopup(locs?.label || '');
marker.bindPopup(popup);
marker.bindTooltip(locs?.label || '');
if (cb) cb(marker);
marker.addTo(Leaflet.map);
return marker;
}
},
addCircles: function(locs = [], cb = null) {
if (locs.constructor === Array) {
let circles = [];
for (let i = 0; i < locs.length; i++) {
let circle = L.circle([locs[i].lat, locs[i].lng], locs[i]?.options);
circle.bindPopup(locs[i]?.label || '');
circle.bindTooltip(locs[i]?.label || '');
circles.push(circle);
if (cb) cb(circle);
circle.addTo(Leaflet.map);
}
return circles;
} else if (locs.constructor === Object) {
let circle = L.circle([locs.lat, locs.lng], locs?.options);
circle.bindPopup(locs?.label || '');
circle.bindTooltip(locs?.label || '');
if (cb) cb(circle);
circle.addTo(Leaflet.map);
return circle;
}
},
addPolylines: function(locs = [], cb = null) {
let latLngs = [];
for (let i = 0; i < locs.length; i++) {
latLngs.push([locs[i].lat, locs[i].lng]);
}
let polyline = L.polyline(latLngs, locs[0]?.options).addTo(Leaflet.map);
if (cb) cb(polyline);
return polyline;
},
addPolygons: function(locs = [], cb = null) {
let latLngs = [];
for (let i = 0; i < locs.length; i++) {
latLngs.push([locs[i].lat, locs[i].lng]);
}
let polygon = L.polygon(latLngs, locs[0]?.options).addTo(Leaflet.map);
if (cb) cb(polygon);
return polygon;
},
drawPolygon: function(lat, lng, options = {}) {
let polygon = L.polygon([
[lat, lng]
], options).addTo(Leaflet.map);
return polygon;
},
// draw boundary by mouse
createDrawLayer: function() {
let drawnItems = new L.FeatureGroup().addTo(Leaflet.map);
return drawnItems;
},
createDrawControl: function(options) {
// example
// let options = {
// edit: {
// featureGroup: drawnItems,
// poly: {
// allowIntersection: true, // draw while moving
// },
// },
// draw: {
// polygon: {
// allowIntersection: true, // draw while moving
// showArea: true,
// },
// marker: false,
// circlemarker: false,
// polyline: false,
// },
// };
let drawControl = new L.Control.Draw(options);
return drawControl;
},
createDrawToolbar: function(drawnItems, drawControl) {
// after finish not saved
Leaflet.map.addControl(drawControl);
Leaflet.map.on(L.Draw.Event.CREATED, function(e) {
// validate can create 1 shape only
if (!State.boundary_type_choose) { // if not null
drawnItems.addLayer(e.layer);
OrdSearch.handleBoundaryDraw(e);
}
});
Leaflet.map.on(L.Draw.Event.EDITED, function(e) {
OrdSearch.handleBoundaryDraw(e);
});
Leaflet.map.on(L.Draw.Event.DELETED, function(e) {
OrdSearch.handleBoundaryDraw(e);
});
// remove marker, circle, event listener and all about this marker
State.eventRemoveToolbarDraw = new CustomEvent('eventRemoveToolbarDraw', {
drawnItems,
drawControl,
});
window.addEventListener('eventRemoveToolbarDraw', function handler(e) {
Leaflet.map.removeEventListener(L.Draw.Event.CREATED);
Leaflet.map.removeEventListener(L.Draw.Event.EDITED);
Leaflet.map.removeEventListener(L.Draw.Event.DELETED);
Leaflet.map.removeControl(drawControl);
Leaflet.map.removeLayer(drawnItems);
e.currentTarget.removeEventListener(e.type,
handler); // window.removeEventListener('remove', this.handler, true);
State.eventRemoveToolbarDraw = null;
State.boundary_type_choose = null;
State.boundary_latlngs = null;
});
},
injectShapeToLDraw: function(obj) {
/**@argument
* create shape / vector layer
* convert the layer toGeoJSON/toGeoJson with precision default is 6
* set L.Draw toolbar/control layer
* convert the geoJSON shape/vector layer to leaflet geoJSON format
* add the shape/vector leaflet geoJSON format layer to L.Draw toolbar/control layer
**/
// for L.Draw
let shapeOpts = {
color: obj.boundary_hex_color,
fillOpacity: 0.4,
showRadius: true,
};
let drawnItems = Leaflet.createDrawLayer();
let drawControlOpts = {
edit: {
featureGroup: drawnItems,
},
draw: {
polygon: false,
marker: false,
circle: false,
rectangle: false,
circlemarker: false,
polyline: false,
},
};
// for layer (Shape / Vector)
let fitBounds = [],
circle = null,
polygon = null,
shapeGeoJSON = null;
let label = ``;
let boundaryOpts = {
mdata: obj,
color: obj.boundary_hex_color,
fillColor: obj.boundary_hex_color,
radius: obj.boundary_radius,
};
// for geoJSON
let style = {
color: obj.boundary_hex_color,
fillColor: obj.boundary_hex_color,
fillOpacity: 0.4,
radius: obj.boundary_radius,
showRadius: true,
}
// initDate
State.boundary_latlngs = obj.boundary_latlngs
State.boundary_radius = obj.boundary_radius
State.boundary_bounds = obj.boundary_bounds
// about shape/vector layer
if (obj.boundary_type == State.boundary_type.circle) {
State.boundary_type_choose = State.boundary_type.circle;
circle = L.circle([obj.boundary_latlngs[0].lat, obj.boundary_latlngs[0]
.lng
], boundaryOpts);
shapeGeoJSON = circle.toGeoJSON(6);
shapeGeoJSON.properties.radius = circle.getRadius();
let corner = L.latLng(obj.boundary_latlngs[0].lat, obj.boundary_latlngs[0]
.lng);
fitBounds.push(L.latLngBounds(corner, corner));
// drawControlOpts.draw.circle = {
// shapeOptions: {
// ...shapeOpts
// },
// };
} else if (obj.boundary_type == State.boundary_type.polygon) {
State.boundary_type_choose = State.boundary_type.polygon;
let latLngs = [];
for (let latLng of obj.boundary_latlngs) {
latLngs.push([latLng.lat, latLng.lng]);
let corner = L.latLng(latLng.lat, latLng.lng);
fitBounds.push(L.latLngBounds(corner, corner));
}
polygon = L.polygon(latLngs, boundaryOpts);
shapeGeoJSON = polygon.toGeoJSON(6);
drawControlOpts.draw.polygon = {
shapeOptions: {
...shapeOpts
},
};
} else if (obj.boundary_type == State.boundary_type.rectangle) {
State.boundary_type_choose = State.boundary_type.polygon;
let latLngs = [];
for (let latLng of obj.boundary_latlngs) {
latLngs.push([latLng.lat, latLng.lng]);
let corner = L.latLng(latLng.lat, latLng.lng);
fitBounds.push(L.latLngBounds(corner, corner));
}
polygon = L.polygon(latLngs, boundaryOpts);
shapeGeoJSON = polygon.toGeoJSON(6);
drawControlOpts.draw.rectangle = {
shapeOptions: {
...shapeOpts
},
};
} else {
Helper.toast('Error', 'just now', 'unknown boundary type');
return false;
}
// about L.Draw control/toolbar layer
let drawControl = Leaflet.createDrawControl(drawControlOpts);
Leaflet.createDrawToolbar(drawnItems, drawControl);
// about convert shape/vector geoJSON to leaflet geoJSON format
let layers = [];
let geoJsonGroup = L.geoJSON(shapeGeoJSON, {
style: style,
pointToLayer: (feature, latlng) => {
if (feature.properties.radius) {
return new L.Circle(latlng, feature.properties.radius);
} else {
return new L.Marker(latlng);
}
},
onEachFeature: (feature, layer) => {
layers.push(layer);
},
});
// add shape/vector layer to L.Draw control/toolbar layer
// Would benefit from https://github.com/Leaflet/Leaflet/issues/4461
function addNonGroupLayers(sourceLayer, targetGroup) {
if (sourceLayer instanceof L.LayerGroup) {
sourceLayer.eachLayer(function(layer) {
addNonGroupLayers(layer, targetGroup);
});
} else {
targetGroup.addLayer(sourceLayer);
}
}
addNonGroupLayers(geoJsonGroup, drawnItems);
// set center
Leaflet.map.fitBounds(fitBounds);
Leaflet.map.setZoom(13);
},
clearLayer: function(type = 'all', cb = null) {
if (type == 'all') {
if (State.eventRemoveToolbarDraw) window.dispatchEvent(State.eventRemoveToolbarDraw);
if (State.eventRemoveListTrucks) window.dispatchEvent(State.eventRemoveListTrucks);
if (cb) cb();
} else if (type == 'eventRemoveToolbarDraw') {
if (State.eventRemoveToolbarDraw) {
window.dispatchEvent(State.eventRemoveToolbarDraw);
if (cb) cb();
}
} else if (type == 'eventRemoveListTrucks') {
if (State.eventRemoveListTrucks) {
window.dispatchEvent(State.eventRemoveListTrucks);
if (cb) cb();
}
}
}
};
const OrdSearch = {
activate: async function() {
OrdSearch.event();
Leaflet.injectShapeToLDraw({
boundary_type: State.boundary_type_choose,
boundary_radius: State.boundary_radius,
boundary_hex_color: State.default_boundary_hex,
boundary_latlngs: State.boundary_latlngs,
});
let detail = await OrdSearch.reqData({
ord_id: State.ord_id,
get_current_track_vhcs: 1,
boundary_type: State.boundary_type_choose,
boundary_radius: State.boundary_radius,
boundary_hex_color: State.default_boundary_hex,
boundary_latlngs: State.boundary_latlngs,
});
if (detail.resp.meta.type == 'success') {
OrdSearch.showListCurrentTrackVhcs(detail.resp.list_current_track_vhcs);
}
},
event: function() {
$('#btnSearchDriver').on('click', function() {
let data = OrdSearch.getData();
OrdSearch.submitData(data);
});
setInterval(async () => {
Leaflet.clearLayer('eventRemoveListTrucks');
let detail = await OrdSearch.reqData({
ord_id: State.ord_id,
get_current_track_vhcs: 1,
boundary_type: State.boundary_type_choose,
boundary_radius: State.boundary_radius,
boundary_hex_color: State.default_boundary_hex,
boundary_latlngs: State.boundary_latlngs,
});
if (detail.resp.meta.type == 'success') {
OrdSearch.showListCurrentTrackVhcs(detail.resp.list_current_track_vhcs);
}
}, 1 * (60 * 1000));
},
reqData: async function(data) {
return new Promise((resolve, reject) => {
$.ajax({
url: "{{ route('api_show_order', '') }}/" + data.ord_id,
method: 'GET',
crossDomain: true,
processData: true,
headers: {
'x-api-key': Helper.getCookie('_trtk'),
'x-csrf-token': $('meta[name="csrf-token"]').attr('content'),
},
data: data,
success: (data, textStatus, jqXHR) => {
if (data.meta.type != 'success') {
resolve({
type: 'fail'
});
Helper.toast('Warning', 'just now', data.meta.message);
return false;
}
// Helper.toast('Success', 'just now', 'success get detail order');
resolve({
type: 'success',
resp: data,
});
},
error: (jqXHR, textStatus, error) => {
if (jqXHR.status >= 500) {
Helper.toast('Error', 'just now', 'please try again');
} else {
Helper.toast('Error', 'just now', jqXHR.responseJSON.meta
.message);
}
resolve({
type: 'error'
});
}
})
})
},
showListCurrentTrackVhcs: function(trucks) {
let locations = [];
for (let i = 0; i < trucks.length; i++) {
if (trucks[i]?.lst_lat == null || trucks[i]?.lst_lng == null) {
continue;
}
let icon_stts_engine = Icon.vhcMoveIcon(); // moving
if (trucks[i].stts_engine == State.stts_engine.idling) {
icon_stts_engine = Icon.vhcIdleIcon();
} else if (trucks[i].stts_engine == State.stts_engine.stoping) {
icon_stts_engine = Icon.vhcIdleIcon();
}
locations.push({
lat: trucks[i].lst_lat,
lng: trucks[i].lst_lng,
// label: `<b>${trucks[i].nopol1} ${trucks[i].nopol2} ${trucks[i].nopol3}</b><br>${moment.unix(trucks[i]?.lst_loc_crt).format('DD MMM YYYY HH:mm')}<br>Speed: ${(typeof trucks[i].lst_speed != 'undefined') ? trucks[i].lst_speed : '0'}<br>${Number(trucks[i].lst_lat).toFixed(5)},${Number(trucks[i].lst_lng).toFixed(6)}<br>${Helper.shortenText(decodeURIComponent(trucks[i]?.lst_fulladdress || 'address'), 25)}`,
label: `<b>${trucks[i].nopol1} ${trucks[i].nopol2} ${trucks[i].nopol3}</b>`,
options: {
mdata: trucks[i],
icon: icon_stts_engine,
// autoClose: false,
},
});
}
let markers = Leaflet.addMarkers(locations, function(marker) {
marker.on('click', function(e) {
// let markerDetail = e.target.options.mdata;
// Leaflet.map.invalidateSize();
// if (Leaflet.map.getZoom() <= 14) {
// Leaflet.map.setView(e.target.getLatLng(), 14);
// }
});
});
// remove marker, circle, event listener and all about this marker
State.eventRemoveListTrucks = new CustomEvent('eventRemoveListTrucks', {
detail: {
markers,
},
});
window.addEventListener('eventRemoveListTrucks', function handler(e) {
for (let marker of e.detail.markers) {
marker.removeEventListener('click');
marker.removeEventListener('moveend');
marker.remove();
}
e.currentTarget.removeEventListener(e.type,
handler); // window.removeEventListener('remove', this.handler, true);
});
},
getData: function() {
let data = {};
data.ord_id = State.ord_id;
data.boundary_hex_color = State.default_boundary_hex;
data.boundary_type = State.boundary_type_choose;
data.boundary_latlngs = [...State.boundary_latlngs];
data.boundary_bounds = State.boundary_bounds;
data.boundary_radius = State.boundary_radius;
return data;
},
submitData: async function(data) {
return new Promise((resolve, reject) => {
if (typeof $('#btnSearchDriver').attr('disabed') != 'undefined') {
resolve({
type: 'fail'
});
return false;
}
$('#btnSearchDriver').attr('disabed', true);
OrdSearch.toggleBtnSearchSpinner(1);
$.ajax({
url: "{{ route('api_adm_find_driver', '') }}",
method: 'POST',
crossDomain: true,
processData: true,
headers: {
'x-api-key': Helper.getCookie('_trtk'),
'x-csrf-token': $('meta[name="csrf-token"]').attr('content'),
},
data: data,
success: (data, textStatus, jqXHR) => {
$('#btnSearchDriver').removeAttr('disabed');
if (data.meta.type != 'success') {
resolve({
type: 'fail'
});
Helper.toast('Warning', 'just now', data.meta.message);
OrdSearch.toggleBtnSearchSpinner(0);
return false;
}
Helper.toast('Success', 'just now', 'success confirm order');
resolve({
type: 'success'
});
OrdSearch.toggleBtnSearchSpinner(0);
window.location.href = "{{ route('view_transactions') }}"
},
error: (jqXHR, textStatus, error) => {
$('#btnSearchDriver').removeAttr('disabed');
if (jqXHR.status >= 500) {
Helper.toast('Error', 'just now', 'please try again');
} else {
Helper.toast('Error', 'just now', jqXHR.responseJSON.meta
.message);
}
resolve({
type: 'error'
});
OrdSearch.toggleBtnSearchSpinner(0);
}
})
})
},
handleBoundaryDraw: function(e) {
if (e.type == L.Draw.Event.CREATED) {
} else if (e.type == L.Draw.Event.EDITED) {
e.layerType = State.boundary_type_choose;
e.layer = e.layers._layers[Object.keys(e.layers._layers)[0]];
} else if (e.type == L.Draw.Event.DELETED) {
State.boundary_type_choose = null;
State.boundary_latlngs = null;
State.boundary_radius = null;
State.boundary_bounds = null;
return true;
}
if (e.layerType == State.boundary_type.circle) {
State.boundary_type_choose = State.boundary_type.circle;
State.boundary_latlngs = [{
lat: e.layer._latlng.lat,
lng: e.layer._latlng.lng,
}];
State.boundary_radius = e.layer._mRadius;
} else if (e.layerType == State.boundary_type.polygon) {
State.boundary_type_choose = State.boundary_type.polygon;
State.boundary_latlngs = [];
for (let i in e.layer._latlngs[0]) {
State.boundary_latlngs.push({
lat: e.layer._latlngs[0][i].lat,
lng: e.layer._latlngs[0][i].lng,
})
}
State.boundary_bounds = {
northEast: {
lat: e.layer._bounds._northEast.lat,
lng: e.layer._bounds._northEast.lng,
},
southWest: {
lat: e.layer._bounds._southWest.lat,
lng: e.layer._bounds._southWest.lng,
},
};
} else if (e.layerType == State.boundary_type.rectangle) {
State.boundary_type_choose = State.boundary_type.rectangle;
State.boundary_latlngs = [];
for (let i in e.layer._latlngs[0]) {
State.boundary_latlngs.push({
lat: e.layer._latlngs[0][i].lat,
lng: e.layer._latlngs[0][i].lng,
})
}
State.boundary_bounds = {
northEast: {
lat: e.layer._bounds._northEast.lat,
lng: e.layer._bounds._northEast.lng,
},
southWest: {
lat: e.layer._bounds._southWest.lat,
lng: e.layer._bounds._southWest.lng,
},
};
}
},
toggleBtnSearchSpinner: function(isShow = 1) {
if (isShow) {
$('#btnSearchDriver').addClass('d-none');
$('#group_btnSearchDrvSpinner').removeClass('d-none');
} else {
$('#btnSearchDriver').removeClass('d-none');
$('#group_btnSearchDrvSpinner').addClass('d-none');
}
},
}
const OrdChoose = {
activate: async function() {
OrdChoose.event();
},
event: function() {
$('#btnChooseVendor').on('click', function() {
let data = OrdChoose.getData();
OrdChoose.submitData(data);
});
},
getData: function() {
let data = {};
data.ord_id = State.ord_id;
data.vendor_id = $('#inputChooseVendor').val()
return data;
},
submitData: async function(data) {
return new Promise((resolve, reject) => {
if (typeof $('#btnChooseVendor').attr('disabed') != 'undefined') {
resolve({
type: 'fail'
});
return false;
}
$('#btnChooseVendor').attr('disabed', true);
OrdChoose.toggleBtnSearchSpinner(1);
$.ajax({
url: "{{ route('api_adm_assign_vendor', '') }}",
method: 'POST',
crossDomain: true,
processData: true,
headers: {
'x-api-key': Helper.getCookie('_trtk'),
'x-csrf-token': $('meta[name="csrf-token"]').attr('content'),
},
data: data,
success: (data, textStatus, jqXHR) => {
$('#btnChooseVendor').removeAttr('disabed');
if (data.meta.type != 'success') {
resolve({
type: 'fail'
});
Helper.toast('Warning', 'just now', data.meta.message);
OrdChoose.toggleBtnSearchSpinner(0);
return false;
}
Helper.toast('Success', 'just now', 'success confirm order');
resolve({
type: 'success'
});
OrdChoose.toggleBtnSearchSpinner(0);
window.location.href = "{{ route('view_transactions') }}"
},
error: (jqXHR, textStatus, error) => {
$('#btnChooseVendor').removeAttr('disabed');
if (jqXHR.status >= 500) {
Helper.toast('Error', 'just now', 'please try again');
} else {
Helper.toast('Error', 'just now', jqXHR.responseJSON.meta
.message);
}
resolve({
type: 'error'
});
OrdChoose.toggleBtnSearchSpinner(0);
}
})
})
},
toggleBtnSearchSpinner: function(isShow = 1) {
if (isShow) {
$('#btnChooseVendor').addClass('d-none');
$('#group_btnChooseVdrSpinner').removeClass('d-none');
} else {
$('#btnChooseVendor').removeClass('d-none');
$('#group_btnChooseVdrSpinner').addClass('d-none');
}
},
}
Wrapper.activate();
</script>
@endsection