update latitude and longitude for trips

This commit is contained in:
wayanrivan
2026-07-13 10:48:38 +07:00
parent a19e12ec7b
commit a0ce09cdda
4 changed files with 161 additions and 103 deletions

View File

@ -178,6 +178,10 @@ class ReportsController extends Controller
) )
SELECT SELECT
t.*, t.*,
ttll.start_latitude,
ttll.start_longitude,
ttll.finish_latitude,
ttll.finish_longitude,
tm.total_mileage, tm.total_mileage,
tm.total_trip, tm.total_trip,
vt.name AS type_name, vt.name AS type_name,
@ -189,6 +193,7 @@ class ReportsController extends Controller
JOIN TotalMileage tm ON t.id = tm.id JOIN TotalMileage tm ON t.id = tm.id
LEFT JOIN t_vehicles tvt ON tvt.id = t.vhc_id LEFT JOIN t_vehicles tvt ON tvt.id = t.vhc_id
LEFT JOIN t_vehicles_cats vt ON vt.id = tvt.cat_id LEFT JOIN t_vehicles_cats vt ON vt.id = tvt.cat_id
LEFT JOIN t_trips_latitude_longitude ttll ON t.id = ttll.tripsid
WHERE WHERE
t.start BETWEEN ? AND ? t.start BETWEEN ? AND ?
AND (? IS NULL OR t.id = ?) AND (? IS NULL OR t.id = ?)

View File

@ -25,8 +25,8 @@
@if ($user_role == \App\Models\Users::ROLE_VENDOR || $user_role == \App\Models\Users::ROLE_ADMIN) @if ($user_role == \App\Models\Users::ROLE_VENDOR || $user_role == \App\Models\Users::ROLE_ADMIN)
@can('vehicle.create') @can('vehicle.create')
<!-- <div class="col text-end"> <!-- <div class="col text-end">
<button id="btnMdlNewVhc" class="btn btn-sm btn-danger">Add New Vehicle</button> <button id="btnMdlNewVhc" class="btn btn-sm btn-danger">Add New Vehicle</button>
</div> --> </div> -->
@endcan @endcan
{{-- <div class="col-auto text-end ps-0"> {{-- <div class="col-auto text-end ps-0">
@ -129,73 +129,73 @@
</tr> </tr>
</thead> </thead>
<!-- <tbody> <!-- <tbody>
<tr> <tr>
<td>24-679</td> <td>24-679</td>
<td>24-679</td> <td>24-679</td>
<td>26</td> <td>26</td>
<td>442.3</td> <td>442.3</td>
</tr> </tr>
<tr> <tr>
<td>24-682</td> <td>24-682</td>
<td>24-682</td> <td>24-682</td>
<td>28</td> <td>28</td>
<td>312.7</td> <td>312.7</td>
</tr> </tr>
<tr> <tr>
<td>24-877</td> <td>24-877</td>
<td>24-877</td> <td>24-877</td>
<td>15</td> <td>15</td>
<td>276.4</td> <td>276.4</td>
</tr> </tr>
<tr> <tr>
<td>A.16-347</td> <td>A.16-347</td>
<td>A.16-347</td> <td>A.16-347</td>
<td>37</td> <td>37</td>
<td>543.2</td> <td>543.2</td>
</tr> </tr>
<tr> <tr>
<td>AL2025-B21</td> <td>AL2025-B21</td>
<td>AL2025-B21</td> <td>AL2025-B21</td>
<td>18</td> <td>18</td>
<td>295.4</td> <td>295.4</td>
</tr> </tr>
<tr> <tr>
<td>B.16-542</td> <td>B.16-542</td>
<td>B.16-542</td> <td>B.16-542</td>
<td>32</td> <td>32</td>
<td>478.2</td> <td>478.2</td>
</tr> </tr>
<tr> <tr>
<td>B.24-264</td> <td>B.24-264</td>
<td>B.24-264</td> <td>B.24-264</td>
<td>24</td> <td>24</td>
<td>188.4</td> <td>188.4</td>
</tr> </tr>
<tr> <tr>
<td>B.24-274</td> <td>B.24-274</td>
<td>B.24-274</td> <td>B.24-274</td>
<td>33</td> <td>33</td>
<td>440.1</td> <td>440.1</td>
</tr> </tr>
<tr> <tr>
<td>Ford Ranger</td> <td>Ford Ranger</td>
<td>26-199</td> <td>26-199</td>
<td>30</td> <td>30</td>
<td>631.4</td> <td>631.4</td>
</tr> </tr>
<tr> <tr>
<td>Nissan AD</td> <td>Nissan AD</td>
<td>B.10-517</td> <td>B.10-517</td>
<td>27</td> <td>27</td>
<td>375.9</td> <td>375.9</td>
</tr> </tr>
<tr> <tr>
<td>Triton</td> <td>Triton</td>
<td>A.29-127</td> <td>A.29-127</td>
<td>26</td> <td>26</td>
<td>508.2</td> <td>508.2</td>
</tr> </tr>
</tbody> --> </tbody> -->
</table> </table>
</div> </div>
</div> </div>
@ -207,17 +207,17 @@
<div class="modal fade" data-bs-backdrop="static" data-bs-keyboard="false" id="mdlDetailTrip" <div class="modal fade" data-bs-backdrop="static" data-bs-keyboard="false" id="mdlDetailTrip"
aria-labelledby="mdlDetailTripLabel" aria-hidden="true"> aria-labelledby="mdlDetailTripLabel" aria-hidden="true">
<!-- <div class="modal-dialog modal-dialog modal-dialog-centered modal-dialog-scrollable modal-xl"> <!-- <div class="modal-dialog modal-dialog modal-dialog-centered modal-dialog-scrollable modal-xl">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title" id="mdlDetailTripLabel">-----</h5> <h5 class="modal-title" id="mdlDetailTripLabel">-----</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div> </div>
<div class="modal-body"> <div class="modal-body">
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
</div> </div>
</div> </div>
</div> --> </div> -->
</div> </div>
@endsection @endsection
@ -472,30 +472,46 @@
render: (data, type, row, meta) => { render: (data, type, row, meta) => {
// saat export, hanya tampilkan lokasi tanpa tanggal/jam // saat export, hanya tampilkan lokasi tanpa tanggal/jam
if (type === 'export') { if (type === 'export') {
const nearestSite = findNearestSite(
row.start_latitude,
row.start_longitude
);
if (nearestSite) {
return formatSiteLabel(nearestSite);
}
return Helper.shortenText(decodeURIComponent(row.startLoc || return Helper.shortenText(decodeURIComponent(row.startLoc ||
'address'), 255) || "-"; 'address'), 255) || "-";
} }
const nearestSite = findNearestSite(
row.start_latitude,
row.start_longitude
);
if (nearestSite) {
return formatSiteLabel(nearestSite);
}
return ` return `
${moment.unix(data + AppState.TIMEFIX).format('DD MMM YYYY HH:mm:ss')}<br> ${moment.unix(data + AppState.TIMEFIX).format('DD MMM YYYY HH:mm:ss')}<br>
${Helper.shortenText(decodeURIComponent(row.startLoc || 'address'), 255) || "-"} ${Helper.shortenText(decodeURIComponent(row.startLoc || 'address'), 255) || "-"}
`; `;
} }
}, },
// { // {
// data: 'finish', // data: 'finish',
// render: (data, type, row, meta) => { // render: (data, type, row, meta) => {
// console.log(row) // console.log(row)
// // saat export, hanya tampilkan lokasi tanpa tanggal/jam // // saat export, hanya tampilkan lokasi tanpa tanggal/jam
// if (type === 'export') { // if (type === 'export') {
// return Helper.shortenText(decodeURIComponent(row.finishLoc || // return Helper.shortenText(decodeURIComponent(row.finishLoc ||
// 'address'), 255) || "-"; // 'address'), 255) || "-";
// } // }
// return ` // return `
// ${moment.unix(data + AppState.TIMEFIX).format('DD MMM YYYY HH:mm:ss')}<br> // ${moment.unix(data + AppState.TIMEFIX).format('DD MMM YYYY HH:mm:ss')}<br>
// ${Helper.shortenText(decodeURIComponent(row.finishLoc || 'address'), 255) || "-"} // ${Helper.shortenText(decodeURIComponent(row.finishLoc || 'address'), 255) || "-"}
// `; // `;
// } // }
// }, // },
{ {
data: 'finish', data: 'finish',
render: (data, type, row) => { render: (data, type, row) => {
@ -507,14 +523,14 @@
// Saat export Excel // Saat export Excel
if (type === 'export') { if (type === 'export') {
// const nearestSite = findNearestSite( const nearestSite = findNearestSite(
// row.latitude, row.finish_latitude,
// row.longitude row.finish_longitude
// ); );
// if (nearestSite) { if (nearestSite) {
// return formatSiteLabel(nearestSite); return formatSiteLabel(nearestSite);
// } }
return Helper.shortenText( return Helper.shortenText(
decodeURIComponent(row.finishLoc || 'address'), decodeURIComponent(row.finishLoc || 'address'),
@ -522,6 +538,15 @@
) || '-'; ) || '-';
} }
const nearestSite = findNearestSite(
row.finish_latitude,
row.finish_longitude
);
if (nearestSite) {
return formatSiteLabel(nearestSite);
}
// Tampilan di tabel // Tampilan di tabel
return ` return `
${moment.unix(data + AppState.TIMEFIX) ${moment.unix(data + AppState.TIMEFIX)
@ -536,7 +561,7 @@
`; `;
} }
}, },
{ {
className: 'text-start', className: 'text-start',
render: function(data, type, row, meta) { render: function(data, type, row, meta) {
const start = moment.unix(row.start); const start = moment.unix(row.start);

View File

@ -69,12 +69,13 @@
</li> </li>
@endif @endif
@if ( @if (
auth()->user()->can('config_truck_type.view') || auth()->user()->can('config_truck_type.view') ||
auth()->user()->can('config_master_device.view') || auth()->user()->can('config_master_device.view') ||
auth()->user()->can('config_logs_gps.view') || auth()->user()->can('config_logs_gps.view') ||
auth()->user()->can('config_distribution_category.view') || auth()->user()->can('config_distribution_category.view') ||
auth()->user()->can('config_pool.view') || auth()->user()->can('config_pool.view') ||
auth()->user()->can('user_logs.view') auth()->user()->can('user_logs.view')
|| auth()->user()->can('config_vehicle_maintenance_type.view')
) )
<li class="nav-item dropdown {{ Request::segment(1) == 'config' ? 'active' : '' }}"> <li class="nav-item dropdown {{ Request::segment(1) == 'config' ? 'active' : '' }}">
<a class="nav-link dropdown-toggle" href="#" id="dropdownConfig" role="button" data-bs-toggle="dropdown" aria-expanded="false"> <a class="nav-link dropdown-toggle" href="#" id="dropdownConfig" role="button" data-bs-toggle="dropdown" aria-expanded="false">
@ -86,12 +87,17 @@
<a class="dropdown-item {{ Request::segment(2) == 'truck_types' ? 'active' : '' }}" href="{{ route('view_config_truck_types') }}" title="">Vehicle Type</a> <a class="dropdown-item {{ Request::segment(2) == 'truck_types' ? 'active' : '' }}" href="{{ route('view_config_truck_types') }}" title="">Vehicle Type</a>
</li> </li>
@endcan @endcan
@can('vehicle_maintenance_type.view')
<li>
<a class="dropdown-item {{ Request::segment(2) == 'maintenance_type' ? 'active' : '' }}" href="{{ route('view_vehicle_maintenance_type') }}" title="">Maintenance Type</a>
</li>
@endcan
@can('config_master_device.view') @can('config_master_device.view')
<li> <li>
<a class="dropdown-item {{ Request::segment(2) == 'devices' ? 'active' : '' }}" href="{{ route('view_config_devices') }}" title="">Master Devices</a> <a class="dropdown-item {{ Request::segment(2) == 'devices' ? 'active' : '' }}" href="{{ route('view_config_devices') }}" title="">Master Devices</a>
</li> </li>
@endcan @endcan
@can('config_logs_gps.view') @can('config_logs_gps.view')
<li> <li>
<a class="dropdown-item {{ Request::segment(2) == 'logs_gps' ? 'active' : '' }}" href="{{ route('view_config_logs_gps') }}" title="">Logs Gps</a> <a class="dropdown-item {{ Request::segment(2) == 'logs_gps' ? 'active' : '' }}" href="{{ route('view_config_logs_gps') }}" title="">Logs Gps</a>
</li> </li>

View File

@ -141,6 +141,10 @@ Route::middleware(["auth", "auth.user"])->group(function () {
->name("view_config_truck_types") ->name("view_config_truck_types")
->middleware("permission:config_truck_type.view"); ->middleware("permission:config_truck_type.view");
Route::get("/config/maintenance_type", "VehicleMaintenanceController@view_vehicle_maintenance_type")
->name("view_vehicle_maintenance_type")
->middleware("permission:vehicle_maintenance_type.view");
Route::get("/config/devices", "DevicesController@view_devices") Route::get("/config/devices", "DevicesController@view_devices")
->name("view_config_devices") ->name("view_config_devices")
->middleware("permission:config_master_device.view"); ->middleware("permission:config_master_device.view");
@ -611,6 +615,24 @@ Route::middleware(["auth", "auth.user"])->group(function () {
"api_conf_del_truck_type" "api_conf_del_truck_type"
); );
Route::get("/api/conf/maintenance_type/{id}", "VehicleMaintenanceController@api_show_maintenance_type")->name(
"api_show_maintenance_type"
);
Route::get("/api/conf/maintenance_type", "VehicleMaintenanceController@api_list_vehicle_maintenance_type")->name(
"api_list_vehicle_maintenance_type"
);
Route::post("/api/conf/maintenance_type", "VehicleMaintenanceController@api_add_vehicle_maintenance_type")->name(
"api_add_vehicle_maintenance_type"
);
Route::put("/api/conf/maintenance_type/{id}", "VehicleMaintenanceController@api_edit_vehicle_maintenance_type")->name(
"api_edit_vehicle_maintenance_type"
);
Route::delete("/api/conf/maintenance_type/{id}", "VehicleMaintenanceController@api_del_vehicle_maintenance_type")->name(
"api_del_vehicle_maintenance_type"
);
Route::get("/api/devices", "DevicesController@api_list_devices")->name("api_list_devices"); Route::get("/api/devices", "DevicesController@api_list_devices")->name("api_list_devices");
Route::get("/api/devices/{id}", "DevicesController@api_show_device")->name("api_show_device"); Route::get("/api/devices/{id}", "DevicesController@api_show_device")->name("api_show_device");
Route::post("/api/devices", "DevicesController@api_add_device")->name("api_add_device"); Route::post("/api/devices", "DevicesController@api_add_device")->name("api_add_device");