public IHttpActionResult Post([FromBody] UserModel model) { if (!Msisdn.IsValid(model.MobileNumber, Country)) { return(this.BadRequestEx(Error.MobileNumberInvalid)); } using (var dbContext = new DataContext()) { var user = new User(); user.FirstName = model.FirstName; user.LastName = model.LastName; user.Email = model.Email; user.MobileNumber = model.MobileNumber; user.Status = Data.Enums.Status.Active; user.CreatedTimestamp = DateTime.Now; user.IsOfficer = model.IsOfficer ? "1" : "0"; user.ExternalID = model.ExternalID; dbContext.Users.Add(user); if (model.Districts != null) { foreach (var districtModel in model.Districts) { var district = dbContext.Districts.Find(districtModel.ID); if (district == null) { continue; } var userDistrict = new UserDistrict(); userDistrict.District = district; userDistrict.User = user; dbContext.UserDistricts.Add(userDistrict); } } var userName = Kapsch.Core.Cryptography.Random.GenerateConcatenatedString(model.FirstName.Substring(0, 1), model.LastName); while (true) { if (!dbContext.Credentials.Any(f => f.UserName == userName)) { break; } userName = Kapsch.Core.Cryptography.Random.GenerateConcatenatedString(model.FirstName.Substring(0, 1), model.LastName); } Random random = new Random(); var credential = new Credential(); credential.CreatedTimeStamp = DateTime.Now; credential.EntityID = user.ID; credential.EntityType = Data.Enums.EntityType.User; credential.ExpiryTimeStamp = DateTime.Now.AddYears(20); credential.Status = Data.Enums.Status.Active; credential.UserName = userName; credential.Password = Membership.GeneratePassword(8, 0); credential.Password = Regex.Replace(credential.Password, @"[^a-zA-Z0-9]", m => random.Next(0, 9).ToString()); dbContext.Credentials.Add(credential); if (model.SystemFunctions != null) { foreach (var systemFunctionModel in model.SystemFunctions) { var systemFunction = dbContext.SystemFunctions.Find(systemFunctionModel.ID); if (systemFunction == null) { continue; } var userSystemFunction = new CredentialSystemFunction(); userSystemFunction.SystemFunction = systemFunction; userSystemFunction.Credential = credential; userSystemFunction.Status = Data.Enums.Status.Active; dbContext.CredentialSystemFunctions.Add(userSystemFunction); } } dbContext.SaveChanges(); var logo = string.Format("{0}/Images/IMS-logo-180x66-1color.png", UserManagementPortal); var personalizations = new Dictionary <string, string>(); personalizations.Add("website", UserManagementPortal); personalizations.Add("logo", logo); personalizations.Add("fullName", string.Format("{0} {1}", user.FirstName, user.LastName)); personalizations.Add("userName", credential.UserName); personalizations.Add("password", credential.Password); //EmailHelper.Send( // HttpContext.Current.Server.MapPath("~/MailTemplates"), // new[] { model.Email }, // "Account Created", // "AccountCreated.txt", // personalizations); var company = dbContext.Companies.FirstOrDefault(f => f.Name == "Intelligent Mobility Solutions"); // IMS if (company == null) { Elmah.ErrorSignal.FromCurrentContext().Raise(new Exception("Unable to get company, Intelligent Mobility Solutions, from database.")); } else { SmsHelper.Send( dbContext, "User Management", "Create User", new Router() { Source = "IMS", Target = new Msisdn(user.MobileNumber, Country).ToString(Msisdn.Format.International) }, company, user, HttpContext.Current.Server.MapPath("~/MailTemplates"), "SmsAccountCreated.txt", personalizations); } model.ID = user.ID; model.UserName = credential.UserName; model.Status = (Models.Enums.UserStatus)user.Status; model.CreatedTimestamp = user.CreatedTimestamp; return(Ok(model)); } }
public IHttpActionResult Put([FromBody] UserModel model) { if (!Msisdn.IsValid(model.MobileNumber, Country)) { return(this.BadRequestEx(Error.MobileNumberInvalid)); } using (var dbContext = new DataContext()) { var credential = dbContext.Credentials .Include(f => f.User) .Include(f => f.CredentialSystemFunctions) .SingleOrDefault(f => f.EntityID == model.ID && f.EntityType == Data.Enums.EntityType.User); if (credential == null) { return(this.BadRequestEx(Error.UserDoesNotExist)); } User user = credential.User; user.FirstName = model.FirstName; user.LastName = model.LastName; user.Email = model.Email; user.MobileNumber = model.MobileNumber; user.Status = (Data.Enums.Status)model.Status; user.IsOfficer = model.IsOfficer ? "1" : "0"; user.ExternalID = model.ExternalID; credential.CredentialSystemFunctions.ToList().ForEach(f => dbContext.CredentialSystemFunctions.Remove(f)); foreach (var systemFunctionModel in model.SystemFunctions) { var systemFunction = dbContext.SystemFunctions.Find(systemFunctionModel.ID); if (systemFunction == null) { continue; } var userSystemFunction = new CredentialSystemFunction(); userSystemFunction.SystemFunction = systemFunction; userSystemFunction.Credential = credential; userSystemFunction.Status = Data.Enums.Status.Active; dbContext.CredentialSystemFunctions.Add(userSystemFunction); } user.UserDistricts.ToList().ForEach(f => dbContext.UserDistricts.Remove(f)); foreach (var districtModel in model.Districts) { var district = dbContext.Districts.Find(districtModel.ID); if (district == null) { continue; } var userDistrict = new UserDistrict(); userDistrict.District = district; userDistrict.User = user; dbContext.UserDistricts.Add(userDistrict); } dbContext.SaveChanges(); return(Ok()); } }