_oldAttributes = $this->attributes; } public function scenarios() { $scenarios = parent::scenarios(); $scenarios[EgeResult::SCENARIO_SAVE_SETTINGS] = $scenarios[EgeResult::SCENARIO_DEFAULT]; return $scenarios; } public function rules() { return [ [ 'exam_form', 'safe' ], [ [ 'status', 'language_id', 'archived_at', 'discipline_id', 'application_id', 'cget_exam_form_id', 'reason_for_exam_id', 'cget_discipline_id', 'child_discipline_id', 'cget_child_discipline_id', 'special_requirement_ref_id', ], 'integer' ], [ [ 'archive', 'readonly', ], 'boolean', ], [ [ 'archive', 'readonly', ], 'default', 'value' => false ], [ 'status', 'default', 'value' => EgeResult::STATUS_UNSTAGED ], [ ['status'], 'in', 'range' => [ EgeResult::STATUS_STAGED, EgeResult::STATUS_VERIFIED, EgeResult::STATUS_UNSTAGED, EgeResult::STATUS_NOTVERIFIED, ] ], [ ['readonly'], 'in', 'range' => [false, true] ], [ [ 'discipline_points', 'egeyear', 'exam_form', 'child_discipline_code' ], 'string', 'max' => 100 ], [ 'entrance_test_junction', 'string', 'max' => 32 ], [ [ 'cget_discipline_id', 'cget_child_discipline_id', ], CompetitiveGroupEntranceTestsValidator::class, ], [ 'cget_child_discipline_id', 'required', 'when' => function (EgeResult $model) { return $model->hasChildren(); }, 'message' => Yii::t( 'abiturient/bachelor/ege/ege-result', 'Подсказка с ошибкой для поля "cget_child_discipline_id"; формы ВИ: `Укажите предмет вступительного испытания`' ), 'on' => [self::SCENARIO_SAVE_SETTINGS] ], [ 'cget_exam_form_id', 'required' ], [ ['reason_for_exam_id'], 'exist', 'skipOnError' => false, 'skipOnEmpty' => true, 'targetClass' => DictionaryReasonForExam::class, 'targetAttribute' => ['reason_for_exam_id' => 'id'] ], [ ['language_id'], 'exist', 'skipOnError' => false, 'skipOnEmpty' => true, 'targetClass' => ForeignLanguage::class, 'targetAttribute' => ['language_id' => 'id'] ], [ ['cget_exam_form_id'], 'exist', 'skipOnError' => false, 'skipOnEmpty' => true, 'targetClass' => StoredDisciplineFormReferenceType::class, 'targetAttribute' => ['cget_exam_form_id' => 'id'] ], [ ['cget_discipline_id'], 'exist', 'skipOnError' => false, 'skipOnEmpty' => true, 'targetClass' => StoredDisciplineReferenceType::class, 'targetAttribute' => ['cget_discipline_id' => 'id'] ], [ ['cget_child_discipline_id'], 'exist', 'skipOnError' => false, 'skipOnEmpty' => true, 'targetClass' => StoredChildDisciplineReferenceType::class, 'targetAttribute' => ['cget_child_discipline_id' => 'id'] ], [ ['special_requirement_ref_id'], 'exist', 'skipOnError' => false, 'skipOnEmpty' => true, 'targetClass' => SpecialRequirementReferenceType::class, 'targetAttribute' => ['special_requirement_ref_id' => 'id'] ], [ 'discipline_points', EgeResultValidator::class, ], ]; } public function getReasonForExam() { return $this->hasOne(DictionaryReasonForExam::class, ['id' => 'reason_for_exam_id']); } public function getRawBachelorResultCentralizedTesting() { return $this->hasOne(BachelorResultCentralizedTesting::class, ['egeresult_id' => 'id']); } public function getBachelorResultCentralizedTesting() { return $this->getRawBachelorResultCentralizedTesting() ->active(); } public function getOrBuildCentralizedTesting(bool $isCreatedByUser = true): BachelorResultCentralizedTesting { $centralizedTesting = $this->bachelorResultCentralizedTesting; if (!$centralizedTesting) { $centralizedTesting = new BachelorResultCentralizedTesting(); $centralizedTesting->egeresult_id = $this->id; $centralizedTesting->isNew = true; } if ($isCreatedByUser) { $centralizedTesting->scenario = BachelorResultCentralizedTesting::SCENARIO_CREATED_BY_USER; } return $centralizedTesting; } public function getLanguage() { return $this->hasOne(ForeignLanguage::class, ['id' => 'language_id']); } public function getRawBachelorDatePassingEntranceTest() { $tn = BachelorDatePassingEntranceTest::tablename(); return $this->hasOne(BachelorDatePassingEntranceTest::class, ['bachelor_egeresult_id' => 'id']) ->andWhere(['IS', "{$tn}.parent_id", null]); } public function getAllRawBachelorDatePassingEntranceTest() { return $this->hasMany(BachelorDatePassingEntranceTest::class, ['bachelor_egeresult_id' => 'id']); } public function getAllBachelorDatePassingEntranceTest() { return $this->hasMany(BachelorDatePassingEntranceTest::class, ['bachelor_egeresult_id' => 'id']) ->active(); } public function getBachelorDatePassingEntranceTest() { return $this->getRawBachelorDatePassingEntranceTest() ->active(); } public function getOrCreateBachelorDatePassingEntranceTest() { $tn = BachelorDatePassingEntranceTest::tablename(); $result = $this->getBachelorDatePassingEntranceTest() ->andWhere(['IS', "{$tn}.parent_id", null]) ->one(); if (empty($result)) { $result = new BachelorDatePassingEntranceTest(); $result->from_1c = false; if (!empty($this->id)) { $result->bachelor_egeresult_id = $this->id; } } return $result; } public function getSpecialRequirement() { return $this->hasOne(SpecialRequirementReferenceType::class, ['id' => 'special_requirement_ref_id']); } public function attributeLabels() { return [ 'status' => Yii::t('abiturient/bachelor/ege/ege-result', 'Подпись для поля "status"; формы ВИ: `Проверено`'), 'egeyear' => Yii::t('abiturient/bachelor/ege/ege-result', 'Подпись для поля "egeyear"; формы ВИ: `Год`'), 'exam_form' => Yii::t('abiturient/bachelor/ege/ege-result', 'Подпись для поля "exam_form"; формы ВИ: `Форма сдачи`'), 'egeyear_id' => Yii::t('abiturient/bachelor/ege/ege-result', 'Подпись для поля "egeyear_id"; формы ВИ: `Заявление`'), 'language_id' => Yii::t('abiturient/bachelor/ege/ege-result', 'Подпись для поля "language_id"; формы ВИ: `Язык`'), 'languageName' => Yii::t('abiturient/bachelor/ege/ege-result', 'Подпись для поля "languageName"; формы ВИ: `Язык`'), 'discipline_id' => Yii::t('abiturient/bachelor/ege/ege-result', 'Подпись для поля "discipline_id"; формы ВИ: `Предмет`'), 'cgetExamFormName' => Yii::t('abiturient/bachelor/ege/ege-result', 'Подпись для поля "cget_exam_form_id"; формы ВИ: `Форма сдачи`'), 'cget_exam_form_id' => Yii::t('abiturient/bachelor/ege/ege-result', 'Подпись для поля "cget_exam_form_id"; формы ВИ: `Форма сдачи`'), 'discipline_points' => Yii::t('abiturient/bachelor/ege/ege-result', 'Подпись для поля "discipline_points"; формы ВИ: `Балл`'), 'reasonForExamName' => Yii::t('abiturient/bachelor/ege/ege-result', 'Подпись для поля "reasonForExamName" ; формы ВИ: `Основание`'), 'cgetDisciplineName' => Yii::t('abiturient/bachelor/ege/ege-result', 'Подпись для поля "cgetDisciplineName"; формы ВИ: `Предмет`'), 'cget_discipline_id' => Yii::t('abiturient/bachelor/ege/ege-result', 'Подпись для поля "cget_discipline_id"; формы ВИ: `Предмет`'), 'reason_for_exam_id' => Yii::t('abiturient/bachelor/ege/ege-result', 'Подпись для поля "reason_for_exam_id"; формы ВИ: `Основание`'), 'specialRequirementName' => Yii::t('abiturient/bachelor/ege/ege-result', 'Подпись для поля "specialRequirementName"; формы ВИ: `Специальное условие`'), 'cgetChildDisciplineName' => Yii::t('abiturient/bachelor/ege/ege-result', 'Подпись для поля "cgetChildDisciplineName"; формы ВИ: `Предмет`'), 'cget_child_discipline_id' => Yii::t('abiturient/bachelor/ege/ege-result', 'Подпись для поля "cget_child_discipline_id"; формы ВИ: `Предмет`'), 'special_requirement_ref_id' => Yii::t('abiturient/bachelor/ege/ege-result', 'Подпись для поля "special_requirement_ref_id"; формы ВИ: `Специальное условие`'), ]; } public function getApplication() { return $this->hasOne(BachelorApplication::class, ['id' => 'application_id']); } public function getBachelorEntranceTestSets() { return $this->getRawBachelorEntranceTestSets() ->active(); } public function getRawBachelorEntranceTestSets() { $query = $this->getRawBachelorEntranceTestSetsByEntranceTestParamsOnly(); $tnBachelorSpeciality = BachelorSpeciality::tableName(); $tnBachelorEntranceTestSet = BachelorEntranceTestSet::tableName(); $subQuery = BachelorSpeciality::find() ->select("{$tnBachelorSpeciality}.id") ->andWhere(["{$tnBachelorSpeciality}.application_id" => $this->application_id]); return $query->andOnCondition(['IN', "{$tnBachelorEntranceTestSet}.bachelor_speciality_id", $subQuery]); } public function getBachelorEntranceTestSetsByEntranceTestParamsOnly() { return $this->getRawBachelorEntranceTestSetsByEntranceTestParamsOnly() ->active(); } public function getRawBachelorEntranceTestSetsByEntranceTestParamsOnly() { return $this->hasMany(BachelorEntranceTestSet::class, ['entrance_test_junction' => 'entrance_test_junction']); } public function getBachelorSpecialities() { return $this->hasMany(BachelorSpeciality::class, ['id' => 'bachelor_speciality_id']) ->via('bachelorEntranceTestSets'); } public function getRawBachelorSpecialities() { return $this->hasMany(BachelorSpeciality::class, ['id' => 'bachelor_speciality_id']) ->via('rawBachelorEntranceTestSets'); } public function getBachelorSpecialitiesWithEagerLoad() { $tnBachelorSpeciality = BachelorSpeciality::tableName(); return $this->getBachelorSpecialities() ->with(EgeResult::joinListForSpecialty()) ->andWhere(["{$tnBachelorSpeciality}.application_id" => $this->application_id]); } public function getRawBachelorSpecialitiesWithEagerLoad() { $tnBachelorSpeciality = BachelorSpeciality::tableName(); return $this->getRawBachelorSpecialities() ->with(EgeResult::joinListForSpecialty()) ->andWhere(["{$tnBachelorSpeciality}.application_id" => $this->application_id]); } private static function joinListForSpecialty(): array { return [ 'admissionCategory', 'speciality', 'speciality.campaignRef', 'speciality.competitiveGroupRef', 'speciality.curriculumRef', 'speciality.educationLevelRef', 'speciality.subdivisionRef', ]; } public function getCgetExamForm() { return $this->hasOne(StoredDisciplineFormReferenceType::class, ['id' => 'cget_exam_form_id']); } public function getCgetDiscipline() { return $this->hasOne(StoredDisciplineReferenceType::class, ['id' => 'cget_discipline_id']); } public function getCgetChildDiscipline() { return $this->hasOne(StoredChildDisciplineReferenceType::class, ['id' => 'cget_child_discipline_id']); } public function getCgetEntranceTest() { return $this->hasOne(CgetEntranceTest::class, [ 'subject_ref_id' => 'cget_discipline_id', 'entrance_test_result_source_ref_id' => 'cget_exam_form_id', ]); } public function getDisciplineRef() { if ($this->hasChildren()) { return ReferenceTypeManager::GetReference($this->cgetChildDiscipline); } else { return ReferenceTypeManager::GetReference($this->cgetDiscipline); } } public function getDisciplineCode() { if ($this->hasChildren()) { return $this->cgetChildDiscipline->reference_id; } else { return $this->cgetDiscipline->reference_id; } } public function getClassTypeForChangeHistory(): int { return ChangeHistoryClasses::CLASS_EXAM_RESULT; } public function getDisciplineReferenceName(): string { $discipline = ArrayHelper::getValue($this, 'cgetDiscipline.reference_name'); if ($this->cget_child_discipline_id) { $childDiscipline = ArrayHelper::getValue($this, 'cgetChildDiscipline.reference_name'); $discipline .= " ({$childDiscipline})"; } return $discipline; } public function getChangeLoggedAttributes() { return [ 'discipline_id' => function ($model) { return $model->disciplineReferenceName; }, 'egeyear', 'exam_form' => function ($model) { return ArrayHelper::getValue($model, 'cgetExamForm.reference_name'); }, 'discipline_points', 'reason_for_exam_id' => function ($model) { return ArrayHelper::getValue($model, 'reasonForExam.name'); }, 'language_id' => function ($model) { return ArrayHelper::getValue($model, 'language.description'); }, ]; } public function getReasonForExamName() { return ArrayHelper::getValue($this, 'reasonForExam.name'); } public function getOldClass(): ChangeLoggedModelInterface { $class = new EgeResult(); $class->attributes = $this->_oldAttributes; return $class; } public function getEntityIdentifier(): ?string { return ArrayHelper::getValue($this, 'disciplineRef.ReferenceName'); } public function getEntityChangeType(): int { return ChangeHistory::CHANGE_HISTORY_EXAM_POINTS; } public function isEgeChosen() { return isset($this->cgetExamForm) && $this->cgetExamForm->reference_uid == Yii::$app->configurationManager->getCode('discipline_ege_form'); } private static function getRelatedTestSets(BachelorApplication $application): array { $tnBachelorEntranceTestSet = BachelorEntranceTestSet::tableName(); $selectQuery = new Expression("CONCAT( {$tnBachelorEntranceTestSet}.bachelor_speciality_id, '__', {$tnBachelorEntranceTestSet}.entrance_test_junction )"); return BachelorEntranceTestSet::find() ->select($selectQuery) ->andWhere([ 'IN', 'entrance_test_junction', $application ->getEgeResults() ->select('entrance_test_junction') ]) ->andWhere([ 'IN', 'bachelor_speciality_id', $application ->getSpecialitiesWithoutOrdering() ->select('id') ]) ->column(); } public static function loadFromPost(BachelorApplication $application, array $post = []): bool { $egeAttributesNotToArchive = []; $testSetNotToArchiveId = []; $selfFormName = (new EgeResult())->formName(); $any_set_created = false; $beforeLoad = EgeResult::getRelatedTestSets($application); $posData = ArrayHelper::getValue($post, $selfFormName); if (!empty($posData)) { foreach ($posData as $bachelorSpecialityId => $subPosData) { $speciality = $application->getSpecialities() ->where([BachelorSpeciality::tableName() . '.id' => $bachelorSpecialityId]) ->one(); if (empty($speciality)) { continue; } if ($speciality->isWithoutEntranceTests) { continue; } if ($speciality->is_enlisted) { $bachelorEntranceTestSets = $speciality->bachelorEntranceTestSets; if (!empty($bachelorEntranceTestSets)) { foreach ($bachelorEntranceTestSets as $bachelorEntranceTestSet) { $testSetNotToArchiveId[] = $bachelorEntranceTestSet->id; $egeAttributesNotToArchive[] = $bachelorEntranceTestSet->entrance_test_junction; } } continue; } if (!empty($subPosData)) { foreach ($subPosData as $combinations) { $priority = ArrayHelper::getValue($combinations, 'priority'); $radioDisciplineId = ArrayHelper::getValue($combinations, 'cget_discipline_id'); $radioChildDisciplineId = ArrayHelper::getValue($combinations, 'cget_child_discipline_id'); foreach ($combinations as $combinationKey => $combinationData) { if ($combinationKey == 'priority') { continue; } $disciplineId = (int)$radioDisciplineId; if (empty($radioDisciplineId)) { $checkboxDisciplineId = ArrayHelper::getValue($combinationData, 'cget_discipline_id'); if (empty($checkboxDisciplineId)) { continue; } $disciplineId = (int)$checkboxDisciplineId; } $childDisciplineId = (int)$radioChildDisciplineId; if (empty($radioChildDisciplineId)) { $checkboxChildDisciplineId = ArrayHelper::getValue($combinationData, 'cget_child_discipline_id'); if (!empty($checkboxChildDisciplineId)) { $childDisciplineId = (int)$checkboxChildDisciplineId; } } $examFormId = (int)ArrayHelper::getValue($combinationData, 'cget_exam_form_id'); if (empty($examFormId)) { continue; } [$set, $created] = EntrantTestManager::getOrCreateEntrantTestSet( $application, $speciality, $disciplineId, $childDisciplineId, $examFormId, $priority ); $any_set_created = ($any_set_created || $created); if (!in_array($set->entrance_test_junction, $egeAttributesNotToArchive)) { $egeAttributesNotToArchive[] = $set->entrance_test_junction; } if (!in_array($set->id, $testSetNotToArchiveId)) { $testSetNotToArchiveId[] = $set->id; } } } } } } EntrantTestManager::archiveNotActualEntranceTestSetExceptReadOnly($application, $testSetNotToArchiveId); EntrantTestManager::archiveNotActualEgeExceptReadOnly($application, $egeAttributesNotToArchive); $afterLoad = EgeResult::getRelatedTestSets($application); return ( $any_set_created || count($beforeLoad) != count($afterLoad) || count(array_diff($afterLoad, $beforeLoad)) > 0 || count(array_diff($beforeLoad, $afterLoad)) > 0 ); } public function beforeDelete() { if (!parent::beforeDelete()) { return false; } $centralizedTesting = $this->getRawBachelorResultCentralizedTesting()->one(); if ($centralizedTesting && !$centralizedTesting->delete()) { return false; } $bachelorDatePassing = $this->getRawBachelorDatePassingEntranceTest()->one(); if ($bachelorDatePassing && !$bachelorDatePassing->delete()) { return false; } return true; } public function beforeSave($insert) { if (!parent::beforeSave($insert)) { return false; } $cgetExamFormUid = ''; $cgetDisciplineUid = ''; $cgetChildDisciplineUid = ''; $fieldList = [ 'cgetExamFormUid' => 'cgetExamForm', 'cgetDisciplineUid' => 'cgetDiscipline', 'cgetChildDisciplineUid' => 'cgetChildDiscipline', ]; foreach ($fieldList as $varName => $field) { $valueReferenceUid = ArrayHelper::getValue($this, "{$field}.reference_uid", null); if ($valueReferenceUid) { $$varName = $valueReferenceUid; } } $this->entrance_test_junction = JointEntrantTestManager::buildJointEntrantTestString( $cgetDisciplineUid, $cgetExamFormUid, $cgetChildDisciplineUid ); return true; } public function beforeArchive() { if (!CentralizedTestingManager::archiveIfExist($this->id)) { Yii::error('Ошибка архивирования ЦТ', 'beforeArchive'); return false; } if (!ExamsScheduleManager::archiveIfExist($this->bachelorDatePassingEntranceTest)) { Yii::error('Ошибка архивирования расписания сдачи ВИ', 'beforeArchive'); return false; } return true; } public function isExam() { $exam_form_uid = $this->cgetExamForm->reference_uid ?? null; return Yii::$app->configurationManager->getCode('discipline_ege_form') != $exam_form_uid; } public function getLanguageList(int $additional_language_id = null) { $tnForeignLanguage = ForeignLanguage::tableName(); return ArrayHelper::map( ForeignLanguage::find() ->notMarkedToDelete() ->active() ->orFilterWhere(["{$tnForeignLanguage}.id" => $additional_language_id]) ->orderBy(["{$tnForeignLanguage}.description" => SORT_ASC]) ->all(), 'id', 'description' ); } public function getSpecialRequirementList() { $tnSpecialRequirementReferenceType = SpecialRequirementReferenceType::tableName(); return ArrayHelper::map( SpecialRequirementReferenceType::find() ->notMarkedToDelete() ->active() ->orFilterWhere([ "{$tnSpecialRequirementReferenceType}.id" => $this->special_requirement_ref_id ]) ->orderBy(["{$tnSpecialRequirementReferenceType}.reference_name" => SORT_ASC]) ->all(), 'id', 'reference_name' ); } public function getReasonForExamList() { return ArrayHelper::map( DictionaryReasonForExam::find() ->active() ->orderBy(['name' => SORT_ASC]) ->all(), 'id', 'name' ); } public function getYears() { $years = []; $active_year = date('Y'); for ($i = $active_year - 4; $i <= $active_year; $i++) { $years[(string)$i] = $i; } return $years; } public function hasChildren() { return isset($this->cget_child_discipline_id); } public function getMinimalMaximalScore() { if (empty($this->_minimalMaximalScore)) { $testsSetIds = ArrayHelper::map($this->application->specialities, 'id', 'cget_entrance_test_set_id'); $test = CgetEntranceTest::find() ->joinWith('entranceTestResultSourceRef entranceTestResultSourceRef') ->select(['min_score']) ->where(['subject_ref_id' => $this->cget_discipline_id]) ->andWhere(['in', 'cget_entrance_test_set_id', $testsSetIds]) ->andWhere(['entranceTestResultSourceRef.reference_uid' => Yii::$app->configurationManager->getCode('discipline_ege_form')]) ->groupBy(['min_score']) ->orderBy(['min_score' => SORT_DESC]) ->one(); if (empty($test)) { return ''; } $this->minimalMaximalScore = $test->min_score; } return $this->_minimalMaximalScore; } public function setMinimalMaximalScore($minimalMaximalScore) { $this->_minimalMaximalScore = (string)$minimalMaximalScore; } public static function getAllDisciplineList() { $result = []; $disciplineEgeFormUid = Yii::$app->configurationManager->getCode('discipline_ege_form'); $cgetEntranceTestTableName = CgetEntranceTest::tableName(); $entranceTest = CgetEntranceTest::find() ->joinWith('entranceTestResultSourceRef entranceTestResultSourceRef') ->select("{$cgetEntranceTestTableName}.subject_ref_id") ->where([ "{$cgetEntranceTestTableName}.archive" => false, "entranceTestResultSourceRef.reference_uid" => $disciplineEgeFormUid ]) ->groupBy(["{$cgetEntranceTestTableName}.subject_ref_id"]); $storedDisciplineReferenceTypeTableName = StoredDisciplineReferenceType::tableName(); $discipline = StoredDisciplineReferenceType::find() ->select(["{$storedDisciplineReferenceTypeTableName}.id", "{$storedDisciplineReferenceTypeTableName}.reference_name"]) ->where(["{$storedDisciplineReferenceTypeTableName}.archive" => false]) ->andWhere(['in', "{$storedDisciplineReferenceTypeTableName}.id", $entranceTest]) ->all(); if (!empty($discipline)) { $result = ArrayHelper::map($discipline, 'id', 'reference_name'); } return $result; } public function afterValidate() { (new LoggingAfterValidateHandler()) ->setModel($this) ->invoke(); } public function getExamScheduleQuery() { $tnStoredDisciplineReferenceType = StoredDisciplineReferenceType::tableName(); $tnStoredDisciplineFormReferenceType = StoredDisciplineFormReferenceType::tableName(); $tnBachelorSpeciality = BachelorSpeciality::tableName(); $tnDictionaryPredmetOfExamsSchedule = DictionaryPredmetOfExamsSchedule::tableName(); $tnDictionaryDateTimeOfExamsSchedule = DictionaryDateTimeOfExamsSchedule::tableName(); return BachelorDatePassingEntranceTest::getExamScheduleBaseDetalizedQuery() ->andWhere([ "{$tnDictionaryPredmetOfExamsSchedule}.archive" => false, "{$tnBachelorSpeciality}.archive" => false, "{$tnBachelorSpeciality}.application_id" => $this->application_id, "{$tnStoredDisciplineFormReferenceType}.reference_uid" => $this->cgetExamForm->reference_uid, "{$tnStoredDisciplineReferenceType}.reference_uid" => $this->cgetDiscipline->reference_uid, ]) ->andWhere(['>', "{$tnDictionaryDateTimeOfExamsSchedule}.end_date", time()]) ->andWhere([ 'OR', ['>', "{$tnDictionaryDateTimeOfExamsSchedule}.registration_date", time()], ['IN', "{$tnDictionaryDateTimeOfExamsSchedule}.registration_date", [0, null]], ]); } public function getExamSchedule() { return $this->getExamScheduleQuery()->exists(); } public function getExamScheduleList($date) { $guidDateTimeList = []; $tnDictionaryDateTimeOfExamsSchedule = DictionaryDateTimeOfExamsSchedule::tableName(); $dates = $this->getExamScheduleQuery() ->orderBy(["{$tnDictionaryDateTimeOfExamsSchedule}.start_date" => SORT_ASC]) ->all(); $dateId = $date->date_time_of_exams_schedule_id; $zeroKey = array_key_first($dates); $date->scheduleLabel = BachelorDatePassingEntranceTest::humanizer($dates[$zeroKey]['reference_name']); $examDateList = []; foreach ($dates as $data) { $guidDateTimeList[$data['id']] = $data['guid_date_time']; $examDateList[$data['id']] = BachelorDatePassingEntranceTest::generateName($data); } if (!in_array($dateId, $examDateList)) { $additionalDate = BachelorDatePassingEntranceTest::getExamScheduleBaseDetalizedQuery() ->andWhere(["{$tnDictionaryDateTimeOfExamsSchedule}.id" => $dateId]) ->one(); if (!empty($additionalDate)) { $guidDateTimeList[$additionalDate['id']] = $additionalDate['guid_date_time']; $examDateList[$additionalDate['id']] = BachelorDatePassingEntranceTest::generateName($additionalDate); } } if (!empty($guidDateTimeList)) { $date->existGuidDateTimeList = $guidDateTimeList; $date->hasChildren = DictionaryDateTimeOfExamsSchedule::find() ->where(['in', 'predmet_guid', $guidDateTimeList]) ->exists(); } return $examDateList; } public function getIdentityString(): string { $discipline_uid = ArrayHelper::getValue($this, 'cgetDiscipline.reference_uid', ''); $child_discipline_uid = ArrayHelper::getValue($this, 'cgetChildDiscipline.reference_uid', ''); $exam_form_uid = ArrayHelper::getValue($this, 'cgetExamForm.reference_uid', ''); $egeyear = $this->egeyear; $discipline_points = $this->discipline_points; return "{$discipline_uid}_{$child_discipline_uid}_{$exam_form_uid}_{$egeyear}_{$discipline_points}"; } public function getCgetDisciplineName() { return ArrayHelper::getValue($this, 'cgetDiscipline.reference_name'); } public function getCgetChildDisciplineName() { return ArrayHelper::getValue($this, 'cgetChildDiscipline.reference_name'); } public function getCgetExamFormName() { return ArrayHelper::getValue($this, 'cgetExamForm.reference_name'); } public function getLanguageName() { return ArrayHelper::getValue($this, 'language.description'); } public function getSpecialRequirementName() { return ArrayHelper::getValue($this, 'specialRequirement.reference_name'); } public function getPropsToCompare(): array { return [ 'cgetDisciplineName', 'cgetChildDisciplineName', 'cgetExamFormName', 'discipline_points', 'egeyear', 'languageName', 'reasonForExamName', 'specialRequirementName', ]; } public function getRelationsInfo(): array { return [ new OneToOneRelationPresenter( 'bachelorResultCentralizedTesting', [ 'parent_instance' => $this, 'child_class' => BachelorResultCentralizedTesting::class, 'child_column_name' => 'egeresult_id', ] ), new OneToOneRelationPresenter( 'bachelorDatePassingEntranceTest', [ 'parent_instance' => $this, 'child_class' => BachelorDatePassingEntranceTest::class, 'child_column_name' => 'bachelor_egeresult_id', 'actual_relation_name' => 'rawBachelorDatePassingEntranceTest', ] ), ]; } public static function getArchiveValue() { return true; } public static function find() { return new ArchiveQuery(static::class); } public function isOnlyEgeForThisApplication(array $setsIdsToSkip = []): bool { $tnBachelorSpeciality = BachelorSpeciality::tableName(); $tnBachelorEntranceTestSet = BachelorEntranceTestSet::tableName(); return !BachelorEntranceTestSet::find() ->active() ->joinWith('bachelorSpeciality') ->andWhere(['NOT IN', "{$tnBachelorEntranceTestSet}.id", $setsIdsToSkip]) ->andWhere(["{$tnBachelorSpeciality}.application_id" => $this->application_id]) ->andWhere(["{$tnBachelorEntranceTestSet}.entrance_test_junction" => $this->entrance_test_junction]) ->exists(); } public function hasEnlistedBachelorSpecialities(): bool { $tn = BachelorSpeciality::tableName(); return $this->getBachelorSpecialities() ->andWhere(["{$tn}.is_enlisted" => true]) ->andWhere(["{$tn}.application_id" => $this->application_id]) ->exists(); } public function stringify(): string { return trim("{$this->disciplineReferenceName} " . ArrayHelper::getValue($this, 'cgetExamForm.reference_name')); } }