portal.mkgtu.ru/common/services/abiturientController/bachelor/accounting_benefits/TargetReceptionsService.php

278 lines
6.8 KiB
PHP
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace common\services\abiturientController\bachelor\accounting_benefits;
use common\components\configurationManager;
use common\components\ReferenceTypeManager\ContractorManager;
use common\components\RegulationRelationManager;
use common\models\AttachmentType;
use common\models\dictionary\DocumentType;
use common\models\User;
use common\modules\abiturient\models\bachelor\BachelorApplication;
use common\modules\abiturient\models\bachelor\BachelorPreferences;
use common\modules\abiturient\models\bachelor\BachelorTargetReception;
use yii\base\UserException;
use yii\caching\CacheInterface;
use yii\data\ArrayDataProvider;
use yii\helpers\ArrayHelper;
use yii\web\Request;
class TargetReceptionsService extends AccountingBenefitsService
{
public function __construct(
Request $request,
CacheInterface $cache,
configurationManager $configurationManager
) {
parent::__construct($request, $cache, $configurationManager);
}
public function getTargets(int $appId)
{
$docTypeUid = $this->configurationManager->getCode('target_reception_document_type_guid');
$items = $this->getDocumentItems($docTypeUid);
$application = $this->getApplication($appId);
$model = $this->initTargetReception($application);
$targets = $application
->getTargetReceptions()
->all();
$dataProvider = new ArrayDataProvider([
'allModels' => $targets,
'pagination' => ['pageSize' => 10]
]);
$canEdit = $this->canEditTarget($application);
return [
'id' => $appId,
'model' => $model,
'items' => $items,
'canEdit' => $canEdit,
'providers' => $targets,
'dataProvider' => $dataProvider,
'action' => '/site/target-reception'
];
}
public function editTarget(User $currentUser): array
{
$formName = (new BachelorTargetReception)->formName();
[
'id' => $id,
'appId' => $appId,
'application' => $application,
] = $this->editAccountingBenefits($formName);
$accountingBenefits = $this->getAccountingBenefitsQueryForEditFunction(
$id,
$appId,
BachelorTargetReception::class
)
->notInEnlistedApp()
->one();
if (isset($accountingBenefits)) {
return $this->updateTargetReceptionFromPost(
$currentUser,
$application,
$accountingBenefits
);
}
return [null, false, false];
}
public function saveNewTargets(User $currentUser, ?int $id): array
{
$formName = (new BachelorTargetReception)->formName();
$application = $this->saveNewAccountingBenefits($id, $formName);
$newAccountingBenefits = $this->initTargetReception($application);
return $this->updateTargetReceptionFromPost(
$currentUser,
$application,
$newAccountingBenefits
);
}
public function downloadTargets(User $currentUser, ?int $id): array
{
return $this->generateFilesToDownloadAccountingBenefits(
$currentUser,
$id,
BachelorTargetReception::class,
function ($_, $collection) {
return "Целевой договор {$collection->getAttachmentTypeName()}.zip";
},
'Не удалось найти целевой договор.'
);
}
public function canDownloadTargetReception(?int $id = null): bool
{
return $this->canGenerateFilesToDownloadAccountingBenefits($id, BachelorTargetReception::class);
}
public function updateTargetReceptionFromPost(
User $currentUser,
BachelorApplication $application,
BachelorTargetReception $target
): array {
return $this->updateAccountingBenefitsFromPost(
$currentUser,
$application,
$target,
function ($target) {
return $target;
},
'Ошибка при редактировании целевого приёма:'
);
}
public function getRegulationsAndAttachmentsForTarget(BachelorApplication $application): array
{
return $this->getRegulationsAndAttachments(
$application,
AttachmentType::RELATED_ENTITY_TARGET_RECEPTION,
RegulationRelationManager::RELATED_ENTITY_TARGET_RECEPTION
);
}
public function archiveTargerReceprion(?int $id, User $currentUser, bool $updateApplicationHistory = true): void
{
$this->archiveAccountingBenefit(
$id,
$currentUser,
BachelorTargetReception::class,
'Невозможно удалить файл целевого договора.',
'Невозможно удалить целевой договор.',
$updateApplicationHistory
);
}
protected function initTargetReception(BachelorApplication $application): BachelorTargetReception
{
$model = new BachelorTargetReception();
$docTypeUid = $this->configurationManager->getCode('target_reception_document_type_guid');
if ($docTypeUid) {
$targetReceptionDocType = DocumentType::findByUID($docTypeUid);
$model->document_type = ArrayHelper::getValue($targetReceptionDocType, 'code');
$model->document_type_id = ArrayHelper::getValue($targetReceptionDocType, 'id');
}
$model->id_application = $application->id;
return $model;
}
private function canEditTarget(BachelorApplication $application): bool
{
$targets_count = $application
->getTargetReceptions()
->count();
return $targets_count < BachelorTargetReception::NUMBER_OF_TARGET_RECEPTION &&
$application->canEdit() &&
$application->canEditSpecialities();
}
protected function updateContractorFromPost($accountingBenefitsFrom): void
{
if ($accountingBenefitsFrom->not_found_document_contractor) {
$accountingBenefitsFrom->document_contractor_id = ContractorManager::Upsert(
$this->request->post('DocumentContractor'),
$accountingBenefitsFrom->documentType
)->id;
}
if ($accountingBenefitsFrom->not_found_target_contractor) {
$accountingBenefitsFrom->target_contractor_id = ContractorManager::Upsert(
$this->request->post('TargetContractor'),
$accountingBenefitsFrom->documentType
)->id;
}
}
}