Пример #1
0
        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));
            }
        }
Пример #2
0
        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());
            }
        }