notifier = $notifier; $this->authentication1CManager = $authentication1CManager; } public function getApplicationById(int $id): ?BachelorApplication { return BachelorApplication::findOne($id); } public function getValidatedEgeResults(BachelorApplication $application): array { $validationErrors = []; $haveValidationEgeErrors = false; $egeResults = $application->getSavedEgeResults(); foreach ($egeResults as $result) { if (!$result->validate()) { $haveValidationEgeErrors = true; $key = Yii::t( 'sandbox/moderate/all', 'Заголовок ошибки валидации ВИ, на странице проверки заявления: `Предмет - {DISCIPLINE_NAME}`', ['DISCIPLINE_NAME' => ArrayHelper::getValue( $result, 'cgetDiscipline.reference_name', Yii::t( 'sandbox/moderate/all', 'Текст ВИ когда не удалось определить предмет, на странице проверки заявления: `Невозможно получить наименование дисциплины.`' ) )] ); $validationErrors[$key] = $result->errors; } } return [ 'egeResults' => $egeResults, 'validationErrors' => $validationErrors, 'haveValidationEgeErrors' => $haveValidationEgeErrors ]; } public function checkDraftStatusToModerate(BachelorApplication $application): ?int { if ($application->draft_status == $application->getDraftStatusToModerate()) { return null; } $moderatingApp = DraftsManager::getOrCreateApplicationDraftByOtherDraft( $application, $application->getDraftStatusToModerate() ); return $moderatingApp->id; } public function startModeratingProcess(User $currentUser, BachelorApplication $application): void { if (!$this->request->isPost) { $application->setLastManager($currentUser->id); $application->blockApplication($currentUser->getEntrantManagerEntity()); } } public function validatePassports(array $passports): array { $passportErrors = []; if (!$passports) { $passportErrors[] = [[Yii::t( 'sandbox/moderate/all', 'Текст ошибки пустого паспорта, на странице проверки заявления: `Не указано ни одного документа удостоверяющего личность.`' )]]; } foreach ($passports as $passport) { if ($passport->validate()) { continue; } $resultArray = []; foreach ($passport->errors as $attribute) { foreach ($attribute as $error) { $resultArray[] = Yii::t( 'sandbox/moderate/all', 'Заголовок ошибки валидации паспорта, на странице проверки заявления: `Ошибка проверки реквизитов документа, удостоверяющего личность, по причине «{VALIDATION_ERROR}»`', ['VALIDATION_ERROR' => $error] ); } } $passportErrors[] = [$resultArray]; } return $passportErrors; } public function checkBalls(BachelorApplication $application, array $specialities): array { $checkErrors = []; $haveValidationErrors = false; if (!$application->type->enable_check_ege) { return [ 'checkErrors' => $checkErrors, 'haveValidationErrors' => $haveValidationErrors, ]; } foreach ($specialities as $speciality) { $checkError = $speciality->checkBalls(); if ($checkError !== null) { $checkErrors[] = $checkError; } } return [ 'checkErrors' => $checkErrors, 'haveValidationErrors' => $haveValidationErrors, ]; } public function validateAgreement(BachelorApplication $application, array $specialities): bool { $validateAgreementDate = true; $applicationSentAt = $application->sent_at; foreach ($specialities as $speciality) { $speciality->setScenario(BachelorSpeciality::SCENARIO_FULL_VALIDATION); if (!$speciality->validateAgreementDate($applicationSentAt)) { $validateAgreementDate = false; break; } $speciality->getAvailableCategories(); } return $validateAgreementDate; } public function validateSpecialities(array $specialities): array { $specialtyErrors = []; foreach ($specialities as $specialty) { $specialty->setScenario(BachelorSpeciality::SCENARIO_FULL_VALIDATION); if ($specialty->validate()) { continue; } $errors = $specialty->errors; $errors['name'] = $specialty->speciality->getFullName(); $specialtyErrors[] = $errors; } return $specialtyErrors; } public function afterSuccessFullApplicationApprovement(User $currentUser, BachelorApplication $application): void { $lastManagerId = ArrayHelper::getValue(Yii::$app, 'user.identity.id'); $application->setLastManager($lastManagerId); $application->save(true, ['last_manager_id', 'last_management_at']); $comment = $application->moderator_comment; $this->notifier->notifyAboutApplyApplication($application->user_id, $comment); $change = new ApplicationAcceptDeclineModel(); $change->application = $application; $change->application_action_status = ApplicationAcceptDeclineModel::APPLICATION_ACCEPTED; $change->application_comment = $comment; $change->getChangeHistoryHandler()->getInsertHistoryAction()->proceed(); $application = DraftsManager::createArchivePoint( $application, DraftsManager::REASON_APPROVED, IDraftable::DRAFT_STATUS_APPROVED ); DraftsManager::clearOldSendings($application, $currentUser, DraftsManager::REASON_APPROVED); DraftsManager::clearOldModerations($application, $currentUser, DraftsManager::REASON_APPROVED); DraftsManager::removeOldApproved($application, $currentUser, DraftsManager::REASON_APPROVED); $application->type->toggleResubmitPermissions($application->user, false); } public function afterFailureOnApplicationApprovement(BachelorApplication $application): BachelorApplication { $applyingSteps = $application->applyingSteps; $application = DraftsManager::createArchivePoint( $application, DraftsManager::REASON_REJECTED_BY_1C, $application->draft_status ); $application->applyingSteps = $applyingSteps; return $application; } public function getReallySentApplicationAndQuestionary(BachelorApplication $application): array { $reallySentApplication = null; $reallySentQuestionary = null; if (!$application->type->persist_moderators_changes_in_sent_application && $application->draft_status == IDraftable::DRAFT_STATUS_MODERATING) { $reallySentApplication = DraftsManager::getApplicationDraft($application->user, $application->type, IDraftable::DRAFT_STATUS_SENT); if ($reallySentApplication) { $reallySentQuestionary = $reallySentApplication->linkedAbiturientQuestionary; } } return [ 'reallySentApplication' => $reallySentApplication, 'reallySentQuestionary' => $reallySentQuestionary, ]; } public function checkPersonDuplicates(AbiturientQuestionary $questionary): array { $abiturientDoubles = []; $doublesForParents = []; if (!$questionary->user->userRef || !$questionary->user->hasApprovedApps()) { $abiturientDoubles = $this->authentication1CManager->getAbiturientDoublesByFullInfo($questionary->getEntityForDuplicatesFind()); } if ($questionary->parentData) { foreach ($questionary->parentData as $parent) { if ($parent->parentRef || !$parent->personalData) { continue; } $parent_duples = $this->authentication1CManager->getAbiturientDoublesByFullInfo($parent->getEntityForDuplicatesFind()); if ($parent_duples) { $doublesForParents[$parent->id] = $parent_duples; } } } return [ 'abiturientDoubles' => $abiturientDoubles, 'doublesForParents' => $doublesForParents, ]; } public function composeApplyingStepsErrors(BachelorApplication $application, ?string $additionalError): array { $result = []; foreach ($application->applyingSteps as $step) { $result[] = [ 'name' => $step->name, 'shortName' => $step->shortName, 'status' => $step->status, 'statusMessage' => $step->getStatusMessage(), 'errors' => $step->errors, ]; } if ($additionalError) { $result[] = [ 'name' => 'Обработка данных о принятых заявлениях', 'shortName' => 'after_approve', 'status' => ApplicationApplyingStep::STEP_STATUS_FAILED, 'statusMessage' => Yii::t( 'abiturient/application-applying-step', 'Текст сообщения об ошибке после отправки заявления; для менеджера: `При обработке данных произошла ошибка.`' ), 'errors' => [ $additionalError ], ]; } return $result; } }