/**
  * @inheritdoc
  */
 public function rules()
 {
     return ['usernameMatch' => ['Login', 'match', 'pattern' => '/^[-a-zA-Z0-9_\\.@]+$/'], 'usernameLength' => ['Login', 'string', 'min' => 3, 'max' => 25], 'usernameUnique' => ['Login', 'unique'], 'usernameTrim' => ['Login', 'trim'], 'emailPattern' => [['Email1'], 'email'], 'emailLength' => [['Email1'], 'string', 'max' => 255], 'emailUnique' => [['Email1'], 'unique'], 'emailTrim' => [['Email1'], 'trim'], 'passwordRequired' => ['Password', 'required', 'on' => ['register']], 'passwordLength' => ['Password', 'string', 'min' => 6, 'on' => ['register', 'create']], [['FirstName', 'LastName', 'MidName'], 'trim', 'on' => ['register', 'create']], [['FirstName', 'LastName', 'MidName'], 'filter', 'filter' => function ($value) {
         return mb_convert_case($value, MB_CASE_TITLE, "UTF-8");
     }, 'skipOnEmpty' => true], [['FirstName', 'LastName', 'MidName'], 'unique', 'targetAttribute' => ['FirstName', 'LastName', 'MidName'], 'comboNotUnique' => 'Введенное имя {values} (комбинация имени фамилии и отчества) уже зарегистрировано в системе'], [['GroupID'], 'required', 'on' => ['create', 'update']], [['ServiceCard', 'Blocked', 'Deleted'], 'boolean'], [['Blocked', 'Deleted'], 'default', 'value' => 0], ['ServiceCard', 'default', 'value' => 0], ['ServiceCard', 'filter', 'filter' => function ($value) {
         if ($this->isAttributeChanged('ServiceCard', false) && !$this->isNewRecord) {
             //                    if(!$this->group->IsService) {
             return (int) $this->getOldAttribute('ServiceCard');
             //                    }
         }
         return (int) $value;
     }, 'on' => ['update']], [['CardID', 'AccountID', 'Blocked', 'GroupID', 'Deleted', 'RoomID'], 'integer'], ['GroupID', 'default', 'value' => PersonsGroupRecord::getDefault()->id, 'on' => ['create']], [['Additional'], 'string', 'max' => 4000], [['RegisterDate'], 'safe'], ['Phone1', 'filter', 'filter' => function ($value) {
         return preg_replace('/[^0-9]/', '', $value);
     }], ['Phone1', 'unique'], [['FirstName', 'LastName', 'MidName', 'City', 'Address', 'Phone1', 'Phone2', 'Phone3'], 'string', 'max' => 255], ['IsRegularClient', 'boolean'], ['IsRegularClient', 'default', 'value' => 0]];
 }
 /**
  * Step 3
  * @param $hardId
  * @return string|\yii\web\Response
  * @throws HttpException
  */
 public function actionCreateAccount($hardId, $groupId = '')
 {
     /** @var PersonsGroupRecord $group */
     if ($groupId !== '') {
         $group = PersonsGroupRecord::findOne($groupId);
     } else {
         $group = PersonsGroupRecord::getDefault();
     }
     /** @var PersonsRecord $user */
     $user = Yii::createObject(['class' => PersonsRecord::className(), 'scenario' => 'create']);
     /** @var CardForm $card */
     $card = \Yii::createObject(CardForm::className());
     $card->HardID = $hardId;
     if (!$card->isExist()) {
         $card = $card->create();
     } else {
         $card = $card->find();
     }
     if (!$card->ID) {
         throw new HttpException(400, 'Не удалось сохранить номер карты');
     }
     $user->CardID = $card->id;
     $user->GroupID = $group->id;
     $user->ServiceCard = $group->IsService;
     $this->performAjaxValidation($user);
     if ($user->load(Yii::$app->request->post()) && $user->create()) {
         /** @var FinanceRecord $finance */
         $finance = Yii::createObject(FinanceRecord::className());
         $finance->ClassID = 2;
         //Регистраци карты
         $finance->ContractorID = $user->ID;
         $finance->save();
         Yii::$app->getSession()->setFlash('success', Yii::t('user', 'User has been created'));
         return $this->redirect(['/accounts/charge-balance', 'id' => $user->account->id]);
     }
     return $this->render('createAccount', ['user' => $user]);
 }
 public function actionCreateAccount($hardId, $groupId = '')
 {
     /** @var PersonsGroupRecord $group */
     if ($groupId !== '') {
         $group = PersonsGroupRecord::findOne($groupId);
     } else {
         $group = PersonsGroupRecord::getDefault();
     }
     /** @var PersonsRecord $user */
     $user = Yii::$app->user->identity;
     if ($group->ID < $user->GroupID) {
         throw new ForbiddenHttpException('Вы не можете зарегистрировать карту более высокого уровня');
     }
     /** @var PersonsRecord $user */
     $user = Yii::createObject(['class' => PersonsRecord::className(), 'scenario' => 'create']);
     $user->GroupID = $group->id;
     $user->ServiceCard = $group->IsService;
     //from parent controller (not my behavior)
     $this->performAjaxValidation($user);
     //data already loaded with ajax validation
     if ($user->load(Yii::$app->request->post()) && $user->validate()) {
         $card = null;
         /** @var CardForm $card */
         $cardForm = \Yii::createObject(CardForm::className());
         $cardForm->HardID = $hardId;
         if (!$cardForm->isExist()) {
             $card = $cardForm->create();
         } else {
             if ($cardForm->isUsed()) {
                 throw new HttpException(400, 'Данная карта уже зарегистрирована в системе');
             } else {
                 $card = $cardForm->find();
             }
         }
         if (!$card->ID) {
             throw new HttpException(400, 'Не удалось зарегистрировать карту');
         }
         $user->CardID = $card->id;
         if ($user->create()) {
             /** @var FinanceRecord $finance */
             $finance = Yii::createObject(FinanceRecord::className());
             $finance->ClassID = 2;
             //Регистраци карты
             $finance->ContractorID = $user->ID;
             $finance->save();
             //Yii::$app->getSession()->setFlash('success', Yii::t('user', 'User has been created'));
             return $this->redirect(['/person/children', 'personId' => $user->id]);
         }
     }
     return $this->render('createAccount', ['user' => $user]);
 }
 /**
  * Deletes an existing PersonsGroupRecord model.
  * If deletion is successful, the browser will be redirected to the 'index' page.
  * @param integer $id
  * @return mixed
  */
 public function actionDelete($id)
 {
     $defaultGroup = PersonsGroupRecord::getDefault();
     $model = $this->findModel($id);
     if ($model->getIsMandatory()) {
         Yii::$app->getSession()->setFlash('error', Yii::t('app', 'You can not delete mandatory groups!'));
     } else {
         if ($model->id == $defaultGroup->id) {
             Yii::$app->getSession()->setFlash('error', Yii::t('app', 'Default group can not be removed'));
         } else {
             $this->findModel($id)->forceDelete();
             PersonsRecord::updateAll(['GroupID' => $defaultGroup->id], ['GroupID' => $id]);
             Yii::$app->getSession()->setFlash('warning', Yii::t('app', 'All users of deleted group was moved to default group!'));
         }
     }
     return $this->redirect(['index']);
 }