avatarService = $avatarService; $this->parentDataService = $parentDataService; $this->addressDataService = $addressDataService; $this->questionaryService = $questionaryService; $this->applicationsService = $applicationsService; $this->passportDataService = $passportDataService; $this->individualAchievementService = $individualAchievementService; $this->initializationQuestionaryService = $initializationQuestionaryService; $this->application1CProcessorService = $application1CProcessorService; parent::__construct($id, $module, $config); } public function getViewPath() { return Yii::getAlias('@common/modules/abiturient/views/abiturient'); } public function behaviors() { $sandboxEnabled = SandboxSetting::findOne(['name' => 'sandbox_enabled']); if ($sandboxEnabled == null) { $sandboxEnabled = 0; } return [ 'access' => [ 'class' => AccessControl::class, 'rules' => [ [ 'actions' => [ 'applications', 'area', 'city', 'delete-parent-data', 'delete-passport', 'have-no-previous-passport', 'ia-doc-types', 'ialist', 'index', 'mark-return-application', 'mark-reject-enrollment', 'parent-form', 'postalindex', 'questionary', 'region', 'remove-application', 'set-parent-data', 'set-passport', 'street', 'test', 'update-contact', 'update', 'village', ], 'allow' => true, 'roles' => [User::ROLE_ABITURIENT] ], [ 'actions' => [ 'addia', 'delete-photo', 'get-education-by-document-type', 'ia-file-required', 'passport-grid', 'passport-modals', 'upload-photo', ], 'allow' => true, 'roles' => [User::ROLE_ABITURIENT, User::ROLE_MANAGER] ], [ 'actions' => [ 'area', 'city', 'ia-doc-types', 'postalindex', 'region', 'street', 'village', ], 'allow' => true, 'roles' => [User::ROLE_MANAGER] ], [ 'actions' => ['return-application', 'reject-enrollment'], 'allow' => $sandboxEnabled->value == 1, 'roles' => [User::ROLE_MANAGER] ], [ 'actions' => ['return-application', 'reject-enrollment'], 'allow' => $sandboxEnabled->value == 0, 'roles' => [User::ROLE_ABITURIENT] ] ], 'denyCallback' => function () { $this->redirect('/'); } ], [ 'class' => EmailConfirmBehavior::class, 'user' => Yii::$app->user->identity ], 'verbs' => [ 'class' => VerbFilter::class, 'actions' => [ 'passport-grid' => ['GET'], 'passport-modals' => ['GET'], 'set-passport' => ['POST'] ], ], ]; } public function actions() { return ['error' => ['class' => ErrorAction::class]]; } public function actionIndex() { $timeZoneError = $this->initializationQuestionaryService->checkTimeZone(); $user = Yii::$app->user->identity; if ($user->canViewStep('my-applications') && !$timeZoneError) { return $this->redirect('/abiturient/applications', 302); } $user->syncApplicationsAndQuestionaryWith1C(); $campaignStartDates = []; $abiturientQuestionary = new AbiturientQuestionary(); $canCreateQuestionary = $abiturientQuestionary->canCreateQuestionary(); if (!$canCreateQuestionary) { $campaignStartDates = $abiturientQuestionary->getCampaignsStartDates(); } return $this->render( 'index', [ 'timeZoneError' => $timeZoneError, 'campaignStartDates' => $campaignStartDates, 'canCreateQuestionary' => $canCreateQuestionary, ] ); } public function actionUpdate() { $user = Yii::$app->user->identity; if ($user->abiturientQuestionary && !$user->abiturientQuestionary->getLinkedBachelorApplication()->exists()) { AbiturientQuestionary::UpdateDataFromOneS($user->abiturientQuestionary); } return $this->redirect('/abiturient/questionary', 302); } public function actionQuestionary(int $app_id = null) { $user = Yii::$app->user->identity; $this->questionaryService->checkAccessibilityToRelatedBachelorApplication($user, $app_id); $current_application = $this->questionaryService->getRelatedBachelorApplication($user, $app_id); [ 'questionary' => $questionary, 'needRefreshPage' => $needRefreshPage, ] = $this->questionaryService->getQuestionary($user); if ($needRefreshPage) { return $this->redirect('/abiturient/questionary', 302); } if (!$user->canMakeStep('questionary', $current_application)) { return $this->redirect('/abiturient/index', 302); } $request = Yii::$app->request; $regulations = $this->questionaryService->getRegulations($user, $questionary); $edit_block_reasons = []; $canEdit = !$questionary || $questionary->canEditQuestionary(); if ( $canEdit && $questionary && AbiturientQuestionary::isBlockedAfterApprove($questionary) ) { $edit_block_reasons = [ Yii::t( 'abiturient/questionary/all', 'Текст ошибки с предупреждением о блокировке анкеты на редактирование на странице анкеты поступающего: `Запрещено редактирование анкеты после проверки модератором`' ) ]; $canEdit = false; } $personal_data = $this->questionaryService->getQuestionnaireDependentModels($questionary, 'personalData', PersonalData::class); $address_data = $this->questionaryService->getQuestionnaireDependentModels($questionary, 'addressData', AddressData::class); $actualAddressData = $this->questionaryService->getQuestionnaireDependentModels($questionary, 'actualAddressData', ActualAddressData::class); $actualAddressData->validation_extender ? $actualAddressData->validation_extender->modelPreparationCallback() : null; $abitAvatar = $questionary->getComputedAbiturientAvatar(); $attachments = $this->questionaryService->getAttachments($questionary); if ($request->isPost) { $anyAttachmentChanged = $this->questionaryService->saveRegulationsOrAttachmentsWithChangesReturned($questionary, $regulations, $attachments, $canEdit); if ($canEdit) { [ 'validated' => $validated, 'isSaved' => $isSaved, 'anyDataChanged' => $anyDataChanged, ] = $this->questionaryService->processFromPost( $user, $questionary, $personal_data, $address_data, $actualAddressData ); $anyDataChanged = $anyDataChanged || $anyAttachmentChanged; if ($validated) { if ($anyDataChanged) { $user->resetApplicationStatuses(); } else { Yii::$app->session->setFlash('alert', [ 'body' => Yii::$app->configurationManager->getText('no_data_saved_text', ArrayHelper::getValue($user, 'applications.0.type')), 'options' => ['class' => 'alert-warning'] ]); } Yii::$app->session->setFlash('questionaryIsSaved', $isSaved); return $this->redirect('/abiturient/questionary', 302); } } } [ 'attachmentErrors' => $attachmentErrors, 'isAttachmentsAdded' => $isAttachmentsAdded, ] = $this->questionaryService->checkAttachmentFiles($questionary, $canEdit); $hasApplicationType = ApplicationType::find()->active()->exists(); $confirmEmail = Yii::$app->configurationManager->getCode('confirm-email'); $canChangeFio = QuestionarySettings::getSettingByName('can_change_fio_after_first_application'); $canChangePassport = QuestionarySettings::getSettingByName('can_change_passport_after_first_application'); return $this->render( 'questionary', [ 'questionary_comparison' => $this->questionaryService->getQuestionaryComparison($user, $questionary), 'questionary' => $questionary, 'personal_data' => $personal_data, 'current_application' => $current_application, 'address_data' => $address_data, 'actual_address_data' => $actualAddressData, 'passports' => new ActiveDataProvider([ 'query' => $questionary->getPassportData() ]), 'parents' => new ActiveDataProvider([ 'query' => $questionary->getParentData() ]), 'edit_block_reasons' => $edit_block_reasons, 'abitAvatar' => $abitAvatar, 'attachments' => $attachments, 'regulations' => $regulations, 'isAttachmentsAdded' => $isAttachmentsAdded, 'attachmentErrors' => $attachmentErrors, 'isPost' => Yii::$app->request->isPost, 'hasApplicationType' => $hasApplicationType, 'canEdit' => $canEdit, 'confirmEmail' => $confirmEmail === '1', 'canChangeFio' => ($canChangeFio && !$questionary->isNotCreatedDraft()) || $canEdit, 'canChangePassport' => ($canChangePassport && !$questionary->isNotCreatedDraft()) || $canEdit, ] ); } public function actionDeletePassport() { if (!Yii::$app->request->isAjax) { throw new UserException('Is not ajax'); } $user = Yii::$app->user->identity; $questionary = $user->abiturientQuestionary; $this->passportDataService->deletePassportData($user, $questionary); return $this->renderAjax( 'questionary_partial/_document_grid', $this->passportDataService->renderPassports($questionary) ); } public function actionSetPassport() { if (Yii::$app->request->isPost) { $user = Yii::$app->user->identity; $questionary = $user->abiturientQuestionary; $this->passportDataService->setPassportData($user, $questionary); } if (!Yii::$app->request->isAjax) { return $this->redirect(Yii::$app->request->referrer ?? ['/abiturient/questionary']); } else { return $this->asJson(['status' => true, 'messages' => []]); } } public function actionPassportGrid($questionary_id) { if (!Yii::$app->request->isAjax) { throw new UserException('Is not ajax'); } $questionary = AbiturientQuestionary::findOne($questionary_id); return $this->renderAjax( 'questionary_partial/_document_grid', $this->passportDataService->renderPassports($questionary) ); } public function actionPassportModals(int $questionary_id, ?int $app_id = null) { $user = Yii::$app->user->identity; $this->passportDataService->checkAccessibility($user, $questionary_id); if (!Yii::$app->request->isAjax) { throw new UserException('Is not ajax'); } $questionary = AbiturientQuestionary::findOne($questionary_id); $passports = new ActiveDataProvider([ 'query' => $questionary->getPassportData() ]); $action = $user->isModer() ? '/sandbox/set-passport' : '/abiturient/set-passport'; $related_application = null; if ($questionary->user) { $related_application = $this->questionaryService->getRelatedBachelorApplication($questionary->user, $app_id); } return $this->renderAjax('questionary_partial/_passportModals', [ 'isReadonly' => !$questionary->canEditQuestionary(), 'passports' => $passports, 'action' => $action, 'application' => $related_application, ]); } public function actionDeleteParentData() { if (!Yii::$app->request->isAjax) { throw new UserException('Is not ajax'); } $user = Yii::$app->user->identity; $id = ArrayHelper::getValue($this->request->post(), 'parentDataId'); $parentData = ParentData::findOne($id); if ($parentData != null) { $this->parentDataService->checkAccessibility($user, $parentData->questionary_id); $parentData->archive(); } $this->parentDataService->parentDataChangedEvent($user); return $this->renderParents($user->abiturientQuestionary); } public function actionSetParentData() { if (!Yii::$app->request->isAjax) { throw new UserException('Is not ajax'); } $user = Yii::$app->user->identity; $questionary = $user->abiturientQuestionary; $parentData = $this->parentDataService->getOrBuildParentData( $user, $questionary, 'ParentData.id' ); [ 'parentData' => $parentData, 'addressData' => $addressData, 'passportData' => $passportData, 'personalData' => $personalData, ] = $this->parentDataService->loadParentData( $parentData ); $transaction = $parentData->getDb()->beginTransaction(); try { $success = $this->parentDataService->setParentData( $user, $parentData, $passportData, $personalData, $addressData ); if (!$success) { $transaction->rollBack(); Yii::$app->response->statusCode = 400; return Html::errorSummary([$personalData, $addressData, $passportData, $parentData], [ 'header' => '
', 'footer' => '
' ]); } else { $transaction->commit(); } } catch (Throwable $e) { $transaction->rollBack(); throw $e; } return $this->renderParents($questionary); } public function actionApplications() { $user = Yii::$app->user->identity; if (!$user->canMakeStep('my-applications')) { return $this->redirect('/abiturient/index', 302); } return $this->render( 'applications', ['applications' => $this->applicationsService->getApplications($user)] ); } public function actionRemoveApplication() { if (!Yii::$app->request->isPost) { return $this->redirect('/abiturient/applications', 302); } $appId = (int) Yii::$app->request->post('appid'); $user = Yii::$app->user->identity; $this->applicationsService->checkAccessibility($user, $appId); $application = $this->applicationsService->getApplication($appId); if (!$application) { return $this->redirect('/abiturient/applications'); } $this->applicationsService->archiveApplications($user, $application); return $this->redirect('/abiturient/applications', 302); } public function actionRegion() { $regions = $this->addressDataService->getAllRegions(); $results = $this->addressDataService->formattingDataForSelector($regions, "{{name}} {{short}}"); return $this->asJson(['results' => $results, 'selected' => '', 'pagination' => ['more' => !empty($regions)]]); } public function actionArea() { ['parents' => $parents] = $this->addressDataService->getDepDropParamsFromPost(); if ( EmptyCheck::isEmpty($parents) || EmptyCheck::isLoadingStringOrEmpty($parents[0]) ) { return $this->asJson(['results' => '', 'selected' => '']); } $areas = $this->addressDataService->getAllAreas($parents[0]); $results = $this->addressDataService->formattingDataForSelector($areas); return $this->asJson(['results' => $results, 'selected' => '', 'pagination' => ['more' => !empty($areas)]]); } public function actionCity() { [ 'params' => $params, 'parents' => $parents, ] = $this->addressDataService->getDepDropParamsFromPost(); if ( EmptyCheck::isEmpty($params) || EmptyCheck::isLoadingStringOrEmpty($params[0]) ) { return $this->asJson(['results' => '', 'selected' => '']); } $cities = $this->addressDataService->getAllCities($params[0], $parents[0]); $results = $this->addressDataService->formattingDataForSelector($cities); return $this->asJson(['results' => $results, 'selected' => '', 'pagination' => ['more' => !empty($cities)]]); } public function actionVillage() { [ 'params' => $params, 'parents' => $parents, ] = $this->addressDataService->getDepDropParamsFromPost(); if ( EmptyCheck::isEmpty($params) || EmptyCheck::isLoadingStringOrEmpty($params[0]) ) { return $this->asJson(['results' => '', 'selected' => '']); } $villages = $this->addressDataService->getAllVillages($params[0], $parents[0], $parents[1]); $template = '{{name}}'; if (EmptyCheck::isLoadingStringOrEmpty($parents[0])) { $template = '{{name}} ({{areaName}} {{areaShort}})'; } $results = $this->addressDataService->formattingDataForSelector($villages, $template); return $this->asJson(['results' => $results, 'selected' => '', 'pagination' => ['more' => !empty($villages)]]); } public function actionStreet() { [ 'params' => $params, 'parents' => $parents, ] = $this->addressDataService->getDepDropParamsFromPost(); if ( EmptyCheck::isEmpty($params) || EmptyCheck::isLoadingStringOrEmpty($params[0]) ) { return $this->asJson(['results' => '', 'selected' => '']); } $streets = $this->addressDataService->getAllStreets($params[0], $params[1], $parents[0], $parents[1]); $results = $this->addressDataService->formattingDataForSelector($streets, "{{name}} {{short}}"); return $this->asJson(['results' => $results, 'selected' => '', 'pagination' => ['more' => !empty($streets)]]); } public function actionPostalindex() { $sid = ArrayHelper::getValue(Yii::$app->request->post(), 'sid', ''); if (!$sid) { return ''; } $fiasExists = Fias::find() ->andWhere(['code' => $sid]) ->exists(); if (!$fiasExists) { return ''; } $house = ArrayHelper::getValue(Yii::$app->request->post(), 'house', ''); $housing = ArrayHelper::getValue(Yii::$app->request->post(), 'housing', ''); return FiasDoma::streetIndex($sid, $house, $housing); } public function actionIalist(int $id) { $user = Yii::$app->user->identity; $this->individualAchievementService->checkAccessibility($user, $id); $application = $this->individualAchievementService->getApplication($id); $application->archiveAdmissionCampaignHandler->handle(); if (!$this->individualAchievementService->checkIfAbiturientQuestionaryFilled($application)) { Yii::$app->session->setFlash('needToSaveQuestionary', 'true'); return $this->redirect('/abiturient/questionary', 302); } if (!$user->canMakeStep('ia-list', $application)) { return $this->redirect('/abiturient/index', 302); } $ind_achs = new ActiveDataProvider([ 'query' => $application->getIndividualAchievements() ]); $hasError = false; $error = Yii::$app->session->get('ia_error'); if ($error == '1') { $hasError = true; Yii::$app->session->set('ia_error', '0'); } return $this->render( 'ialist', [ 'application_comparison' => $this->individualAchievementService->getApplicationComparison($user, $application), 'ind_achs' => $ind_achs, 'application' => $application, 'canEdit' => ($application->canEdit() && $application->canEditSpecialities()), 'hasError' => $hasError, 'user' => $user ] ); } public function actionIaFileRequired() { $document_type_id = Yii::$app->request->post('document_type_id'); if (!is_null($document_type_id)) { $type = IndividualAchievementDocumentType::findOne($document_type_id); if (!empty($type)) { return $this->asJson((bool)$type->scan_required); } } return $this->asJson(false); } public function actionIaDocTypes() { Yii::$app->response->format = Response::FORMAT_JSON; return $this->individualAchievementService->getIndividualAchievementDocumentTypesDataForSelect(); } public function actionGetEducationByDocumentType(int $app_id, int $ia_document_type_id) { Yii::$app->response->format = Response::FORMAT_JSON; $user = Yii::$app->user->identity; $this->individualAchievementService->checkAccessibility($user, $app_id); $ia_document_type = IndividualAchievementDocumentType::findOne($ia_document_type_id); if (is_null($ia_document_type)) { throw new NotFoundHttpException('Тип документа не найден'); } $document_type = $ia_document_type->documentTypeRef; $application = $this->individualAchievementService->getApplication($app_id); $education = $application->getEducations() ->joinWith(['documentType document_type']) ->andWhere(['document_type.ref_key' => $document_type->ref_key]) ->one(); return [ 'matched' => $education ? [ 'id' => $education->id, 'series' => $education->series, 'number' => $education->number, 'document_type_id' => $education->document_type_id, 'issued_by' => $education->getSchoolName(), 'issued_at' => $education->date_given, 'contractor_id' => $education->contractor_id, 'files' => $education->getAttachments() ->joinWith(['linkedFile linked_file']) ->select(['linked_file.upload_name']) ->column() ] : null ]; } public function actionAddia(int $app_id, $id = null) { $user = Yii::$app->user->identity; $this->individualAchievementService->checkAccessibility($user, $app_id); $application = $this->individualAchievementService->getApplication($app_id); if (!Yii::$app->request->isPost) { return $this->redirect(Yii::$app->request->referrer); } $ia = $this->individualAchievementService->getOrCrateIndividualAchievement( $user, $application, $id ); if ($this->individualAchievementService->fillFromEducationData($application, $ia)) { return $this->redirect(Yii::$app->request->referrer); } $transaction = Yii::$app->db->beginTransaction(); if ($transaction === null) { throw new UserException('Невозможно создать транзакцию.'); } try { $hasChangedAttributes = $this->individualAchievementService->savingProcess($application, $ia); $transaction->commit(); } catch (Throwable $e) { $transaction->rollBack(); throw $e; } $alertBody = Yii::$app->configurationManager->getText('no_data_saved_text'); $alertClass = 'alert-warning'; if ($hasChangedAttributes) { $alertBody = Yii::t( 'abiturient/bachelor/individual-achievement/all', 'Текст сообщения успешного сохранения формы на стр. индивидуальных достижений: `Форма сохранена успешно.`' ); $alertClass = 'alert-success'; } Yii::$app->session->setFlash('alert', [ 'body' => $alertBody, 'options' => ['class' => $alertClass] ]); return $this->redirect(Yii::$app->request->referrer); } public function actionUpdateContact() { $user = Yii::$app->user->identity; if (Yii::$app->request->isPost && $user->userRef) { $this->questionaryService->updateContactFromPost($user); } return $this->redirect(Url::toRoute(['/abiturient/questionary']), 302); } public function actionReturnApplication(int $id) { $user = Yii::$app->user->identity; $this->applicationsService->checkAccessibility($user, $id); $application = $this->applicationsService->getApplication($id); $sandboxEnabled = Yii::$app->configurationManager->getSandboxEnabled(); if ( !$application || ($sandboxEnabled && !$user->isModer()) || (!$sandboxEnabled && $application->user_id != $user->id) ) { return $this->redirect(Yii::$app->request->referrer ?? Yii::$app->homeUrl); } $errorMessage = $this->applicationsService->returnApplication( $application, $sandboxEnabled ); if (!$errorMessage) { Yii::$app->commandBus->handle(new AddToTimelineCommand([ 'category' => 'abiturient', 'event' => 'application_return', 'data' => [ 'public_identity' => $user->getPublicIdentity(), 'user_id' => $user->getId(), 'campaign' => $application->type->campaignName, ] ])); } $url = '/abiturient/applications'; if ($sandboxEnabled && $user->isModer()) { $url = Url::toRoute(['/sandbox/index']); if ($errorMessage) { $url = Url::toRoute(['/sandbox/moderate', 'id' => $application->id]); $returnApplicationStepsInfo = [ 'status' => ApplicationApplyingStep::STEP_STATUS_FAILED, 'errors' => [$errorMessage], 'name' => Yii::t( 'abiturient/applications/all', 'Тело ошибки отзыва заявление; на странице заявлений поступающего: `Возникли ошибки.`' ), 'shortName' => 'return-application-steps', 'statusMessage' => Yii::t( 'abiturient/applications/all', 'Тело ошибки отзыва заявление; на странице заявлений поступающего: `Во время отзыва заявления.`' ), ]; Yii::$app->session->setFlash('returnApplicationStepsInfo', $returnApplicationStepsInfo); } } return $this->redirect($url); } public function actionMarkReturnApplication(int $id) { $user = Yii::$app->user->identity; $this->applicationsService->checkAccessibility($user, $id); $application = $this->applicationsService->getApplication($id); if ($application->isArchive()) { Yii::$app->session->setFlash('alert', [ 'body' => Yii::t('abiturient/errors', 'Сообщение поступающему при работе с архивным заявлением: `Вы работаете с неактуальной версией заявления`'), 'options' => ['class' => 'alert-danger'] ]); return $this->redirect(['/abiturient/applications']); } $transaction = Yii::$app->db->beginTransaction(); try { $this->applicationsService->markReturnApplication($user, $application); $transaction->commit(); } catch (Throwable $e) { $transaction->rollBack(); throw $e; } return $this->redirect('/abiturient/applications'); } public function actionMarkRejectEnrollment(int $bachelor_spec_id) { $bachelor_spec = $this->applicationsService->getBachelorSpeciality($bachelor_spec_id); $application = $bachelor_spec->application; $user = Yii::$app->user->identity; $this->applicationsService->checkAccessibility($user, $application->id); if ($application->isArchive()) { Yii::$app->session->setFlash('alert', [ 'body' => Yii::t('abiturient/errors', 'Сообщение поступающему при работе с архивным заявлением: `Вы работаете с неактуальной версией заявления`'), 'options' => ['class' => 'alert-danger'] ]); return $this->redirect(['/abiturient/applications']); } $transaction = Yii::$app->db->beginTransaction(); try { $application_to_send = $this->applicationsService->markRejectEnrollment($user, $bachelor_spec); $this->application1CProcessorService->sendApplicationTo1C($user, $application_to_send); $transaction->commit(); } catch (Throwable $e) { $transaction->rollBack(); throw $e; } return $this->redirect('/abiturient/applications'); } public function actionRejectEnrollment(int $bachelor_spec_id) { $bachelor_spec = $this->applicationsService->getBachelorSpeciality($bachelor_spec_id); $application = $bachelor_spec->application; $user = Yii::$app->user->identity; $this->applicationsService->checkAccessibility($user, $application->id); $sandboxEnabled = Yii::$app->configurationManager->getSandboxEnabled(); if ( !$application || ($sandboxEnabled && !$user->isModer()) || (!$sandboxEnabled && $application->user_id != $user->id) ) { return $this->redirect(Yii::$app->request->referrer ?? Yii::$app->homeUrl); } $errorMessage = $this->applicationsService->rejectEnrollment( $user, $bachelor_spec, $sandboxEnabled ); if (!$errorMessage) { Yii::$app->commandBus->handle(new AddToTimelineCommand([ 'category' => 'abiturient', 'event' => 'enrollment_rejection', 'data' => [ 'public_identity' => $user->getPublicIdentity(), 'user_id' => $user->getId(), 'campaign' => $application->type->campaignName, ] ])); } $url = '/abiturient/applications'; if ($sandboxEnabled && $user->isModer()) { $url = Url::toRoute(['/sandbox/index']); if ($errorMessage) { $url = Url::toRoute(['/sandbox/moderate', 'id' => $application->id]); $returnApplicationStepsInfo = [ 'status' => ApplicationApplyingStep::STEP_STATUS_FAILED, 'errors' => [$errorMessage], 'name' => Yii::t( 'abiturient/applications/all', 'Тело ошибки отзыва заявление; на странице заявлений поступающего: `Возникли ошибки.`' ), 'shortName' => 'return-application-steps', 'statusMessage' => Yii::t( 'abiturient/applications/all', 'Тело ошибки отзыва заявление; на странице заявлений поступающего: `Во время отказа от зачисления.`' ), ]; Yii::$app->session->setFlash('returnApplicationStepsInfo', $returnApplicationStepsInfo); } } return $this->redirect($url); } private function renderParents(AbiturientQuestionary $questionary) { return $this->renderAjax("questionary_partial/parentData/_parent_grid", [ 'parents' => new ActiveDataProvider([ 'query' => $questionary->getParentData() ]), 'canEdit' => $questionary->canEditQuestionary(), ]); } public function actionParentForm(?int $current_application_id = null) { $user = Yii::$app->user->identity; $this->questionaryService->checkAccessibilityToRelatedBachelorApplication($user, $current_application_id); $current_application = $this->questionaryService->getRelatedBachelorApplication($user, $current_application_id); [ 'questionary' => $questionary, 'needRefreshPage' => $_, ] = $this->questionaryService->getQuestionary($user); $model = $this->parentDataService->getOrBuildParentData( $user, $questionary, 'parentDataId' ); $canEdit = $questionary->canEditQuestionary(); $action = Url::to(array_merge( ['/abiturient/set-parent-data'], $model->id ? ['id' => $model->id] : [] )); return $this->renderAjax( 'questionary_partial/parentData/_parentForm', [ 'model' => $model, 'familyTypes' => $this->parentDataService->getFamilyTypes(), 'passportTypes' => $this->parentDataService->getAllIdentityDocuments(), 'document_type' => $this->parentDataService->getDocumentTypeID(), 'keynum' => $model->id, 'action' => $action, 'canEdit' => $canEdit, 'isReadonly' => !$canEdit, 'application' => $current_application, ] ); } public function actionUploadPhoto(int $questionary_id) { Yii::$app->response->format = Response::FORMAT_JSON; $user = Yii::$app->user->identity; $this->avatarService->checkAccessibility($user, $questionary_id); $questionary = $this->avatarService->getQuestionaryById($user, $questionary_id); $error = ''; $status = false; $fileLink = ''; $transaction = Yii::$app->db->beginTransaction(); try { [ 'error' => $error, 'status' => $status, 'fileLink' => $fileLink, ] = $this->avatarService->uploadAvatar($questionary); $transaction->commit(); } catch (Throwable $e) { $transaction->rollBack(); $status = false; $error = 'Возникла критическая ошибка обработки фотографии.'; Yii::error( "Возникла критическая ошибка обработки фотографии. По причине: {$e->getMessage()}", 'AbiturientController.actionUploadPhoto' ); } return [ 'error' => $error, 'status' => $status, 'filelink' => $fileLink, ]; } public function actionDeletePhoto(int $questionary_id) { Yii::$app->response->format = Response::FORMAT_JSON; $user = Yii::$app->user->identity; $this->avatarService->checkAccessibility($user, $questionary_id); $questionary = $this->avatarService->getQuestionaryById($user, $questionary_id); try { return ['status' => $this->avatarService->deleteAvatar($questionary)]; } catch (Throwable $e) { return ['status' => false, 'error' => $e->getMessage()]; } } public function actionHaveNoPreviousPassport(int $id) { $user = Yii::$app->user->identity; $questionary = $this->passportDataService->getQuestionaryById($user, $id); $questionary->have_no_previous_passport = true; if (!$questionary->save()) { throw new RecordNotValid($questionary); } Yii::$app->session->setFlash('alert', [ 'body' => Yii::t( 'abiturient/questionary/all', 'Текст при успешном сохранении пометки об отсутствии предыдущего паспорта: `Информация успешно сохранена, можете вернуться к подаче заявления.`' ), 'options' => ['class' => 'alert-success'] ]); return $this->redirect(['/abiturient/questionary']); } }