769 lines
24 KiB
PHP
Executable File
769 lines
24 KiB
PHP
Executable File
<?php
|
||
|
||
namespace common\modules\abiturient\models;
|
||
|
||
use common\components\AfterValidateHandler\LoggingAfterValidateHandler;
|
||
use common\components\AttachmentManager;
|
||
use common\components\ReferenceTypeManager\ContractorManager;
|
||
use common\components\ReferenceTypeManager\exceptions\ReferenceManagerCannotSerializeDataException;
|
||
use common\components\ReferenceTypeManager\exceptions\ReferenceManagerValidationException;
|
||
use common\components\ReferenceTypeManager\exceptions\ReferenceManagerWrongReferenceTypeClassException;
|
||
use common\components\ReferenceTypeManager\ReferenceTypeManager;
|
||
use common\components\validation_rules_providers\RulesProviderByDocumentType;
|
||
use common\models\Attachment;
|
||
use common\models\attachment\attachmentCollection\AttachedEntityAttachmentCollection;
|
||
use common\models\AttachmentType;
|
||
use common\models\dictionary\Contractor;
|
||
use common\models\dictionary\DocumentType;
|
||
use common\models\dictionary\IndividualAchievementType;
|
||
use common\models\dictionary\StoredReferenceType\StoredAchievementCategoryReferenceType;
|
||
use common\models\dictionary\StoredReferenceType\StoredDocumentCheckStatusReferenceType;
|
||
use common\models\errors\RecordNotValid;
|
||
use common\models\IndividualAchievementDocumentType;
|
||
use common\models\interfaces\ArchiveModelInterface;
|
||
use common\models\interfaces\AttachmentLinkableEntity;
|
||
use common\models\interfaces\dynamic_validation_rules\IHavePropsRelatedToDocumentType;
|
||
use common\models\interfaces\FileToShowInterface;
|
||
use common\models\interfaces\IHaveDocumentCheckStatus;
|
||
use common\models\relation_presenters\AttachmentsRelationPresenter;
|
||
use common\models\relation_presenters\comparison\interfaces\ICanGivePropsToCompare;
|
||
use common\models\relation_presenters\comparison\interfaces\IHaveIdentityProp;
|
||
use common\models\traits\ArchiveTrait;
|
||
use common\models\traits\DocumentCheckStatusTrait;
|
||
use common\models\traits\FileAttachTrait;
|
||
use common\models\traits\HasDirtyAttributesTrait;
|
||
use common\models\traits\HtmlPropsEncoder;
|
||
use common\models\User;
|
||
use common\modules\abiturient\models\bachelor\BachelorApplication;
|
||
use common\modules\abiturient\models\bachelor\changeHistory\ChangeHistoryClasses;
|
||
use common\modules\abiturient\models\bachelor\changeHistory\ChangeHistoryDecoratedModel;
|
||
use common\modules\abiturient\models\bachelor\EducationData;
|
||
use common\modules\abiturient\models\drafts\DraftsManager;
|
||
use common\modules\abiturient\models\drafts\IHasRelations;
|
||
use common\modules\abiturient\models\interfaces\ApplicationConnectedInterface;
|
||
use common\modules\abiturient\models\interfaces\ICanAttachFile;
|
||
use common\modules\abiturient\models\interfaces\ICanBeStringified;
|
||
use common\modules\abiturient\models\repositories\IndividualAchievementDocumentTypesRepository;
|
||
use stdClass;
|
||
use Yii;
|
||
use yii\base\UserException;
|
||
use yii\behaviors\TimestampBehavior;
|
||
use yii\db\ActiveQuery;
|
||
use yii\db\TableSchema;
|
||
use yii\helpers\ArrayHelper;
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
class IndividualAchievement extends ChangeHistoryDecoratedModel
|
||
implements
|
||
AttachmentLinkableEntity,
|
||
ArchiveModelInterface,
|
||
ApplicationConnectedInterface,
|
||
IHasRelations,
|
||
IHaveIdentityProp,
|
||
ICanGivePropsToCompare,
|
||
ICanAttachFile,
|
||
IHavePropsRelatedToDocumentType,
|
||
IHaveDocumentCheckStatus,
|
||
ICanBeStringified
|
||
{
|
||
use ArchiveTrait;
|
||
use DocumentCheckStatusTrait;
|
||
use FileAttachTrait;
|
||
use HasDirtyAttributesTrait;
|
||
use HtmlPropsEncoder;
|
||
|
||
protected bool $_new_record = true;
|
||
|
||
protected ?RulesProviderByDocumentType $_document_type_validation_extender = null;
|
||
|
||
public $isFrom1C = false;
|
||
|
||
public $not_found_contractor;
|
||
|
||
const STATUS_STAGED = 1;
|
||
const STATUS_UNSTAGED = 2;
|
||
const STATUS_TO_DELETE = 0;
|
||
const STATUS_ARCHIVED = 3;
|
||
public const SCENARIO_RECOVER = 'recover';
|
||
|
||
public function __construct($config = [])
|
||
{
|
||
parent::__construct($config);
|
||
$this->_document_type_validation_extender = new RulesProviderByDocumentType($this);
|
||
}
|
||
|
||
public static function tableName()
|
||
{
|
||
return '{{%individual_achievement}}';
|
||
}
|
||
|
||
public function behaviors()
|
||
{
|
||
return [TimestampBehavior::class];
|
||
}
|
||
|
||
|
||
|
||
|
||
public function rules()
|
||
{
|
||
$own_rules = [
|
||
[
|
||
[
|
||
'document_series',
|
||
'document_number',
|
||
'additional'
|
||
],
|
||
'trim'
|
||
],
|
||
[
|
||
[
|
||
'user_id',
|
||
'dictionary_individual_achievement_id',
|
||
'document_type_id',
|
||
'status',
|
||
'contractor_id'
|
||
],
|
||
'integer'
|
||
],
|
||
[
|
||
[
|
||
'user_id',
|
||
'dictionary_individual_achievement_id',
|
||
'document_type_id',
|
||
],
|
||
'required'
|
||
],
|
||
[
|
||
[
|
||
'document_series',
|
||
'document_number'
|
||
],
|
||
'string',
|
||
'max' => 100
|
||
],
|
||
[
|
||
['status'],
|
||
'in',
|
||
'range' => [
|
||
IndividualAchievement::STATUS_STAGED,
|
||
IndividualAchievement::STATUS_UNSTAGED,
|
||
IndividualAchievement::STATUS_TO_DELETE,
|
||
IndividualAchievement::STATUS_ARCHIVED
|
||
]
|
||
],
|
||
[
|
||
'status',
|
||
'default',
|
||
'value' => IndividualAchievement::STATUS_UNSTAGED
|
||
],
|
||
[
|
||
[
|
||
'document_date',
|
||
'additional'
|
||
],
|
||
'string',
|
||
'max' => 1000
|
||
],
|
||
[
|
||
'file',
|
||
'safe',
|
||
'on' => [IndividualAchievement::SCENARIO_RECOVER]
|
||
],
|
||
[
|
||
['document_date'],
|
||
'date',
|
||
'format' => 'php:d.m.Y',
|
||
'max' => date('d.m.Y')
|
||
],
|
||
[
|
||
['document_check_status_ref_id'],
|
||
'exist',
|
||
'skipOnError' => true,
|
||
'targetClass' => StoredDocumentCheckStatusReferenceType::class,
|
||
'targetAttribute' => ['document_check_status_ref_id' => 'id'],
|
||
],
|
||
[
|
||
[
|
||
'read_only',
|
||
'not_found_contractor',
|
||
],
|
||
'boolean'
|
||
],
|
||
[
|
||
'read_only',
|
||
'default',
|
||
'value' => false
|
||
],
|
||
];
|
||
return [...$this->_document_type_validation_extender->getRules(), ...$own_rules];
|
||
}
|
||
|
||
public function ownRequiredRules(): array
|
||
{
|
||
return [
|
||
[
|
||
['contractor_id'],
|
||
'required',
|
||
'whenClient' => "function (model,attribute) {
|
||
return !+$(attribute.input).attr('data-skip_validation');
|
||
}"
|
||
],
|
||
[
|
||
[
|
||
'document_date'
|
||
],
|
||
'required',
|
||
'when' => function ($model) {
|
||
return (!$model->isFrom1C);
|
||
},
|
||
'whenClient' => 'function (attribute, value) {
|
||
return true;
|
||
}'
|
||
],
|
||
];
|
||
}
|
||
|
||
public function scenarios()
|
||
{
|
||
$scenarios = parent::scenarios();
|
||
$scenarios[IndividualAchievement::SCENARIO_RECOVER] = $scenarios[IndividualAchievement::SCENARIO_DEFAULT];
|
||
return $scenarios;
|
||
}
|
||
|
||
|
||
|
||
|
||
public function attributeLabels()
|
||
{
|
||
return [
|
||
'file' => Yii::t('abiturient/bachelor/individual-achievement/individual-achievement', 'Подпись для поля "file"; формы ИД: `Скан-копия подтверждающего документа`'),
|
||
'user_id' => Yii::t('abiturient/bachelor/individual-achievement/individual-achievement', 'Подпись для поля "user_id"; формы ИД: `Поступающий`'),
|
||
'additional' => Yii::t('abiturient/bachelor/individual-achievement/individual-achievement', 'Подпись для поля "additional"; формы ИД: `Дополнительно`'),
|
||
'document_date' => Yii::t('abiturient/bachelor/individual-achievement/individual-achievement', 'Подпись для поля "document_date"; формы ИД: `Дата выдачи`'),
|
||
'contractor_id' => Yii::t('abiturient/bachelor/individual-achievement/individual-achievement', 'Подпись для поля "contractor_id"; формы ИД: `Выдан`'),
|
||
'document_number' => Yii::t('abiturient/bachelor/individual-achievement/individual-achievement', 'Подпись для поля "document_number"; формы ИД: `Номер документа`'),
|
||
'document_series' => Yii::t('abiturient/bachelor/individual-achievement/individual-achievement', 'Подпись для поля "document_series"; формы ИД: `Серия документа`'),
|
||
'document_type_id' => Yii::t('abiturient/bachelor/individual-achievement/individual-achievement', 'Подпись для поля "document_type_id"; формы ИД: `Тип документа`'),
|
||
'achievementTypeName' => Yii::t('abiturient/bachelor/individual-achievement/individual-achievement', 'Подпись для поля "achievementTypeName"; формы ИД: `Тип достижения`'),
|
||
'documentTypeDocumentDescription' => Yii::t('abiturient/bachelor/individual-achievement/individual-achievement', 'Подпись для поля "documentTypeDocumentDescription"; формы ИД: `Тип документа`'),
|
||
'dictionary_individual_achievement_id' => Yii::t('abiturient/bachelor/individual-achievement/individual-achievement', 'Подпись для поля "dictionary_individual_achievement_id"; формы ИД: `Тип достижения`'),
|
||
'attachments' => Yii::t('abiturient/bachelor/individual-achievement/individual-achievement', 'Подпись для файлов формы ИД: `Файл`'),
|
||
'documentCheckStatus' => Yii::t('abiturient/bachelor/individual-achievement/individual-achievement', 'Подпись для поля "documentCheckStatus" формы ИД: `Статус проверки документа`'),
|
||
];
|
||
}
|
||
|
||
|
||
public function getAchievementType()
|
||
{
|
||
return $this->hasOne(IndividualAchievementType::class, ['id' => 'dictionary_individual_achievement_id']);
|
||
}
|
||
|
||
public function getDocumentType()
|
||
{
|
||
return $this->hasOne(IndividualAchievementDocumentType::class, ['id' => 'document_type_id']);
|
||
}
|
||
|
||
public function getFullDescription()
|
||
{
|
||
return trim(ArrayHelper::getValue($this, 'achievementType.fullDescription', '-') . ' ' .
|
||
ArrayHelper::getValue($this, 'documentType.documentTypeRef.description', '-') .
|
||
" {$this->document_series} {$this->document_number}" .
|
||
" {$this->document_date} " . ArrayHelper::getValue($this, 'contractor.name', ''));
|
||
}
|
||
|
||
public function getRealDocumentType()
|
||
{
|
||
return $this->hasOne(DocumentType::class, ['id' => 'document_type_ref_id'])
|
||
->via('documentType');
|
||
}
|
||
|
||
|
||
|
||
|
||
public function getUser(): ActiveQuery
|
||
{
|
||
return $this->getRawUser()->andOnCondition(['user.is_archive' => false]);
|
||
}
|
||
|
||
|
||
|
||
|
||
public function getRawUser(): ActiveQuery
|
||
{
|
||
return $this->hasOne(User::class, ['id' => 'user_id']);
|
||
}
|
||
|
||
public function getUserInstance(): User
|
||
{
|
||
return $this->user ?: new User();
|
||
}
|
||
|
||
protected function getOwnerId()
|
||
{
|
||
return $this->user_id;
|
||
}
|
||
|
||
public function checkAccess($user)
|
||
{
|
||
if ($user->isModer()) {
|
||
return true;
|
||
} elseif ($user->id == $this->getOwnerId()) {
|
||
return true;
|
||
} else {
|
||
return false;
|
||
}
|
||
}
|
||
|
||
public function getFormated_document_date()
|
||
{
|
||
return date('Y-m-d', strtotime($this->document_date));
|
||
}
|
||
|
||
public function __set($name, $value)
|
||
{
|
||
$value = $this->encodeProp($name, $value);
|
||
|
||
if ($name == 'document_date' && !empty($value)) {
|
||
$value = (string)date('d.m.Y', strtotime($value));
|
||
}
|
||
parent::__set($name, $value);
|
||
}
|
||
|
||
|
||
|
||
|
||
public function getApplication(): ActiveQuery
|
||
{
|
||
return $this->hasOne(
|
||
BachelorApplication::class,
|
||
['id' => 'application_id']
|
||
);
|
||
}
|
||
|
||
public static function getTableLink(): string
|
||
{
|
||
return 'individual_achievement_attachment';
|
||
}
|
||
|
||
public static function getEntityTableLinkAttribute(): string
|
||
{
|
||
return 'individual_achievement_id';
|
||
}
|
||
|
||
public static function getAttachmentTableLinkAttribute(): string
|
||
{
|
||
return 'attachment_id';
|
||
}
|
||
|
||
public static function getModel(): string
|
||
{
|
||
return get_called_class();
|
||
}
|
||
|
||
public function getAttachmentType(): ?AttachmentType
|
||
{
|
||
return AttachmentManager::GetSystemAttachmentType(AttachmentType::SYSTEM_TYPE_INDIVIDUAL_ACHIEVEMENT);
|
||
}
|
||
|
||
|
||
public function getAttachments(): ActiveQuery
|
||
{
|
||
return $this->getRawAttachments()
|
||
->andOnCondition([Attachment::tableName() . '.deleted' => false]);
|
||
}
|
||
|
||
public function getRawAttachments(): ActiveQuery
|
||
{
|
||
return $this->hasMany(Attachment::class, ['id' => IndividualAchievement::getAttachmentTableLinkAttribute()])
|
||
->viaTable(IndividualAchievement::getTableLink(), [IndividualAchievement::getEntityTableLinkAttribute() => 'id']);
|
||
}
|
||
|
||
public function getName(): string
|
||
{
|
||
$return_str = Yii::t(
|
||
'abiturient/bachelor/individual-achievement/individual-achievement',
|
||
'Текст для построения наименования; формы ИД: `Индивидуальное достижение`'
|
||
);
|
||
$return_str = "{$return_str} ";
|
||
if ($this->document_type_id != null) {
|
||
$return_str .= $this->documentType->documentDescription;
|
||
}
|
||
$return_str .= " (Серия {$this->document_series} № {$this->document_number})";
|
||
|
||
return $return_str;
|
||
}
|
||
|
||
public function stringify(): string
|
||
{
|
||
return $this->getName();
|
||
}
|
||
|
||
public function getAttachmentCollection(): FileToShowInterface
|
||
{
|
||
return new AttachedEntityAttachmentCollection(
|
||
$this->user,
|
||
$this,
|
||
$this->getAttachmentType(),
|
||
$this->attachments,
|
||
$this->formName(),
|
||
'file'
|
||
);
|
||
}
|
||
|
||
public static function getDbTableSchema(): TableSchema
|
||
{
|
||
return IndividualAchievement::getTableSchema();
|
||
}
|
||
|
||
public function canDownload()
|
||
{
|
||
return $this->getAttachments()->exists();
|
||
}
|
||
|
||
|
||
|
||
|
||
public static function getArchiveColumn(): string
|
||
{
|
||
return 'status';
|
||
}
|
||
|
||
public static function getArchiveValue()
|
||
{
|
||
return IndividualAchievement::STATUS_ARCHIVED;
|
||
}
|
||
|
||
public function getAttachmentConnectors(): array
|
||
{
|
||
return ['application_id' => $this->application->id];
|
||
}
|
||
|
||
public function getChangeLoggedAttributes()
|
||
{
|
||
return [
|
||
'dictionary_individual_achievement_id' => function ($model) {
|
||
return ArrayHelper::getValue($model, 'achievementTypeName');
|
||
},
|
||
'document_series',
|
||
'document_number',
|
||
'contractor_id' => function ($model) {
|
||
return $model->contractor->name ?? '';
|
||
},
|
||
'document_type_id' => function ($model) {
|
||
return ArrayHelper::getValue($model, 'documentTypeDocumentDescription');
|
||
},
|
||
'document_date',
|
||
'additional',
|
||
];
|
||
}
|
||
|
||
public function getEntityIdentifier(): ?string
|
||
{
|
||
return $this->getName();
|
||
}
|
||
|
||
public function getClassTypeForChangeHistory(): int
|
||
{
|
||
return ChangeHistoryClasses::CLASS_INDIVIDUAL_ACHIEVEMENT;
|
||
}
|
||
|
||
public function beforeDelete()
|
||
{
|
||
if (parent::beforeDelete()) {
|
||
AttachmentManager::unlinkAllAttachment($this);
|
||
return true;
|
||
} else {
|
||
return false;
|
||
}
|
||
}
|
||
|
||
public function afterFind()
|
||
{
|
||
parent::afterFind();
|
||
$this->_new_record = false;
|
||
}
|
||
|
||
public function afterValidate()
|
||
{
|
||
(new LoggingAfterValidateHandler())
|
||
->setModel($this)
|
||
->invoke();
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
public static function GetOrCreateFromRaw(
|
||
string $series,
|
||
string $number,
|
||
string $document_date,
|
||
array $organization,
|
||
string $additional,
|
||
BachelorApplication $application,
|
||
$achievement_category_ref,
|
||
$achievement_document_type_ref,
|
||
array $documentCheckStatusRef = [],
|
||
bool $documentReadOnly = false,
|
||
array $ids_to_ignore = []
|
||
): IndividualAchievement {
|
||
$user = $application->user;
|
||
$campaign_ref = $application->type->rawCampaign->referenceType;
|
||
$contractor = ContractorManager::GetOrCreateContractor($organization);
|
||
|
||
$ind_arch_type = IndividualAchievementType::getIaTypesByCampaignAndSpecialitiesQuery($application, true)
|
||
->joinWith(['achievementCategoryRef a_c'])
|
||
->andWhere(['a_c.reference_uid' => ReferenceTypeManager::GetOrCreateReference(
|
||
StoredAchievementCategoryReferenceType::class,
|
||
$achievement_category_ref
|
||
)->reference_uid])
|
||
->one();
|
||
if (!$ind_arch_type) {
|
||
|
||
$ind_arch_type = IndividualAchievementType::find()
|
||
->active()
|
||
->joinWith(['achievementCategoryRef a_c'])
|
||
->andWhere(['a_c.reference_uid' => ReferenceTypeManager::GetOrCreateReference(
|
||
StoredAchievementCategoryReferenceType::class,
|
||
$achievement_category_ref
|
||
)->reference_uid])
|
||
->one();
|
||
}
|
||
if (!$ind_arch_type) {
|
||
throw new UserException('Не найден подходящий тип индивидуального достижения, обратитесь к администратору');
|
||
}
|
||
$doc_type = null;
|
||
if ($achievement_document_type_ref) {
|
||
$real_doc_type = ReferenceTypeManager::GetOrCreateReference(DocumentType::class, $achievement_document_type_ref);
|
||
if ($real_doc_type) {
|
||
$doc_type = IndividualAchievementDocumentTypesRepository::GetDocumentTypesByIndividualAchievementTypeAndCampaignQuery(
|
||
$campaign_ref,
|
||
$ind_arch_type
|
||
)
|
||
->joinWith(['documentTypeRef doc_type'])
|
||
->andWhere(['doc_type.ref_key' => $real_doc_type->ref_key,])
|
||
->one();
|
||
}
|
||
}
|
||
if (!$doc_type) {
|
||
$doc_type_string = print_r($achievement_document_type_ref, true);
|
||
throw new UserException("Не удалось определить тип документа {$doc_type_string}.");
|
||
}
|
||
$ind_arch = IndividualAchievement::find()
|
||
->joinWith(['documentType.documentTypeRef d_t', 'achievementType.achievementCategoryRef a_c'])
|
||
->active()
|
||
->andWhere([
|
||
'document_series' => $series,
|
||
'document_number' => $number,
|
||
'user_id' => $user->id,
|
||
'application_id' => $application->id
|
||
])
|
||
->andWhere(['a_c.reference_uid' => ArrayHelper::getValue($ind_arch_type, 'achievementCategoryRef.reference_uid')])
|
||
->andWhere(['d_t.ref_key' => ArrayHelper::getValue($doc_type, 'documentTypeRef.ref_key')])
|
||
->andWhere(['not', [IndividualAchievement::tableName() . '.id' => $ids_to_ignore]])
|
||
->one();
|
||
|
||
if (!$ind_arch) {
|
||
$ind_arch = new IndividualAchievement();
|
||
$ind_arch->user_id = $user->id;
|
||
$ind_arch->application_id = $application->id;
|
||
$ind_arch->dictionary_individual_achievement_id = $ind_arch_type->id;
|
||
$ind_arch->document_type_id = $doc_type->id;
|
||
}
|
||
$ind_arch->read_only = $documentReadOnly;
|
||
$ind_arch->setDocumentCheckStatusFrom1CData($documentCheckStatusRef);
|
||
|
||
$ind_arch->isFrom1C = true;
|
||
$ind_arch->document_series = $series;
|
||
$ind_arch->document_number = $number;
|
||
$ind_arch->document_date = $document_date;
|
||
$ind_arch->contractor_id = $contractor->id ?? null;
|
||
$ind_arch->additional = $additional;
|
||
$ind_arch->status = IndividualAchievement::STATUS_STAGED;
|
||
|
||
if ($ind_arch->validate()) {
|
||
if (empty($ind_arch->application)) {
|
||
DraftsManager::SuspendHistory($ind_arch);
|
||
}
|
||
$ind_arch->save(false);
|
||
} else {
|
||
$error_msg = "Ошибка получения индивидуального достижения\n" . print_r($ind_arch->errors, true);
|
||
Yii::error($error_msg, 'INDIVIDUAL_ACHIEVEMENTS_RECEIVING');
|
||
throw new RecordNotValid($ind_arch);
|
||
}
|
||
return $ind_arch;
|
||
}
|
||
|
||
public function getRelationsInfo(): array
|
||
{
|
||
return [
|
||
new AttachmentsRelationPresenter(
|
||
'attachments',
|
||
['parent_instance' => $this]
|
||
),
|
||
];
|
||
}
|
||
|
||
public function getIdentityString(): string
|
||
{
|
||
$ia_type_uid = ArrayHelper::getValue($this, 'achievementType.achievementCategoryRef.reference_uid', '');
|
||
$document_uid = ArrayHelper::getValue($this, 'documentType.documentTypeRef.ref_key', '');
|
||
return "{$ia_type_uid}_{$document_uid}_{$this->document_series}_{$this->document_number}";
|
||
}
|
||
|
||
public function getAchievementTypeName()
|
||
{
|
||
return ArrayHelper::getValue($this, 'achievementType.name');
|
||
}
|
||
|
||
public function getDocumentTypeDocumentDescription()
|
||
{
|
||
return ArrayHelper::getValue($this, 'documentType.documentDescription');
|
||
}
|
||
|
||
public function getPropsToCompare(): array
|
||
{
|
||
return ArrayHelper::merge(array_diff(array_keys($this->attributes), ['user_id']), [
|
||
'achievementTypeName',
|
||
'documentTypeDocumentDescription'
|
||
]);
|
||
}
|
||
|
||
public function getIsActuallyNewRecord(): bool
|
||
{
|
||
return $this->_new_record;
|
||
}
|
||
|
||
public function getAttachedFilesInfo(): array
|
||
{
|
||
$files = [];
|
||
foreach ($this->attachments as $achievement) {
|
||
$files[] = [
|
||
$achievement,
|
||
ArrayHelper::getValue($this, 'documentType.documentTypeRef'),
|
||
null
|
||
];
|
||
}
|
||
return $files;
|
||
}
|
||
|
||
public function getContractor(): ActiveQuery
|
||
{
|
||
return $this->hasOne(Contractor::class, ['id' => 'contractor_id']);
|
||
}
|
||
|
||
public function fillFromEducation(EducationData $educationData)
|
||
{
|
||
$this->document_series = $educationData->series;
|
||
$this->document_number = $educationData->number;
|
||
$this->document_date = $educationData->date_given;
|
||
$this->contractor_id = $educationData->contractor_id;
|
||
|
||
if (!$this->save()) {
|
||
throw new RecordNotValid($this);
|
||
}
|
||
FilesManager::CopyFiles($educationData, $this);
|
||
}
|
||
|
||
public static function getDocumentTypePropertyName(): string
|
||
{
|
||
return 'realDocumentType';
|
||
}
|
||
|
||
public static function getSubdivisionCodePropertyName(): string
|
||
{
|
||
return '';
|
||
}
|
||
|
||
public static function getIssuedDatePropertyName(): string
|
||
{
|
||
return 'document_date';
|
||
}
|
||
|
||
public static function getDateOfEndPropertyName(): string
|
||
{
|
||
return '';
|
||
}
|
||
|
||
public static function getAdditionalPropertyName(): string
|
||
{
|
||
return 'additional';
|
||
}
|
||
|
||
public static function getIssuedByPropertyName(): string
|
||
{
|
||
return 'contractor_id';
|
||
}
|
||
|
||
public static function getDocumentSeriesPropertyName(): string
|
||
{
|
||
return 'document_series';
|
||
}
|
||
|
||
public static function getDocumentNumberPropertyName(): string
|
||
{
|
||
return 'document_number';
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
public function beforeSave($insert)
|
||
{
|
||
if (!parent::beforeSave($insert)) {
|
||
return false;
|
||
}
|
||
|
||
if (!$this->fillDocumentCheckStatusIfNotVerified()) {
|
||
return false;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
}
|