255], [['user_card_id'], 'exist', 'skipOnError' => true, 'targetClass' => UserCard::class, 'targetAttribute' => ['user_card_id' => 'id']], [['user_id'], 'exist', 'skipOnError' => true, 'targetClass' => User::class, 'targetAttribute' => ['user_id' => 'id']], [['project_id'], 'exist', 'skipOnEmpty' => true, 'targetClass' => Project::class, 'targetAttribute' => ['project_id' => 'id']], [['company_id'], 'exist', 'skipOnEmpty' => true, 'targetClass' => Company::class, 'targetAttribute' => ['company_id' => 'id']], ]; } /** * {@inheritdoc} */ public function attributeLabels() { return [ 'id' => 'ID', 'created_at' => 'Дата заполнения отчета', 'today' => 'Что было сделано сегодня?', 'difficulties' => 'Какие сложности возникли?', 'tomorrow' => 'Что планируется сделать завтра?', 'user_card_id' => 'Профиль пользователя', 'user_id' => 'Пользователь', 'status' => 'Статус', 'project_id' => 'ID проекта', 'company_id' => 'ID компании' ]; } public function afterSave($insert, $changedAttributes) { parent::afterSave($insert, $changedAttributes); $this->saveTask(); } public function afterFind() { parent::afterFind(); $this->_task = []; if ($this->task) { $i = 0; foreach ($this->task as $task) { $this->_task[$i]['task'] = $task->task; $this->_task[$i]['hours_spent'] = $task->hours_spent; $this->_task[$i]['minutes_spent'] = $task->minutes_spent; $i++; } } } /** * @return \yii\db\ActiveQuery */ public function getUserCard() { return $this->hasOne(UserCard::className(), ['id' => 'user_card_id']); } public function getProject() { return $this->hasOne(Project::class, ['id' => 'project_id']); } /** * @return \yii\db\ActiveQuery */ public function getUser(): \yii\db\ActiveQuery { return $this->hasOne(User::class, ['id' => 'user_id']); } public function getTask() { return $this->hasMany(ReportsTask::class, ['report_id' => 'id']); } public function saveTask() { ReportsTask::deleteAll(['report_id' => $this->id]); if ($this->_task) { foreach ($this->_task as $task) { $taskModel = new ReportsTask(); $taskModel->report_id = $this->id; $taskModel->task = $task['task']; $taskModel->hours_spent = (float)$task['hours_spent']; $taskModel->minutes_spent = (int)$task['minutes_spent']; $taskModel->status = 1; $taskModel->created_at = time(); $taskModel->save(); } } } public function checkIsArray() { if (!is_array($this->_task)) { $this->addError('_task', 'X is not array!'); } } public static function getFio($data) { $user_card = UserCard::findOne(['id_user' => $data->user_id]); return $user_card->fio ?? null; } /** * @return \yii\db\ActiveQuery */ public function getReportsTask() { return $this->hasMany(ReportsTask::className(), ['report_id' => 'id']); } public function calculateOrderTime() { return ReportsTask::find()->where(['report_id' => $this->id])->sum('hours_spent'); } }