add new column in trips export data

This commit is contained in:
wayanrivan
2026-07-02 09:57:53 +07:00
parent eb1d5c4187
commit 67cff7d667

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">
@ -114,6 +114,9 @@
<th class="">Number of Trip</th> <th class="">Number of Trip</th>
<th class="">Total Mileage (km)</th> <th class="">Total Mileage (km)</th>
<th class="">Trip #</th> <th class="">Trip #</th>
<th class="hidden">Date</th>
<th class="hidden">Hour Start</th>
<th class="hidden">Hour Finish</th>
<th class="">Start</th> <th class="">Start</th>
<th class="">Finish</th> <th class="">Finish</th>
<th class="">Duration</th> <th class="">Duration</th>
@ -126,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>
@ -204,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
@ -377,24 +380,55 @@
data: "trip_id", data: "trip_id",
className: 'text-end' className: 'text-end'
}, },
// ==== KOLOM BARU: hanya untuk export, tidak tampil di layar ====
{
data: 'start',
visible: false,
render: (data, type, row, meta) => {
return moment.unix(data + AppState.TIMEFIX).format('DD MMM YYYY');
}
},
{
data: 'start',
visible: false,
render: (data, type, row, meta) => {
return moment.unix(data + AppState.TIMEFIX).format('HH:mm:ss');
}
},
{
data: 'finish',
visible: false,
render: (data, type, row, meta) => {
return moment.unix(data + AppState.TIMEFIX).format('HH:mm:ss');
}
},
// ==== END KOLOM BARU ====
{ {
data: 'start', data: 'start',
render: (data, type, row, meta) => { render: (data, type, row, meta) => {
// let addr = row // saat export, hanya tampilkan lokasi tanpa tanggal/jam
if (type === 'export') {
return Helper.shortenText(decodeURIComponent(row.startLoc ||
'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.startLoc || 'address'), 255) || "-"} ${Helper.shortenText(decodeURIComponent(row.startLoc || 'address'), 255) || "-"}
`; `;
} }
}, },
{ {
data: 'finish', data: 'finish',
render: (data, type, row, meta) => { render: (data, type, row, meta) => {
// let addr = row // saat export, hanya tampilkan lokasi tanpa tanggal/jam
if (type === 'export') {
return Helper.shortenText(decodeURIComponent(row.finishLoc ||
'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) || "-"}
`; `;
} }
}, },
{ {
@ -403,7 +437,6 @@
const start = moment.unix(row.start); const start = moment.unix(row.start);
const finish = moment.unix(row.finish); const finish = moment.unix(row.finish);
// calculate duration
const diff = moment.duration(finish.diff(start)); const diff = moment.duration(finish.diff(start));
const hours = Math.floor(diff.asHours()); const hours = Math.floor(diff.asHours());
const minutes = diff.minutes(); const minutes = diff.minutes();
@ -429,7 +462,6 @@
data: 'mileage', data: 'mileage',
className: 'text-end', className: 'text-end',
render: function(data, type, row, meta) { render: function(data, type, row, meta) {
// const mileage = (row.finishMileage !== null && row.startMileage !== null) ? (row.finishMileage - row.startMileage) : row.mileage;
return (parseFloat(data).toFixed(2)); return (parseFloat(data).toFixed(2));
} }
}, },
@ -437,7 +469,6 @@
data: 'fuel_consume', data: 'fuel_consume',
className: 'text-end', className: 'text-end',
render: function(data, type, row, meta) { render: function(data, type, row, meta) {
// const mileage = (row.finishMileage !== null && row.startMileage !== null) ? (row.finishMileage - row.startMileage) : row.mileage;
return (parseFloat(data / 10).toFixed(1)); return (parseFloat(data / 10).toFixed(1));
} }
}, },
@ -446,16 +477,15 @@
className: 'text-start' className: 'text-start'
}, },
{ {
// visible: false,
data: 'vhc_id', data: 'vhc_id',
className: 'text-center', className: 'text-center',
render: function(data, type, row, meta) { render: function(data, type, row, meta) {
let action = ` let action = `
<a href="#" class="text-decoration-none me-1 btnDetailTrip" <a href="#" class="text-decoration-none me-1 btnDetailTrip"
data-vid="${data}" data-tgl0="${row.start}" data-tgl1="${row.finish}" data-nopol1="${row.nopol1}"> data-vid="${data}" data-tgl0="${row.start}" data-tgl1="${row.finish}" data-nopol1="${row.nopol1}">
<span class="icon ion-eye fz-16"></span> <span class="icon ion-eye fz-16"></span>
</a> </a>
`; `;
return action; return action;
} }
}, },
@ -474,7 +504,6 @@
.data() .data()
.each(function(group, i) { .each(function(group, i) {
if (last !== group) { if (last !== group) {
// count how many rows this vhc_id spans
const rowspanCount = api const rowspanCount = api
.column(0, { .column(0, {
page: 'current' page: 'current'
@ -484,24 +513,19 @@
return d === group; return d === group;
}).length; }).length;
// merge vhc_id
$(rows).eq(i).find('td:eq(0)').attr('rowspan', rowspanCount); $(rows).eq(i).find('td:eq(0)').attr('rowspan', rowspanCount);
$(rows).eq(i).find('td:eq(1)').attr('rowspan', rowspanCount); $(rows).eq(i).find('td:eq(1)').attr('rowspan', rowspanCount);
$(rows).eq(i).find('td:eq(2)').attr('rowspan', rowspanCount); $(rows).eq(i).find('td:eq(2)').attr('rowspan', rowspanCount);
$(rows).eq(i).find('td:eq(3)').attr('rowspan', rowspanCount); $(rows).eq(i).find('td:eq(3)').attr('rowspan', rowspanCount);
$(rows).eq(i).find('td:eq(4)').attr('rowspan', rowspanCount); $(rows).eq(i).find('td:eq(4)').attr('rowspan', rowspanCount);
// $(rows).eq(i).find('td:eq(3)').attr('rowspan', rowspanCount);
last = group; last = group;
} else { } else {
// remove duplicate cells
$(rows).eq(i).find('td:eq(0)').remove(); $(rows).eq(i).find('td:eq(0)').remove();
$(rows).eq(i).find('td:eq(0)').remove(); $(rows).eq(i).find('td:eq(0)').remove();
$(rows).eq(i).find('td:eq(0)').remove(); $(rows).eq(i).find('td:eq(0)').remove();
$(rows).eq(i).find('td:eq(0)').remove(); $(rows).eq(i).find('td:eq(0)').remove();
$(rows).eq(i).find('td:eq(0)').remove(); $(rows).eq(i).find('td:eq(0)').remove();
// $(rows).eq(i).find('td:eq(0)').remove();
} }
}); });
}, },
@ -509,14 +533,17 @@
extend: 'excelHtml5', extend: 'excelHtml5',
title: () => { title: () => {
return ` return `
Vehicle Trip Report - Vehicle Trip Report -
${moment($('#tgl0').val(), "DD-MM-YYYY HH:mm").format('DD MMM YYYY HH:mm')} ${moment($('#tgl0').val(), "DD-MM-YYYY HH:mm").format('DD MMM YYYY HH:mm')}
to to
${moment($('#tgl1').val(), "DD-MM-YYYY HH:mm").format('DD MMM YYYY HH:mm')}` ${moment($('#tgl1').val(), "DD-MM-YYYY HH:mm").format('DD MMM YYYY HH:mm')}`
}, },
className: 'd-none', // hide default button className: 'd-none', // hide default button
exportOptions: { exportOptions: {
columns: ':visible:not(:last-child)' // // index kolom baru (7,8,9 = Date, Hour Start, Hour Finish) sudah dimasukkan manual
// karena kolom tsb visible:false sehingga tidak tercover selector ':visible'
columns: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17],
orthogonal: 'export'
} }
}] }]
}); });