archiveAdmissionCampaignHandler->handle(); return $application; } public function getBachelorSpeciality(int $bachelor_spec_id): BachelorSpeciality { $bachelor_spec = BachelorSpeciality::findOne($bachelor_spec_id); if (!$bachelor_spec) { throw new RecordNotFound('Направление не найдено'); } return $bachelor_spec; } public function getApplicationComparison(User $currentUser, BachelorApplication $application): ?ComparisonResult { $applicationComparison = null; $actualApplication = $this->getActualApplication($currentUser, $application); if ( $actualApplication && $actualApplication->id != $application->id && $application->draft_status != IDraftable::DRAFT_STATUS_APPROVED ) { $applicationComparison = EntitiesComparator::compare($actualApplication, $application); }; return $applicationComparison; } public function checkIfAbiturientQuestionaryFilled(BachelorApplication $application): bool { return !($application->abiturientQuestionary == null || $application->abiturientQuestionary->isNotFilled()); } public function checkAttachmentFiles( BachelorApplication $application, bool $canEdit, ?string $attachmentTypeRelatedEntity = null ): array { $attachmentErrors = []; $isAttachmentsAdded = false; $required_attachments_check = Attachment::getNotFilledRequiredAttachmentTypeIds( $application->getEduAttachments()->with(['attachmentType'])->all(), AttachmentType::GetRequiredCommonAttachmentTypeIds($attachmentTypeRelatedEntity, ArrayHelper::getValue($application, 'type.campaign.referenceType.reference_uid')) ); if ($required_attachments_check && $canEdit) { $types = AttachmentType::find()->where(['in', 'id', $required_attachments_check])->select(['id', 'name'])->asArray()->all(); $attachmentErrors = ArrayHelper::map($types, 'id', 'name'); } else { $isAttachmentsAdded = true; } return [ 'isAttachmentsAdded' => $isAttachmentsAdded, 'attachmentErrors' => $attachmentErrors, ]; } public function processErrorMessageProcessingSavingAttachment( Throwable $th, ?string $path = null ): void { Yii::$app->session->setFlash('alert', [ 'body' => Yii::t('abiturient/errors', 'Сообщение поступающему о ошибке сохранения формы скан-копий: `Возникла ошибка сохранения формы. Обратитесь к администратору.`'), 'options' => ['class' => 'alert-danger'] ]); Yii::error("Ошибка обработки формы сохранения скан-копий: {$th->getMessage()} в:" . PHP_EOL . $th->getTraceAsString(), $path); } private function getActualApplication(User $currentUser, BachelorApplication $application): ?BachelorApplication { $actualApplication = null; if ($application->draft_status != IDraftable::DRAFT_STATUS_APPROVED) { $actualApplication = DraftsManager::getActualApplication($currentUser, $application->type); } return $actualApplication; } protected function getRegulationsAndAttachments( BachelorApplication $application, string $relatedEntityTypeAttachments, string $relatedEntityTypeRegulations ): array { return [ 'attachments' => $this->getAttachmentList($application, $relatedEntityTypeAttachments), 'regulations' => $this->getRegulationList($application, $relatedEntityTypeRegulations), ]; } protected function postProcessingRegulationsAndAttachments( BachelorApplication $application, array $attachments, array $regulations ): array { if ($this->updateAttachments($application, $attachments, $regulations)) { return [ 'hasChanges' => true, 'attachments' => $attachments, 'regulations' => $regulations, ]; } foreach ($regulations as $regulation) { if ( $regulation->isNewRecord && (!(int)$regulation->is_confirmed && (int)$regulation->regulation->confirm_required) ) { $regulation->addError('is_confirmed', Yii::t( 'abiturient/attachment-widget', 'Подсказка с ошибкой для поля "is_confirmed" на форме виджета сканов: `Необходимо подтвердить прочтение нормативного документа`' )); } } return [ 'hasChanges' => false, 'attachments' => $attachments, 'regulations' => $regulations, ]; } protected function getAttachmentList(BachelorApplication $application, $relatedEntity = null) { if ($relatedEntity === null) { $relatedEntity = PageRelationManager::GetFullRelatedListForApplication(); } return FileRepository::GetAttachmentCollectionsFromTypes($application, $relatedEntity); } private function getRegulationList(BachelorApplication $application, $relatedEntity) { $regulations = []; $existing_regulation = $application->getRegulations($relatedEntity)->all(); $regulation_to_add = RegulationRepository::GetNotExistingRegulationsForEntity($relatedEntity, ArrayHelper::getColumn($existing_regulation, 'regulation_id')); foreach ($regulation_to_add as $regulation) { $userRegulation = new UserRegulation(); $userRegulation->regulation_id = $regulation->id; $userRegulation->application_id = $application->id; $userRegulation->owner_id = $application->user->id; $regulations[] = $userRegulation; } $regulations = array_merge($regulations, $existing_regulation); foreach ($regulations as $regulation) { if ($regulation->regulation->attachment_type && $regulation->getAttachments()->exists()) { $regulationAttachment = new Attachment(); $regulationAttachment->owner_id = $application->user_id; $regulationAttachment->attachment_type_id = $regulation->regulation->attachment_type; $regulation->setRawAttachment($regulationAttachment); } } ArrayHelper::multisort($regulations, 'regulation_id', SORT_ASC, SORT_NUMERIC); return $regulations; } private function updateAttachments( BachelorApplication $application, array $attachments, array $userRegulations, bool $updateHistory = false, ?int $appHistoryType = null ): bool { $has_changes = false; if (RegulationManager::handleRegulations($userRegulations, $this->request)) { $application->resetStatus(); $has_changes = true; } $all_new_attachments = AttachmentManager::handleAttachmentUpload($attachments, $userRegulations); if ($all_new_attachments) { $application->resetStatus(); $has_changes = true; } if ($updateHistory) { $relatedEntities = []; $entitiesToHistory = []; if ($all_new_attachments && !$appHistoryType) { $attachmentTypes = AttachmentType::find() ->select(['id', 'related_entity']) ->andWhere([ 'id' => ArrayHelper::getColumn($all_new_attachments, 'attachment_type_id'), 'hidden' => false ]) ->asArray() ->all(); $relatedEntities = ArrayHelper::map($attachmentTypes, 'id', 'related_entity'); $entitiesToHistory = [ AttachmentType::RELATED_ENTITY_APPLICATION => ApplicationHistory::TYPE_SPECIALITY_CHANGED, AttachmentType::RELATED_ENTITY_EDUCATION => ApplicationHistory::TYPE_EDUCATION_CHANGED, AttachmentType::RELATED_ENTITY_EGE => ApplicationHistory::TYPE_EXAM_CHANGED, ]; } foreach ($all_new_attachments as $attachment) { if (!empty($entitiesToHistory)) { $appHistoryType = $entitiesToHistory[$relatedEntities[$attachment->attachment_type_id]] ?? null; } if (!is_null($appHistoryType)) { $application->addApplicationHistory($appHistoryType); } } } return $has_changes; } protected function getNextStep(BachelorApplication $application, string $currentStep): string { $next_step_service = new NextStepService($application); if ($next_step_service->getUseNextStepForwarding()) { $next_step = $next_step_service->getNextStep($currentStep); if ($next_step) { return Url::to($next_step_service->getUrlByStep($next_step)); } } return ''; } }