public ActionResult <int> RegisterSearch(PmSearchVM search) { int hash = search.GetHashCode() ^ ProvincePrefix.GetHashCode(); if (registeredSearches.ContainsKey(hash)) { registeredSearches[hash] = search; } else { registeredSearches.Add(hash, search); } return(hash); }
public async Task <ActionResult <List <EquipmentsPmListItemVM> > > List(PmSearchVM search) { stringNormalizer.Preprocess(search); var query = GetPmList(search); if (query == null) { return(new List <EquipmentsPmListItemVM>()); } if (search.Limit > 0) { query = query.Limit(search.Limit); } else { query = query.Limit(1000); } var pmList = await query.ToListAsync(); var centers = pmList.GroupBy(pm => pm.CenterId) .Select(g => db.FindById <CommCenterX>(g.Key)).Where(c => c != null).ToDictionary(c => c.Id); var cities = centers.Values.GroupBy(c => c.City).Select(c => db.FindById <City>(c.Key)).Where(c => c != null).ToDictionary(c => c.Id); var users = pmList.GroupBy(pm => pm.ReportingUser) .Select(g => db.FindById <AuthUserX>(g.Key)).ToDictionary(u => u.Id); return(pmList.Select(pm => new EquipmentsPmListItemVM { Id = pm.Id, Center = centers.ContainsKey(pm.CenterId) ? centers[pm.CenterId].Name : "(مرکز حذف شده)", City = centers.ContainsKey(pm.CenterId) && cities.ContainsKey(centers[pm.CenterId].City) ? cities[centers[pm.CenterId].City].Name : "", EditDate = PersianDateUtils.GetPersianDateString(pm.EditDate), SubmitDate = PersianDateUtils.GetPersianDateString(pm.SubmitDate), PmDate = PersianDateUtils.GetPersianDateString(pm.PmDate), ReportingUser = users[pm.ReportingUser]?.DisplayName ?? "(کاربر حذف شده)", TotalRate = pm.TotalRate }) .ToList()); }
private string GetFileName(PmSearchVM search) { string fileName = ""; if (search.City != null) { fileName += db.FindById <City>(search.City).Name; } else { fileName += "همه"; } fileName += "-"; if (search.Center != null) { fileName += db.FindById <CommCenterX>(search.Center).Name; } else { fileName += "همه"; } fileName += ".xlsx"; return(fileName); }
private IFindFluent <EquipmentsPM, EquipmentsPM> GetPmList(PmSearchVM search) { var filters = new List <FilterDefinition <EquipmentsPM> >(); var fb = Builders <EquipmentsPM> .Filter; if (!string.IsNullOrEmpty(search.City) || !string.IsNullOrEmpty(search.Center)) { if (!string.IsNullOrEmpty(search.Center)) { filters.Add(fb.Eq(pm => pm.CenterId, search.Center)); } else { var centersFilter = new List <FilterDefinition <EquipmentsPM> >(); foreach (var id in db.Find <CommCenterX>(c => c.City == search.City).Project(c => c.Id).ToEnumerable()) { centersFilter.Add(fb.Eq(pm => pm.CenterId, id)); } if (centersFilter.Count == 0) { return(null); } else if (centersFilter.Count == 1) { filters.Add(centersFilter[0]); } else if (centersFilter.Count > 1) { filters.Add(fb.Or(centersFilter)); } } } if (!string.IsNullOrEmpty(search.FromDate)) { var fromDate = PersianDateUtils.PersianDateTimeToGeorgian(search.FromDate); filters.Add(fb.Gte(pm => pm.SubmitDate, fromDate)); } if (!string.IsNullOrEmpty(search.ToDate)) { var toDate = PersianDateUtils.PersianDateTimeToGeorgian(search.ToDate); filters.Add(fb.Lte(pm => pm.SubmitDate, toDate)); } if (!string.IsNullOrEmpty(search.SubmittedUser)) { filters.Add(fb.Eq(pm => pm.ReportingUser, search.SubmittedUser)); } var totalFilter = fb.Empty; if (filters.Count == 1) { totalFilter = filters[0]; } else if (filters.Count > 1) { totalFilter = fb.And(filters); } return(db.Find(totalFilter) .Project <EquipmentsPM>(Builders <EquipmentsPM> .Projection .Include(pm => pm.Id) .Include(pm => pm.CenterId) .Include(pm => pm.PmDate) .Include(pm => pm.SubmitDate) .Include(pm => pm.EditDate) .Include(pm => pm.ReportingUser) .Include(pm => pm.TotalRate)) .SortByDescending(pm => pm.SubmitDate)); }