From 2dc007c4cbbc0a2e6b6403dfc595f788394beaab Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Tue, 18 Feb 2025 16:06:00 +0330 Subject: [PATCH] seperate the relation loading --- .../V3/Dashboard/ReceiptController.php | 151 ++++++++++++++++-- .../Dashboard/RoadItemsProjectController.php | 19 ++- .../Dashboard/RoadPatrolProjectController.php | 14 +- .../Reports/RoadItemReportService.php | 49 +++--- .../Reports/RoadPatrolReportService.php | 39 ++--- routes/v3.php | 7 + 6 files changed, 209 insertions(+), 70 deletions(-) diff --git a/app/Http/Controllers/V3/Dashboard/ReceiptController.php b/app/Http/Controllers/V3/Dashboard/ReceiptController.php index 0e9ad4dd..dcf59a49 100644 --- a/app/Http/Controllers/V3/Dashboard/ReceiptController.php +++ b/app/Http/Controllers/V3/Dashboard/ReceiptController.php @@ -21,30 +21,22 @@ class ReceiptController extends Controller { use ApiResponse; - public function show(Request $request): JsonResponse + public function index(Request $request): JsonResponse { - $columns = array('id', 'province_fa','city_fa', 'axis_name', 'accident_type_fa', 'accident_date', 'id', - 'damage_picture1', 'damage_picture2', 'plaque', 'created_at', 'sum', 'deposit_date', 'status', - 'police_file_date','deposit_insurance_image','deposit_daghi_image','deposit_insurance_amount', - 'deposit_daghi_amount','status_fa','final_amount','province_id','accident_time','accident_type', - 'city_id','driver_name','driver_national_code','driver_phone_number','police_file','lat','lng', - 'police_serial','report_base' - ); - - $allowedFilters = $columns; - $allowedSortings = $columns; + $allowedFilters = ['*']; + $allowedSortings = ['*']; $user = auth()->user(); $query = null; if ($user->hasPermissionTo('show-receipt')) { - $query = Accident::with('damages'); + $query = Accident::query(); } else { if (is_null($user->province_id)) { return $this->errorResponse('استانی برای شما در سامانه ثبت نشده است!'); } - $query = Accident::with('damages')->where('province_id', '=', $user->province_id); + $query = Accident::query()->where('province_id', '=', $user->province_id); } $data = DataTableFacade::run( @@ -83,8 +75,10 @@ class ReceiptController extends Controller 'accident_type' => $request->accident_type, 'accident_date' => $request->accident_date, 'accident_time' => $request->accident_time, - 'accident_type_fa' => DailyAccidentSettings::where('type', 'accident_type')->where('name', $request->accident_type)->first()->value, + 'accident_type_fa' => DailyAccidentSettings::query()->where('type', 'accident_type')->where('name', $request->accident_type)->first()->value, 'way_id' => $nominatimService->get_way_id_from_nominatim($request->lat, $request->lng), + 'report_base' => $request->report_base != null ? 1 : null, + 'police_file' => '', ]; if ($request->report_base) { @@ -128,4 +122,133 @@ class ReceiptController extends Controller auth()->user()->addActivityComplete(1123); }); } + + public function show(Accident $accident): JsonResponse + { + return $this->successResponse($accident->load('damages')); + } + + public function update(Accident $accident, Request $request, NominatimService $nominatimService) + { + DB::transaction(function () use ($request, $accident, $nominatimService) { + $accident->province_fa = Province::where('id', $request->province_id)->first()->name_fa; + $accident->province_id = $request->province_id; + + $accident->city_fa = City::where('id', $request->city_id)->first()->name_fa; + $accident->city_id = $request->city_id; + + $accident->axis_name = $request->axis_name; + $accident->driver_name = $request->driver_name; + $accident->plaque = $request->plaque; + $accident->driver_national_code = $request->national_code; + $accident->driver_phone_number = $request->phone_number; + + $accident->lat = $request->lat; + $accident->lng = $request->lng; + + $accident->accident_type = $request->accident_type; + $accident->accident_type_fa = DailyAccidentSettings::where('type', 'accident_type')->where('name', $request->accident_type)->first()->value; + $accident->accident_date = $request->accident_date; + $accident->accident_time = $request->accident_time; + + $accident->way_id = $nominatimService->get_way_id_from_nominatim($request->lat, $request->lng); + + $accident->save(); + + if ($request->report_base) { + \File::delete('storage/'.$accident->police_file); + $accident->police_file = null; + $accident->police_serial = null; + $accident->report_base = 1; + } else { + if ($accident->report_base) { + if ($request->has('police_file')) { + \File::delete('storage/'.$accident->police_file); + $accident->police_file = $request->file('police_file')->storeAs('receipts_files/'.$accident->id, 'police_file_'.$accident->id.'_'.time().'.'.$request->file('police_file')->extension(), 'public'); + } else { + abort(401, 'please send the file'); + } + } else { + if ($request->has('police_file')) { + \File::delete('storage/'.$accident->police_file); + $accident->police_file = $request->file('police_file')->storeAs('receipts_files/'.$accident->id, 'police_file_'.$accident->id.'_'.time().'.'.$request->file('police_file')->extension(), 'public'); + } + } + + $accident->police_file_date = $request->police_file_date; + $accident->police_serial = $request->police_serial; + $accident->report_base = 0; + } + + $accident->save(); + + if ($request->has('damage_picture1')) { + \File::delete('storage/'.$accident->damage_picture1); + $accident->damage_picture1 = $request->file('damage_picture1')->storeAs('receipts_files/'.$accident->id, 'damage_picture1_'.$accident->id.'_'.time().'.'.$request->file('damage_picture1')->extension(), 'public'); + } elseif ($request->has('damage_picture1_is_delete')) { + \File::delete('storage/'.$accident->damage_picture1); + $accident->damage_picture1 = null; + } + + if ($request->has('damage_picture2')) { + \File::delete('storage/'.$accident->damage_picture2); + $accident->damage_picture2 = $request->file('damage_picture2')->storeAs('receipts_files/'.$accident->id, 'damage_picture2_'.$accident->id.'_'.time().'.'.$request->file('damage_picture2')->extension(), 'public'); + } elseif ($request->has('damage_picture2_is_delete')) { + \File::delete('storage/'.$accident->damage_picture2); + $accident->damage_picture2 = null; + } + + $accident->save(); + $sum = 0; + $accident->damages()->detach(); + foreach (json_decode($request->items_damge) as $key => $item) { + $damage = Damage::find($item->id); + $accident->damages()->attach($item->id, [ + 'value' => $item->value, + 'unit' => $damage->unit, + 'amount' => $item->amount, + ]); + $sum += $item->amount; + } + + + $ojrate_nasb = $sum/100*20; + $accident->ojrate_nasb = $ojrate_nasb; + + $sum += $ojrate_nasb; + $accident->sum = $sum; + + $accident->save(); + + auth()->user()->addActivityComplete(1124); + }); + } + + public function delete(Accident $accident) + { + \File::delete('storage/receipts_files/'.$accident->id); + + $accident->damages()->detach(); + $accident->delete(); + auth()->user()->addActivityComplete(1125); + + return $this->successResponse(); + } + + public function sendToInsurance(Request $request, Accident $accident) + { + DB::transaction(function () use ($request, $accident) { + $accident->sendToInsurance(); + $accident->save(); + + auth()->user()->addActivityComplete(1126); + }); + + $account_data = Province::query()->where('id', $accident->province_id)->first(); + + return $this->successResponse([ + $account_data, + $accident->load('damages') + ]); + } } diff --git a/app/Http/Controllers/V3/Dashboard/RoadItemsProjectController.php b/app/Http/Controllers/V3/Dashboard/RoadItemsProjectController.php index 00295fb7..f2ee6e08 100644 --- a/app/Http/Controllers/V3/Dashboard/RoadItemsProjectController.php +++ b/app/Http/Controllers/V3/Dashboard/RoadItemsProjectController.php @@ -99,7 +99,7 @@ class RoadItemsProjectController extends Controller public function supervisorCartableReport(Request $request, RoadItemReportService $roadItemReportService): BinaryFileResponse { $name = 'گزارش از کارتابل ارزیابی فعالیت روزانه ' . verta()->now()->format('Y-m-d H:i') . '.xlsx'; - $data = $roadItemReportService->supervisorCartableReport($request); + $data = $roadItemReportService->supervisorCartableReport($request, true); return Excel::download(new SupervisorCartableReport($data['data']), $name); } @@ -267,7 +267,22 @@ class RoadItemsProjectController extends Controller public function operatorCartableReport(Request $request, RoadItemReportService $roadItemReportService): BinaryFileResponse { $name = 'گزارش از کارتابل عملیات فعالیت روزانه ' . verta()->now()->format('Y-m-d H:i') . '.xlsx'; - $data = $roadItemReportService->operatorCartableReport($request); + $data = $roadItemReportService->operatorCartableReport($request, true); return Excel::download(new OperatorCartableReport($data['data']), $name); } + + public function roadItemMachine(RoadItemsProject $roadItemsProject): JsonResponse + { + return $this->successResponse($roadItemsProject->load('cmmsMachines:id,machine_code,car_name,plak_number')); + } + + public function roadItemRahdar(RoadItemsProject $roadItemsProject): JsonResponse + { + return $this->successResponse($roadItemsProject->load('rahdaran:id,name,code')); + } + + public function roadItemFile(RoadItemsProject $roadItemsProject): JsonResponse + { + return $this->successResponse($roadItemsProject->load('files')); + } } diff --git a/app/Http/Controllers/V3/Dashboard/RoadPatrolProjectController.php b/app/Http/Controllers/V3/Dashboard/RoadPatrolProjectController.php index 6056a563..7493b980 100644 --- a/app/Http/Controllers/V3/Dashboard/RoadPatrolProjectController.php +++ b/app/Http/Controllers/V3/Dashboard/RoadPatrolProjectController.php @@ -83,7 +83,7 @@ class RoadPatrolProjectController extends Controller public function supervisorCartableReport(Request $request, RoadPatrolReportService $roadPatrolReportService): BinaryFileResponse { $name = 'گزارش از کارتابل ارزیابی گشت راهداری ' . verta()->now()->format('Y-m-d H:i') . '.xlsx'; - $data = $roadPatrolReportService->supervisorCartableReport($request); + $data = $roadPatrolReportService->supervisorCartableReport($request, true); return Excel::download(new SupervisorCartableReport($data['data']), $name); } @@ -325,7 +325,17 @@ class RoadPatrolProjectController extends Controller public function operatorCartableReport(Request $request, RoadPatrolReportService $roadPatrolReportService): BinaryFileResponse { $name = 'گزارش از کارتابل عملیات گشت راهداری ' . verta()->now()->format('Y-m-d H:i') . '.xlsx'; - $data = $roadPatrolReportService->operatorCartableReport($request); + $data = $roadPatrolReportService->operatorCartableReport($request, true); return Excel::download(new OperatorCartableReport($data['data']), $name); } + + public function roadPatrolMachine(RoadPatrol $roadPatrol): JsonResponse + { + return $this->successResponse($roadPatrol->load('cmmsMachines:id,machine_code,car_name,plak_number')); + } + + public function roadPatrolRahdar(RoadPatrol $roadPatrol): JsonResponse + { + return $this->successResponse($roadPatrol->load('rahdaran:id,name,code')); + } } diff --git a/app/Services/Reports/RoadItemReportService.php b/app/Services/Reports/RoadItemReportService.php index 4751cda3..6f8551ed 100644 --- a/app/Services/Reports/RoadItemReportService.php +++ b/app/Services/Reports/RoadItemReportService.php @@ -11,31 +11,31 @@ use Illuminate\Support\Facades\DB; class RoadItemReportService { - public function supervisorCartableReport(Request $request) + public function supervisorCartableReport(Request $request, $loadRelations = false) { - $columns = array( - 'id', 'user_id', 'start_lat', 'start_lng', 'end_lat', - 'end_lng', 'project_distance', 'item', 'item_fa', 'sub_item_fa', 'sub_item', - 'sub_item_data', 'created_at', 'updated_at', 'province_id', 'province_fa', - 'unit_fa', 'status', 'status_fa', 'supervisor_description', 'supervising_time', - 'supervisor_name', 'edarat_id', 'edarat_name', 'activity_date_time','cmmsMachines.machine_code', 'rahdaran.code', - ); - - $allowedFilters = $columns; - $allowedSortings = $columns; + $allowedFilters = ['*']; + $allowedSortings = ['*']; $user = auth()->user(); $query = null; if ($user->hasPermissionTo('show-road-item-supervise-cartable')) { - $query = RoadItemsProject::query()->where('is_new', 1)->with(['files', 'rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number']); + $query = RoadItemsProject::query() + ->select(['id', 'province_fa', 'edarat_name', 'item_fa', 'sub_item_fa', 'sub_item_data', 'unit_fa', 'start_lat', 'start_lng', + 'end_lat', 'end_lng', 'activity_date_time', 'created_at', 'status_fa', 'status']) + ->where('is_new', 1) + ->when($loadRelations, fn ($query) => $query->with(['rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number'])); } elseif ($user->hasPermissionTo('show-road-item-supervise-cartable-province')) { if (is_null($user->province_id)) { return $this->errorResponse('استانی برای شما در سامانه ثبت نشده است!'); } - $query = RoadItemsProject::query()->where('is_new', 1) - ->with(['files', 'rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number'])->where('province_id', auth()->user()->province_id); + $query = RoadItemsProject::query() + ->select(['id', 'province_fa', 'edarat_name', 'item_fa', 'sub_item_fa', 'sub_item_data', 'unit_fa', 'start_lat', 'start_lng', + 'end_lat', 'end_lng', 'activity_date_time', 'created_at', 'status_fa', 'status']) + ->where('is_new', 1) + ->where('province_id', auth()->user()->province_id) + ->when($loadRelations, fn ($query) => $query->with(['rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number'])); } $data = DataTableFacade::run( @@ -47,22 +47,17 @@ class RoadItemReportService return $data; } - public function operatorCartableReport(Request $request) + public function operatorCartableReport(Request $request, $loadRelations = false) { - $columns = array( - 'id', 'user_id', 'start_lat', 'start_lng', 'end_lat', - 'end_lng', 'project_distance', 'item', 'item_fa', 'sub_item_fa', 'sub_item', - 'sub_item_data', 'created_at', 'updated_at', 'province_id', 'province_fa', - 'unit_fa', 'status', 'status_fa', 'supervisor_description', 'supervising_time', - 'supervisor_name', 'edarat_id', 'edarat_name', 'activity_date_time', 'cmmsMachines.machine_code', 'rahdaran.code', - ); + $allowedFilters = ['*']; + $allowedSortings = ['*']; - $allowedFilters = $columns; - $allowedSortings = $columns; - - $query = RoadItemsProject::with(['files', 'rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number']) + $query = RoadItemsProject::query() + ->select(['id', 'supervisor_description', 'item_fa', 'sub_item_fa', 'sub_item_data', 'unit_fa', 'start_lat', 'start_lng', + 'end_lat', 'end_lng', 'activity_date_time', 'created_at', 'status_fa', 'status']) ->where('is_new', 1) - ->where('user_id', auth()->user()->id); + ->where('user_id', auth()->user()->id) + ->when($loadRelations, fn ($query) => $query->with(['rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number']));; $data = DataTableFacade::run( $query, diff --git a/app/Services/Reports/RoadPatrolReportService.php b/app/Services/Reports/RoadPatrolReportService.php index 38559505..8f0964d8 100644 --- a/app/Services/Reports/RoadPatrolReportService.php +++ b/app/Services/Reports/RoadPatrolReportService.php @@ -9,33 +9,27 @@ use Illuminate\Support\Facades\DB; class RoadPatrolReportService { - public function supervisorCartableReport(Request $request) + public function supervisorCartableReport(Request $request, $loadRelations = false) { - $columns = array( - 'id', 'start_lat', 'start_lon', 'end_lat', 'end_lon', 'operator_id', 'created_at', - 'operator_name', 'officer_plaque', 'officer_phone_number', 'officer_name', - 'supervisor_description', 'supervising_time', 'supervisor_name', 'status', - 'status_fa', 'distance', 'province_id', 'province_fa', 'edare_id', 'edare_name', - 'start_time', 'end_time','description', 'cmmsMachines.machine_code', 'rahdaran.code', - ); - - $allowedFilters = $columns; - $allowedSortings = $columns; + $allowedFilters = ['*']; + $allowedSortings = ['*']; $user = auth()->user(); $query = null; if ($user->hasPermissionTo('show-road-patrol-supervise-cartable')) { $query = RoadPatrol::query() - ->with(['rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number']); + ->select([]) + ->when($loadRelations, fn ($query) => $query->with(['rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number'])); } elseif ($user->hasPermissionTo('show-road-patrol-supervise-cartable-province')) { if (is_null($user->province_id)) { return $this->errorResponse('استانی برای شما در سامانه ثبت نشده است!'); } $query = RoadPatrol::query() - ->with(['rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number']) - ->where('province_id', '=', $user->province_id); + ->select([]) + ->where('province_id', '=', $user->province_id) + ->when($loadRelations, fn ($query) => $query->with(['rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number'])); } $data = DataTableFacade::run( @@ -47,20 +41,15 @@ class RoadPatrolReportService return $data; } - public function operatorCartableReport(Request $request) + public function operatorCartableReport(Request $request, $loadRelations = false) { - $columns = array( - 'id', 'start_lat', 'start_lon', 'end_lat', 'end_lon', 'officer_plaque', 'created_at', - 'officer_phone_number', 'officer_name', 'supervisor_description', 'supervising_time', - 'supervisor_name', 'status', 'status_fa', 'distance', 'start_time', 'end_time', 'cmmsMachines.machine_code', 'rahdaran.code', - ); - - $allowedFilters = $columns; - $allowedSortings = $columns; + $allowedFilters = ['*']; + $allowedSortings = ['*']; $query = RoadPatrol::query() - ->with(['rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number']) - ->where('operator_id', '=', auth()->user()->id); + ->select([]) + ->where('operator_id', '=', auth()->user()->id) + ->when($loadRelations, fn ($query) => $query->with(['rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number'])); $data = DataTableFacade::run( $query, diff --git a/routes/v3.php b/routes/v3.php index b21aeb26..8d91a9cc 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -121,6 +121,10 @@ Route::prefix('road_items') Route::get('/operator_report', 'operatorCartableReport') ->name('operatorCartableReport'); + + Route::get('/machines/{roadItemsProject}', 'roadItemMachine')->name('roadItemMachine'); + Route::get('/rahdaran/{roadItemsProject}', 'roadItemRahdar')->name('roadItemRahdar'); + Route::get('/files/{roadItemsProject}', 'roadItemFile')->name('roadItemFile'); }); Route::prefix('road_patrols') @@ -155,6 +159,9 @@ Route::prefix('road_patrols') Route::get('/detail/{roadPatrol}', 'show') ->name('show'); + + Route::get('/machines/{roadPatrol}', 'roadPatrolMachine')->name('roadPatrolMachine'); + Route::get('/rahdaran/{roadPatrol}', 'roadPatrolRahdar')->name('roadPatrolRahdar'); }); Route::prefix('cmms_machines')