Roman_applicant-site/app/Http/Controllers/admin/PageController.php

181 lines
8.5 KiB
PHP

<?php
namespace App\Http\Controllers\admin;
use App\Enums\ExaminationTypeEnum;
use App\Http\Controllers\Controller;
use App\Models\Admission;
use App\Models\Direction;
use App\Models\EntranceExamination;
use App\Models\Faculty;
use App\Models\Subject;
use Illuminate\Contracts\View\Factory;
use Illuminate\Contracts\View\View;
use Illuminate\Foundation\Application;
class PageController extends Controller
{
// public function index(): View|Application|Factory|\Illuminate\Contracts\Foundation\Application
// {
// $admissions = Admission::all()->sortBy('position');
// return view('menu.reception-screen', compact('admissions'));
// }
public function directions()
{
$faculties = Faculty::all();
$subjects = EntranceExamination::all()
->select('subject_id', 'subject_type_id', 'examination_type_id')
->where('examination_type_id', '=', ExaminationTypeEnum::Ege->value)
->reduce(function (?array $carry, $subject) {
$id = $subject['subject_id'];
$value = Subject::find($id)->name;
$carry[$id] = $value;
return $carry;
});
$directionsWithInstitution = Direction::with(['department'])
->join('departments', 'directions.department_id', '=', 'departments.id')
->join('faculties', 'departments.faculty_id', '=', 'faculties.id')
->join(
'educational_institutions',
'faculties.educational_institution_id',
'=',
'educational_institutions.id'
)
->get([
'directions.id',
'directions.name',
"educational_institutions.name as educational_institution_name"
]);
$directionsGroups = Direction::with(['department'])
->leftJoin('direction_direction_profile', 'directions.id', '=', 'direction_direction_profile.direction_id')
->leftJoin(
'direction_profiles',
'direction_direction_profile.direction_profile_id',
'=',
'direction_profiles.id'
)
->leftJoin('departments', 'directions.department_id', '=', 'departments.id')
->leftJoin('faculties', 'departments.faculty_id', '=', 'faculties.id')
->leftJoin('education_levels', 'directions.education_level_id', '=', 'education_levels.id')
->leftJoin('education_forms', 'directions.education_form_id', '=', 'education_forms.id')
->leftJoin('entrance_examinations', 'entrance_examinations.direction_id', '=', 'directions.id')
->leftJoin(
'educational_institutions',
'faculties.educational_institution_id',
'=',
'educational_institutions.id'
)
->leftJoin('examination_types', 'entrance_examinations.examination_type_id', '=', 'examination_types.id')
->leftJoin('subject_types', 'entrance_examinations.subject_type_id', '=', 'subject_types.id')
->leftJoin('subjects', 'entrance_examinations.subject_id', '=', 'subjects.id')
->select(
'directions.id as direction_id',
'directions.code as direction_code',
'directions.name as direction_name',
'directions.description as direction_description',
'directions.budget_places as direction_budget_places',
'directions.paid_places as direction_paid_places',
'directions.cost_paid_place as direction_cost_paid_place',
'directions.period as direction_period',
'education_levels.name as education_level_name',
'education_forms.name as education_form_name',
'faculties.id as faculty_id',
'faculties.name as faculty_name',
'educational_institutions.id as educational_institution_id',
'educational_institutions.name as educational_institution_name',
'direction_profiles.id as direction_profile_id',
'entrance_examinations.scores as entrance_examination_score',
'examination_types.name as examination_type_name',
'subject_types.name as subject_type_name',
'subjects.name as subject_name',
'direction_profiles.name as direction_profile_name',
)
->get()->toArray();
$branches = [];
$directionsGroupWithOutBranch = array_reduce($directionsGroups, function ($acc, $direction) use (&$branches) {
if ($direction['educational_institution_id'] == 3) {
$branches[] = $direction;
return $acc;
}
$acc[] = $direction;
return $acc;
}, []);
$groupedDirections = collect($directionsGroupWithOutBranch)
->reduce(function ($carry, $item, $key) use ($branches) {
[
'direction_id' => $directionId,
'direction_name' => $directionName,
'direction_code' => $directionCode,
'educational_institution_id' => $educational_institution_id,
'educational_institution_name' => $educationalInstitutionName,
'faculty_name' => $facultyName,
'education_level_name' => $educationLevelName,
'education_form_name' => $educationFormName,
'entrance_examination_score' => $entranceExaminationScore,
'examination_type_name' => $examinationTypeName,
'subject_type_name' => $subjectTypeName,
'subject_name' => $subjectName,
'direction_profile_name' => $directionProfileName,
'direction_budget_places' => $directionBudgetPlaces,
'direction_paid_places' => $directionPaidPlaces,
'direction_cost_paid_place' => $directionCostPaidPlace,
'direction_period' => $directionPeriod,
'direction_description' => $directionDescription,
] = $item;
$carry[$facultyName][$directionName]['id'] = $directionId;
$carry[$facultyName][$directionName]['code'] = $directionCode;
$carry[$facultyName][$directionName]['education_level'] = $educationLevelName;
$carry[$facultyName][$directionName]['education_form'][] = $educationFormName;
$carry[$facultyName][$directionName]['education_form'] = array_unique(
$carry[$facultyName][$directionName]['education_form']
);
$carry[$facultyName][$directionName]['entrance_examinations']
[$examinationTypeName][$subjectTypeName][$subjectName] = $entranceExaminationScore;
$carry[$facultyName][$directionName]['budget_places']
[$educationalInstitutionName][$directionProfileName][$educationFormName] = $directionBudgetPlaces;
$carry[$facultyName][$directionName]['paid_places'][$educationFormName] = $directionPaidPlaces;
$carry[$facultyName][$directionName]['cost_paid_place'][$educationFormName] = $directionCostPaidPlace;
$carry[$facultyName][$directionName]['period'][$educationFormName] = $directionPeriod;
$carry[$facultyName][$directionName]['description'] = $directionDescription;
foreach ($branches as $branch) {
[
'direction_name' => $directionNameBranch,
'educational_institution_name' => $educationalInstitutionNameBranch,
'direction_profile_name' => $directionProfileNameBranch,
'education_form_name' => $educationFormNameBranch,
'direction_budget_places' => $directionBudgetPlacesBranch
] = $branch;
if ($directionNameBranch === $directionName) {
$carry[$facultyName][$directionName]['budget_places']
[$educationalInstitutionNameBranch][$directionProfileNameBranch]
[$educationFormNameBranch] = $directionBudgetPlacesBranch;
}
}
return $carry;
}, []);
return view('new-design.bakalavr-special', compact(
'faculties',
'subjects',
'directionsWithInstitution',
'groupedDirections'
));
}
public function calculator($request)
{
return response()->json($request);
}
}