public ActionResult Default() { vmSearchApplication vmSearchApplication = new vmSearchApplication(); //Search date from start of previous month var now = DateTime.Now.Date; DateTime dtStartSearchDateFrom = new DateTime(now.Year, now.Month, 1).AddMonths(-1).Date; vmSearchApplication.ApplicationSubmittedSearchDateFrom = dtStartSearchDateFrom; vmSearchApplication.ApplicationList = FilterApplicationList(vmSearchApplication); return(View(vmSearchApplication)); }
private List <vmApplication> FilterApplicationList(vmSearchApplication vmSearchApplication) { Func <string, List <string> > splitString = x => { List <string> result = new List <string>(); if (!String.IsNullOrWhiteSpace(x)) { result = x.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries).ToList(); //result.ForEach(e => e.Trim()); } return(result); }; //We are searching for these needles. List <string> nameSearchList = splitString(vmSearchApplication.NameSearch); Predicate <vmApplication> filter = app => { bool nameSearch = String.IsNullOrWhiteSpace(vmSearchApplication.NameSearch) || nameSearchList.All(e => String.Concat(app.ApplicantName, app.StallBusinessName).ToLower().Contains(e)); bool eventNameSearch = String.IsNullOrWhiteSpace(vmSearchApplication.EventNameSearch) || splitString(vmSearchApplication.EventNameSearch).All(e => app.EventName.ToLower().Contains(e)); bool foodType = String.IsNullOrWhiteSpace(vmSearchApplication.FoodTypeSearch) || ((String.IsNullOrWhiteSpace(app.TypeOfFood) && (vmSearchApplication.FoodTypeSearch == null))) || //Can't search on food type if it is null ((app.TypeOfFood != null) && (splitString(vmSearchApplication.FoodTypeSearch)).All(e => app.TypeOfFood.ToLower().Contains(e))); DateTime?searchSubmissionDateStart = vmSearchApplication.ApplicationSubmittedSearchDateFrom; bool searchSubmissionDate = ( //No start date and no end date (!vmSearchApplication.ApplicationSubmittedSearchDateFrom.HasValue && (!vmSearchApplication.ApplicationSubmittedSearchDateTo.HasValue) ) //Start date but no end date || ( vmSearchApplication.ApplicationSubmittedSearchDateFrom.HasValue && (!vmSearchApplication.ApplicationSubmittedSearchDateTo.HasValue) && (app.SubmittedDate >= vmSearchApplication.ApplicationSubmittedSearchDateFrom.Value) ) //No start date but has end date || ( (!vmSearchApplication.ApplicationSubmittedSearchDateFrom.HasValue) && (vmSearchApplication.ApplicationSubmittedSearchDateTo.HasValue) && app.SubmittedDate <= vmSearchApplication.ApplicationSubmittedSearchDateTo.Value ) //Start ddate and end date || ( (vmSearchApplication.ApplicationSubmittedSearchDateFrom.HasValue) && (vmSearchApplication.ApplicationSubmittedSearchDateTo.HasValue) && (app.SubmittedDate >= vmSearchApplication.ApplicationSubmittedSearchDateFrom.Value) && (app.SubmittedDate <= vmSearchApplication.ApplicationSubmittedSearchDateTo.Value) ) ); bool searchStallDate = ( //No start date and no end date (!vmSearchApplication.StallSearchDateFrom.HasValue && (!vmSearchApplication.StallSearchDateTo.HasValue) ) //Start date but no end date || ( vmSearchApplication.StallSearchDateFrom.HasValue && (!vmSearchApplication.StallSearchDateTo.HasValue) && (app.EventStartDate >= vmSearchApplication.StallSearchDateFrom.Value) ) //No start date but has end date || ( (!vmSearchApplication.StallSearchDateFrom.HasValue) && (vmSearchApplication.StallSearchDateTo.HasValue) && app.EventStartDate <= vmSearchApplication.StallSearchDateTo.Value ) //Start ddate and end date || ( (vmSearchApplication.StallSearchDateFrom.HasValue) && (vmSearchApplication.StallSearchDateTo.HasValue) && (app.EventStartDate >= vmSearchApplication.StallSearchDateFrom.Value) && (app.EventStartDate <= vmSearchApplication.StallSearchDateTo.Value) ) ); return(nameSearch && eventNameSearch && foodType && searchSubmissionDate && searchStallDate); }; return(db.Applications.Where(e => e.AppID != null).Select(e => new vmApplication() { ApplicantName = e.ApplicantDetails.ApplicantName, ApplicationId = e.AppID.Value, EventName = e.EventDetails.EventName, EventStartDate = e.EventDetails.EventStartDate.HasValue ? e.EventDetails.EventStartDate.Value : e.SubmittedDate.Value, //EventStartDate = e.EventDetails.EventStartDate, StallBusinessName = e.StallDetails.StallBusinessName, SubmittedDate = e.SubmittedDate.Value, TypeOfFood = e.FoodDetails.FoodDetailsTypeOfFood }).ToList() .Where(e => filter(e)) .ToList()); }
public ActionResult Default(vmSearchApplication vmSearchApplication) { vmSearchApplication.ApplicationList = FilterApplicationList(vmSearchApplication); return(View(vmSearchApplication)); }