diff --git a/app/Http/Controllers/V3/Azmayesh/AzmayeshController.php b/app/Http/Controllers/V3/Azmayesh/AzmayeshController.php index 83802ce4..fb3fd81b 100644 --- a/app/Http/Controllers/V3/Azmayesh/AzmayeshController.php +++ b/app/Http/Controllers/V3/Azmayesh/AzmayeshController.php @@ -84,6 +84,8 @@ class AzmayeshController extends Controller 'contract_subitem_id' => $request->contract_subitem_id ]); + $user->addActivityComplete(1158); + return $this->successResponse(); } @@ -122,6 +124,8 @@ class AzmayeshController extends Controller 'contract_subitem_id' => $request->contract_subitem_id ]); + auth()->user()->addActivityComplete(1159); + return $this->successResponse(); } @@ -133,6 +137,8 @@ class AzmayeshController extends Controller try { $azmayesh->delete(); + auth()->user()->addActivityComplete(1160); + return $this->successResponse(); } catch (QueryException $exception) { diff --git a/app/Http/Controllers/V3/Azmayesh/AzmayeshTypeController.php b/app/Http/Controllers/V3/Azmayesh/AzmayeshTypeController.php index 5fd99ad0..ec450099 100644 --- a/app/Http/Controllers/V3/Azmayesh/AzmayeshTypeController.php +++ b/app/Http/Controllers/V3/Azmayesh/AzmayeshTypeController.php @@ -67,6 +67,8 @@ class AzmayeshTypeController extends Controller } $azmayeshType->azmayeshFields()->attach($fieldsID); + + auth()->user()->addActivityComplete(1162); }); return $this->successResponse(); @@ -100,6 +102,8 @@ class AzmayeshTypeController extends Controller } $azmayeshType->azmayeshFields()->sync($fieldsID); + + auth()->user()->addActivityComplete(1163); }); return $this->successResponse(); @@ -113,6 +117,8 @@ class AzmayeshTypeController extends Controller try { $azmayeshType->delete(); + auth()->user()->addActivityComplete(1164); + return $this->successResponse(); } catch (QueryException $exception) { diff --git a/app/Http/Controllers/V3/FMSVehicleManagementController.php b/app/Http/Controllers/V3/FMSVehicleManagementController.php index f50221a7..898ede9d 100644 --- a/app/Http/Controllers/V3/FMSVehicleManagementController.php +++ b/app/Http/Controllers/V3/FMSVehicleManagementController.php @@ -22,7 +22,6 @@ class FMSVehicleManagementController extends Controller "machineCode" => $request->machineCode, "startDT" => $request->startDT, "endDT" => $request->endDT, - "minStopDuration" => $request->minStopDuration ]); $data = $getVehicleActivityService->run(); diff --git a/app/Http/Controllers/V3/ObservedItemController.php b/app/Http/Controllers/V3/ObservedItemController.php new file mode 100644 index 00000000..39169d72 --- /dev/null +++ b/app/Http/Controllers/V3/ObservedItemController.php @@ -0,0 +1,60 @@ +successResponse($observedItem); + } + + public function filter(FilterRequest $request): JsonResponse + { + $columns = array( + 'id', 'item_id', 'sub_item_id' + ); + + $allowedFilters = $columns; + $allowedSortings = $columns; + + $data = ObservedItem::query()->whereNull('road_item_id') + ->when($request->start_date, function (Builder $query) use ($request) { + return $query->whereHas('roadPatrol', function (Builder $query) use ($request) { + $query->WhereBetween('start_time', [$request->start_date.' 00:00:00', $request->end_date.' 23:59:59']) + ->orWhereBetween('end_time', [$request->start_date.' 00:00:00', $request->end_date.' 23:59:59']); + }); + }) + ->when($request->road_patrol_id, function (Builder $query) use ($request) { + return $query->where('road_patrol_id', $request->road_patrol_id); + }) + ->when($request->item_id, function (Builder $query) use ($request) { + return $query->where('item_id', $request->item_id); + }) + ->selectRaw('id as item, item_id, item_name, sub_item_id, sub_item_name, local_name'); + + if($data->get()->isEmpty()) { + return $this->errorResponse('موردی یافت نشد'); + } + + $dataTable = DataTableFacade::run( + $data, + $request, + allowedFilters: $allowedFilters, + allowedSortings: $allowedSortings); + + + return response()->json($dataTable); + } +} diff --git a/app/Http/Controllers/V3/ProfileController.php b/app/Http/Controllers/V3/ProfileController.php index b5841811..930a2f0a 100644 --- a/app/Http/Controllers/V3/ProfileController.php +++ b/app/Http/Controllers/V3/ProfileController.php @@ -81,7 +81,7 @@ class ProfileController extends Controller public function addActivity(Request $request): JsonResponse { - auth()->user()->addActivityComplete($request->query('activityCode')); + auth()->user()->addActivityComplete($request->activityCode); return $this->successResponse(); } } diff --git a/app/Http/Controllers/V3/RoadPatrolProjectController.php b/app/Http/Controllers/V3/RoadPatrolProjectController.php index 0ef03630..27f84c65 100644 --- a/app/Http/Controllers/V3/RoadPatrolProjectController.php +++ b/app/Http/Controllers/V3/RoadPatrolProjectController.php @@ -145,7 +145,7 @@ class RoadPatrolProjectController extends Controller return response()->json($data); } - public function store(StoreRequest $request, NominatimService $nominatimService) + public function store(StoreRequest $request, NominatimService $nominatimService): JsonResponse { $user = auth()->user(); @@ -161,24 +161,13 @@ class RoadPatrolProjectController extends Controller ], 400); } - $start_coordinates = explode(',', $request->start_point); - $end_coordinates = explode(',', $request->end_point); - $edare_id = $user->edarate_shahri_id ?? $user->edarate_ostani_id; $edare_name = $user->edarate_shahri_id ? $user->edarate_shahri_name : $user->edarate_ostani_name; - $road_patrol = DB::transaction(function () use ($request, $start_coordinates, - $end_coordinates, $edare_id, + $road_patrol = DB::transaction(function () use ($request, $edare_id, $edare_name, $nominatimService, $user) { $road_patrol = RoadPatrol::query()->create([ - 'start_lat' => $start_coordinates[0], - 'start_lon' => $start_coordinates[1], - 'end_lat' => $end_coordinates[0], - 'end_lon' => $end_coordinates[1], - 'officer_name' => $request->officer_name, - 'officer_phone_number' => $request->officer_phone_number, - 'officer_plaque' => $request->officer_plaque, 'operator_id' => $user->id, 'operator_name' => $user->name, 'province_id' => $user->province_id, @@ -187,18 +176,19 @@ class RoadPatrolProjectController extends Controller 'city_fa' => $user->city_fa, 'edare_id' => $edare_id, 'edare_name' => $edare_name, - 'start_way_id' => $nominatimService->get_way_id_from_nominatim($start_coordinates[0], $start_coordinates[1]), - 'end_way_id' => $nominatimService->get_way_id_from_nominatim($end_coordinates[0], $end_coordinates[1]), 'status' => 0, 'status_fa' => 'در حال بررسی', 'distance' => $request->distance, 'start_time' => $request->start_time, 'end_time' => $request->end_time, 'description' => $request->description ?? null, + 'fuel_consumption' => $request->fuel_consumption, + 'vehicle_runtime' => $request->vehicle_runtime, + 'stop_points' => json_encode($request->stop_points), ]); - $road_patrol->rahdaran()->attach($request->rahdaran_id); - $road_patrol->cmmsMachines()->attach($request->machines_id); + $road_patrol->rahdaran()->attach($request->road_patrol_rahdaran_id); + $road_patrol->cmmsMachines()->attach($request->road_patrol_machines_id); if ($request->observed_items) { foreach ($request->observed_items as $index => $item) { @@ -294,8 +284,8 @@ class RoadPatrolProjectController extends Controller ], 400); } - $road_item->rahdaran()->attach($request->rahdaran_id); - $road_item->cmmsMachines()->attach($request->machines_id); + $road_item->rahdaran()->attach($item['road_item_rahdaran_id']); + $road_item->cmmsMachines()->attach($item['road_item_machines_id']); } } } diff --git a/app/Http/Requests/V3/ObservedItem/FilterRequest.php b/app/Http/Requests/V3/ObservedItem/FilterRequest.php new file mode 100644 index 00000000..5c67f2c3 --- /dev/null +++ b/app/Http/Requests/V3/ObservedItem/FilterRequest.php @@ -0,0 +1,39 @@ +|string> + */ + public function rules(): array + { + return [ + 'start_date' => 'date_format:Y-m-d', + 'end_date' => 'date_format:Y-m-d|after_or_equal:start_date', + 'road_patrol_id' => 'numeric', + 'item_id' => 'numeric', + ]; + } + + public function attributes(): array + { + return [ + 'start_date' => 'ساعت شروع گشت', + 'end_date' => 'ساعت پایان گشت', + ]; + } +} diff --git a/app/Http/Requests/V3/RoadPatrolProject/StoreRequest.php b/app/Http/Requests/V3/RoadPatrolProject/StoreRequest.php index fcdb3d2a..b0986e4b 100644 --- a/app/Http/Requests/V3/RoadPatrolProject/StoreRequest.php +++ b/app/Http/Requests/V3/RoadPatrolProject/StoreRequest.php @@ -2,6 +2,7 @@ namespace App\Http\Requests\V3\RoadPatrolProject; +use App\Rules\VerificationCode; use Illuminate\Foundation\Http\FormRequest; class StoreRequest extends FormRequest @@ -22,14 +23,17 @@ class StoreRequest extends FormRequest public function rules(): array { return [ - 'start_point' => 'required', - 'end_point' => 'required', + 'verification_code' => ['required', 'string', new VerificationCode($this->phone_number)], 'distance' => 'numeric', - 'officer_name' => 'required', - 'officer_plaque' => 'required', - 'officer_phone_number' => 'required|digits:11', 'start_time' => 'required|date_format:Y-m-d H:i', 'end_time' => 'required|date_format:Y-m-d H:i|after:start_time', + 'fuel_consumption' => 'required|integer', + 'vehicle_runtime' => 'required|integer', + 'stop_points' => 'required|array', + 'road_patrol_machines_id' => 'required|array', + 'road_patrol_machines_id.*' => 'required|exists:cmms_machines,id', + 'road_patrol_rahdaran_id' => 'required|array', + 'road_patrol_rahdaran_id.*' => 'required|exists:rahdaran,id', 'observed_items' => 'array', 'observed_items.*.item_id' => 'required|integer', @@ -41,16 +45,17 @@ class StoreRequest extends FormRequest // road item projects fields 'observed_items.*.start_point' => 'required', 'observed_items.*.end_point' => '', - 'observed_items.*.amount' => 'numeric|required_if:instant_action,1', + 'observed_items.*.amount' => 'numeric|required_if:observed_items.*.instant_action,1', 'observed_items.*.before_image' => 'image|max:4096', 'observed_items.*.after_image' => 'image|max:4096', - 'observed_items.*.priority' => 'integer|in:1,2,3|required_if:instant_action,0', - 'observed_items.*.priority_fa' => 'string|required_if:instant_action,0', + 'observed_items.*.priority' => 'integer|in:1,2,3|required_if:observed_items.*.instant_action,0', + 'observed_items.*.priority_fa' => 'string|required_if:observed_items.*.instant_action,0', 'description' => 'string|required_with:observed_items', - 'machines_id' => 'required|array', - 'machines_id.*' => 'required|exists:cmms_machines,id', - 'rahdaran_id' => 'required|array', - 'rahdaran_id.*' => 'required|exists:rahdaran,id', + + 'observed_items.*.road_item_machines_id' => 'required_if:observed_items.*.instant_action,1|array', + 'observed_items.*.road_item_machines_id.*' => 'required_if:observed_items.*.instant_action,1|exists:cmms_machines,id', + 'observed_items.*.road_item_rahdaran_id' => 'required_if:observed_items.*.instant_action,1|array', + 'observed_items.*.road_item_rahdaran_id.*' => 'required_if:observed_items.*.instant_action,1|exists:rahdaran,id', ]; } diff --git a/app/Rules/VerificationCode.php b/app/Rules/VerificationCode.php new file mode 100644 index 00000000..fedeb0c5 --- /dev/null +++ b/app/Rules/VerificationCode.php @@ -0,0 +1,27 @@ +phone_number, $value); + + if (!$verified) { + $fail('The :attribute is not valid.')->translate(); + } + } +} diff --git a/app/Services/FMS/GetVehicleActivityService.php b/app/Services/FMS/GetVehicleActivityService.php index 94f124eb..e7b6dd28 100644 --- a/app/Services/FMS/GetVehicleActivityService.php +++ b/app/Services/FMS/GetVehicleActivityService.php @@ -63,6 +63,7 @@ class GetVehicleActivityService $inputData = $this->inputParameters + array( "username" => $this->username, "password" => $this->password, + "minStopDuration" => 1, ); return json_encode($inputData); diff --git a/database/migrations/2024_12_31_133123_add_column_to_road_patrols_table.php b/database/migrations/2024_12_31_133123_add_column_to_road_patrols_table.php new file mode 100644 index 00000000..9dcd85bc --- /dev/null +++ b/database/migrations/2024_12_31_133123_add_column_to_road_patrols_table.php @@ -0,0 +1,40 @@ +double('start_lat', null, 0)->nullable()->change(); + $table->double('start_lon', null, 0)->nullable()->change(); + $table->double('end_lat', null, 0)->nullable()->change(); + $table->double('end_lon', null, 0)->nullable()->change(); + $table->integer('fuel_consumption')->nullable(); + $table->integer('vehicle_runtime')->nullable(); + $table->json('stop_points')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('road_patrols', function (Blueprint $table) { + $table->double('start_lat', null, 0)->change(); + $table->double('start_lon', null, 0)->change(); + $table->double('end_lat', null, 0)->change(); + $table->double('end_lon', null, 0)->change(); + $table->dropColumn('fuel_consumption'); + $table->dropColumn('vehicle_runtime'); + $table->dropColumn('stop_points'); + }); + } +}; diff --git a/routes/v3.php b/routes/v3.php index cab2d0a7..6a71fb03 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -7,6 +7,7 @@ use App\Http\Controllers\V3\Azmayesh\AzmayeshTypeController; use App\Http\Controllers\V3\CMMSMachinesController; use App\Http\Controllers\V3\FMSVehicleManagementController; use App\Http\Controllers\V3\Harim\DivarkeshiController; +use App\Http\Controllers\V3\ObservedItemController; use App\Http\Controllers\V3\ProfileController; use App\Http\Controllers\V3\RahdaranController; use App\Http\Controllers\V3\RoadItemsProjectController; @@ -176,5 +177,13 @@ Route::prefix('fms_vehicle') ->name('fmsVehicle.') ->controller(FMSVehicleManagementController::class) ->group(function () { - Route::get('/get_activity', 'getActivity')->name('getActivity'); + Route::post('/get_activity', 'getActivity')->name('getActivity'); + }); + +Route::prefix('observed_items') + ->name('observedItem.') + ->controller(ObservedItemController::class) + ->group(function () { + Route::post('/filter', 'filter')->name('filter'); + Route::get('/{observedItem}', 'show')->name('show'); }); diff --git a/storage/sql-files/log_lists.sql b/storage/sql-files/log_lists.sql index 97afa167..914b9823 100644 --- a/storage/sql-files/log_lists.sql +++ b/storage/sql-files/log_lists.sql @@ -149,3 +149,15 @@ INSERT INTO log_lists (description,log_unique_code,action_type,is_done) VALUES ('ثبت فعالیت روزانه','1154','action',0), ('حذف نگهداری و حریم','1155','action',0), ('ورود به نقشه نگهداری حریم','1156','show',1); +INSERT INTO log_lists (description,log_unique_code,action_type,is_done) VALUES + ('ورود به کارتابل آزمایشات','1157','action',0), + ('ثبت آزمایش','1158','action',0), + ('ویرایش آزمایش','1159','action',0), + ('حذف آزمایش','1160','action',0), + ('ورود به کارتابل نوع آزمایشات','1161','action',0), + ('ثبت نوع آزمایش','1162','action',0), + ('ویرایش نوع آزمایش','1163','action',0), + ('حذف نوع آزمایش','1164','action',0), + ('ثبت نمونه آزمایش','1165','action',0), + ('ویرایش نمونه آزمایش','1166','action',0), + ('حذف نمونه آزمایش','1167','action',0),