/// <summary>
        /// Executes the service.
        /// </summary>
        public override void OnExecute()
        {
            List<OPoint> pointList = TablesLogic.tPoint.LoadList(
                TablesLogic.tPoint.ReadingDay == DateTime.Today.Day &
                TablesLogic.tPoint.IsActive == 1 &
                (TablesLogic.tPoint.LastReminderDate ==null |
                TablesLogic.tPoint.LastReminderDate.Date() < DateTime.Today.Date));

            List<Guid> userIdList = new List<Guid>();
            
            foreach (OPoint point in pointList)
            {
                if (point.ReminderUser1 != null)
                {
                    if (!userIdList.Contains((Guid)point.ReminderUser1.ObjectID))
                    {
                        userIdList.Add((Guid)point.ReminderUser1.ObjectID);
                        SendEmail(point.ReminderUser1);
                    }
                }
                if (point.ReminderUser2 != null)
                {
                    if (!userIdList.Contains((Guid)point.ReminderUser2.ObjectID))
                    {
                        userIdList.Add((Guid)point.ReminderUser2.ObjectID);
                        SendEmail(point.ReminderUser2);
                    }
                }
                if (point.ReminderUser3 != null)
                {
                    if (!userIdList.Contains((Guid)point.ReminderUser3.ObjectID))
                    {
                        userIdList.Add((Guid)point.ReminderUser3.ObjectID);
                        SendEmail(point.ReminderUser3);
                    }
                }
                if (point.ReminderUser4 != null)
                {
                    if (!userIdList.Contains((Guid)point.ReminderUser4.ObjectID))
                    {
                        userIdList.Add((Guid)point.ReminderUser4.ObjectID);
                        SendEmail(point.ReminderUser4);
                    }
                }
                using (Connection c = new Connection())
                {
                    point.LastReminderDate = DateTime.Today;
                    point.Save();
                    c.Commit();
                }
            }
        }
        /// <summary>
        /// Executes the service.
        /// </summary>
        public override void OnExecute()
        {
            List<OContractReminder> reminders = TablesLogic.tContractReminder.LoadList(
                                                 TablesLogic.tContractReminder.IsReminderSent != 1 &
                                                 TablesLogic.tContractReminder.ReminderDate <= DateTime.Today.Date);
            List<Guid> userIdList = new List<Guid>();
            foreach (OContractReminder re in reminders)
            {
                if (re.Contract.Reminder1User != null)
                {
                    if (!userIdList.Contains((Guid)re.Contract.Reminder1UserID))
                    {
                        userIdList.Add((Guid)re.Contract.Reminder1UserID);
                        SendEmail(re, re.Contract.Reminder1User);
                    }
                }
                if (re.Contract.Reminder2User != null)
                {
                    if (!userIdList.Contains((Guid)re.Contract.Reminder2UserID))
                    {
                        userIdList.Add((Guid)re.Contract.Reminder2UserID);
                        SendEmail(re, re.Contract.Reminder2User);
                    }
                }
                if (re.Contract.Reminder3User != null)
                {
                    if (!userIdList.Contains((Guid)re.Contract.Reminder3UserID))
                    {
                        userIdList.Add((Guid)re.Contract.Reminder3UserID);
                        SendEmail(re, re.Contract.Reminder3User);
                    }
                }
                if (re.Contract.Reminder4User != null)
                {
                    if (!userIdList.Contains((Guid)re.Contract.Reminder4UserID))
                    {
                        userIdList.Add((Guid)re.Contract.Reminder4UserID);
                        SendEmail(re, re.Contract.Reminder4User);
                    }
                }
                using (Connection c = new Connection())
                {
                    re.IsReminderSent = 1;
                    re.Save();
                    c.Commit();
                }
            }

        }
        /// <summary>
        /// Executes the service.
        /// </summary>
        public override void OnExecute()
        {
            List<OEquipmentReminder> reminders = TablesLogic.tEquipmentReminder.LoadList(
                                                 TablesLogic.tEquipmentReminder.IsReminderSent != 1 &
                                                 TablesLogic.tEquipmentReminder.ReminderDate <= DateTime.Today.Date);
            List<Guid> userIdList = new List<Guid>();
            foreach (OEquipmentReminder re in reminders)
            {
                if (re.Equipment.ReminderUser1 != null)
                {
                    if (!userIdList.Contains((Guid)re.Equipment.ReminderUser1ID))
                    {
                        userIdList.Add((Guid)re.Equipment.ReminderUser1ID);
                        SendEmail(re, re.Equipment.ReminderUser1);
                    }
                }
                if (re.Equipment.ReminderUser2 != null)
                {
                    if (!userIdList.Contains((Guid)re.Equipment.ReminderUser2ID))
                    {
                        userIdList.Add((Guid)re.Equipment.ReminderUser2ID);
                        SendEmail(re, re.Equipment.ReminderUser2);
                    }
                }
                if (re.Equipment.ReminderUser3 != null)
                {
                    if (!userIdList.Contains((Guid)re.Equipment.ReminderUser3ID))
                    {
                        userIdList.Add((Guid)re.Equipment.ReminderUser3ID);
                        SendEmail(re, re.Equipment.ReminderUser3);
                    }
                }
                if (re.Equipment.ReminderUser4 != null)
                {
                    if (!userIdList.Contains((Guid)re.Equipment.ReminderUser4ID))
                    {
                        userIdList.Add((Guid)re.Equipment.ReminderUser4ID);
                        SendEmail(re, re.Equipment.ReminderUser4);
                    }
                }
                using (Connection c = new Connection())
                {
                    re.IsReminderSent = 1;
                    re.Save();
                    c.Commit();
                }
            }

        }
 //[DebuggerStepThrough]
 public static bool IsInAnyRole(this IPrincipal principal, List<string> roles)
 {
     if (principal == null || principal.Identity == null || !principal.Identity.IsAuthenticated)
         return false;
     var user = principal.Identity as ClaimsIdentity;
     if (user == null || !user.IsAuthenticated)
         return false;
     return user.Claims.Any(c => c.Type == ClaimTypes.Role && roles.Contains(c.Value));
 }
        public virtual void AddUsersToRoles(List<Guid> userId, List<string> roleName)
        {
            if (userId == null || userId.Count == 0 || roleName == null || roleName.Count == 0)
                return;
            StringBuilder message=new StringBuilder();
            var users = _userRepository.Query.Where(x => userId.Contains(x.ID)).ToList();
            var roles = _roleRepository.Query.Where(x => roleName.Contains(x.Name)).ToList();
            foreach (var userEntity in users)
            {
                if (userEntity.Roles != null && userEntity.Roles.Any())
                {
                    var newRoles = roles.Except(userEntity.Roles);

                    foreach (var role in newRoles)
                        userEntity.Roles.Add(role);
                    if(newRoles!=null && newRoles.Count()>0)
                        message.AppendFormat("User {0} is added to role(s) {1}.",userEntity.Username,string.Join(",", newRoles.Select(x => x.Name)));
                }
                else
                {
                    foreach (var role in roles)
                        userEntity.Roles.Add(role);
                    if(roles!=null && roles.Count()>0)
                        message.AppendFormat("User {0} is added to role(s) {1}.",userEntity.Username,string.Join(",", roles.Select(x => x.Name)));
                }
                using (var scope = new UnitOfWorkScope())
                {
                    _userRepository.Update(userEntity);
                    scope.Commit();
                }
            }
            foreach (var uid in userId)
            {
                if (!users.Any(u => u.ID == uid))
                {
                    var user = _userRepository.Query.Where(x => x.ID == uid).SingleOrDefault();
                    if (user != null)
                    {
                        user.Roles = roles;
                        using (var scope = new UnitOfWorkScope())
                        {
                            _userRepository.Update(user);
                            scope.Commit();
                        }
                        if(roles!=null && roles.Count()>0)
                            message.AppendFormat("User {0} is added to role(s) {1}.",user.Username,string.Join(",", roles.Select(x => x.Name)));
                    }
                }
            }
            if (message.Length > 0)
            {
                ActivityLog item = new ActivityLog(ActivityType.AddUserToRole.ToString(), message.ToString());
                _activityLogService.Add(item);
            }
        }
        public virtual void AssignPermissionsToRole(Guid roleId, List<string> permission)
        {
            if (permission == null || permission.Count == 0)
                return;

            var role = _roleRepository.Query.FirstOrDefault(x => x.Id == roleId);
            var permissions = (from p in _permissionRepository.Query
                               where permission.Contains(p.Name)
                               select p).ToList();

            AddPermissionsToRole(permissions, role, (array, id) => { array.Add(id); return array; });
        }
 public static RundotnetData RunProgram(RundotnetData data)
 {
     List<string> dotNet = new List<string>(){"1", "2", "3"};
     if (dotNet.Contains(data.LanguageChoice))
     {
         return RunDotNet(data);
     }
     else
     {
         return RunLinux(data);
     }
 }
        public virtual void AssignPermissionsToRole(string roleName, List<string> permission)
        {
            if (string.IsNullOrEmpty(roleName) || permission == null || permission.Count == 0)
                return;
            roleName = roleName.Trim();

            var role = _roleRepository.Query.FirstOrDefault(x => x.Name == roleName);
            var permissions = (from p in _permissionRepository.Query
                               where permission.Contains(p.Name)
                               select p).ToList();

            AddPermissionsToRole(permissions, role, (array, id) => { array.Add(id); return array; });
        }
 public virtual void RemoveUsersFromRoles(List<Guid> userId, List<Guid> roleId)
 {
     if (userId == null || roleId == null || userId.Count == 0 || roleId.Count == 0)
         return;
     var users = _userRepository.Query.Where(x => userId.Contains(x.ID)).ToList();
     var roles = _roleRepository.Query.Where(x => roleId.Contains(x.Id)).ToList();
     RemoveUsersFromRoles(users, roles);
 }
        private void SyncRoles(IList<RoleCheckbox> checkboxes, IList<Role> roles)
        {
            var selectedRoles = new List<Role>();

            foreach (var role in userService.GetRoles())
            {
                var checkbox = checkboxes.Single(c => c.Id == role.ID);
                checkbox.Name = role.Name;

                if (checkbox.IsChecked)
                    selectedRoles.Add(role);
            }

            foreach (var forAdd in selectedRoles.Where(t => !roles.Contains(t)))
            {
                roles.Add(forAdd);
            }

            foreach (var forRemove in roles.Where(t=>!selectedRoles.Contains(t)).ToList())
            {
                roles.Remove(forRemove);
            }
        }