diff --git a/app/Enums/MissionStates.php b/app/Enums/MissionStates.php index 5be6b18a..77dfaeaf 100644 --- a/app/Enums/MissionStates.php +++ b/app/Enums/MissionStates.php @@ -9,8 +9,7 @@ enum MissionStates: int case START_MISSION = 3; case END_MISSION = 4; case REJECT_BY_TRANSPORTATION = 5; - case REJECT_BY_CONTROL_UNIT = 6; - case CANCELLED = 7; + case CANCELLED = 6; public static function name(int $state): string { @@ -20,8 +19,7 @@ enum MissionStates: int 3 => 'درخواست توسط واحد کنترل تایید شد و ماموریت آغاز می شود', 4 => 'اتمام ماموریت', 5 => 'عدم تخصیص خودرو توسط واحد نقلیه و بازگشت درخواست به کارتابل کاربر', - 6 => 'عدم تایید توسط واحد کنترل', - 7 => 'ماموریت لغو شد', + 6 => 'ماموریت لغو شد', ]; return $mapArray[$state]; diff --git a/app/Http/Controllers/V3/Dashboard/Mission/RequestPortalController.php b/app/Http/Controllers/V3/Dashboard/Mission/RequestPortalController.php index 39fb5f36..df45df4c 100644 --- a/app/Http/Controllers/V3/Dashboard/Mission/RequestPortalController.php +++ b/app/Http/Controllers/V3/Dashboard/Mission/RequestPortalController.php @@ -25,19 +25,23 @@ class RequestPortalController extends Controller public function store(StoreRequest $request): JsonResponse { DB::transaction(function () use ($request) { + $user = auth()->user(); $state = MissionStates::REQUEST_CREATED->value; $mission = Mission::query()->create([ - 'user_id'=> auth()->user()->id, + 'user_id'=> $user->id, + 'username'=> $user->username, + 'province_id'=> $user->province_id, + 'province_name'=> $user->province_fa, + 'edare_shahri_id'=> $user->edare_shahri_id ?? null, + 'edare_shahri_name'=> $user->edare_shahri_name ?? null, 'state_id' =>$state, 'state_name' => MissionStates::name($state), - 'requested_machine_type' => $request->requested_machine_type, - 'requested_machine_numbers' => $request->requested_machine_numbers, + 'requested_machines' => $request->requested_machines, 'type' => $request->type, 'start_date' => $request->start_date, 'end_date' => $request->end_date, - 'request_date' => $request->request_date, + 'request_date' => now(), 'description' => $request->description, - 'start_point' => $request->start_point, 'end_point' => $request->end_point, ]); @@ -59,16 +63,14 @@ class RequestPortalController extends Controller $mission->update([ 'state_id' =>$state, 'state_name' => MissionStates::name($state), - 'requested_machine_type' => $request->requested_machine_type, - 'requested_machine_numbers' => $request->requested_machine_numbers, + 'requested_machines' => $request->requested_machines, 'type' => $request->type, 'start_date' => $request->start_date, 'end_date' => $request->end_date, 'request_date' => $request->request_date, 'description' => $request->description, - 'start_point' => $request->start_point, 'end_point' => $request->end_point, - ]); + ]); $mission->rahdaran()->sync($request->rahdaran); }); diff --git a/app/Http/Controllers/V3/Dashboard/Mission/TransportationUnitController.php b/app/Http/Controllers/V3/Dashboard/Mission/TransportationUnitController.php index 1262df58..7099551a 100644 --- a/app/Http/Controllers/V3/Dashboard/Mission/TransportationUnitController.php +++ b/app/Http/Controllers/V3/Dashboard/Mission/TransportationUnitController.php @@ -5,6 +5,7 @@ namespace App\Http\Controllers\V3\Dashboard\Mission; use App\Enums\MissionStates; use App\Http\Controllers\Controller; use App\Http\Requests\V3\Mission\TransportaionUnit\AllocateRequest; +use App\Http\Requests\V3\Mission\TransportaionUnit\DeallocateRequest; use App\Http\Traits\ApiResponse; use App\Models\Mission; use App\Services\Cartables\Mission\TransportationUnitService; @@ -33,13 +34,14 @@ class TransportationUnitController extends Controller return $this->successResponse(); } - public function deallocate(Mission $mission): JsonResponse + public function deallocate(DeallocateRequest $request, Mission $mission): JsonResponse { $state = MissionStates::REJECT_BY_TRANSPORTATION->value; $mission->update([ 'state_id' => $state, 'state_name' => MissionStates::name($state), + 'description' => $request->description ]); return $this->successResponse(); diff --git a/app/Http/Requests/V3/Mission/RequestPortal/StoreRequest.php b/app/Http/Requests/V3/Mission/RequestPortal/StoreRequest.php index 62bd1984..deb92e6f 100644 --- a/app/Http/Requests/V3/Mission/RequestPortal/StoreRequest.php +++ b/app/Http/Requests/V3/Mission/RequestPortal/StoreRequest.php @@ -24,8 +24,7 @@ class StoreRequest extends FormRequest return [ 'rahdaran' => 'required|array', 'rahdaran.*' => 'exists:rahdaran,id', - 'requested_machine_type' => 'required|string|max:255', - 'requested_machine_numbers'=> 'required|integer|max:255', + 'requested_machines' => 'required|array', 'type' => 'required|string|max:50', 'start_date' => 'required|date', 'end_date' => 'required|date', diff --git a/app/Http/Requests/V3/Mission/RequestPortal/UpdateRequest.php b/app/Http/Requests/V3/Mission/RequestPortal/UpdateRequest.php index 4498ea7b..8da9a782 100644 --- a/app/Http/Requests/V3/Mission/RequestPortal/UpdateRequest.php +++ b/app/Http/Requests/V3/Mission/RequestPortal/UpdateRequest.php @@ -2,6 +2,7 @@ namespace App\Http\Requests\V3\Mission\RequestPortal; +use App\Enums\MissionStates; use Illuminate\Foundation\Http\FormRequest; class UpdateRequest extends FormRequest @@ -11,7 +12,7 @@ class UpdateRequest extends FormRequest */ public function authorize(): bool { - return ($this->route('mission'))->user_id === auth()->id(); + return $this->mission->user_id === auth()->user()->id && $this->mission->state_id == MissionStates::REJECT_BY_TRANSPORTATION->value; } /** @@ -24,8 +25,7 @@ class UpdateRequest extends FormRequest return [ 'rahdaran' => 'required|array', 'rahdaran.*' => 'exists:rahdaran,id', - 'requested_machine_type' => 'required|string|max:255', - 'requested_machine_numbers'=> 'required|integer|max:255', + 'requested_machines' => 'required|array', 'type' => 'required|string|max:50', 'start_date' => 'required|date', 'end_date' => 'required|date', diff --git a/app/Http/Requests/V3/Mission/TransportaionUnit/AllocateRequest.php b/app/Http/Requests/V3/Mission/TransportaionUnit/AllocateRequest.php index bac0e6bd..5cff54a5 100644 --- a/app/Http/Requests/V3/Mission/TransportaionUnit/AllocateRequest.php +++ b/app/Http/Requests/V3/Mission/TransportaionUnit/AllocateRequest.php @@ -2,6 +2,7 @@ namespace App\Http\Requests\V3\Mission\TransportaionUnit; +use App\Enums\MissionStates; use Illuminate\Foundation\Http\FormRequest; class AllocateRequest extends FormRequest @@ -11,7 +12,7 @@ class AllocateRequest extends FormRequest */ public function authorize(): bool { - return $this->mission->edare_shahri_id == auth()->user()->edarate_shahri_id; + return $this->mission->edare_shahri_id == auth()->user()->edarate_shahri_id && $this->mission->state_id == MissionStates::REQUEST_CREATED->value; } /** diff --git a/app/Http/Requests/V3/Mission/TransportaionUnit/DeallocateRequest.php b/app/Http/Requests/V3/Mission/TransportaionUnit/DeallocateRequest.php new file mode 100644 index 00000000..28074809 --- /dev/null +++ b/app/Http/Requests/V3/Mission/TransportaionUnit/DeallocateRequest.php @@ -0,0 +1,29 @@ +mission->edare_shahri_id == auth()->user()->edarate_shahri_id && $this->mission->state_id == MissionStates::REQUEST_CREATED->value; + } + + /** + * Get the validation rules that apply to the request. + * + * @return array|string> + */ + public function rules(): array + { + return [ + 'description' => 'string', + ]; + } +} diff --git a/app/Services/Cartables/Mission/RequestPortalService.php b/app/Services/Cartables/Mission/RequestPortalService.php index c1757019..daac3cdd 100644 --- a/app/Services/Cartables/Mission/RequestPortalService.php +++ b/app/Services/Cartables/Mission/RequestPortalService.php @@ -15,20 +15,26 @@ class RequestPortalService public function datatable(Request $request) { $user = auth()->user(); + $fields = [ + 'id', 'user_id', 'username', 'state_name', 'province_name', 'edare_shahri_name', + 'description', 'requested_machines', 'type', 'start_date', + 'end_date', 'request_date', 'start_point', 'end_point', + ]; $query = Mission::query(); - if ($user->hasPermissionTo('mission-manage-city')) { + if ($user->hasPermissionTo('manage-request-portal-city')) { $query->where('edarate_shahri_id', '=', $user->edarate_shahri_id); } - elseif ($user->hasPermissionTo('mission-manage-province')) { + elseif ($user->hasPermissionTo('manage-request-portal-province')) { $query->where('province_id', '=', $user->province_id); } + return DataTableFacade::run( $query, $request, allowedFilters: ['*'], - allowedSortings: ['*'] + allowedSortings: ['*'], + allowedSelects: $fields ); - } } \ No newline at end of file diff --git a/app/Services/Cartables/Mission/TransportationUnitService.php b/app/Services/Cartables/Mission/TransportationUnitService.php index d4535cad..a8059658 100644 --- a/app/Services/Cartables/Mission/TransportationUnitService.php +++ b/app/Services/Cartables/Mission/TransportationUnitService.php @@ -14,8 +14,8 @@ class TransportationUnitService { $fields = [ 'id', 'user_id', 'username', 'state_name', 'province_name', 'edare_shahri_name', - 'description', 'requested_machine_type', 'requested_machine_numbers', 'type', - 'start_date', 'end_date', 'request_date', 'start_point', 'end_point', + 'description', 'requested_machines', 'type', 'start_date', + 'end_date', 'request_date', 'start_point', 'end_point', ]; $query = Mission::query() diff --git a/database/migrations/2025_05_17_103927_create_missions_table.php b/database/migrations/2025_05_17_103927_create_missions_table.php index 64b8a5c4..6f80171c 100644 --- a/database/migrations/2025_05_17_103927_create_missions_table.php +++ b/database/migrations/2025_05_17_103927_create_missions_table.php @@ -16,8 +16,6 @@ return new class extends Migration $table->unsignedInteger('user_id'); $table->foreign('user_id')->references('id')->on('users'); $table->string('username'); - $table->foreignId('machine_id')->nullable()->constrained('cmms_machines')->noActionOnDelete(); - $table->foreignId('rahdar_id')->constrained('rahdaran')->noActionOnDelete(); $table->foreignId('state_id')->constrained('mission_states')->noActionOnDelete(); $table->string('state_name'); $table->unsignedTinyInteger('province_id')->nullable(); @@ -26,14 +24,12 @@ return new class extends Migration $table->unsignedBigInteger('edare_shahri_id')->nullable(); $table->foreign('edare_shahri_id')->references('id')->on('edarate_shahri')->noActionOnDelete(); $table->string('edare_shahri_name'); - $table->string('requested_machine_type'); - $table->integer('requested_machine_numbers'); + $table->json('requested_machines'); $table->string('type'); $table->dateTime('start_date'); $table->dateTime('end_date'); $table->dateTime('request_date'); $table->text('description')->nullable(); - $table->string('start_point'); $table->string('end_point'); $table->timestamps(); }); diff --git a/database/seeders/AxisTypeSeeder.php b/database/seeders/AxisTypeSeeder.php index f8ae72bc..ea36f145 100644 --- a/database/seeders/AxisTypeSeeder.php +++ b/database/seeders/AxisTypeSeeder.php @@ -4,6 +4,7 @@ namespace Database\Seeders; use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Database\Seeder; +use Illuminate\Support\Facades\DB; class AxisTypeSeeder extends Seeder { @@ -12,6 +13,12 @@ class AxisTypeSeeder extends Seeder */ public function run(): void { - // + DB::table('axis_types')->insert([ + ['name' => 'آزادراه'], + ['name' => 'بزرگراه'], + ['name' => 'اصلی'], + ['name' => 'فرعی'], + ['name' => 'روستایی'], + ]); } } diff --git a/database/seeders/MissionStateSeeder.php b/database/seeders/MissionStateSeeder.php index 585139e5..a73b3df9 100644 --- a/database/seeders/MissionStateSeeder.php +++ b/database/seeders/MissionStateSeeder.php @@ -19,7 +19,6 @@ class MissionStateSeeder extends Seeder ['name' => 'درخواست توسط واحد کنترل تایید شد و ماموریت آغاز می شود'], ['name' => 'اتمام ماموریت'], ['name' => 'عدم تخصیص خودرو توسط واحد نقلیه و بازگشت درخواست به کارتابل کاربر'], - ['name' => 'عدم تایید توسط واحد کنترل'], ['name' => 'ماموریت لغو شد'], ]); } diff --git a/routes/v3.php b/routes/v3.php index ac3f0b46..e8b552bb 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -8,6 +8,7 @@ use App\Http\Controllers\V3\Dashboard\Azmayesh\AzmayeshSampleController; use App\Http\Controllers\V3\Dashboard\Azmayesh\AzmayeshTypeController; use App\Http\Controllers\V3\Dashboard\ItemsManagementController; use App\Http\Controllers\V3\Dashboard\Mission\RequestPortalController; +use App\Http\Controllers\V3\Dashboard\Mission\TransportationUnitController; use App\Http\Controllers\V3\Dashboard\ObservedItemController; use App\Http\Controllers\V3\Dashboard\AccidentReceiptController; use App\Http\Controllers\V3\Dashboard\OtpManagementController; @@ -425,13 +426,25 @@ Route::prefix('road_maintenance_station') Route::post('/{rahdariPoint}', 'update')->name('update')->middleware('permission:edit-tollhouse|edit-tollhouse-province'); Route::delete('/{rahdariPoint}', 'destroy')->name('destroy')->middleware('permission:delete-tollhouse|delete-tollhouse-province'); }); + Route::prefix('missions') ->name('missions.') - ->controller(RequestPortalController::class) ->group(function () { - Route::get('/', 'index')->name('index'); - Route::post('/', 'store')->name('store'); - Route::get('/{mission}', 'show')->name('show'); - Route::post('/{mission}', 'update')->name('update'); - Route::delete('/{mission}', 'destroy')->name('destroy'); + Route::name('requestPortal.') + ->middleware('permission:manage-request-portal-city|manage-request-portal-province|manage-request-portal-country') + ->controller(RequestPortalController::class) + ->group(function () { + Route::get('/', 'index')->name('index'); + Route::post('/', 'store')->name('store'); + Route::get('/{mission}', 'show')->name('show'); + Route::post('/{mission}', 'update')->name('update'); + Route::delete('/{mission}', 'destroy')->name('destroy'); + }); + Route::name('transportationUnit.') + ->controller(TransportationUnitController::class) + ->group(function () { + Route::get('/', 'index')->name('index'); + Route::post('/allocate/{mission}', 'allocate')->name('allocate'); + Route::post('/deallocate/{mission}', 'deallocate')->name('deallocate'); + }); });