update trip report

This commit is contained in:
Pringgosutono
2025-09-02 09:57:39 +07:00
parent cf6594a5da
commit 3ad22e0cf5
2 changed files with 96 additions and 74 deletions

View File

@ -97,79 +97,79 @@ class ReportsController extends Controller
$list = DB::select($q, $d); $list = DB::select($q, $d);
// RETURN 1 - LIST // // RETURN 1 - LIST
if($req->type != 'report'){ // if($req->type != 'report'){
$apiResp = Responses::success("success list vehicles report"); $apiResp = Responses::success("success list vehicles report");
$apiResp["data"] = $list; $apiResp["data"] = $list;
return new Response($apiResp, $apiResp["meta"]["code"]); return new Response($apiResp, $apiResp["meta"]["code"]);
} // }
// RETURN 2 - REPORT // // RETURN 2 - REPORT
if($req->type == 'report'){ // if($req->type == 'report'){
$headings = ['Name', 'License Plate', 'Number of Trip', 'Total Mileage']; // $headings = ['Name', 'License Plate', 'Number of Trip', 'Total Mileage'];
$export = new class($list, $headings) implements FromArray, WithHeadings { // $export = new class($list, $headings) implements FromArray, WithHeadings {
private $list; // private $list;
private $headings; // private $headings;
public function __construct($list, $headings) // public function __construct($list, $headings)
{ // {
$this->list = $list; // $this->list = $list;
$this->headings = $headings; // $this->headings = $headings;
} // }
public function array(): array // public function array(): array
{ // {
return array_map(function ($item) { // return array_map(function ($item) {
return [ // return [
$item->name, // $item->name,
$item->nopol1, // $item->nopol1,
$item->numOfTrip, // $item->numOfTrip,
$item->total_milleage, // $item->total_milleage,
]; // ];
}, $this->list); // }, $this->list);
} // }
public function headings(): array // public function headings(): array
{ // {
return $this->headings; // return $this->headings;
} // }
// Start table from A3 // // Start table from A3
public function startCell(): string // public function startCell(): string
{ // {
return 'A3'; // return 'A3';
} // }
// Add title & border styling // // Add title & border styling
public function styles(Worksheet $sheet) // public function styles(Worksheet $sheet)
{ // {
$tgl0 = date('d-m-Y', $GLOBALS['from_date']); // $tgl0 = date('d-m-Y', $GLOBALS['from_date']);
$tgl1 = date('d-m-Y', $GLOBALS['to_date']); // $tgl1 = date('d-m-Y', $GLOBALS['to_date']);
// Title in A1 // // Title in A1
$sheet->setCellValue('A1', 'Vehicle Trip Report $tgl0 until $tgl1'); // $sheet->setCellValue('A1', 'Vehicle Trip Report $tgl0 until $tgl1');
$sheet->mergeCells('A1:D1'); // Merge across 4 columns // $sheet->getStyle('A1')->getFont()->setBold(true)->setSize(16);
$sheet->getStyle('A1')->getFont()->setBold(true)->setSize(16); // $sheet->getStyle('A1')->getAlignment()->setHorizontal('center');
$sheet->getStyle('A1')->getAlignment()->setHorizontal('center'); // $sheet->mergeCells('A1:D1'); // Merge across 4 columns
// Get last row // // Get last row
$lastRow = $this->list->count() + 3; // 3 = heading row // $lastRow = $this->list->count() + 3; // 3 = heading row
$range = "A3:D{$lastRow}"; // $range = "A3:D{$lastRow}";
// Add borders // // Add borders
$sheet->getStyle($range)->getBorders()->getAllBorders() // $sheet->getStyle($range)->getBorders()->getAllBorders()
->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN); // ->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
// Bold headings // // Bold headings
$sheet->getStyle('A3:D3')->getFont()->setBold(true); // $sheet->getStyle('A3:D3')->getFont()->setBold(true);
return []; // return [];
} // }
}; // };
return Excel::download($export, 'trip_report.xlsx'); // return Excel::download($export, 'trip_report.xlsx');
} // }
} catch (\Exception $e) { } catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage()); $apiResp = Responses::error($e->getMessage());
return new Response($apiResp, $apiResp["meta"]["code"]); return new Response($apiResp, $apiResp["meta"]["code"]);

View File

@ -183,26 +183,48 @@
const DTable = { const DTable = {
table: null, table: null,
lastAjax: null, // keep track of the last ajax request
activate: function() { activate: function() {
DTable.reload(); DTable.reload();
}, },
reload: function() { reload: function() {
DTable.table = $('#tVehicleTrips').DataTable({ // Abort the last request if it's still running
processing: true, if (DTable.lastAjax) {
serverSide: false, DTable.lastAjax.abort();
bLengthChange: true, }
deferRender: true,
destroy: true, DTable.table = $('#tVehicleTrips').DataTable({
ajax: { processing: true,
url: `{{ route('api_report_vehicle_trips_list') }}? serverSide: false,
cptid=${AppState.current_company} bLengthChange: true,
&from_date=${moment(safeVal('#tgl0')).startOf('day').unix()} deferRender: true,
&to_date=${moment(safeVal('#tgl1')).endOf('day').unix()}`, destroy: true,
type: 'GET', ajax: function(data, callback, settings) {
complete: function() { // Abort previous
// removeTableSkeletonLoading() if (DTable.lastAjax) {
}, DTable.lastAjax.abort();
}, }
// Fire new request
DTable.lastAjax = $.ajax({
url: `{{ route('api_report_vehicle_trips_list') }}?
cptid=${AppState.current_company}
&from_date=${moment(safeVal('#tgl0')).startOf('day').unix()}
&to_date=${moment(safeVal('#tgl1')).endOf('day').unix()}`,
type: 'GET',
success: function(json) {
callback(json);
},
error: function(xhr, status, error) {
if (status !== 'abort') {
console.error("AJAX error:", error);
}
},
complete: function() {
DTable.lastAjax = null;
}
});
},
deferRender: true, deferRender: true,
columns: [ columns: [
{ {
@ -240,7 +262,7 @@
buttons: [ buttons: [
{ {
extend: 'excelHtml5', extend: 'excelHtml5',
title: 'Trip Report', title: `Vehicle Trip Report - ${moment(safeVal('#tgl0')).format('DD MMM YYYY')} to ${moment(safeVal('#tgl1')).format('DD MMM YYYY')}`,
className: 'd-none' // hide default button className: 'd-none' // hide default button
} }
] ]