From c492711d83033a80500fbba4bebdc001bf595082 Mon Sep 17 00:00:00 2001 From: Pringgosutono Date: Wed, 3 Sep 2025 17:25:43 +0700 Subject: [PATCH] report abnormalities --- app/Http/Controllers/ReportsController.php | 102 ++++++-- .../menu_v1/reports/abnormalities.blade.php | 241 ++++++++++++++++++ .../menu_v1/reports/vehicle_trips.blade.php | 158 ++++++++++-- resources/views/template/navbar.blade.php | 3 + routes/web.php | 2 + 5 files changed, 468 insertions(+), 38 deletions(-) create mode 100644 resources/views/menu_v1/reports/abnormalities.blade.php diff --git a/app/Http/Controllers/ReportsController.php b/app/Http/Controllers/ReportsController.php index 57c851d..37a9848 100644 --- a/app/Http/Controllers/ReportsController.php +++ b/app/Http/Controllers/ReportsController.php @@ -22,11 +22,11 @@ class ReportsController extends Controller { public function view_report_vehicle_trips(Request $req) { + $q = "select id, nopol1 from t_vehicles WHERE dlt is null order by nopol1"; + $listNopol = DB::select($q); + $data = [ - // 'lanes' => ConfRates::getLanesActive(), - // 'provs' => Region::listProv(), - // 'vendors' => Users::getUsersActiveByRole(Users::ROLE_VENDOR), - // 'truck_types' => ConfTruckTypes::listTruckTypes(ConfTruckTypes::IS_ACTIVE), + 'listNopol' => $listNopol, ]; return view('menu_v1.reports.vehicle_trips', $data); @@ -49,10 +49,9 @@ class ReportsController extends Controller return new Response($apiResp, $apiResp["meta"]["code"]); } - - $from_date = $req->input('from_date'); $to_date = $req->input('to_date'); + $vid = $req->input('vid'); // $from_date = 1756054800; // $to_date = 1756745940; @@ -81,19 +80,25 @@ class ReportsController extends Controller SUM(trip_start) OVER (PARTITION BY vhc_id ORDER BY crt_d) AS trip_id FROM trips ) - SELECT + select v.id, - coalesce(max(a.trip_id), 0) numOfTrip, - SUM(pre_milleage) AS total_milleage, - v.name, v.nopol1 + -- coalesce(max(a.trip_id), 0) numOfTrip, + -- SUM(pre_milleage) AS total_milleage, + v.name, v.nopol1, + vhc_id, trip_id, + sum(pre_milleage) milleage, min(a.crt_d ) start, max(a.crt_d ) finish, + (select fulladdress from t_gps_tracks_address where master_id = min(a.id) limit 1) startLoc, + (select fulladdress from t_gps_tracks_address where master_id = max(a.id) limit 1) finishLoc FROM t_vehicles v left join numbered a on a.vhc_id = v.id - WHERE v.dlt is null - GROUP BY v.id - ORDER BY v.id; - "; - $d = [$from_date, $to_date]; + WHERE + v.dlt is null and trip_id != 0 + and if(? , v.id = ? , 1=1) + GROUP BY v.id, a.trip_id + ORDER BY v.id + "; + $d = [$from_date, $to_date, $vid, $vid]; $list = DB::select($q, $d); @@ -177,5 +182,72 @@ class ReportsController extends Controller } } + public function view_report_abnormalities(Request $req) + { + $q = "select id, nopol1 from t_vehicles WHERE dlt is null order by nopol1"; + $listNopol = DB::select($q); + + $data = [ + 'listNopol' => $listNopol, + ]; + + return view('menu_v1.reports.abnormalities', $data); + } + public function api_report_abnormalities_list(Request $req) + { + // Validate input + $rules = [ + // 'from_date' => 'required|date', + // 'to_date' => 'required|date|after_or_equal:from_date', + 'type' => 'nullable|in:report,list', // enum "report", "list". nullable default "list" + ]; + + $isValidInput = Validator::make($req->all(), $rules); + if (!$isValidInput->passes()) { + $apiResp = Responses::bad_input($isValidInput->messages()->first()); + return new Response($apiResp, $apiResp["meta"]["code"]); + } + + $from_date = $req->input('from_date'); + $to_date = $req->input('to_date'); + $vid = $req->input('vid'); + + try { + $q = " + select + tv.name, tv.nopol1, + t.crt_d, t.speed, tgta.fulladdress, + tvd.speed_limit + from + t_gps_tracks t + left join t_vehicles tv on tv.id = t.vhc_id + left join t_vehicles_detail tvd on tvd.vid = tv.id + left join t_gps_tracks_address tgta on tgta.master_id = t.id + WHERE + t.action = 'location' + and t.speed != 0 + AND t.crt_d BETWEEN ? AND ? + and if(? , tv.id = ? , 1=1) + -- and t.speed > tvd.speed_limit + having t.speed > tvd.speed_limit + ORDER BY t.crt_d + "; + $d = [$from_date, $to_date, $vid, $vid]; + + $list = DB::select($q, $d); + + // // RETURN 1 - LIST + // if($req->type != 'report'){ + $apiResp = Responses::success("success list abnormalities report"); + $apiResp["data"] = $list; + return new Response($apiResp, $apiResp["meta"]["code"]); + // } + + } catch (\Exception $e) { + $apiResp = Responses::error($e->getMessage()); + return new Response($apiResp, $apiResp["meta"]["code"]); + // return Responses::json(Responses::SERVER_ERROR, 'An error occurred while generating the report.', (object)[]); + } + } } diff --git a/resources/views/menu_v1/reports/abnormalities.blade.php b/resources/views/menu_v1/reports/abnormalities.blade.php new file mode 100644 index 0000000..f21b994 --- /dev/null +++ b/resources/views/menu_v1/reports/abnormalities.blade.php @@ -0,0 +1,241 @@ +@php + $user_role = Auth::user()->role; +@endphp + +@extends('app.app') + +@section('title') + Vehicles +@endsection + +@section('customcss') +@endsection + +@section('content') +
+
+
+
+
+
+

Abnormality Report

+
+ @if ($user_role == \App\Models\Users::ROLE_VENDOR || $user_role == \App\Models\Users::ROLE_ADMIN) + @can('vehicle.create') + + @endcan + + {{--
+ +
--}} + @endif +
+ +
+
+
+
+ +
+
+
+ + + + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+ +
+
+ +
+
+
+
+ + + + + + + + + + + + +
Vehicle NameLicense Plate NumberTimeSpeed (kph)Location
+
+
+
+
+ + + +@endsection + +@section('customjs') + + + + + + +@endsection diff --git a/resources/views/menu_v1/reports/vehicle_trips.blade.php b/resources/views/menu_v1/reports/vehicle_trips.blade.php index 1356400..3c7a4af 100644 --- a/resources/views/menu_v1/reports/vehicle_trips.blade.php +++ b/resources/views/menu_v1/reports/vehicle_trips.blade.php @@ -43,30 +43,49 @@
- + +
- +
-
+
+
+ + +
+
+
+ +
+
- +
- + - + + + + +
Vehicle ID Vehicle Name License Plate Number Number of TripTotal Milage (km)Total Mileage (km)Trip #StartFinishMileage (km)