public ActionResult AddDomain(long companyId, string domainName)
        {
            if (string.IsNullOrEmpty(domainName))
            {
                SetViewBag(companyId);
                ViewBag.Error      = "Укажите имя домена";
                ViewBag.DomainName = domainName;
                var model = DB.CompanyDomainName.Where(x => x.CompanyId == companyId).ToList();
                return(View("DomainList", model));
            }

            var ea = new EmailAddressAttribute();

            if (!ea.IsValid($"ab@{domainName}"))
            {
                SetViewBag(companyId);
                ViewBag.Error      = "Неверный формат домена";
                ViewBag.DomainName = domainName;
                var model = DB.CompanyDomainName.Where(x => x.CompanyId == companyId).ToList();
                return(View("DomainList", model));
            }

            var domainExist = DB.CompanyDomainName.SingleOrDefault(x => x.CompanyId == companyId && x.Name == domainName);

            if (domainExist != null)
            {
                SetViewBag(companyId);
                ViewBag.Error      = $"Домен {domainName} уже есть в списке данного производителя";
                ViewBag.DomainName = domainName;
                var model = DB.CompanyDomainName.Where(x => x.CompanyId == companyId).ToList();
                return(View("DomainList", model));
            }

            var newDomain = new CompanyDomainName()
            {
                CompanyId = companyId, Name = domainName
            };

            DB.CompanyDomainName.Add(newDomain);
            DB.SaveChanges();
            return(RedirectToAction("DomainList", new { companyId = companyId }));
        }
        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("~"));
        }