diff --git a/app/Console/Commands/DailyMovingMachineCommand.php b/app/Console/Commands/DailyMovingMachineCommand.php index 5b059dfd..dfe5d9b2 100644 --- a/app/Console/Commands/DailyMovingMachineCommand.php +++ b/app/Console/Commands/DailyMovingMachineCommand.php @@ -54,6 +54,7 @@ class DailyMovingMachineCommand extends Command MissionViolation::query()->create([ 'machine_code' => $code, + 'machine_id' => CMMSMachine::query()->firstWhere('machine_code', '=', $code)->id, 'type' => MissionViolationType::KHOROJ_BEDONE_MOGAVEZ->value, 'request_date' => $date, 'mileage' => $cmm['mileageKM'], diff --git a/app/Http/Controllers/V3/Dashboard/Mission/RequestPortalController.php b/app/Http/Controllers/V3/Dashboard/Mission/RequestPortalController.php index cb4b9b8c..1bb3de72 100644 --- a/app/Http/Controllers/V3/Dashboard/Mission/RequestPortalController.php +++ b/app/Http/Controllers/V3/Dashboard/Mission/RequestPortalController.php @@ -204,16 +204,16 @@ class RequestPortalController extends Controller /** * @throws Throwable */ - public function noProcess(NoProcessRequest $request): JsonResponse + public function noProcess(NoProcessRequest $request, GetErrorRateService $getErrorRateService): JsonResponse { - DB::transaction(function () use ($request) { + DB::transaction(function () use ($request, $getErrorRateService) { $start = Carbon::parse($request->start_date); $end = Carbon::parse($request->end_date); $type = $start->diffInMinutes($end) > 480 ? MissionTypes::NO_PROCESS_ROZANE->value : MissionTypes::NO_PROCESS_SAATY->value; $user = auth()->user(); $zone = $request->zone; $state = MissionStates::END_MISSION->value; - $machine = CMMSMachine::query()->where('id', '=', $request->machine_id)->first(['id', 'machine_code']); + $machine = CMMSMachine::query()->where('machine_code', '=', $request->machine_code)->first(['id', 'machine_code']); $mission = Mission::query()->create([ 'user_id' => $user->id, @@ -229,6 +229,7 @@ class RequestPortalController extends Controller 'type' => $type, 'type_fa' => MissionTypes::name($type), 'start_date' => $request->start_date, + 'area' => json_encode($request->area), 'end_date' => $request->end_date, 'end_point' => $request->end_point, 'category_id' => $request->category_id, @@ -247,6 +248,18 @@ class RequestPortalController extends Controller $mission->rahdaran()->sync($request->rahdaran); $mission->rahdaran()->attach($request->driver, ['is_driver' => true]); + $getErrorRateService->setInputParameters($mission); + $responseData = $getErrorRateService->run(); + + $mission->update([ + 'in_area_duration' => $responseData['timeInAreaSeconds'], + 'first_enter' => $responseData['firstEnter'], + 'last_exit' => $responseData['lastExit'], + 'point_number_sent' => $responseData['noOfPointsInMission'], + 'fms_result_code' => $responseData['resultCode'], + 'fms_result_message' => FMSResultCode::name($responseData['resultCode']), + ]); + // if ($mission->category_id == 2) { // $rpc = new OperatorController; // $rpc->store($mission); diff --git a/app/Http/Requests/V3/Mission/RequestPortal/NoProcessRequest.php b/app/Http/Requests/V3/Mission/RequestPortal/NoProcessRequest.php index 6017d6fd..cab007cc 100644 --- a/app/Http/Requests/V3/Mission/RequestPortal/NoProcessRequest.php +++ b/app/Http/Requests/V3/Mission/RequestPortal/NoProcessRequest.php @@ -12,7 +12,8 @@ class NoProcessRequest extends FormRequest */ public function authorize(): bool { - return $this->violation->status === 0 && $this->violation->type === 1; +// return $this->violation->status === 0 && $this->violation->type === 1; + return true; } /** @@ -30,9 +31,9 @@ class NoProcessRequest extends FormRequest 'start_date' => 'required|date', 'end_date' => 'required|date|after:start_date|before:now', 'end_point' => 'required|string', -// 'area' => 'required|array', -// 'area.type' => 'required|string', -// 'area.coordinates' => 'required|array', + 'area' => 'array', + 'area.type' => 'string', + 'area.coordinates' => 'array', 'category_id' => 'required|in:1,2,3', 'explanation' => 'required|string', ]; diff --git a/app/Models/MissionViolation.php b/app/Models/MissionViolation.php index b1ff3be1..cb947151 100644 --- a/app/Models/MissionViolation.php +++ b/app/Models/MissionViolation.php @@ -4,14 +4,21 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\BelongsTo; +use Illuminate\Database\Eloquent\Relations\HasOne; class MissionViolation extends Model { use HasFactory; protected $guarded =[]; - public function mission() + public function mission(): BelongsTo { return $this->belongsTo(Mission::class); } + + public function machine(): HasOne + { + return $this->hasOne(CMMSMachine::class); + } } diff --git a/app/Services/Cartables/Mission/DailyMoveMachineService.php b/app/Services/Cartables/Mission/DailyMoveMachineService.php index bed5ddd4..9e83ef0d 100644 --- a/app/Services/Cartables/Mission/DailyMoveMachineService.php +++ b/app/Services/Cartables/Mission/DailyMoveMachineService.php @@ -5,11 +5,26 @@ namespace App\Services\Cartables\Mission; use App\Facades\DataTable\DataTableFacade; use App\Models\MissionViolation; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Auth; class DailyMoveMachineService { public function dataTable(Request $request) { + $user = Auth::user(); + + $query = MissionViolation::query(); + + if ($user->hasPermissionTo('manage-violation-station')) { + $query->whereRelation('machine', 'station_id', '=', $user->station_id); + } + elseif ($user->hasPermissionTo('manage-violation-city')) { + $query->whereRelation('machine', 'city_id', '=', $user->city_id); + } + elseif ($user->hasPermissionTo('manage-violation-province')) { + $query->whereRelation('machine', 'province_id', '=', $user->province_id); + } + return DataTableFacade::run( MissionViolation::query(), $request, 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 new file mode 100644 index 00000000..ba151dfd --- /dev/null +++ b/database/migrations/2025_12_23_104217_add_column_to_mission_violations_table.php @@ -0,0 +1,29 @@ +foreignId('machine_id')->constrained('cmms_machines'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('mission_violations', function (Blueprint $table) { + $table->dropForeign('mission_violations_machine_id_foreign'); + $table->dropColumn('machine_id'); + }); + } +}; diff --git a/resources/views/layouts/dashboard/_sidebar.blade.php b/resources/views/layouts/dashboard/_sidebar.blade.php index 9a558a1b..8facdd81 100644 --- a/resources/views/layouts/dashboard/_sidebar.blade.php +++ b/resources/views/layouts/dashboard/_sidebar.blade.php @@ -178,6 +178,16 @@ @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 @canany(['add-road-patrol', 'show-road-patrol-supervise-cartable', 'show-road-patrol-supervise-cartable-province'])
diff --git a/routes/v3.php b/routes/v3.php index f569eb6e..04162602 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -523,6 +523,7 @@ Route::prefix('missions') }); Route::prefix('violation_management') ->name('violationManagement.') + ->middleware('permission:manage-violation-city|manage-violation-province|manage-violation-country|manage-violation-station') ->controller(ViolationManagementController::class) ->group(function () { Route::get('/', 'index')->name('index');