refactor educational components and API routes; update form handling in various actions and Vue components, enhance user interface for form display, and improve data retrieval logic in CreateAdmissionPlan job

This commit is contained in:
F4ilji
2025-07-27 12:52:04 +05:00
parent 9a1fcbbf9d
commit a4bdde6382
20 changed files with 961 additions and 72 deletions
@@ -0,0 +1,77 @@
<?php
namespace App\Containers\Education\UI\API\Controllers;
use App\Containers\Education\Jobs\UpdateAdmissionCampaign;
use App\Containers\Education\Models\AdmissionCampaign;
use App\Containers\Education\Models\AdmissionPlan;
use App\Http\Controllers\Controller;
use App\Jobs\CreateAdmissionPlan;
use App\Jobs\CreateDirectionStudy;
use App\Jobs\CreateEducationalProgram;
use App\Services\Vicon\EducationalProgram\EducationalProgramService;
use App\Ship\Enums\Education\BudgetEducation;
use App\Ship\Enums\Education\FormEducation;
class UpdateAdmissionCampaignDataApiController extends Controller
{
public function update(string|int $id)
{
$this->updateAdmissionCampaignData($id);
return redirect()->route('index');
}
private function updateAdmissionCampaignData($id) : void
{
$ac = AdmissionCampaign::query()->find($id);
$ap = AdmissionPlan::with('educationalProgram')->get();
$info = [];
$ap->map(function ($item) use (&$info) {
$lvlEduKey = is_object($item->educationalProgram->lvl_edu)
? $item->educationalProgram->lvl_edu->value
: $item->educationalProgram->lvl_edu;
// Инициализируем поля для нового ключа, если он еще не существует
if (!isset($info[$lvlEduKey])) {
$info[$lvlEduKey] = [
'total_programs' => 0,
'och_count' => 0,
'zaoch_count' => 0,
'budget_places' => 0,
'non_budget_places' => 0
];
}
// Увеличиваем счетчик total_programs
$info[$lvlEduKey]['total_programs'] += 1;
// Итерируемся по contests и агрегируем данные
// Передаем $info и $lvlEduKey по ссылке во внутреннее замыкание
foreach ($item->contests as $contest) {
$formEdu = $contest['form_education'];
$formBudget = $contest['places']['form_budget'];
$places = $contest['places']['count'];
// Агрегируем значения
$info[$lvlEduKey]['och_count'] += ($formEdu == 1) ? $places : 0;
$info[$lvlEduKey]['zaoch_count'] += ($formEdu == 3) ? $places : 0;
$info[$lvlEduKey]['budget_places'] += ($formBudget == 1) ? $places : 0;
$info[$lvlEduKey]['non_budget_places'] += ($formBudget == 4) ? $places : 0;
}
});
$result = [];
foreach ($info as $edu_name_key => $data) {
// Создаем новый массив, добавляя 'edu_name' как свойство
$data['edu_name'] = $edu_name_key;
// Добавляем преобразованный массив в результат
$result[] = $data;
}
$ac->update(['info' => $result]);
// dispatch(new UpdateAdmissionCampaign($id));
}
}
@@ -2,11 +2,8 @@
namespace App\Containers\Education\UI\API\Controllers;
use App\Containers\Education\Jobs\CreateAdmissionPlan;
use App\Http\Controllers\Controller;
use App\Jobs\CreateAdmissionPlan;
use App\Jobs\CreateDirectionStudy;
use App\Jobs\CreateEducationalProgram;
use App\Services\Vicon\EducationalProgram\EducationalProgramService;
class UpdateAdmissionPlansDataApiController extends Controller
{
@@ -2,9 +2,9 @@
namespace App\Containers\Education\UI\API\Controllers;
use App\Containers\Education\Jobs\CreateDirectionStudy;
use App\Containers\Education\Jobs\CreateEducationalProgram;
use App\Http\Controllers\Controller;
use App\Jobs\CreateDirectionStudy;
use App\Jobs\CreateEducationalProgram;
class UpdateEduDataApiController extends Controller
{
@@ -1,6 +1,7 @@
<?php
use App\Containers\Education\UI\API\Controllers\AcademicYearController;
use App\Containers\Education\UI\API\Controllers\UpdateAdmissionCampaignDataApiController;
use App\Containers\Education\UI\API\Controllers\UpdateAdmissionPlansDataApiController;
use App\Containers\Education\UI\API\Controllers\UpdateEduDataApiController;
use Illuminate\Support\Facades\Route;
@@ -10,4 +11,5 @@ Route::get('/getAcademicYear', AcademicYearController::class)->name('academic.ye
Route::middleware(['web', 'superadmin'])->group(function () {
Route::get('/get-edu-program-data', [UpdateEduDataApiController::class, 'index']);
Route::get('/get-admission-plans-data', [UpdateAdmissionPlansDataApiController::class, 'index']);
Route::get('/update-admission-campaign-data/{id}', [UpdateAdmissionCampaignDataApiController::class, 'update']);
});