From 780c42054721707892fb4e233e4832493aafa67f Mon Sep 17 00:00:00 2001 From: faezehzafarbakhsh Date: Wed, 24 Dec 2025 09:46:36 +0330 Subject: [PATCH 1/7] change one item in service for mission --- app/Services/Cartables/Mission/ReportService.php | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/app/Services/Cartables/Mission/ReportService.php b/app/Services/Cartables/Mission/ReportService.php index 1a50d4a6..d0ce7757 100644 --- a/app/Services/Cartables/Mission/ReportService.php +++ b/app/Services/Cartables/Mission/ReportService.php @@ -39,13 +39,13 @@ class ReportService COUNT(DISTINCT CASE WHEN mv.type = 1 - AND mv.created_at BETWEEN :from AND :to + AND mv.created_at BETWEEN :from_mv AND :to_mv THEN mv.id END) AS no_mission_count, COUNT(DISTINCT CASE WHEN m.mission_duration != m.in_area_duration - AND m.created_at BETWEEN :from AND :to + AND m.created_at BETWEEN :from_m AND :to_m THEN m.id END) AS out_of_area_count @@ -61,6 +61,7 @@ class ReportService ) SELECT + -1 AS province_id, 'کل کشور' AS province_name, SUM(no_mission_count) AS no_mission_count, SUM(out_of_area_count) AS out_of_area_count @@ -78,8 +79,10 @@ class ReportService "; return DB::select($sql, [ - 'from' => $from, - 'to' => $to, + 'from_mv' => $from, + 'to_mv' => $to, + 'from_m' => $from, + 'to_m' => $to, ]); } From 3dc8d60fb844bc2cef877726928730b6bd6ac29a Mon Sep 17 00:00:00 2001 From: faezehzafarbakhsh Date: Wed, 24 Dec 2025 14:07:54 +0330 Subject: [PATCH 2/7] create form request for mission --- .../Mission/RequestPortalController.php | 10 ++-- .../Mission/ViolationManagementController.php | 7 +-- .../RequestPortal/NoProcessRequest.php | 1 - .../V3/Mission/Violation/NoProcessRequest.php | 48 +++++++++++++++++++ 4 files changed, 59 insertions(+), 7 deletions(-) create mode 100644 app/Http/Requests/V3/Mission/Violation/NoProcessRequest.php diff --git a/app/Http/Controllers/V3/Dashboard/Mission/RequestPortalController.php b/app/Http/Controllers/V3/Dashboard/Mission/RequestPortalController.php index 1bb3de72..da2973bc 100644 --- a/app/Http/Controllers/V3/Dashboard/Mission/RequestPortalController.php +++ b/app/Http/Controllers/V3/Dashboard/Mission/RequestPortalController.php @@ -16,6 +16,7 @@ use App\Http\Requests\V3\Mission\RequestPortal\UpdateRequest; use App\Http\Traits\ApiResponse; use App\Models\CMMSMachine; use App\Models\Mission; +use App\Models\RahdariPoint; use App\Models\RoadObserved; use App\Services\Cartables\Mission\RequestPortalService; use App\Services\FMS\GetErrorRateService; @@ -71,7 +72,8 @@ class RequestPortalController extends Controller 'category_name' => MissionCategory::name($category), 'explanation' => $request->explanation, 'code' => rand(100000, 999999), - 'station_id' => $user->station_id + 'station_id' => $user->station_id, + 'station_name' => RahdariPoint::query()->find( $user->station_id)->name, ]); $mission->rahdaran()->sync($request->rahdaran); @@ -147,7 +149,8 @@ class RequestPortalController extends Controller 'start_time' => now(), 'machine_id' => $machine->id, 'machine_code' => $machine->machine_code, - 'station_id' => $user->station_id + 'station_id' => $user->station_id, + 'station_name' => RahdariPoint::query()->find( $user->station_id)->name, ]); $newMission->rahdaran()->sync($request->rahdaran); @@ -242,7 +245,8 @@ class RequestPortalController extends Controller 'request_date' => now(), 'machine_id' => $machine->id, 'machine_code' => $machine->machine_code, - 'station_id' => $user->station_id + 'station_id' => $user->station_id, + 'station_name' => RahdariPoint::query()->find( $user->station_id)->name, ]); $mission->rahdaran()->sync($request->rahdaran); diff --git a/app/Http/Controllers/V3/Dashboard/Mission/ViolationManagementController.php b/app/Http/Controllers/V3/Dashboard/Mission/ViolationManagementController.php index d2e79c57..b4042f61 100644 --- a/app/Http/Controllers/V3/Dashboard/Mission/ViolationManagementController.php +++ b/app/Http/Controllers/V3/Dashboard/Mission/ViolationManagementController.php @@ -7,12 +7,12 @@ use App\Enums\MissionStates; use App\Enums\MissionTypes; use App\Enums\MissionZones; use App\Http\Controllers\Controller; -use App\Http\Controllers\V3\Dashboard\RoadPatrol\OperatorController; -use App\Http\Requests\V3\Mission\RequestPortal\NoProcessRequest; +use App\Http\Requests\V3\Mission\Violation\NoProcessRequest; use App\Http\Traits\ApiResponse; use App\Models\CMMSMachine; use App\Models\Mission; use App\Models\MissionViolation; +use App\Models\RahdariPoint; use App\Services\Cartables\Mission\DailyMoveMachineService; use Carbon\Carbon; use Illuminate\Http\JsonResponse; @@ -72,7 +72,8 @@ class ViolationManagementController extends Controller 'request_date' => now(), 'machine_id' => $machine->id,// 'machine_code' => $machine->machine_code,// - 'station_id' => $user->station_id + 'station_id' => $user->station_id, + 'station_name' => RahdariPoint::query()->find( $user->station_id)->name, ]); $mission->rahdaran()->sync($request->rahdaran); diff --git a/app/Http/Requests/V3/Mission/RequestPortal/NoProcessRequest.php b/app/Http/Requests/V3/Mission/RequestPortal/NoProcessRequest.php index cab007cc..d30aa42d 100644 --- a/app/Http/Requests/V3/Mission/RequestPortal/NoProcessRequest.php +++ b/app/Http/Requests/V3/Mission/RequestPortal/NoProcessRequest.php @@ -12,7 +12,6 @@ class NoProcessRequest extends FormRequest */ public function authorize(): bool { -// return $this->violation->status === 0 && $this->violation->type === 1; return true; } diff --git a/app/Http/Requests/V3/Mission/Violation/NoProcessRequest.php b/app/Http/Requests/V3/Mission/Violation/NoProcessRequest.php new file mode 100644 index 00000000..6f223b4c --- /dev/null +++ b/app/Http/Requests/V3/Mission/Violation/NoProcessRequest.php @@ -0,0 +1,48 @@ +violation->status === 0 && $this->violation->type === 1; + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules(): array + { + return [ + 'rahdaran' => 'array', + 'rahdaran.*' => 'exists:rahdaran,id', + 'driver' => 'required|integer|exists:rahdaran,id', + 'zone' => 'required|in:1,2,3', + 'start_date' => 'required|date', + 'end_date' => 'required|date|after:start_date|before:now', + 'end_point' => 'required|string', + 'area' => 'array', + 'area.type' => 'string', + 'area.coordinates' => 'array', + 'category_id' => 'required|in:1,2,3', + 'explanation' => 'required|string', + ]; + } + + public function messages(): array + { + return [ + 'end_date.before' => 'تاریخ پایان باید قبل از زمان فعلی باشد.', + 'end_date.after' => 'تاریخ پایان نباید قبل از تاریخ شروع باشد.', + ]; + } +} From 3bd36ac07ee92ef287577df83db02561250277c5 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Sat, 27 Dec 2025 09:55:49 +0330 Subject: [PATCH 3/7] create migration --- ...2_23_104217_add_column_to_mission_violations_table.php | 2 +- resources/views/version2/dashboard.blade.php | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/database/migrations/2025_12_23_104217_add_column_to_mission_violations_table.php b/database/migrations/2025_12_23_104217_add_column_to_mission_violations_table.php index ba151dfd..119c5b64 100644 --- a/database/migrations/2025_12_23_104217_add_column_to_mission_violations_table.php +++ b/database/migrations/2025_12_23_104217_add_column_to_mission_violations_table.php @@ -12,7 +12,7 @@ return new class extends Migration public function up(): void { Schema::table('mission_violations', function (Blueprint $table) { - $table->foreignId('machine_id')->constrained('cmms_machines'); + $table->foreignId('machine_id')->nullable()->constrained('cmms_machines'); }); } diff --git a/resources/views/version2/dashboard.blade.php b/resources/views/version2/dashboard.blade.php index bf8b5ac9..6f982562 100644 --- a/resources/views/version2/dashboard.blade.php +++ b/resources/views/version2/dashboard.blade.php @@ -12,6 +12,14 @@ @can('create-road-item') ثبت فعالیت روزانه @endcan + @canany(['manage-request-portal-city', 'manage-request-portal-province', 'manage-request-portal-country', 'manage-request-portal-station', + 'manage-transportation-unit-city', 'manage-transportation-unit-province', 'manage-transportation-unit-country', 'manage-transportation-unit-station', + 'manage-control-unit-city', 'manage-control-unit-province', 'manage-control-unit-country', 'manage-control-unit-station', + ]) + + ماموریت + + @endcan @can('add-road-patrol') ثبت گشت راهداری و ترابری @endcan From 9b094e901684c9d23f8daebdd6f3cfd38125d636 Mon Sep 17 00:00:00 2001 From: faezehzafarbakhsh Date: Sat, 27 Dec 2025 14:14:15 +0330 Subject: [PATCH 4/7] i create crud for violation --- .../Mission/ViolationManagementController.php | 38 +++++++++++++++++++ .../Controllers/V3/RahdaranController.php | 6 --- .../V3/Mission/Violation/StoreRequest.php | 32 ++++++++++++++++ .../V3/Mission/Violation/UpdateRequest.php | 33 ++++++++++++++++ .../Requests/V3/Rahdaran/StoreRequest.php | 1 - .../Requests/V3/Rahdaran/UpdateRequest.php | 1 - routes/v3.php | 4 ++ 7 files changed, 107 insertions(+), 8 deletions(-) create mode 100644 app/Http/Requests/V3/Mission/Violation/StoreRequest.php create mode 100644 app/Http/Requests/V3/Mission/Violation/UpdateRequest.php diff --git a/app/Http/Controllers/V3/Dashboard/Mission/ViolationManagementController.php b/app/Http/Controllers/V3/Dashboard/Mission/ViolationManagementController.php index b4042f61..ca041807 100644 --- a/app/Http/Controllers/V3/Dashboard/Mission/ViolationManagementController.php +++ b/app/Http/Controllers/V3/Dashboard/Mission/ViolationManagementController.php @@ -5,9 +5,13 @@ namespace App\Http\Controllers\V3\Dashboard\Mission; use App\Enums\MissionCategory; use App\Enums\MissionStates; use App\Enums\MissionTypes; +use App\Enums\MissionViolationStatus; +use App\Enums\MissionViolationType; use App\Enums\MissionZones; use App\Http\Controllers\Controller; use App\Http\Requests\V3\Mission\Violation\NoProcessRequest; +use App\Http\Requests\V3\Mission\Violation\StoreRequest; +use App\Http\Requests\V3\Mission\Violation\UpdateRequest; use App\Http\Traits\ApiResponse; use App\Models\CMMSMachine; use App\Models\Mission; @@ -89,4 +93,38 @@ class ViolationManagementController extends Controller return $this->successResponse(); } + public function store(StoreRequest $request): JsonResponse + { + MissionViolation::query()->create([ + 'machine_id'=> CMMSMachine::query()->where('machine_code', '=', $request->machine_code)->id, + 'machine_code'=> $request->machine_code, + 'type'=> MissionViolationType::KHOROJ_BEDONE_MOGAVEZ->value, + 'status' => MissionViolationStatus::BEDON_EGHDAM->value, + 'request_date' => now(), + ]); + + return $this->successResponse(); + + } + public function show(MissionViolation $violation): JsonResponse + { + return $this->successResponse($violation); + } + + public function update(UpdateRequest $request, MissionViolation $violation): JsonResponse + { + $violation->update([ + 'enter_time' => $request->enter_time, + 'exit_time' => $request->exit_time, + ]); + + return $this->successResponse(); + } + + public function destroy(MissionViolation $violation): JsonResponse + { + $violation->delete(); + return $this->successResponse(); + } + } diff --git a/app/Http/Controllers/V3/RahdaranController.php b/app/Http/Controllers/V3/RahdaranController.php index 52b74127..95e40e1b 100644 --- a/app/Http/Controllers/V3/RahdaranController.php +++ b/app/Http/Controllers/V3/RahdaranController.php @@ -40,7 +40,6 @@ class RahdaranController extends Controller public function store(StoreRequest $request): JsonResponse { $province = Province::query()->find($request->input('province_id')); - $edareh = EdarateShahri::query()->find($request->input('edareh_shahri_id')); Rahdaran::query()->create([ 'name' => $request->name, @@ -48,8 +47,6 @@ class RahdaranController extends Controller 'mobile' => $request->mobile, 'province_id' => $province->id, 'province_name' => $province->name_fa, - 'edareh_shahri_id' => $request->edareh_shahri_id, - 'edareh_shahri_name' => $edareh->name_fa, 'is_driver' => $request->is_driver, ]); @@ -64,7 +61,6 @@ class RahdaranController extends Controller public function update(UpdateRequest $request, Rahdaran $rahdaran): JsonResponse { $province = Province::query()->find($request->input('province_id')); - $edareh = EdarateShahri::query()->find($request->input('edareh_shahri_id')); $rahdaran->update([ 'name' => $request->name, @@ -72,8 +68,6 @@ class RahdaranController extends Controller 'mobile' => $request->mobile, 'province_id' => $province->id, 'province_name' => $province->name_fa, - 'edareh_shahri_id' => $request->edareh_shahri_id, - 'edareh_shahri_name' => $edareh->name_fa, 'is_driver' => $request->is_driver, ]); diff --git a/app/Http/Requests/V3/Mission/Violation/StoreRequest.php b/app/Http/Requests/V3/Mission/Violation/StoreRequest.php new file mode 100644 index 00000000..b0c8c647 --- /dev/null +++ b/app/Http/Requests/V3/Mission/Violation/StoreRequest.php @@ -0,0 +1,32 @@ + + */ + public function rules(): array + { + return [ + 'machine_code' => 'required', + ]; + } + +} diff --git a/app/Http/Requests/V3/Mission/Violation/UpdateRequest.php b/app/Http/Requests/V3/Mission/Violation/UpdateRequest.php new file mode 100644 index 00000000..22ddc694 --- /dev/null +++ b/app/Http/Requests/V3/Mission/Violation/UpdateRequest.php @@ -0,0 +1,33 @@ + + */ + public function rules(): array + { + return [ + 'exit_time' => 'required', + 'enter_time' => 'required', + ]; + } +} diff --git a/app/Http/Requests/V3/Rahdaran/StoreRequest.php b/app/Http/Requests/V3/Rahdaran/StoreRequest.php index ae925bdf..1e71ec4e 100644 --- a/app/Http/Requests/V3/Rahdaran/StoreRequest.php +++ b/app/Http/Requests/V3/Rahdaran/StoreRequest.php @@ -27,7 +27,6 @@ class StoreRequest extends FormRequest 'code' => 'required|string|max:255|unique:rahdaran,code', 'mobile' => 'required|digits:11|regex:/^09\d{9}$/', 'province_id' => 'required|exists:provinces,id', - 'edareh_shahri_id' => 'required|exists:edarate_shahri,id', 'is_driver' => 'required|boolean', ]; } diff --git a/app/Http/Requests/V3/Rahdaran/UpdateRequest.php b/app/Http/Requests/V3/Rahdaran/UpdateRequest.php index 20efef51..2e891ce4 100644 --- a/app/Http/Requests/V3/Rahdaran/UpdateRequest.php +++ b/app/Http/Requests/V3/Rahdaran/UpdateRequest.php @@ -28,7 +28,6 @@ class UpdateRequest extends FormRequest 'code' => ['required', 'string', Rule::unique('rahdaran', 'code')->ignore($this->rahdaran->id)], 'mobile' => 'required|digits:11|regex:/^09\d{9}$/', 'province_id' => 'required|exists:provinces,id', - 'edareh_shahri_id' => 'required|exists:edarate_shahri,id', 'is_driver' => 'required|boolean', ]; } diff --git a/routes/v3.php b/routes/v3.php index 8b16bc38..a51379db 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -527,7 +527,11 @@ Route::prefix('missions') ->controller(ViolationManagementController::class) ->group(function () { Route::get('/', 'index')->name('index'); + Route::post('/', 'store')->name('store'); Route::post('/no_process/{violation}','noProcess')->name('noProcess'); + Route::get('/{violation}', 'show')->name('show'); + Route::post('/{violation}', 'update')->name('update'); + Route::delete('/{violation}', 'destroy')->name('destroy'); }); Route::prefix('report') ->name('reports.') From 5767387ed506fb774ccde366203a9be654b453dc Mon Sep 17 00:00:00 2001 From: faezehzafarbakhsh Date: Sat, 27 Dec 2025 14:42:25 +0330 Subject: [PATCH 5/7] add 4 item for reserch in mission cartable --- app/Services/Cartables/Mission/ControlUnitService.php | 2 +- app/Services/Cartables/Mission/RequestPortalService.php | 2 +- app/Services/Cartables/Mission/TransportationUnitService.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/Services/Cartables/Mission/ControlUnitService.php b/app/Services/Cartables/Mission/ControlUnitService.php index df6c06c8..f320fa63 100644 --- a/app/Services/Cartables/Mission/ControlUnitService.php +++ b/app/Services/Cartables/Mission/ControlUnitService.php @@ -41,7 +41,7 @@ class ControlUnitService 'id', 'user_id', 'username', 'state_name', 'province_name', 'edare_shahri_name', 'description', 'requested_machines', 'type', 'type_fa', 'start_date', 'state_id', 'end_date', 'request_date', 'end_point', 'area', 'zone', 'zone_fa', 'start_time', 'finish_time', - 'code', 'category_id', 'category_name', 'explanation' + 'code', 'category_id', 'category_name', 'explanation', 'city_id', 'city_name', 'province_id', 'station_name' ] ); } diff --git a/app/Services/Cartables/Mission/RequestPortalService.php b/app/Services/Cartables/Mission/RequestPortalService.php index 354a1cb6..97f13697 100644 --- a/app/Services/Cartables/Mission/RequestPortalService.php +++ b/app/Services/Cartables/Mission/RequestPortalService.php @@ -36,7 +36,7 @@ class RequestPortalService 'id', 'user_id', 'username', 'state_name', 'province_name', 'edare_shahri_name', 'description', 'requested_machines', 'type', 'type_fa', 'start_date', 'state_id', 'end_date', 'request_date', 'end_point', 'area', 'zone', 'zone_fa', 'start_time', 'finish_time', - 'code', 'category_id', 'category_name', 'explanation' + 'code', 'category_id', 'category_name', 'explanation', 'city_id', 'city_name', 'province_id', 'station_name' ] ); } diff --git a/app/Services/Cartables/Mission/TransportationUnitService.php b/app/Services/Cartables/Mission/TransportationUnitService.php index a33e5d01..9aa468a0 100644 --- a/app/Services/Cartables/Mission/TransportationUnitService.php +++ b/app/Services/Cartables/Mission/TransportationUnitService.php @@ -35,7 +35,7 @@ class TransportationUnitService 'id', 'user_id', 'username', 'state_name', 'province_name', 'edare_shahri_name', 'description', 'requested_machines', 'type', 'type_fa', 'start_date', 'state_id', 'end_date', 'request_date', 'end_point', 'area', 'zone', 'zone_fa', 'start_time', 'finish_time', - 'code', 'category_id', 'category_name', 'explanation', 'km' + 'code', 'category_id', 'category_name', 'explanation', 'km', 'city_id', 'city_name', 'province_id', 'station_name' ] ); } From 30ba34c5d775a18e4824ed21c86c8126ad80e902 Mon Sep 17 00:00:00 2001 From: faezehzafarbakhsh Date: Sat, 27 Dec 2025 15:04:27 +0330 Subject: [PATCH 6/7] improve store controller --- .../V3/Dashboard/Mission/ViolationManagementController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/V3/Dashboard/Mission/ViolationManagementController.php b/app/Http/Controllers/V3/Dashboard/Mission/ViolationManagementController.php index ca041807..df64127b 100644 --- a/app/Http/Controllers/V3/Dashboard/Mission/ViolationManagementController.php +++ b/app/Http/Controllers/V3/Dashboard/Mission/ViolationManagementController.php @@ -96,7 +96,7 @@ class ViolationManagementController extends Controller public function store(StoreRequest $request): JsonResponse { MissionViolation::query()->create([ - 'machine_id'=> CMMSMachine::query()->where('machine_code', '=', $request->machine_code)->id, + 'machine_id'=> CMMSMachine::query()->where('machine_code', '=', $request->machine_code)->value('id'), 'machine_code'=> $request->machine_code, 'type'=> MissionViolationType::KHOROJ_BEDONE_MOGAVEZ->value, 'status' => MissionViolationStatus::BEDON_EGHDAM->value, From f7e044f65a9c35a3f9fa73191b6822af9088bfa4 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Sun, 28 Dec 2025 12:35:49 +0330 Subject: [PATCH 7/7] change relation --- .../V3/Dashboard/RoadMaintenanceStationController.php | 2 +- app/Models/MissionViolation.php | 4 ++-- app/Services/CMMS/DailyMovingMachinesService.php | 1 + app/Services/Cartables/Mission/DailyMoveMachineService.php | 1 - 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/Http/Controllers/V3/Dashboard/RoadMaintenanceStationController.php b/app/Http/Controllers/V3/Dashboard/RoadMaintenanceStationController.php index 721fec88..228bf825 100644 --- a/app/Http/Controllers/V3/Dashboard/RoadMaintenanceStationController.php +++ b/app/Http/Controllers/V3/Dashboard/RoadMaintenanceStationController.php @@ -226,6 +226,6 @@ class RoadMaintenanceStationController extends Controller public function giveListToFms(): JsonResponse { - return $this->successResponse(RahdariPoint::all(['id', 'name', 'lat', 'lng', 'area'])); + return $this->successResponse(RahdariPoint::all(['id', 'province_id', 'province_name', 'city_id', 'city_name', 'name', 'lat', 'lng', 'area'])); } } diff --git a/app/Models/MissionViolation.php b/app/Models/MissionViolation.php index cb947151..ad94c62a 100644 --- a/app/Models/MissionViolation.php +++ b/app/Models/MissionViolation.php @@ -17,8 +17,8 @@ class MissionViolation extends Model return $this->belongsTo(Mission::class); } - public function machine(): HasOne + public function machine(): BelongsTo { - return $this->hasOne(CMMSMachine::class); + return $this->belongsTo(CMMSMachine::class, 'machine_id'); } } diff --git a/app/Services/CMMS/DailyMovingMachinesService.php b/app/Services/CMMS/DailyMovingMachinesService.php index 3f891221..0d0c86c1 100644 --- a/app/Services/CMMS/DailyMovingMachinesService.php +++ b/app/Services/CMMS/DailyMovingMachinesService.php @@ -46,6 +46,7 @@ class DailyMovingMachinesService $inputData = $this->makeInputParameters(); return Http::withBody($inputData) + ->timeout(120) ->throw() ->withoutVerifying() ->post($this->url) diff --git a/app/Services/Cartables/Mission/DailyMoveMachineService.php b/app/Services/Cartables/Mission/DailyMoveMachineService.php index 9e83ef0d..72a3e1a5 100644 --- a/app/Services/Cartables/Mission/DailyMoveMachineService.php +++ b/app/Services/Cartables/Mission/DailyMoveMachineService.php @@ -30,7 +30,6 @@ class DailyMoveMachineService $request, allowedFilters: ['*'], allowedSortings: ['*'], - allowedSelects: ['id', 'mission_id', 'machine_code', 'request_date', 'type', 'exit_time', 'enter_time', 'status'] ); } }