Ejemplo n.º 1
0
        protected void AddDateSearch(
            Func <TokenBase, bool> tokenFilter,
            Func <DatesRangeLimits, ISearchTerm> toObjectSearchTerm,
            Func <DatesRangeLimits, ISearchTerm> toFileSearchTerm,
            ISearchExpression expression,
            IQueryBuilder attributesQueryBuilder,
            IQueryBuilder filesQueryBuilder)
        {
            var dateRangeTokens = expression.Tokens.OfType <TokenBase>().Where(x => tokenFilter(x)).ToList();
            var dateRangeGroups = dateRangeTokens.GroupBy(x => x.Context[RangeToken.RangeGroupKey].Value).Where(g => g.Key != null);

            var dateRanges = new List <DatesRangeLimits>();

            foreach (var group in dateRangeGroups)
            {
                var dateTextPresetToken = (DateTextArgumentToken)group.FirstOrDefault(x => x is DateTextArgumentToken);
                if (dateTextPresetToken != null)
                {
                    var presetRange = DatesRangeLimits.GetRangeLimits(dateTextPresetToken);
                    dateRanges.Add(presetRange);
                    continue;
                }

                var groupTail = group.Last();
                var from      = groupTail.Context[RangeToken.FromValueKey].Value;
                var to        = groupTail.Context[RangeToken.ToValueKey].Value;
                if (from == null || to == null)
                {
                    continue;
                }

                var range = new DatesRangeLimits((DateTime)from, (DateTime)to);

                if (groupTail.Context[RangeToken.RangeKindKey].Value is DateAttributeGreaterToken)
                {
                    range = DatesRangeLimits.GreaterThanRange(range);
                }

                if (groupTail.Context[RangeToken.RangeKindKey].Value is DateAttributeLessToken)
                {
                    range = DatesRangeLimits.LessThanRange(range);
                }

                dateRanges.Add(range);
            }

            if (!dateRanges.Any())
            {
                return;
            }

            var context = dateRangeTokens.First().Context;

            attributesQueryBuilder?.AddAnyOf(dateRanges.Select(toObjectSearchTerm).ToArray(), context.GetTermOccur());
            filesQueryBuilder?.AddAnyOf(dateRanges.Select(toFileSearchTerm).ToArray(), context.GetTermOccur());
        }
Ejemplo n.º 2
0
        public virtual IEnumerable <IPresetItem> GetPresetItems(IToken target)
        {
            var today     = DateTime.Today;
            var weekStart = DatesRangeLimits.GetStartOfTheWeek(today);

            if (target is DateTextArgumentToken)
            {
                return new List <IPresetItem>
                       {
                           new PresetItem(DateTextArgumentToken.Today, "today", today.ToString(DateRangeToken.FullDateStringFormat)),
                           new PresetItem(DateTextArgumentToken.Yesterday, "yesterday", today.AddDays(-1).ToString(DateRangeToken.FullDateStringFormat)),
                           new PresetItem(DateTextArgumentToken.ThisWeek, "this week", $"{weekStart.ToString(DateRangeToken.FullDateStringFormat)}{SearchTokenAliases.DateRangeTokenAlias}{weekStart.AddDays(7).ToString(DateRangeToken.FullDateStringFormat)}"),
                           new PresetItem(DateTextArgumentToken.LastWeek, "last week", $"{weekStart.AddDays(-14).ToString(DateRangeToken.FullDateStringFormat)}{SearchTokenAliases.DateRangeTokenAlias}{weekStart.AddDays(-7).ToString(DateRangeToken.FullDateStringFormat)}"),
                           new PresetItem(DateTextArgumentToken.ThisMonth, "this month", today.ToString(DateRangeToken.ShortDateStringFormat)),
                           new PresetItem(DateTextArgumentToken.LastMonth, "last month", today.AddMonths(-1).ToString(DateRangeToken.ShortDateStringFormat)),
                           new PresetItem(DateTextArgumentToken.ThisYear, "this year", today.ToString("yyyy")),
                           new PresetItem(DateTextArgumentToken.LastYear, "last year", today.AddYears(-1).ToString("yyyy"))
                       }
            }
            ;

            if (target is YearToken)
            {
                var targetIsEmpty = string.IsNullOrEmpty(((YearToken)target).Value);

                var year  = DateTime.Today.Year;
                var years = new List <IPresetItem> {
                    new PresetItem(year.ToString(), year.ToString(), targetIsEmpty && !((YearToken)target).GetIsTopSubgroup() ? "specify custom date or range" : "specify a year")
                };

                if (targetIsEmpty)
                {
                    return(years);
                }

                for (var delta = 1; delta < 16; delta++)
                {
                    var prevYear = (year - delta).ToString();
                    years.Add(new PresetItem(prevYear, prevYear));
                }

                return(years);
            }

            if (target is MonthToken)
            {
                var months = new List <IPresetItem>();
                for (var month = 0; month < 12; month++)
                {
                    var monthString = (month + 1).ToString("D2");
                    months.Add(new PresetItem(monthString, monthString));
                }

                return(months);
            }

            if (target is DayToken)
            {
                var days = new List <IPresetItem>();
                for (var day = 0; day < 31; day++)
                {
                    var monthString = (day + 1).ToString("D2");
                    days.Add(new PresetItem(monthString, monthString));
                }

                return(days);
            }

            if (target is NumberAttributeValueToken)
            {
                return new List <IPresetItem>
                       {
                           new PresetItem(string.Empty, string.Empty, "enter numeric value or range"),
                       }
            }
            ;

            if (target is OrgUnitAttributeValueToken)
            {
                return(GetOrgUnitAttributePresetItems());
            }

            return(new List <IPresetItem>());
        }