public async Task <ActionResult> Index()
        {
            var model = new AccessRightsIndexViewModel {
                Editor = new EditAccessRightsViewModel()
            };

            await Initialize(model);

            return(View(model));
        }
        public async Task <ActionResult> Allow(AccessRightsIndexViewModel model)
        {
            if (!ModelState.IsValid)
            {
                await Initialize(model);

                return(View(model));
            }

            IVoidResult result = null;

            if (model.Editor.ScheduleApplied)
            {
                if (TimeZoneInfo.FindSystemTimeZoneById(model.Editor.SchedulerTimeZone) == null)
                {
                    ModelState.AddModelError("Editor_SchedulerTimeZone", "Invalid time zone");
                }

                if (ModelState.IsValid)
                {
                    result = await ScheduleAccess(model.Editor);
                }
            }
            else
            {
                result = await AllowPermanentAccess(model.Editor);
            }

            if (result != null && !result.Succeded)
            {
                ModelState.AddModelError(string.Empty, result.Fault.Summary);
            }

            if (!ModelState.IsValid)
            {
                await Initialize(model);

                return(View(model));
            }

            return(RedirectToAction("Index"));
        }
        private async Task Initialize(AccessRightsIndexViewModel model)
        {
            var accessRightsTask = _listAccessRightsRequest.Request(ListCommand.WithoutParameters);
            var usersTask        = _listUsersRequest.Request(ListCommand.WithoutParameters);
            var accessPointsTask = _listAccessPointsRequest.Request(ListCommand.WithoutParameters);
            var userGroupsTask   = _listUserGroupsRequest.Request(ListCommand.WithoutParameters);

            await Task.WhenAll(accessRightsTask, usersTask, accessPointsTask, userGroupsTask);

            model.UserAccessRights         = accessRightsTask.Result.UserAccessRights;
            model.UserGroupAccessRights    = accessRightsTask.Result.UserGroupAccessRights;
            model.Editor.AccessPoints      = accessPointsTask.Result.AccessPoints;
            model.Editor.Users             = usersTask.Result.Users;
            model.Editor.UserGroups        = userGroupsTask.Result.Groups;
            model.Editor.SchedulerTimeZone = TimeZoneInfo.Local.Id;
            model.Editor.TimeRangePerDays  = new Dictionary <string, TimeRange>();
            foreach (DayOfWeek day in Enum.GetValues(typeof(DayOfWeek)))
            {
                model.Editor.TimeRangePerDays[day.ToString()] = new TimeRange {
                    FromTime = new TimeSpan(9, 0, 0), ToTime = new TimeSpan(18, 0, 0)
                };
            }
        }