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("~")); }