input()['predmets']; $calcultatorSubjects = json_decode($getJSON); $filteredDirectionIds = EntranceExamination::all() ->select("direction_id", "subject_id", "subject_type_id", "examination_type_id") ->where('examination_type_id', '=', ExaminationTypeEnum::Ege->value) ->reduce(function (array $carry, $examine) { [ 'direction_id' => $direction_id, 'subject_id' => $subject_id, 'subject_type_id' => $subject_type_id ] = $examine; $carry[$direction_id][$subject_type_id][] = $subject_id; $carry[$direction_id][$subject_type_id] = array_unique($carry[$direction_id][$subject_type_id]); return $carry; }, []); $directionIds = collect($filteredDirectionIds) ->filter(function ($subjectTypes) use ($calcultatorSubjects) { $requiredSubjects = $subjectTypes[1]; return array_reduce($requiredSubjects, function ($acc, $requiredSubjects) use ($calcultatorSubjects) { if (!in_array($requiredSubjects, $calcultatorSubjects)) { return false; } return $acc; }, true); }) ->filter(function ($subjectTypes) use ($calcultatorSubjects) { if (array_key_exists(2, $subjectTypes)) { $optionalSubjectsInCalculator = collect($subjectTypes[2]) ->filter(fn($optionalSubject) => in_array($optionalSubject, $calcultatorSubjects)); return $optionalSubjectsInCalculator->count() !== 0; } return true; }) ->map(fn($subjectTypes, $directionId) => $directionId); $directions = Direction::whereIn('id', $directionIds)->get(); // dd($directionIds); $dataToGenerateHTML = $this->getDirectionsToModals($directionIds); // dd($dataToGenerateHTML); $generateHtml = function ($acc, $direction) { $builder = new DirectonHtmlBuilderForCalculator($direction); $offCanvasModal = $builder->getHTML(); // dd($offCanvasModal); return "{$acc} {$direction['name']} {$offCanvasModal} {$direction['cost_paid_place']['очная']} {$direction['period']['очная']} "; }; $html = collect($dataToGenerateHTML)->reduce($generateHtml, ''); return response()->json(['html' => $html]); } public function getDirectionsToModals($directionIds) { //phpcs:disable $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', 'faculties.description as faculty_description', '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', ]) ->whereIn('directions.id', $directionIds) ->get()->toArray(); //phpcs:enable $branches = []; $directionsGroupWithOutBranch = array_reduce($directionsGroups, function ($acc, $direction) use (&$branches) { if ($direction['educational_institution_id'] == 3) { $branches[] = $direction; } $acc[] = $direction; return $acc; }, []); $groupedDirections = collect($directionsGroupWithOutBranch) ->reduce(function ($carry, $item) use ($branches) { [ 'direction_id' => $directionId, 'direction_name' => $directionName, 'direction_code' => $directionCode, 'educational_institution_id' => $educational_institution_id, 'educational_institution_name' => $educationalInstitutionName, 'faculty_id' => $facultyId, 'faculty_name' => $facultyName, 'faculty_description' => $facultyDescription, '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]['id'] = $facultyId; // $carry[$facultyName]['name'] = $facultyName; // $carry[$facultyName]['description'] = $facultyDescription; $carry[$directionName]['name'] = $directionName; $carry[$directionName]['id'] = $directionId; $carry[$directionName]['code'] = $directionCode; $carry[$directionName]['education_level'] = $educationLevelName; $carry[$directionName]['education_form'][] = $educationFormName; $carry[$directionName]['education_form'] = array_unique( $carry[$directionName]['education_form'] ); $carry[$directionName]['entrance_examinations'] [$examinationTypeName][$subjectTypeName][$subjectName] = $entranceExaminationScore; $carry[$directionName]['budget_places'] [$educationalInstitutionName][$directionProfileName][$educationFormName] = $directionBudgetPlaces; $carry[$directionName]['paid_places'] [$educationalInstitutionName][$directionProfileName][$educationFormName] = $directionPaidPlaces; /*$carry[$facultyName]['directions'][$directionName] ['paid_places'][$educationFormName] = $directionPaidPlaces;*/ $carry[$directionName] ['cost_paid_place'][$educationFormName] = $directionCostPaidPlace; $carry[$directionName]['period'][$educationFormName] = $directionPeriod; $carry[$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[$directionName]['budget_places'] [$educationalInstitutionNameBranch][$directionProfileNameBranch] [$educationFormNameBranch] = $directionBudgetPlacesBranch; } } return $carry; }, []); return $groupedDirections; } }