Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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());
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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));
        }