diff --git a/app/Http/Controllers/V3/Dashboard/RoadObservationController.php b/app/Http/Controllers/V3/Dashboard/RoadObservationController.php index 937cdb3b..77e53de6 100644 --- a/app/Http/Controllers/V3/Dashboard/RoadObservationController.php +++ b/app/Http/Controllers/V3/Dashboard/RoadObservationController.php @@ -7,17 +7,21 @@ use App\Facades\File\FileFacade; use App\Facades\Sms\Sms; use App\Http\Controllers\Controller; use App\Http\Requests\V3\RoadObservation\ReferRequest; +use App\Http\Requests\V3\RoadObservation\RestoreRequest; use App\Http\Requests\V3\RoadObservation\VerifyBySupervisorRequest; use App\Http\Traits\ApiResponse; +use App\Models\EdarateShahri; use App\Models\RoadObservationHistory; use App\Models\RoadObserved; +use App\Models\User; use App\Services\NikarayanService; use Carbon\Carbon; use Hekmatinasser\Verta\Verta; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; -use App\Services\Cartables\RoadObservationTableservice; +use App\Services\Cartables\RoadObservationTableService; use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\Storage; use Illuminate\Support\Str; use Maatwebsite\Excel\Facades\Excel; use SoapFault; @@ -27,10 +31,9 @@ class RoadObservationController extends Controller { use ApiResponse; - public function supervisorIndex (Request $request,RoadObservationTableservice $roadObservationTableservice ): JsonResponse + public function supervisorIndex (Request $request,RoadObservationTableService $roadObservationTableService ): JsonResponse { - $data = $roadObservationTableservice->supervisorCartableIndex($request); - return response()->json($data); + return response()->json($roadObservationTableService->supervisorCartableIndex($request)); } public function verifyBySupervisor (VerifyBySupervisorRequest $request, RoadObserved $roadObserved): JsonResponse @@ -49,11 +52,9 @@ class RoadObservationController extends Controller auth()->user()->addActivityComplete(1138); return $this->successResponse(); - } public function supervisorCartableReport (Request $request, RoadObservationTableService $roadObservationTableService): BinaryFileResponse - { $name = 'گزارش از کارتابل ارزیابی واکنش سریع '. verta()->now()->format('Y-m-d H:i') . '.xlsx'; $data = $roadObservationTableService->supervisorCartableIndex($request, true); @@ -63,8 +64,7 @@ class RoadObservationController extends Controller public function operatorIndex(Request $request, RoadObservationTableService $roadObservationTableService): JsonResponse { - $data = $roadObservationTableService->operatorCartableIndex($request); - return response()->json($data); + return response()->json($roadObservationTableService->operatorCartableIndex($request)); } public function operatorCartableReport(Request $request, RoadObservationTableService $roadObservationTableService): BinaryFileResponse @@ -74,7 +74,7 @@ class RoadObservationController extends Controller return Excel::download(new OperatorCartableReport($data['data']), $name); } - public function complaintsIndex(Request $request, RoadObservationTableservice $roadObservationTableservice): JsonResponse + public function complaintsIndex(Request $request, RoadObservationTableService $roadObservationTableservice): JsonResponse { return response()->json($roadObservationTableservice->complaintsIndex($request)); } @@ -128,7 +128,7 @@ class RoadObservationController extends Controller auth()->user()->addActivityComplete(1142); try { - $result = $nikarayanService->updateRoadObservedInfoByNikarayan($request, $roadObserved, json_encode($roadObservedHistoryData['new_files'])); + $nikarayanService->updateRoadObservedInfoByNikarayan($request, $roadObserved, json_encode($roadObservedHistoryData['new_files'])); } catch (SoapFault $e) { @@ -142,21 +142,73 @@ class RoadObservationController extends Controller public function refer(ReferRequest $request, RoadObserved $roadObserved): JsonResponse { - $roadObserved->problemHistories()->create([ + RoadObservationHistory::query()->create([ + 'id' => $roadObserved->id, 'user_id' => auth()->user()->id, 'action' => 'refer', 'description' => $request->refer_description, 'from_edareh' => $roadObserved->edarate_shahri_id, - 'to_edareh' => $request->edarate_shahri_id + 'to_edareh' => $request->edarate_shahri_id, + 'from_province' => $roadObserved->province_id, + 'to_province' => $request->province_id ]); $roadObserved->update([ 'edarate_shahri_id' => $request->edarate_shahri_id, + 'province_id' => $request->province_id, ]); auth()->user()->addActivityComplete(1037); return $this->successResponse(); } -} + public function referList(Request $request, RoadObserved $roadObserved): JsonResponse + { + $data = RoadObservationHistory::query() + ->where('id', '=', $roadObserved->id) + ->where('action', '=', 'refer') + ->get(); + foreach ($data as $key => $value) { + $data[$key]->from_edareh = EdarateShahri::find($value->from_edareh)->name_fa; + $data[$key]->to_edareh = EdarateShahri::find($value->to_edareh)->name_fa; + $user = User::find($value->user_id); + $data[$key]->user = $user->first_name . ' ' . $user->last_name; + } + return $this->successResponse($data); + } + + public function restore(RestoreRequest $request, RoadObserved $roadObserved): JsonResponse + { + if ($roadObserved->image_before) { + FileFacade::delete($roadObserved->image_before); + } + + if ($roadObserved->image_after) { + FileFacade::delete($roadObserved->image_after); + } + + $roadObserved->update([ + 'image_before' => null, + 'image_after' => null, + 'rms_last_activity' => null, + 'rms_last_activity_fa' => null, + 'updated_at_fa' => null, + 'updated_at' => null, + 'rms_status' => 0, + 'status' => null, + 'status_fa' => null, + ]); + + RoadObservationHistory::query()->create([ + 'id' => $roadObserved->id, + 'user_id' => auth()->user()->id, + 'action' => 'restore', + 'description' => $request->restore_description, + ]); + + auth()->user()->addActivityComplete(1141); + + return $this->successResponse(); + } +} diff --git a/app/Http/Requests/V3/RoadObservation/ReferRequest.php b/app/Http/Requests/V3/RoadObservation/ReferRequest.php index 4db948c2..33e2bc83 100644 --- a/app/Http/Requests/V3/RoadObservation/ReferRequest.php +++ b/app/Http/Requests/V3/RoadObservation/ReferRequest.php @@ -23,6 +23,7 @@ class ReferRequest extends FormRequest { return [ 'edarate_shahri_id' => 'required|exists:edarate_shahri,id', + 'province_id' => 'required|exists:provinces,id', 'refer_description' => 'required|string', ]; } diff --git a/app/Http/Requests/V3/RoadObservation/RestoreRequest.php b/app/Http/Requests/V3/RoadObservation/RestoreRequest.php new file mode 100644 index 00000000..651de88a --- /dev/null +++ b/app/Http/Requests/V3/RoadObservation/RestoreRequest.php @@ -0,0 +1,28 @@ +|string> + */ + public function rules(): array + { + return [ + 'restore_description' => 'required|string', + ]; + } +} diff --git a/database/migrations/2025_02_25_114351_add_column_to_road_observation_histories_table.php b/database/migrations/2025_02_25_114351_add_column_to_road_observation_histories_table.php new file mode 100644 index 00000000..9e0037c8 --- /dev/null +++ b/database/migrations/2025_02_25_114351_add_column_to_road_observation_histories_table.php @@ -0,0 +1,30 @@ +string('from_province')->nullable(); + $table->string('to_province')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('road_observation_histories', function (Blueprint $table) { + $table->dropColumn('from_province'); + $table->dropColumn('to_province'); + }); + } +}; diff --git a/routes/v3.php b/routes/v3.php index fe623242..86e0c5fc 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -283,12 +283,19 @@ Route::prefix('road_observations') ->group(function () { Route::get('/supervisor_index', 'supervisorIndex')->name('supervisorIndex')->middleware('permission:supervise-fast-react-province|supervise-fast-react'); Route::post('/verify/{road_observed}', 'verifyBySupervisor')->name('verifyBySupervisor'); - Route::get('/supervisor_report', 'supervisorCartableReport')->name('report'); + Route::get('/supervisor_report', 'supervisorCartableReport')->name('supervisorCartableReport'); Route::get('/operator_index','operatorIndex')->name('operatorIndex')->middleware('permission:show-fast-react|show-fast-react-province'); + Route::get('/operator_report','operatorCartableReport')->name('operatorCartableReport'); Route::get('/complaints_index', 'complaintsIndex') ->middleware('permission:show-fast-react-edarate-shahri|show-fast-react-province|show-fast-react') ->name('complaintsIndex'); Route::post('/register/{roadObserved}', 'register') ->middleware('permission:show-fast-react-edarate-shahri|show-fast-react-province|show-fast-react') ->name('register'); + Route::post('/refer/{roadObserved}', 'refer') + ->middleware('permission:show-fast-react-edarate-shahri|show-fast-react-province|show-fast-react') + ->name('refer'); + Route::post('/restore/{roadObserved}', 'restore') + ->middleware('permission:restore-fast-react') + ->name('restore'); });