/** * @return bool * @throws \Exception */ public function createFamily() { if (!$this->validate()) { return false; } $spouses = Human::find()->where(['id' => [$this->firstSpouseId, $this->secondSpouseId], 'id_descendant_family' => null])->all(); if (!is_array($spouses) || count($spouses) !== 2) { return false; } $transaction = Yii::$app->db->beginTransaction(); try { $family = new Family(); $family->setAttribute('name', $spouses[0]->surname . '-' . $spouses[1]->surname); if (!$family->save()) { throw new Exception('Family creation error'); } foreach ($spouses as $human) { $human->setAttribute('id_descendant_family', $family->id); if (!$human->update(true, ['id_descendant_family'])) { throw new Exception('Spouses updating error'); } } } catch (Exception $e) { $transaction->rollBack(); Yii::$app->session->setFlash('danger', 'Произошла ошибка'); return false; } $transaction->commit(); $this->family = $family; return true; }
public function actionCreate() { $model = new Family(); if ($model->load(Yii::$app->request->post())) { //Se o utilizador já tiver uma familia não faz nada if (Yii::$app->user->identity->family_id) { return $this->redirect('update'); } $model->login_status = \app\enum\UserStatus::Inativo; //$model->accepts_members = 0 ; if ($model->validate() && $model->save()) { $user = Yii::$app->user->identity; //inicia transação $transaction = Yii::$app->db->beginTransaction(); //Cria membro $fme = new FamilyMember(); $fme->family_id = $model->id; $fme->user_id = Yii::$app->user->getId(); $fme->name = $user->username; $fme->event_color = '#ff9900'; $fme->user_type = \app\enum\UserType::Administrador_MemoBoard; if (!$fme->save()) { $transaction->rollBack(); return $this->goHome(); } //Cria um calendário para o membro $cal = new Calendar(); $cal->sistem = 0; $cal->name = Yii::$app->user->identity->username; $cal->member_id = $fme->id; if (!$cal->save()) { $transaction->rollBack(); return $this->goHome(); } $user->family_id = $model->id; $user->calendar_id = $cal->id; $user->family_member_id = $fme->id; if (!$user->save()) { $transaction->rollBack(); return $this->goHome(); } //Finaliza transação $transaction->commit(); return $this->redirect('update'); } } return $this->render('create', ['model' => $model]); }