public void Sort(AbsenceGridBuilder gridBuilder)
        {
            //SortBy
            switch (gridBuilder.CurrentGrid.SortBy)
            {
            case nameof(AbsenceRequest.StartDate):
                OrderBy = ar => ar.StartDate;
                break;

            case nameof(AbsenceRequest.User.LastName):
                OrderBy = ar => ar.User.LastName;
                break;

            case nameof(AbsenceRequest.AbsenceType):
                OrderBy = ar => ar.AbsenceType.Name;
                break;

            case nameof(AbsenceRequest.DurationType):
                OrderBy = ar => ar.DurationType.Name;
                break;

            case nameof(AbsenceRequest.AbsenceStatus):
                OrderBy = ar => ar.AbsenceStatus.Name;
                break;

            default:
                OrderBy = ar => ar.StartDate;
                break;
            }
        }
        public IActionResult Deny(AbsenceRequest model)
        {
            //To retain grid state, send the current grid values to the List View.
            var gridBuilder = new AbsenceGridBuilder(HttpContext.Session);

            //First get the current Absence Request
            AbsenceRequest absenceRequest = data.AbsenceRequests.Get(
                new QueryOptions <AbsenceRequest>
            {
                Where   = ar => ar.AbsenceRequestId == model.AbsenceRequestId,
                Include = "AbsenceStatus, User, AbsenceRequestPeriods, AbsenceRequestPeriods.Period"
            });

            if (model.StatusRemarks == null)
            {
                TempData["FailureMessage"] = "Unable to Deny the Absence Request for " + absenceRequest.User.FullName + ". If absence is denied, need to provide a reason in status remarks.";
                return(RedirectToAction("List", gridBuilder.CurrentGrid));
            }
            else
            {
                //Update absence with new status of "Denied"
                absenceRequest.AbsenceStatus = data.AbsenceStatusTypes.List().Where(st => st.Name == "Denied").FirstOrDefault();
                absenceRequest.DateProcessed = DateTime.Now;
                absenceRequest.StatusRemarks = model.StatusRemarks;
                data.AbsenceRequests.Update(absenceRequest);

                //Save all changes
                data.Save();

                TempData["SucessMessage"] = "The Absence Request with ID#, " + absenceRequest.AbsenceRequestId + ", was denied sucessfully.";
                return(RedirectToAction("List", gridBuilder.CurrentGrid));
            }
        }
        public void Filter(AbsenceGridBuilder gridBuilder)
        {
            if (gridBuilder.CurrentGrid.AbsenceType != "all")
            {
                Where = ar => ar.AbsenceTypeId == gridBuilder.CurrentGrid.AbsenceType;
            }


            if (gridBuilder.CurrentGrid.Duration != "all")
            {
                Where = ar => ar.DurationTypeId == gridBuilder.CurrentGrid.Duration;
            }


            if (gridBuilder.CurrentGrid.NeedCoverage != "all")
            {
                bool boolValue;
                if (Boolean.TryParse(gridBuilder.CurrentGrid.NeedCoverage, out boolValue))
                {
                    Where = ar => ar.NeedCoverage == boolValue;
                }
            }


            if (gridBuilder.CurrentGrid.AbsenceStatus != "all")
            {
                Where = ar => ar.AbsenceStatusId == gridBuilder.CurrentGrid.AbsenceStatus;
            }
        }
        public RedirectToActionResult Approve(AbsenceRequest model)
        {
            //First get the current Absence Request
            AbsenceRequest absenceRequest = data.AbsenceRequests.Get(
                new QueryOptions <AbsenceRequest>
            {
                Where   = ar => ar.AbsenceRequestId == model.AbsenceRequestId,
                Include = "AbsenceStatus, User, AbsenceRequestPeriods, AbsenceRequestPeriods.Period"
            });


            //Update absence with new changes.
            absenceRequest.AbsenceStatus = data.AbsenceStatusTypes.List().Where(st => st.Name == "Approved").FirstOrDefault();
            absenceRequest.DateProcessed = DateTime.Now;
            absenceRequest.StatusRemarks = model.StatusRemarks;
            data.AbsenceRequests.Update(absenceRequest);


            //Save all changes
            data.Save();

            TempData["SucessMessage"] = "The Absence Request with ID#, " + absenceRequest.AbsenceRequestId + ", was approved sucessfully.";

            //To retain grid state, send the current grid values to the List View.
            var gridBuilder = new AbsenceGridBuilder(HttpContext.Session);

            return(RedirectToAction("List", gridBuilder.CurrentGrid));
        }
 public void Search(AbsenceGridBuilder gridBuilder)
 {
     if (gridBuilder.CurrentGrid.Search != null)
     {
         string searchTerm = gridBuilder.CurrentGrid.Search.ToLower();
         Where = ar => ar.User.FirstName.ToLower().Contains(searchTerm) || ar.User.LastName.ToLower().Contains(searchTerm);
     }
 }
        public void FromDateRange(AbsenceGridBuilder gridBuilder)
        {
            if (gridBuilder.CurrentGrid.FromDate != null && gridBuilder.CurrentGrid.ToDate != null)
            {
                DateTime fromDate = gridBuilder.ConvertToDateTime(gridBuilder.CurrentGrid.FromDate);
                DateTime toDate   = gridBuilder.ConvertToDateTime(gridBuilder.CurrentGrid.ToDate);

                Where = ar => ar.StartDate >= fromDate && ar.StartDate <= toDate;
            }
        }
        public ViewResult Details(string id)
        {
            //Desirialize grid values to save values in View Model for model binding.
            var gridBuilder = new AbsenceGridBuilder(HttpContext.Session);

            var model = new AbsenceDetailsViewModel
            {
                Grid           = gridBuilder.CurrentGrid,
                AbsenceRequest = data.AbsenceRequests.Get(new QueryOptions <AbsenceRequest>
                {
                    Where   = ar => ar.AbsenceRequestId == id,
                    Include = "AbsenceType, DurationType, AbsenceStatus, User, AbsenceRequestPeriods"
                })
            };

            return(View(model));
        }
        public async Task <ViewResult> List(FilterGridDTO values)
        {
            //First, find the current user signed in to only show their records.
            User user = await userManager.GetUserAsync(User);

            //Create an instance of the AbsenceGridBuilder to save the route parameters for Sorting/Filtering the grid into a session.
            var gridBuilder = new AbsenceGridBuilder(HttpContext.Session, values, nameof(AbsenceRequest.StartDate));


            //Set all of the Query options based on route parameters. Will apply these options to the ViewModel list of absence requests at the time of initialization.
            var options = new AbsenceQueryOptions
            {
                Include          = "AbsenceType, DurationType, AbsenceStatus, User, AbsenceRequestPeriods",
                Where            = ar => ar.UserId == user.Id,
                OrderByDirection = gridBuilder.CurrentGrid.SortDirection,
            };

            options.FromDateRange(gridBuilder);
            options.Filter(gridBuilder);
            options.Sort(gridBuilder);


            //Create and initialize the View Model
            var model = new AbsenceListViewModel
            {
                //Set current route
                Grid = gridBuilder.CurrentGrid,

                //Absence Requests List with query options applied.
                AbsenceRequests = data.AbsenceRequests.List(options),

                //DropDown Lists
                AbsenceTypes  = data.AbsenceTypes.List(),
                DurationTypes = data.DurationTypes.List(),
                StatusTypes   = data.AbsenceStatusTypes.List(),
            };

            model.TotalPages = gridBuilder.GetTotalPages(model.AbsenceRequests.Count());

            //Finally Set the paging.
            model.AbsenceRequests = model.AbsenceRequests.Skip((gridBuilder.CurrentGrid.PageNumber - 1) * gridBuilder.CurrentGrid.PageSize).Take(gridBuilder.CurrentGrid.PageSize);

            return(View(model));
        }
        public RedirectToActionResult SearchOptions(string[] filters, string fromdate, string todate, string searchTerm, bool clear = false)
        {
            //Initialize with the GET constructor (Desirializes Grid dictionary)
            var gridBuilder = new AbsenceGridBuilder(HttpContext.Session);

            if (clear)
            {
                gridBuilder.ClearSearchOptions();
            }
            else
            {
                //Set new filter value to current grid and serialize.
                gridBuilder.SetSearchOptions(filters, fromdate, todate, searchTerm);
                gridBuilder.SerializeRoutes();
            }

            //Redirect to the List Action Method with updated grid dictionary
            return(RedirectToAction("List", gridBuilder.CurrentGrid));
        }
        public RedirectToActionResult Cancel(AbsenceRequest model)
        {
            //First get the current Absence Request
            AbsenceRequest absenceRequest = data.AbsenceRequests.Get(
                new QueryOptions <AbsenceRequest>
            {
                Where   = ar => ar.AbsenceRequestId == model.AbsenceRequestId,
                Include = "AbsenceStatus, User, AbsenceRequestPeriods, AbsenceRequestPeriods.Period, SubJob"
            });


            if (absenceRequest.NeedCoverage == false)
            {
                data.AbsenceRequests.Delete(absenceRequest);
            }
            else
            {
                if (absenceRequest.SubJob == null)
                {
                    data.AbsenceRequests.Delete(absenceRequest);
                }
                else
                {
                    data.SubJobs.Delete(absenceRequest.SubJob);
                    data.AbsenceRequests.Delete(absenceRequest);
                }
            }

            //Save all changes
            data.Save();

            TempData["SucessMessage"] = "The Absence Request with ID#, " + absenceRequest.AbsenceRequestId + ", was canceled sucessfully.";

            //To retain grid state, send the current grid values to the List View.
            var gridBuilder = new AbsenceGridBuilder(HttpContext.Session);

            return(RedirectToAction("List", gridBuilder.CurrentGrid));
        }
예제 #11
0
        public IActionResult Details(string id)
        {
            var gridBuilder = new AbsenceGridBuilder(HttpContext.Session);

            CoverageDetailsViewModel model = new CoverageDetailsViewModel
            {
                Grid = gridBuilder.CurrentGrid,

                AbsenceRequest = data.AbsenceRequests.Get(new QueryOptions <AbsenceRequest>
                {
                    Include = "DurationType, AbsenceRequestPeriods, User, SubJob, SubJob.User, SubJob.SubJobStatus",
                    Where   = ar => ar.AbsenceRequestId == id,
                }),

                Dates = new List <string>()
            };

            for (DateTime date = model.AbsenceRequest.StartDate.Value; date <= model.AbsenceRequest.EndDate.Value; date = date.AddDays(1))
            {
                model.Dates.Add(date.ToShortDateString());
            }

            return(View(model));
        }