Exemple #1
0
        /// <summary>
        /// Set the users district back to its default
        /// </summary>
        public void ResetUserDistrict()
        {
            int?userId = GetCurrentUserId();

            // get default district (if one exists)
            UserDistrict userDistrict = _context.UserDistricts.AsNoTracking()
                                        .Include(x => x.User)
                                        .Include(x => x.District)
                                        .FirstOrDefault(x => x.IsPrimary &&
                                                        x.User.Id == userId);

            if (userDistrict == null)
            {
                // get first user district
                userDistrict = _context.UserDistricts.AsNoTracking()
                               .Include(x => x.User)
                               .Include(x => x.District)
                               .FirstOrDefault(x => x.User.Id == userId);
            }

            if (userDistrict != null)
            {
                User user = _context.Users.First(a => a.Id == userId);
                user.DistrictId = userDistrict.DistrictId;

                _context.SaveChanges();
            }
        }
Exemple #2
0
        /// <summary>
        /// Delete user district
        /// </summary>
        /// <param name="id">id of user district to delete</param>
        /// <response code="200">OK</response>
        public virtual IActionResult UserDistrictsIdDeletePostAsync(int id)
        {
            bool exists = _context.UserDistricts.Any(a => a.Id == id);

            if (exists)
            {
                UserDistrict item = _context.UserDistricts
                                    .Include(x => x.User)
                                    .First(a => a.Id == id);

                int userId = item.User.Id;

                // remove record
                _context.UserDistricts.Remove(item);

                // save the changes
                _context.SaveChanges();

                // return the updated user district records
                List <UserDistrict> userDistricts = _context.UserDistricts
                                                    .Include(x => x.User)
                                                    .Include(x => x.District)
                                                    .Where(x => x.User.Id == userId)
                                                    .ToList();

                return(new ObjectResult(new HetsResponse(userDistricts)));
            }

            // record not found
            return(new ObjectResult(new HetsResponse("HETS-01", ErrorViewModel.GetDescription("HETS-01", _configuration))));
        }
Exemple #3
0
        /// <summary>
        /// Switch user district
        /// </summary>
        /// <param name="id">id of user district to switch to</param>
        /// <response code="200">OK</response>
        public virtual IActionResult UserDistrictsIdSwitchPostAsync(int id)
        {
            bool exists = _context.UserDistricts.Any(a => a.Id == id);

            if (exists)
            {
                UserDistrict userDistrict = _context.UserDistricts.First(a => a.Id == id);

                if (userDistrict == null)
                {
                    // record not found
                    return(new ObjectResult(new HetsResponse("HETS-01", ErrorViewModel.GetDescription("HETS-01", _configuration))));
                }

                int?userId = GetCurrentUserId();

                User user = _context.Users.First(a => a.Id == userId);
                user.DistrictId = userDistrict.DistrictId;

                _context.SaveChanges();

                return(new ObjectResult(new HetsResponse(user)));
            }

            // record not found
            return(new ObjectResult(new HetsResponse("HETS-01", ErrorViewModel.GetDescription("HETS-01", _configuration))));
        }
Exemple #4
0
        /// <summary>
        /// Create user
        /// </summary>
        /// <param name="item"></param>
        /// <remarks>Create new user</remarks>
        /// <response code="200">User created</response>
        public virtual IActionResult UsersPostAsync(UserViewModel item)
        {
            User user = new User
            {
                Active    = item.Active,
                Email     = item.Email,
                GivenName = item.GivenName,
                Surname   = item.Surname,
                District  = item.District,
                SmUserId  = item.SmUserId
            };

            UserDistrict newUserDistrict = new UserDistrict
            {
                UserId     = item.Id,
                DistrictId = item.District.Id
            };

            if (user.UserDistricts == null)
            {
                user.UserDistricts        = new List <UserDistrict>();
                newUserDistrict.IsPrimary = true;
            }

            user.UserDistricts.Add(newUserDistrict);

            AdjustUser(user);
            bool exists = _context.Users.Any(x => x.Id == user.Id);

            if (exists)
            {
                _context.Users.Update(user);
            }
            else
            {
                _context.Users.Add(user);
            }

            _context.SaveChanges();

            return(new ObjectResult(new HetsResponse(user)));
        }
 public void Delete(UserDistrict userProperty)
 {
     _context.Remove(userProperty);
 }
 public async Task AddAsync(UserDistrict userProperty)
 {
     await _context.AddAsync(userProperty);
 }
 public virtual IActionResult UserDistrictsIdPost([FromRoute] int id, [FromBody] UserDistrict item)
 {
     return(_service.UserDistrictsIdPostAsync(id, item));
 }
Exemple #8
0
        /// <summary>
        /// Update or create a user district record
        /// </summary>
        /// <remarks>Update or create a user district record</remarks>
        /// <param name="id">id of UserDistrict for updating</param>
        /// <param name="item">User District.</param>
        /// <response code="200">OK</response>
        public virtual IActionResult UserDistrictsIdPostAsync(int id, UserDistrict item)
        {
            if (id != item.Id)
            {
                // record not found
                return(new ObjectResult(new HetsResponse("HETS-01", ErrorViewModel.GetDescription("HETS-01", _configuration))));
            }

            if (item.User == null)
            {
                // record not found
                return(new ObjectResult(new HetsResponse("HETS-01", ErrorViewModel.GetDescription("HETS-01", _configuration))));
            }

            int userId = item.User.Id;

            List <UserDistrict> userDistricts = _context.UserDistricts
                                                .Include(x => x.User)
                                                .Include(x => x.District)
                                                .Where(x => x.User.Id == userId)
                                                .ToList();

            bool districtExists;
            bool hasPrimary = false;

            // add or update user district
            if (item.Id > 0)
            {
                int index = userDistricts.FindIndex(a => a.Id == item.Id);

                if (index < 0)
                {
                    // record not found
                    return(new ObjectResult(new HetsResponse("HETS-01", ErrorViewModel.GetDescription("HETS-01", _configuration))));
                }

                // check if this district already exists
                districtExists = userDistricts.Exists(a => a.District.Id == item.District.Id &&
                                                      a.Id != item.Id);

                // update the record
                if (!districtExists)
                {
                    if (item.User != null)
                    {
                        userDistricts[index].UserId = item.User.Id;
                    }
                    else
                    {
                        // user required
                        return(new ObjectResult(new HetsResponse("HETS-17", ErrorViewModel.GetDescription("HETS-17", _configuration))));
                    }

                    if (item.District != null)
                    {
                        userDistricts[index].DistrictId = item.District.Id;
                    }
                    else
                    {
                        // district required
                        return(new ObjectResult(new HetsResponse("HETS-18", ErrorViewModel.GetDescription("HETS-18", _configuration))));
                    }

                    // manage the primary attribute
                    if (item.IsPrimary)
                    {
                        userDistricts[index].IsPrimary = true;

                        foreach (UserDistrict existingUserDistrict in userDistricts)
                        {
                            if (existingUserDistrict.IsPrimary && existingUserDistrict.Id != item.Id)
                            {
                                existingUserDistrict.IsPrimary = false;
                                break;
                            }
                        }
                    }
                    else
                    {
                        userDistricts[index].IsPrimary = false;

                        foreach (UserDistrict existingUserDistrict in userDistricts)
                        {
                            if (existingUserDistrict.IsPrimary && existingUserDistrict.Id != item.Id)
                            {
                                hasPrimary = true;
                                break;
                            }
                        }

                        if (!hasPrimary)
                        {
                            userDistricts[index].IsPrimary = true;
                        }
                    }
                }
            }
            else  // add user district
            {
                // check if this district already exists
                districtExists = userDistricts.Exists(a => a.District.Id == item.District.Id);

                // add the record
                if (!districtExists)
                {
                    if (item.User != null)
                    {
                        item.User = _context.Users.FirstOrDefault(a => a.Id == item.User.Id);
                    }
                    else
                    {
                        // user required
                        return(new ObjectResult(new HetsResponse("HETS-17", ErrorViewModel.GetDescription("HETS-17", _configuration))));
                    }

                    if (item.District != null)
                    {
                        item.District = _context.Districts.FirstOrDefault(a => a.Id == item.District.Id);
                    }
                    else
                    {
                        // district required
                        return(new ObjectResult(new HetsResponse("HETS-18", ErrorViewModel.GetDescription("HETS-18", _configuration))));
                    }

                    if (item.IsPrimary)
                    {
                        item.IsPrimary = true;

                        foreach (UserDistrict existingUserDistrict in userDistricts)
                        {
                            if (existingUserDistrict.IsPrimary)
                            {
                                existingUserDistrict.IsPrimary = false;
                                break;
                            }
                        }
                    }
                    else
                    {
                        item.IsPrimary = false;

                        foreach (UserDistrict existingUserDistrict in userDistricts)
                        {
                            if (existingUserDistrict.IsPrimary)
                            {
                                hasPrimary = true;
                                break;
                            }
                        }

                        if (!hasPrimary)
                        {
                            item.IsPrimary = true;
                        }
                    }

                    _context.UserDistricts.Add(item);
                }
            }

            _context.SaveChanges();

            // **************************************************************************
            // return the updated user district records
            // **************************************************************************
            List <UserDistrict> results = _context.UserDistricts.AsNoTracking()
                                          .Include(x => x.User)
                                          .Include(x => x.District)
                                          .Where(x => x.User.Id == userId)
                                          .ToList();

            return(new ObjectResult(new HetsResponse(results)));
        }
Exemple #9
0
        /// <summary>
        /// Update user
        /// </summary>
        /// <remarks>Updates a user</remarks>
        /// <param name="id">id of User to update</param>
        /// <param name="item"></param>
        /// <response code="200">OK</response>
        public virtual IActionResult UsersIdPutAsync(int id, UserViewModel item)
        {
            User user = _context.Users
                        .Include(x => x.District)
                        .Include(x => x.UserDistricts)
                        .Include(x => x.UserRoles)
                        .ThenInclude(y => y.Role)
                        .ThenInclude(z => z.RolePermissions)
                        .ThenInclude(z => z.Permission)
                        .FirstOrDefault(x => x.Id == id);

            // record not found
            if (user == null)
            {
                return(new ObjectResult(new HetsResponse("HETS-01", ErrorViewModel.GetDescription("HETS-01", _configuration))));
            }

            user.Active    = item.Active;
            user.Email     = item.Email;
            user.GivenName = item.GivenName;
            user.Surname   = item.Surname;
            user.SmUserId  = item.SmUserId;

            if (item.District != null)
            {
                bool districtExists = _context.Districts.Any(x => x.Id == item.District.Id);

                if (districtExists)
                {
                    District district = _context.Districts
                                        .Include(x => x.Region)
                                        .First(x => x.Id == item.District.Id);

                    user.DistrictId = district.Id;

                    // check if we need to add this to the User District List too
                    bool userDistrictExists = false;

                    foreach (UserDistrict userDistrict in user.UserDistricts)
                    {
                        if (userDistrict.DistrictId == item.District.Id)
                        {
                            userDistrictExists = true;
                            break;
                        }
                    }

                    // if not found - then add it!
                    if (!userDistrictExists)
                    {
                        UserDistrict newUserDistrict = new UserDistrict
                        {
                            UserId     = item.Id,
                            DistrictId = district.Id
                        };

                        if (user.UserDistricts == null)
                        {
                            user.UserDistricts        = new List <UserDistrict>();
                            newUserDistrict.IsPrimary = true;
                        }


                        user.UserDistricts.Add(newUserDistrict);
                    }
                }
            }

            // save changes
            _context.Users.Update(user);
            _context.SaveChanges();

            // update the data to be returned
            user = _context.Users
                   .Include(x => x.District)
                   .Include(x => x.UserDistricts)
                   .Include(x => x.UserRoles)
                   .ThenInclude(y => y.Role)
                   .ThenInclude(z => z.RolePermissions)
                   .ThenInclude(z => z.Permission)
                   .FirstOrDefault(x => x.Id == id);

            return(new ObjectResult(new HetsResponse(user.ToViewModel())));
        }
Exemple #10
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));
            }
        }
Exemple #11
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());
            }
        }