feat: Add initial implementation for vehicle and device management, including dedicated controllers and views, and a new reports controller.

This commit is contained in:
Pringgosutono
2025-12-16 14:07:21 +07:00
parent c3abd60868
commit 9940e6722d
5 changed files with 3772 additions and 3648 deletions

View File

@ -119,6 +119,7 @@ class DevicesController extends Controller
"assigned" => $req->assigned,
"vid" => $req->vid,
"available" => $req->available,
"protocol" => $req->protocol,
];
$rulesInput = [
"device_id" => "required|numeric",
@ -129,6 +130,7 @@ class DevicesController extends Controller
"assigned" => "required|numeric",
"vid" => "nullable|numeric",
"available" => "required|numeric",
"protocol" => "string",
];
// validasi input
@ -173,6 +175,7 @@ class DevicesController extends Controller
"crt_by" => $req->auth->uid,
"updt" => $now,
"updt_by" => $req->auth->uid,
"protocol" => $req->protocol,
];
$id = Devices::addDevice($insDevice);
@ -241,6 +244,7 @@ class DevicesController extends Controller
"assigned" => $req->assigned,
"vid" => $req->vid,
"available" => $req->available,
"protocol" => $req->protocol,
];
$rulesInput = [
"id" => "required|integer|not_in:0",
@ -252,6 +256,7 @@ class DevicesController extends Controller
"assigned" => "required|numeric",
"vid" => "nullable|numeric",
"available" => "required|numeric",
"protocol" => "string",
];
// validasi input
@ -364,6 +369,7 @@ class DevicesController extends Controller
"is_available" => $req->available,
"updt" => $now,
"updt_by" => $req->auth->uid,
"protocol" => $req->protocol,
];
Devices::updateDevice($id, $updtDevice);

View File

@ -366,7 +366,7 @@ class ReportsController extends Controller
public function api_view_trip_detail(Request $req, $token)
{
// token = base64_encode(tgl0 + '|' + tgl1 + '|' + nopol1 + '|' + now_unix())
// token = base64(unix(start_time) + '|' + unix(end_time) + '|' + nopol + '|' + unix(now()))
// $token = "1759686805|1759693045|B.10-517|1765845676";
$token = base64_decode($token);
$token = explode('|', $token);

View File

@ -74,7 +74,7 @@ class VehiclesController extends Controller
$list = DB::select("SELECT
v.id, v.name, v.device_id, nopol1, nopol2, nopol3, v.sum_milleage,
fvhc_img, vyear, t.`desc` type_name, c_name company_name, rltm.crt_d, rltm.crt crt_rltm,
dvc.crt, dvc.simcard, fuel_curr
dvc.crt, dvc.simcard, fuel_curr, dvc.protocol
FROM t_vehicles as v
INNER JOIN t_vehicles_detail AS vd ON v.id = vd.vid
LEFT JOIN t_vehicles_types AS t ON v.type_id = t.id

View File

@ -41,6 +41,7 @@
<th class="">#</th>
<th class="text-center">Action</th>
<th class="">Device ID</th>
<th class="">Device Type</th>
<th class="">Name</th>
<th class="text-end">SIM Card</th>
<th class="text-end">Type</th>
@ -60,7 +61,8 @@
</div>
</div>
<div class="modal fade" data-bs-backdrop="static" data-bs-keyboard="false" id="mdlNewDevice" aria-labelledby="mdlNewDeviceLabel" aria-hidden="true">
<div class="modal fade" data-bs-backdrop="static" data-bs-keyboard="false" id="mdlNewDevice"
aria-labelledby="mdlNewDeviceLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog modal-dialog-centered modal-dialog-scrollable modal-xl">
<div class="modal-content">
<div class="modal-header">
@ -76,19 +78,23 @@
</div>
<div class="row">
<div class="col-sm-6">
<label for="add-device_id" class="col-form-label">Device ID<span class="text-danger">*</span></label>
<label for="add-device_id" class="col-form-label">Device ID<span
class="text-danger">*</span></label>
<input type="number" name="add-device_id" id="add-device_id" class="form-control">
</div>
<div class="col-sm-6">
<label for="add-name" class="col-form-label">Name<span class="text-danger">*</span></label>
<label for="add-name" class="col-form-label">Name<span
class="text-danger">*</span></label>
<input type="text" name="add-name" id="add-name" class="form-control">
</div>
<div class="col-sm-6">
<label for="add-simcard" class="col-form-label">Simcard<span class="text-danger">*</span></label>
<label for="add-simcard" class="col-form-label">Simcard<span
class="text-danger">*</span></label>
<input type="number" name="add-simcard" id="add-simcard" class="form-control">
</div>
<div class="col-sm-6">
<label for="add-type" class="col-form-label">Type<span class="text-danger">*</span></label>
<label for="add-type" class="col-form-label">Type<span
class="text-danger">*</span></label>
<select name="add-type" id="add-type" class="form-control" style="width:100%;">
<option value="" selected disabled>Select Type</option>
<option value="{{ \App\Models\Devices::TYPE_BUILT_IN }}">Built-in</option>
@ -96,7 +102,7 @@
</select>
</div>
<div class="col-sm-6">
<label for="add-protocol" class="col-form-label">Protocol</label>
<label for="add-protocol" class="col-form-label">Device Type</label>
<input type="text" name="add-protocol" id="add-protocol" class="form-control">
</div>
</div>
@ -108,36 +114,47 @@
</div>
<div class="row">
<div class="col-sm-6 col-md-3">
<label for="add-status" class="form-label">Status<span class="text-danger">*</span></label>
<label for="add-status" class="form-label">Status<span
class="text-danger">*</span></label>
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" id="add-status">
<label class="form-check-label" for="add-status"><span class="text-dark" id="add-txtStatus">Inactive</span></label>
<label class="form-check-label" for="add-status"><span class="text-dark"
id="add-txtStatus">Inactive</span></label>
</div>
</div>
<div class="col-sm-6 col-md-3">
<div class="form-group">
<label for="add-assigned" class="form-label">Installed ? <span class="text-danger">*</span></label>
<label for="add-assigned" class="form-label">Installed ? <span
class="text-danger">*</span></label>
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" id="add-assigned">
<label class="form-check-label" for="add-assigned"><span class="text-dark" id="add-txtAssigned">Released</span></label>
<label class="form-check-label" for="add-assigned"><span class="text-dark"
id="add-txtAssigned">Released</span></label>
</div>
</div>
<div class="form-group vhcAssignGroup d-none">
<label for="add-vhc_assigned" class="col-form-label">Vehicle<span class="text-danger">*</span></label>
<select name="add-vhc_assigned" id="add-vhc_assigned" class="form-control" style="width:100%;">
<label for="add-vhc_assigned" class="col-form-label">Vehicle<span
class="text-danger">*</span></label>
<select name="add-vhc_assigned" id="add-vhc_assigned" class="form-control"
style="width:100%;">
<option value="" selected disabled>Select Type</option>
@foreach ($vhcs as $vhc)
<option value="{{ $vhc->vid }}" data-vid="{{ $vhc->vid }}" data-nopol="{{ $vhc->nopol1 . ' ' . $vhc->nopol2 . ' ' . $vhc->nopol3 }}">{{ $vhc->nopol1 . ' ' . $vhc->nopol2 . ' ' . $vhc->nopol3 }}</option>
<option value="{{ $vhc->vid }}" data-vid="{{ $vhc->vid }}"
data-nopol="{{ $vhc->nopol1 . ' ' . $vhc->nopol2 . ' ' . $vhc->nopol3 }}">
{{ $vhc->nopol1 . ' ' . $vhc->nopol2 . ' ' . $vhc->nopol3 }}
</option>
@endforeach
</select>
</div>
</div>
<div class="col-sm-6 col-md-3">
<div class="form-group">
<label for="add-available" class="form-label">Available Status ? <span class="text-danger">*</span></label>
<label for="add-available" class="form-label">Available Status ? <span
class="text-danger">*</span></label>
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" id="add-available">
<label class="form-check-label" for="add-available"><span class="text-dark" id="add-txtAvailable">Not Available</span></label>
<label class="form-check-label" for="add-available"><span class="text-dark"
id="add-txtAvailable">Not Available</span></label>
</div>
</div>
</div>
@ -153,7 +170,8 @@
</div>
</div>
<div class="modal fade" data-bs-backdrop="static" data-bs-keyboard="false" id="mdlUpdtDevice" aria-labelledby="mdlUpdtDeviceLabel" aria-hidden="true">
<div class="modal fade" data-bs-backdrop="static" data-bs-keyboard="false" id="mdlUpdtDevice"
aria-labelledby="mdlUpdtDeviceLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog modal-dialog-centered modal-dialog-scrollable modal-xl">
<div class="modal-content">
<div class="modal-header">
@ -169,19 +187,23 @@
</div>
<div class="row">
<div class="col-sm-6">
<label for="updt-device_id" class="col-form-label">Device ID<span class="text-danger">*</span></label>
<label for="updt-device_id" class="col-form-label">Device ID<span
class="text-danger">*</span></label>
<input type="number" name="updt-device_id" id="updt-device_id" class="form-control">
</div>
<div class="col-sm-6">
<label for="updt-name" class="col-form-label">Name<span class="text-danger">*</span></label>
<label for="updt-name" class="col-form-label">Name<span
class="text-danger">*</span></label>
<input type="text" name="updt-name" id="updt-name" class="form-control">
</div>
<div class="col-sm-6">
<label for="updt-simcard" class="col-form-label">Simcard<span class="text-danger">*</span></label>
<label for="updt-simcard" class="col-form-label">Simcard<span
class="text-danger">*</span></label>
<input type="number" name="updt-simcard" id="updt-simcard" class="form-control">
</div>
<div class="col-sm-6">
<label for="updt-type" class="col-form-label">Type<span class="text-danger">*</span></label>
<label for="updt-type" class="col-form-label">Type<span
class="text-danger">*</span></label>
<select name="updt-type" id="updt-type" class="form-control" style="width:100%;">
<option value="" selected disabled>Select Type</option>
<option value="{{ \App\Models\Devices::TYPE_BUILT_IN }}">Built-in</option>
@ -189,7 +211,7 @@
</select>
</div>
<div class="col-sm-6">
<label for="updt-protocol" class="col-form-label">Protocol</label>
<label for="updt-protocol" class="col-form-label">Device Type</label>
<input type="text" name="updt-protocol" id="updt-protocol" class="form-control">
</div>
</div>
@ -201,36 +223,47 @@
</div>
<div class="row">
<div class="col-sm-6 col-md-3">
<label for="updt-status" class="form-label">Status<span class="text-danger">*</span></label>
<label for="updt-status" class="form-label">Status<span
class="text-danger">*</span></label>
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" id="updt-status">
<label class="form-check-label" for="updt-status"><span class="text-dark" id="updt-txtStatus">Inactive</span></label>
<label class="form-check-label" for="updt-status"><span class="text-dark"
id="updt-txtStatus">Inactive</span></label>
</div>
</div>
<div class="col-sm-6 col-md-3">
<div class="form-group">
<label for="updt-assigned" class="form-label">Installed ? <span class="text-danger">*</span></label>
<label for="updt-assigned" class="form-label">Installed ? <span
class="text-danger">*</span></label>
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" id="updt-assigned">
<label class="form-check-label" for="updt-assigned"><span class="text-dark" id="updt-txtAssigned">Released</span></label>
<label class="form-check-label" for="updt-assigned"><span class="text-dark"
id="updt-txtAssigned">Released</span></label>
</div>
</div>
<div class="form-group vhcAssignGroup d-none">
<label for="updt-vhc_assigned" class="col-form-label">Vehicle<span class="text-danger">*</span></label>
<select name="updt-vhc_assigned" id="updt-vhc_assigned" class="form-control" style="width:100%;">
<label for="updt-vhc_assigned" class="col-form-label">Vehicle<span
class="text-danger">*</span></label>
<select name="updt-vhc_assigned" id="updt-vhc_assigned" class="form-control"
style="width:100%;">
<option value="" selected disabled>Select Type</option>
@foreach ($vhcs as $vhc)
<option value="{{ $vhc->vid }}" data-vid="{{ $vhc->vid }}" data-nopol="{{ $vhc->nopol1 . ' ' . $vhc->nopol2 . ' ' . $vhc->nopol3 }}">{{ $vhc->nopol1 . ' ' . $vhc->nopol2 . ' ' . $vhc->nopol3 }}</option>
<option value="{{ $vhc->vid }}" data-vid="{{ $vhc->vid }}"
data-nopol="{{ $vhc->nopol1 . ' ' . $vhc->nopol2 . ' ' . $vhc->nopol3 }}">
{{ $vhc->nopol1 . ' ' . $vhc->nopol2 . ' ' . $vhc->nopol3 }}
</option>
@endforeach
</select>
</div>
</div>
<div class="col-sm-6 col-md-3">
<div class="form-group">
<label for="updt-available" class="form-label">Available Status ? <span class="text-danger">*</span></label>
<label for="updt-available" class="form-label">Available Status ? <span
class="text-danger">*</span></label>
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" id="updt-available">
<label class="form-check-label" for="updt-available"><span class="text-dark" id="updt-txtAvailable">Not Available</span></label>
<label class="form-check-label" for="updt-available"><span class="text-dark"
id="updt-txtAvailable">Not Available</span></label>
</div>
</div>
</div>
@ -251,7 +284,8 @@
</div>
</div>
<div class="modal fade" data-bs-backdrop="static" data-bs-keyboard="false" id="mdlDelDevice" aria-labelledby="mdlDelDeviceLabel" aria-hidden="true">
<div class="modal fade" data-bs-backdrop="static" data-bs-keyboard="false" id="mdlDelDevice"
aria-labelledby="mdlDelDeviceLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered modal-sm">
<div class="modal-content">
<div class="modal-header">
@ -436,6 +470,13 @@
return `<span class="d-none">${data}</span>` + Helper.splitEvery4Char(`${data}`);
},
},
{
data: 'protocol',
className: 'text-end text-nowrap',
visible: true,
orderable: true,
searchable: true,
},
{
data: 'name',
className: 'text-end text-nowrap',

View File

@ -49,12 +49,15 @@
<th class="">Type</th>
<th class="">Service Start</th>
@if ($user_role != \App\Models\Users::ROLE_VENDOR)
<th class="">Device ID</th>
<th class="">Device</th>
<th class="">SIM Card</th>
<th class="">Last Update</th>
@endif
<th class=""><span class="text-nowrap">Mileage <span class="text-lowercase">(km)</span></span></th>
<th class=""><span class="text-nowrap">Fuel <span class="text-lowercase">(L)</span></span></th>
<th class=""><span class="text-nowrap">Mileage <spanm class="text-lowercase">
(km)</span></span></th>
<th class=""><span class="text-nowrap">Fuel <span
class="text-lowercase">(L)</span></span></th>
<th class=""><span class="text-nowrap">Fuel Support</span></th>
<th class="">Company</th>
</tr>
</thead>
@ -68,7 +71,8 @@
</div>
</div>
<div class="modal fade" data-bs-backdrop="static" data-bs-keyboard="false" id="mdlNewVhc" aria-labelledby="mdlNewVhcLabel" aria-hidden="true">
<div class="modal fade" data-bs-backdrop="static" data-bs-keyboard="false" id="mdlNewVhc"
aria-labelledby="mdlNewVhcLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog modal-dialog-centered modal-dialog-scrollable modal-xl">
<div class="modal-content">
<div class="modal-header">
@ -87,15 +91,21 @@
<div class="col-5">
<label for="add-fvhc-img" class="col-form-label">Front Vehicle Photo:</label>
<br>
<img id="add-fvhc-img" class="img-fluid landscape-photo" style="max-height: 19.6vh" src="https://products.unitedtractors.com/wp-content/uploads/2021/03/udtruck-GWE370.png" alt="add-fvhc-img">
<img id="add-fvhc-img" class="img-fluid landscape-photo" style="max-height: 19.6vh"
src="https://products.unitedtractors.com/wp-content/uploads/2021/03/udtruck-GWE370.png"
alt="add-fvhc-img">
<div id="add-group_fvhc_spinner" class="d-none">
<div class="spinner-border" role="status">
<span class="visually-hidden">Loading...</span>
</div>
</div>
<div id="add-group_rotate_fvhc" class="pt-2 d-flex justify-content-start d-none">
<button type="button" class="btnRotateLeft btn btn-sm btn-outline-primary ml-1" style="padding:0.25rem 0.5rem;border-radius:0.25rem;"><i class="icon ion-arrow-return-left"></i></button>
<button type="button" class="btnRotateRight btn btn-sm btn-outline-primary ml-1" style="padding:0.25rem 0.5rem;border-radius:0.25rem;"><i class="icon ion-arrow-return-right"></i></button>
<button type="button" class="btnRotateLeft btn btn-sm btn-outline-primary ml-1"
style="padding:0.25rem 0.5rem;border-radius:0.25rem;"><i
class="icon ion-arrow-return-left"></i></button>
<button type="button" class="btnRotateRight btn btn-sm btn-outline-primary ml-1"
style="padding:0.25rem 0.5rem;border-radius:0.25rem;"><i
class="icon ion-arrow-return-right"></i></button>
</div>
<input type="file" id="add-fvhc-file" class="form-control mt-3">
<input type="text" id="add-fvhc-base64" class="form-control" hidden>
@ -110,7 +120,10 @@
<select id="add-deviceid" class="form-control" style="width:100%;">
<option value="">Tidak dipilih</option>
@foreach ($devices as $device)
<option value="{{ $device->id }}" data-device_id="{{ $device->device_id }}" data-simcard="{{ $device->simcard }}" data-type="{{ $device->type }}">{{ $device->name . ' (' . implode(' ', str_split($device->device_id, 4)) . ')' }}</option>
<option value="{{ $device->id }}" data-device_id="{{ $device->device_id }}"
data-simcard="{{ $device->simcard }}" data-type="{{ $device->type }}">{{
$device->name . ' (' . implode(' ', str_split($device->device_id, 4)) .
')' }}</option>
@endforeach
</select>
</div> --}}
@ -139,7 +152,8 @@
<div class="row">
<div class="col-sm-6">
<div class="mb-0">
<label for="add-speedlimit" class="col-form-label">Speed Limit (kph):</label>
<label for="add-speedlimit" class="col-form-label">Speed Limit
(kph):</label>
<input type="number" id="add-speedlimit" class="form-control">
</div>
</div>
@ -153,11 +167,14 @@
<div class="row">
<div class="col-sm-6">
<div class="mb-0">
<label for="add-dc_code" class="col-form-label">Distribution Category:</label>
<label for="add-dc_code" class="col-form-label">Distribution
Category:</label>
<select id="add-dc_code" class="form-control" style="width:100%;">
<option value="">Choose</option>
@foreach ($listDistribution as $distribution)
<option value="{{ $distribution->dc_code }}">{{ $distribution->dc_code }} - {{ $distribution->dc_name }}</option>
<option value="{{ $distribution->dc_code }}">
{{ $distribution->dc_code }} - {{ $distribution->dc_name }}
</option>
@endforeach
</select>
</div>
@ -168,7 +185,9 @@
<select id="add-pool_code" class="form-control" style="width:100%;">
<option value="">Choose</option>
@foreach ($listPool as $pool)
<option value="{{ $pool->pool_code }}">{{ $pool->pool_code }} - {{ $pool->pool_name }}</option>
<option value="{{ $pool->pool_code }}">{{ $pool->pool_code }} -
{{ $pool->pool_name }}
</option>
@endforeach
</select>
</div>
@ -189,7 +208,8 @@
<option value="">Choose</option>
@foreach ($drivers as $driver)
<option value="{{ $driver->id }}">
{{ $driver->fullname . ' (+' . $driver->phone_code . implode(' ', str_split($driver->phone, 4)) . ')' }}
{{ $driver->fullname . ' (+' . $driver->phone_code . implode(' ',
str_split($driver->phone, 4)) . ')' }}
</option>
@endforeach
</select>
@ -200,7 +220,8 @@
<option value="">Choose</option>
@foreach ($drivers as $driver)
<option value="{{ $driver->id }}">
{{ $driver->fullname . ' (+' . $driver->phone_code . implode(' ', str_split($driver->phone, 4)) . ')' }}
{{ $driver->fullname . ' (+' . $driver->phone_code . implode(' ',
str_split($driver->phone, 4)) . ')' }}
</option>
@endforeach
</select>
@ -216,15 +237,21 @@
<div class="col-5">
<label for="add-stnk-img" class="col-form-label">CoV Photo:</label>
<br>
<img id="add-stnk-img" class="img-fluid landscape-photo" src="https://cdn-2.tstatic.net/kaltim/foto/bank/images/ilustrasi-surat-tanda-nomor-kendaraan-bermotor-stnk.jpg" alt="add-stnk-img">
<img id="add-stnk-img" class="img-fluid landscape-photo"
src="https://cdn-2.tstatic.net/kaltim/foto/bank/images/ilustrasi-surat-tanda-nomor-kendaraan-bermotor-stnk.jpg"
alt="add-stnk-img">
<div id="add-group_stnk_spinner" class="d-none">
<div class="spinner-border" role="status">
<span class="visually-hidden">Loading...</span>
</div>
</div>
<div id="add-group_rotate_stnk" class="pt-2 d-flex justify-content-start d-none">
<button type="button" class="btnRotateLeft btn btn-sm btn-outline-primary ml-1" style="padding:0.25rem 0.5rem;border-radius:0.25rem;"><i class="icon ion-arrow-return-left"></i></button>
<button type="button" class="btnRotateRight btn btn-sm btn-outline-primary ml-1" style="padding:0.25rem 0.5rem;border-radius:0.25rem;"><i class="icon ion-arrow-return-right"></i></button>
<button type="button" class="btnRotateLeft btn btn-sm btn-outline-primary ml-1"
style="padding:0.25rem 0.5rem;border-radius:0.25rem;"><i
class="icon ion-arrow-return-left"></i></button>
<button type="button" class="btnRotateRight btn btn-sm btn-outline-primary ml-1"
style="padding:0.25rem 0.5rem;border-radius:0.25rem;"><i
class="icon ion-arrow-return-right"></i></button>
</div>
<input type="file" id="add-stnk-file" class="form-control mt-3">
<input type="text" id="add-stnk-base64" class="form-control" hidden>
@ -246,13 +273,16 @@
<label for="add-nopol1" class="colr-form-label">License Plate Number</label>
<div class="row">
<div class="col">
<input type="text" id="add-nopol1" class="form-control" placeholder="ex: A-25-391">
<input type="text" id="add-nopol1" class="form-control"
placeholder="ex: A-25-391">
</div>
<div class="col d-none">
<input type="number" id="add-nopol2" class="form-control" placeholder="ex: 3633">
<input type="number" id="add-nopol2" class="form-control"
placeholder="ex: 3633">
</div>
<div class="col d-none">
<input type="text" id="add-nopol3" class="form-control" placeholder="ex: EEV">
<input type="text" id="add-nopol3" class="form-control"
placeholder="ex: EEV">
</div>
</div>
</div>
@ -266,7 +296,8 @@
<input type="number" id="add-stnk-cc" class="form-control">
</div>
<div class="col-6">
<label for="add-stnk-vin" class="col-form-label">Vehicle Identity Number:</label>
<label for="add-stnk-vin" class="col-form-label">Vehicle Identity
Number:</label>
<input type="string" id="add-stnk-vin" class="form-control">
</div>
<div class="col-6">
@ -282,11 +313,13 @@
<input type="string" id="add-stnk-fueltype" class="form-control">
</div>
<div class="col-6">
<label for="add-stnk-tnkbcolor" class="col-form-label">License Plat Color:</label>
<label for="add-stnk-tnkbcolor" class="col-form-label">License Plat
Color:</label>
<input type="string" id="add-stnk-tnkbcolor" class="form-control">
</div>
<div class="col-6">
<label for="add-stnk-regisyear" class="col-form-label">Registration Year:</label>
<label for="add-stnk-regisyear" class="col-form-label">Registration
Year:</label>
<input type="number" id="add-stnk-regisyear" class="form-control">
</div>
</div>
@ -308,7 +341,8 @@
</div>
</div>
<div class="modal fade" data-bs-backdrop="static" data-bs-keyboard="false" id="mdlEdtVhc" aria-labelledby="mdlEdtVhcLabel" aria-hidden="true">
<div class="modal fade" data-bs-backdrop="static" data-bs-keyboard="false" id="mdlEdtVhc"
aria-labelledby="mdlEdtVhcLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog modal-dialog-centered modal-dialog-scrollable modal-xl">
<div class="modal-content">
<div class="modal-header">
@ -326,15 +360,21 @@
<div class="col-5">
<label for="edt-fvhc-img" class="col-form-label">Front Vehicle Photo:</label>
<br>
<img id="edt-fvhc-img" class="img-fluid landscape-photo" style="max-height: 19.6vh" src="https://products.unitedtractors.com/wp-content/uploads/2021/03/udtruck-GWE370.png" alt="edt-fvhc-img">
<img id="edt-fvhc-img" class="img-fluid landscape-photo" style="max-height: 19.6vh"
src="https://products.unitedtractors.com/wp-content/uploads/2021/03/udtruck-GWE370.png"
alt="edt-fvhc-img">
<div id="edt-group_fvhc_spinner" class="d-none">
<div class="spinner-border" role="status">
<span class="visually-hidden">Loading...</span>
</div>
</div>
<div id="edt-group_rotate_fvhc" class="pt-2 d-flex justify-content-start d-none">
<button type="button" class="btnRotateLeft btn btn-sm btn-outline-primary ml-1" style="padding:0.25rem 0.5rem;border-radius:0.25rem;"><i class="icon ion-arrow-return-left"></i></button>
<button type="button" class="btnRotateRight btn btn-sm btn-outline-primary ml-1" style="padding:0.25rem 0.5rem;border-radius:0.25rem;"><i class="icon ion-arrow-return-right"></i></button>
<button type="button" class="btnRotateLeft btn btn-sm btn-outline-primary ml-1"
style="padding:0.25rem 0.5rem;border-radius:0.25rem;"><i
class="icon ion-arrow-return-left"></i></button>
<button type="button" class="btnRotateRight btn btn-sm btn-outline-primary ml-1"
style="padding:0.25rem 0.5rem;border-radius:0.25rem;"><i
class="icon ion-arrow-return-right"></i></button>
</div>
<input type="file" id="edt-fvhc-file" class="form-control mt-3">
<input type="text" id="edt-fvhc-base64" class="form-control" hidden>
@ -349,7 +389,10 @@
<select id="edt-deviceid" class="form-control" style="width:100%;">
<option value="">Tidak dipilih</option>
@foreach ($devices as $device)
<option value="{{ $device->id }}" data-device_id="{{ $device->device_id }}" data-simcard="{{ $device->simcard }}" data-type="{{ $device->type }}">{{ $device->name . ' (' . implode(' ', str_split($device->device_id, 4)) . ')' }}</option>
<option value="{{ $device->id }}" data-device_id="{{ $device->device_id }}"
data-simcard="{{ $device->simcard }}" data-type="{{ $device->type }}">
{{ $device->name . ' (' . implode(' ', str_split($device->device_id, 4)) . ')' }}
</option>
@endforeach
</select>
</div>
@ -378,7 +421,8 @@
<div class="row">
<div class="col-sm-6">
<div class="mb-0">
<label for="edt-speedlimit" class="col-form-label">Speed Limit (kph):</label>
<label for="edt-speedlimit" class="col-form-label">Speed Limit
(kph):</label>
<input type="number" id="edt-speedlimit" class="form-control">
</div>
</div>
@ -394,11 +438,14 @@
<div class="row">
<div class="col-sm-6">
<div class="mb-0">
<label for="edt-dc_code" class="col-form-label">Distribution Category:</label>
<label for="edt-dc_code" class="col-form-label">Distribution
Category:</label>
<select id="edt-dc_code" class="form-control" style="width:100%;">
<option value="">Choose</option>
@foreach ($listDistribution as $distribution)
<option value="{{ $distribution->dc_code }}">{{ $distribution->dc_code }} - {{ $distribution->dc_name }}</option>
<option value="{{ $distribution->dc_code }}">
{{ $distribution->dc_code }} - {{ $distribution->dc_name }}
</option>
@endforeach
</select>
</div>
@ -409,7 +456,9 @@
<select id="edt-pool_code" class="form-control" style="width:100%;">
<option value="">Choose</option>
@foreach ($listPool as $pool)
<option value="{{ $pool->pool_code }}">{{ $pool->pool_code }} - {{ $pool->pool_name }}</option>
<option value="{{ $pool->pool_code }}">{{ $pool->pool_code }} -
{{ $pool->pool_name }}
</option>
@endforeach
</select>
</div>
@ -431,7 +480,8 @@
<option value="">Choose</option>
@foreach ($drivers as $driver)
<option value="{{ $driver->id }}">
{{ $driver->fullname . ' (+' . $driver->phone_code . implode(' ', str_split($driver->phone, 4)) . ')' }}
{{ $driver->fullname . ' (+' . $driver->phone_code . implode(' ',
str_split($driver->phone, 4)) . ')' }}
</option>
@endforeach
</select>
@ -442,7 +492,8 @@
<option value="">Choose</option>
@foreach ($drivers as $driver)
<option value="{{ $driver->id }}">
{{ $driver->fullname . ' (+' . $driver->phone_code . implode(' ', str_split($driver->phone, 4)) . ')' }}
{{ $driver->fullname . ' (+' . $driver->phone_code . implode(' ',
str_split($driver->phone, 4)) . ')' }}
</option>
@endforeach
</select>
@ -458,15 +509,21 @@
<div class="col-5">
<label for="edt-stnk-img" class="col-form-label">CoV Photo:</label>
<br>
<img id="edt-stnk-img" class="img-fluid landscape-photo" src="https://cdn-2.tstatic.net/kaltim/foto/bank/images/ilustrasi-surat-tanda-nomor-kendaraan-bermotor-stnk.jpg" alt="edt-stnk-img">
<img id="edt-stnk-img" class="img-fluid landscape-photo"
src="https://cdn-2.tstatic.net/kaltim/foto/bank/images/ilustrasi-surat-tanda-nomor-kendaraan-bermotor-stnk.jpg"
alt="edt-stnk-img">
<div id="edt-group_stnk_spinner" class="d-none">
<div class="spinner-border" role="status">
<span class="visually-hidden">Loading...</span>
</div>
</div>
<div id="edt-group_rotate_stnk" class="pt-2 d-flex justify-content-start d-none">
<button type="button" class="btnRotateLeft btn btn-sm btn-outline-primary ml-1" style="padding:0.25rem 0.5rem;border-radius:0.25rem;"><i class="icon ion-arrow-return-left"></i></button>
<button type="button" class="btnRotateRight btn btn-sm btn-outline-primary ml-1" style="padding:0.25rem 0.5rem;border-radius:0.25rem;"><i class="icon ion-arrow-return-right"></i></button>
<button type="button" class="btnRotateLeft btn btn-sm btn-outline-primary ml-1"
style="padding:0.25rem 0.5rem;border-radius:0.25rem;"><i
class="icon ion-arrow-return-left"></i></button>
<button type="button" class="btnRotateRight btn btn-sm btn-outline-primary ml-1"
style="padding:0.25rem 0.5rem;border-radius:0.25rem;"><i
class="icon ion-arrow-return-right"></i></button>
</div>
<input type="file" id="edt-stnk-file" class="form-control mt-3">
<input type="text" id="edt-stnk-base64" class="form-control" hidden>
@ -491,10 +548,12 @@
<input type="text" id="edt-nopol1" class="form-control" placeholder="ex: B">
</div>
<div class="col d-none">
<input type="number" id="edt-nopol2" class="form-control" placeholder="ex: 3633">
<input type="number" id="edt-nopol2" class="form-control"
placeholder="ex: 3633">
</div>
<div class="col d-none">
<input type="text" id="edt-nopol3" class="form-control" placeholder="ex: EEV">
<input type="text" id="edt-nopol3" class="form-control"
placeholder="ex: EEV">
</div>
</div>
</div>
@ -508,7 +567,8 @@
<input type="number" id="edt-stnk-cc" class="form-control">
</div>
<div class="col-6">
<label for="edt-stnk-vin" class="col-form-label">Vehicle Identity Number:</label>
<label for="edt-stnk-vin" class="col-form-label">Vehicle Identity
Number:</label>
<input type="string" id="edt-stnk-vin" class="form-control">
</div>
<div class="col-6">
@ -524,11 +584,13 @@
<input type="string" id="edt-stnk-fueltype" class="form-control">
</div>
<div class="col-6">
<label for="edt-stnk-tnkbcolor" class="col-form-label">License Plat Color:</label>
<label for="edt-stnk-tnkbcolor" class="col-form-label">License Plat
Color:</label>
<input type="string" id="edt-stnk-tnkbcolor" class="form-control">
</div>
<div class="col-6">
<label for="edt-stnk-regisyear" class="col-form-label">Registration Year:</label>
<label for="edt-stnk-regisyear" class="col-form-label">Registration
Year:</label>
<input type="number" id="edt-stnk-regisyear" class="form-control">
</div>
</div>
@ -548,7 +610,8 @@
<option value="0">Vendor belum dipilih</option>
@foreach ($vendors as $vendor)
<option value="{{ $vendor->id }}">
{{ $vendor->first_name . ' (+' . $vendor->phone_code . implode(' ', str_split($vendor->phone, 4)) . ')' }}
{{ $vendor->first_name . ' (+' . $vendor->phone_code . implode(' ',
str_split($vendor->phone, 4)) . ')' }}
</option>
@endforeach
</select>
@ -576,7 +639,8 @@
</div>
</div>
<div class="modal fade" data-bs-backdrop="static" data-bs-keyboard="false" id="mdlDelVhc" aria-labelledby="mdlDelVhcLabel" aria-hidden="true">
<div class="modal fade" data-bs-backdrop="static" data-bs-keyboard="false" id="mdlDelVhc"
aria-labelledby="mdlDelVhcLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered modal-sm">
<div class="modal-content">
<div class="modal-header">
@ -792,7 +856,10 @@
orderable: true,
searchable: true,
render: function (data, type, row, meta) {
return data ? Helper.splitEvery4Char(data) : '-';
const device_id = Helper.splitEvery4Char(data);
const protocol = " " + row.protocol || '';
return device_id + '<br>' + protocol;
// return `<span class="d-none">${data}</span>` + Helper.splitEvery4Char(`${data}`);
},
},
@ -838,6 +905,16 @@
return Number(data / 10).toFixed(1);
}
},
{
data: 'fuel_curr',
className: 'text-end',
visible: true,
orderable: true,
searchable: true,
render: function (data, type, row, meta) {
return data ? 'Yes' : 'No';
}
},
{
data: 'company_name',
className: 'text-start text-nowrap',