Пример #1
0
        private Account CreateAccount(Account account)
        {
            currentLoginCompanyId = GetLoginUserCompanyId();
            var accountCompany = new AccountCompany();

            accountCompany.CompanyId = currentLoginCompanyId;

            account.AccountCompany = new List <AccountCompany> {
                accountCompany
            };

            _unitOfWork.accountRepository.Insert(account);
            _unitOfWork.Save();
            return(account);
        }
        public ActionResult CustomRegistration(RegNotProducerViewModel model)
        {
            // если модель невалидна
            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            // если такой пользователь уже есть
            var userExist = DB.Account.Any(x => x.Login == model.login);

            if (userExist)
            {
                ErrorMessage("Пользователь с указанным email уже зарегистрирован");
                return(View(model));
            }

            // создали и сохранили компанию
            var company = new AccountCompany()
            {
                Name = model.CompanyName
            };

            DB.Entry(company).State = EntityState.Added;
            DB.SaveChanges();

            // создали аккаунт
            // регионы и группы не добавляются здесь, потому что всё равно должен регистрировать админ
            var user = SaveAccount(accountCompany: company, RegNotProducer_ViewModel: model);

            user.AccountRegion = DB.Regions().Select(x => new AccountRegion(user, x)).ToList();
            var group = DB.AdminGroup();

            user.AccountGroup.Add(group);
            user.IP = Request.UserHostAddress;
            DB.SaveChanges();

            // отправили сообщение сотрудникам
            EmailSender.ProducerRequestMessage(DB, user, company.Name, $"{model.PhoneNumber}, {model.login}");
            SuccessMessage("Ваша заявка принята. Ожидайте, с вами свяжутся");
            return(Redirect("~"));
        }
        private Account SaveAccount(AccountCompany accountCompany, RegViewModel Reg_ViewModel = null, RegDomainViewModel RegDomain_ViewModel = null, RegNotProducerViewModel RegNotProducer_ViewModel = null, string Pass = null)
        {
            var newAccount = new Account();

            newAccount.EnabledEnum = UserStatus.New;
            newAccount.TypeUser    = (sbyte)TypeUsers.ProducerUser;
            newAccount.CompanyId   = accountCompany.Id;

            // регистрация первого пользователя компании
            if (Reg_ViewModel != null)
            {
                newAccount.Login           = Reg_ViewModel.login;
                newAccount.Password        = Md5HashHelper.GetHash(Pass);
                newAccount.PasswordUpdated = DateTime.Now;
                newAccount.FirstName       = Reg_ViewModel.FirstName;
                newAccount.LastName        = Reg_ViewModel.LastName;
                newAccount.OtherName       = Reg_ViewModel.OtherName;
                newAccount.Name            = Reg_ViewModel.LastName + " " + Reg_ViewModel.FirstName + " " + Reg_ViewModel.OtherName;
                newAccount.Phone           = Reg_ViewModel.PhoneNumber;
                newAccount.AppointmentId   = Reg_ViewModel.AppointmentId;
            }

            // регистрация второго и последующих пользователей производителя
            if (RegDomain_ViewModel != null)
            {
                newAccount.Login           = RegDomain_ViewModel.Mailname + "@" + DB.CompanyDomainName.Single(x => x.Id == RegDomain_ViewModel.EmailDomain).Name;
                newAccount.Password        = Md5HashHelper.GetHash(Pass);
                newAccount.PasswordUpdated = DateTime.Now;
                newAccount.FirstName       = RegDomain_ViewModel.FirstName;
                newAccount.LastName        = RegDomain_ViewModel.LastName;
                newAccount.OtherName       = RegDomain_ViewModel.OtherName;
                newAccount.Name            = RegDomain_ViewModel.LastName + " " + RegDomain_ViewModel.FirstName + " " + RegDomain_ViewModel.OtherName;
                newAccount.Phone           = RegDomain_ViewModel.PhoneNumber;
                newAccount.AppointmentId   = RegDomain_ViewModel.AppointmentId;
            }

            // Если компания в списке отсутствует
            if (RegNotProducer_ViewModel != null)
            {
                // создали новую должность
                var appointment = new AccountAppointment()
                {
                    Name = RegNotProducer_ViewModel.Appointment, GlobalEnabled = false
                };
                DB.Entry(appointment).State = EntityState.Added;
                DB.SaveChanges();

                newAccount.Login         = RegNotProducer_ViewModel.login;
                newAccount.FirstName     = RegNotProducer_ViewModel.FirstName;
                newAccount.LastName      = RegNotProducer_ViewModel.LastName;
                newAccount.OtherName     = RegNotProducer_ViewModel.OtherName;
                newAccount.Name          = RegNotProducer_ViewModel.LastName + " " + RegNotProducer_ViewModel.FirstName + " " + RegNotProducer_ViewModel.OtherName;
                newAccount.Phone         = RegNotProducer_ViewModel.PhoneNumber;
                newAccount.AppointmentId = appointment.Id;
                // особый статус
                newAccount.EnabledEnum = UserStatus.Request;
            }

            DB.Entry(newAccount).State = EntityState.Added;
            DB.SaveChanges();
            return(newAccount);
        }
        public ActionResult Registration(RegViewModel model)
        {
            if (!ModelState.IsValid)
            {
                ViewBagAppointmentList(model.ProducerId);
                return(View(model));
            }

            // если уже есть такой пользователь
            var user = DB.Account.SingleOrDefault(x => x.Login == model.login);

            if (user != null)
            {
                ErrorMessage("Пользователь с указанным email уже зарегистрирован, попробуйте восстановить пароль");
                ViewBagAppointmentList(model.ProducerId);
                return(View(model));
            }

            // если такой компании нет. Компания - это не производитель, это прослойка под производителем
            var company = DB.AccountCompany.SingleOrDefault(x => x.ProducerId == model.ProducerId);

            if (company == null)
            {
                company = new AccountCompany()
                {
                    ProducerId = model.ProducerId, Name = model.ProducerName
                };
                DB.AccountCompany.Add(company);
                DB.SaveChanges();

                string domainName = model.login.Split('@')[1].ToLower();
                var    domain     = new CompanyDomainName()
                {
                    Name = domainName, CompanyId = company.Id
                };
                DB.CompanyDomainName.Add(domain);
                DB.SaveChanges();
            }

            // создали новый аккаунт
            var password = GetRandomPassword();
            var account  = SaveAccount(accountCompany: company, Reg_ViewModel: model, Pass: password);

            var regionCodes = DB.Regions().Select(x => x.Id).ToList();

            foreach (var regionCode in regionCodes)
            {
                account.AccountRegion.Add(new AccountRegion()
                {
                    AccountId = account.Id, RegionId = regionCode
                });
            }

            // добавили аккаунт в группу админов
            var adminGroup = DB.AdminGroup();

            account.AccountGroup.Add(adminGroup);
            account.LastUpdatePermisison = DateTime.Now;
            DB.SaveChanges();

            // отправили письмо о регистрации
            Mails.SendRegistrationMessage(account, password);
            SuccessMessage("Пароль отправлен на ваш email " + account.Login);
            return(Redirect("~"));
        }