From 435ad06dcae5144744240c3b42f04e44d8fb4714 Mon Sep 17 00:00:00 2001 From: aslan Date: Mon, 4 Mar 2024 09:53:33 +0300 Subject: [PATCH] add duplication at Direction --- app/Enums/ExaminationTypeEnum.php | 10 ++++ .../admin/Catalog/DirectionController.php | 48 ++++++++++++++++--- .../admin/Catalog/StoreDirectionRequest.php | 2 +- .../admin/Catalog/UpdateDirectionRequest.php | 2 +- database/seeders/ExaminationTypeSeeder.php | 7 +-- .../admin/catalog/direction/index.blade.php | 3 ++ routes/admin.php | 3 ++ 7 files changed, 64 insertions(+), 11 deletions(-) create mode 100644 app/Enums/ExaminationTypeEnum.php diff --git a/app/Enums/ExaminationTypeEnum.php b/app/Enums/ExaminationTypeEnum.php new file mode 100644 index 0000000..e9c5c70 --- /dev/null +++ b/app/Enums/ExaminationTypeEnum.php @@ -0,0 +1,10 @@ +entranceExaminations - ->where('examination_type_id', '=', '1') + ->where('examination_type_id', '=', ExaminationTypeEnum::Ege->value) ->sortBy('position') ->pluck('scores', 'subject_id'); $spo = $direction - ->entranceExaminations->where('examination_type_id', '=', '2') + ->entranceExaminations->where('examination_type_id', '=', ExaminationTypeEnum::Spo->value) ->sortBy('position') ->pluck('scores', 'subject_id'); $magistracy = $direction ->entranceExaminations - ->where('examination_type_id', '=', '3') + ->where('examination_type_id', '=', ExaminationTypeEnum::Magistracy->value) ->sortBy('position') ->pluck('scores', 'subject_id'); @@ -203,10 +204,45 @@ class DirectionController extends Controller if ($direction->entranceExaminations()->exists()) { return back(); } - if ($direction->places()->exists()) { - return back(); - } + $direction->directionProfiles()->detach(); $direction->delete(); return redirect()->route('directions.index'); } + + public function duplication(Direction $direction): RedirectResponse + { + $now = now()->toAtomString(); + $newDirection = new Direction(); + $newDirection->name = $direction->name; + $newDirection->full_name = "{$direction->code} {$direction->name}"; + $newDirection->description = $direction->description; + $newDirection->position = $direction->position; + $newDirection->slug = "{$direction->slug} {$now}"; + $newDirection->code = $direction->code; + $newDirection->education_level_id = $direction->education_level_id; + $newDirection->education_form_id = $direction->education_form_id; + $newDirection->department_id = $direction->department_id; + $newDirection->budget_places = $direction->budget_places; + $newDirection->quota = $direction->quota; + $newDirection->paid_places = $direction->paid_places; + $newDirection->cost_paid_place = $direction->cost_paid_place; + $newDirection->period = $direction->period; + $newDirection->save(); + + + foreach ($direction->entranceExaminations as $entranceExamination) { + $newEntranceExamination = new EntranceExamination(); + $newEntranceExamination->examination_type_id = $entranceExamination->examination_type_id; + $newEntranceExamination->direction_id = $newDirection->id; + $newEntranceExamination->subject_id = $entranceExamination->subject_id; + $newEntranceExamination->scores = $entranceExamination->scores; + $newEntranceExamination->position = $entranceExamination->position; + $newEntranceExamination->subject_type_id = $entranceExamination->subject_type_id; + $newEntranceExamination->save(); + } + + $newDirection->directionProfiles()->attach($direction->directionProfiles); + + return redirect()->route('directions.index'); + } } diff --git a/app/Http/Requests/admin/Catalog/StoreDirectionRequest.php b/app/Http/Requests/admin/Catalog/StoreDirectionRequest.php index 6989ce5..23e8cbe 100644 --- a/app/Http/Requests/admin/Catalog/StoreDirectionRequest.php +++ b/app/Http/Requests/admin/Catalog/StoreDirectionRequest.php @@ -18,7 +18,7 @@ class StoreDirectionRequest extends FormRequest 'name' => 'required|string|max:255', 'description' => 'string', 'slug' => 'required|string|max:255|unique:directions,slug', - 'code' => 'required|string|max:255|unique:directions,code', + 'code' => 'required|string|max:255', 'education_level_id' => 'required|int|numeric|max:1000', 'education_form_id' => 'required|int|numeric|max:1000', 'department_id' => 'required|numeric|int|max:1000', diff --git a/app/Http/Requests/admin/Catalog/UpdateDirectionRequest.php b/app/Http/Requests/admin/Catalog/UpdateDirectionRequest.php index bb1895c..33c5ae0 100644 --- a/app/Http/Requests/admin/Catalog/UpdateDirectionRequest.php +++ b/app/Http/Requests/admin/Catalog/UpdateDirectionRequest.php @@ -19,7 +19,7 @@ class UpdateDirectionRequest extends FormRequest 'name' => 'required|string|max:255', 'description' => 'string', 'slug' => "required|string|max:255|unique:directions,slug,{$this->direction->id}", - 'code' => "required|string|max:255|unique:directions,code,{$this->direction->id}", + 'code' => "required|string|max:255", 'education_level_id' => 'required|int|numeric|max:1000', 'education_form_id' => 'required|int|numeric|max:1000', 'department_id' => 'required|numeric|int|max:1000', diff --git a/database/seeders/ExaminationTypeSeeder.php b/database/seeders/ExaminationTypeSeeder.php index ad26ea3..3a0b71a 100644 --- a/database/seeders/ExaminationTypeSeeder.php +++ b/database/seeders/ExaminationTypeSeeder.php @@ -2,6 +2,7 @@ namespace Database\Seeders; +use App\Enums\ExaminationTypeEnum; use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Database\Seeder; use Illuminate\Support\Facades\DB; @@ -14,19 +15,19 @@ class ExaminationTypeSeeder extends Seeder [ 'name' => 'ЕГЭ', 'description' => 'Unified State Examination', - 'position' => '1', + 'position' => ExaminationTypeEnum::Ege->value, 'slug' => 'USE', ], [ 'name' => 'СПО', 'description' => 'secondary vocational education', - 'position' => '2', + 'position' => ExaminationTypeEnum::Spo->value, 'slug' => 'SVE', ], [ 'name' => 'магитсратура', 'description' => 'type magistracy', - 'position' => '3', + 'position' => ExaminationTypeEnum::Magistracy->value, 'slug' => 'MAG', ], ]); diff --git a/resources/views/admin/catalog/direction/index.blade.php b/resources/views/admin/catalog/direction/index.blade.php index 588ce04..2c5faba 100644 --- a/resources/views/admin/catalog/direction/index.blade.php +++ b/resources/views/admin/catalog/direction/index.blade.php @@ -32,6 +32,9 @@ редактировать + Дублировать удалить diff --git a/routes/admin.php b/routes/admin.php index 2bcdb9b..9d9c9ec 100644 --- a/routes/admin.php +++ b/routes/admin.php @@ -32,6 +32,9 @@ Route::middleware(['auth', 'verified'])->prefix('admin')->group(function () { Route::resource('/directions', DirectionController::class) ->scoped(['direction' => 'slug']); + Route::post('/directions.duplication/{direction}', [DirectionController::class, 'duplication']) + ->name('directions.duplication'); + Route::resource('/departments', DepartmentController::class) ->scoped(['department' => 'slug']); Route::resource('/faculties', FacultyController::class)