Example #1
0
        private static FilterBase AnalysisFilterAndAttr(FilterTuple filterTuple)
        {
            var negate   = filterTuple.FilterAttr.IsNegate;
            var argument = AnalysisArgDescript(filterTuple.FilterAttr.ArgDescript).ToArray();

            if (filterTuple.Name.Type != Token.TokenType.Literal)
            {
                throw new InvalidOperationException("[内部エラー]MISMATCHED TYPE: FILTER TYPE REQUIRED Literal, BUT " + filterTuple.Name.Type.ToString() + ".");
            }
            var filters = Core.FilterRegistrant.GetFilter(filterTuple.Name.Value);

            if (filters == null || filters.Count() == 0)
            {
                throw new InvalidOperationException("ID \"" + filterTuple.Name.Value + "\" のフィルタは見つかりませんでした。");
            }
            foreach (var f in filters)
            {
                var wellformed = (from c in f.GetConstructors()
                                  let cp = c.GetParameters()
                                           where cp.Count() == argument.Count()
                                           select cp)
                                 .Any(pia => pia.Zip(argument, (pi, o) => new { pi, o })
                                      .All(a => a.pi.ParameterType.Equals(a.o.GetType())));
                if (wellformed)
                {
                    var instance = CreateFilterInstance(f, argument);
                    instance.Negate = negate;
                    return(instance);
                }
            }
            // オーバーロードが何も一致しない
            throw new ArgumentException("ID \"" + filterTuple.Name.Value + "\" のフィルタは存在しますが、引数が一致しません。(引数:" + String.Join(", ", argument.Select(a => a.ToString())) + ")");
        }
Example #2
0
        public static Configurator <Contract, ContractRow> ConfigureFormWatcher(
            this Configurator <Contract, ContractRow> conf)
        {
            conf.Table();
            conf.Column(c => c.StartDate)
            .FilterRange(c => c.StartDate, c => c.ClientFiltering().HideFilter());
            conf.Column(c => c.Supplier)
            .FilterValue(c => c.Supplier, x => x.ClientFiltering().HideFilter());

            conf.WatchForm <WatchedFormViewModel>(w =>
            {
                w.WatchAllFields();
                w.Field(x => x.Supplier).TriggerSearchOnEvents(10, "keyup").DoNotEmbedToQuery();
                w.Field(x => x.Ratings).Delimiter(",");
                w.Field(x => x.PriceRanges).Selector("input[name='chb_Price']");
                w.Field(x => x.StartDateFrom).AutoDatePicker();
                w.Field(x => x.StartDateTo).AutoDatePicker();
                w.Field(x => x.FormTimeStamp).Constant(DateTime.Now);

                w.FilterColumn(conf, x => x.StartDate).FilterRange(x => x.StartDateFrom, x => x.StartDateTo).ClientServer(server: false);
                w.FilterColumn(conf, x => x.Supplier).FilterValue(x => x.Supplier).ClientServer(server: false);
            });



            conf.FreeOrdering(q =>
                              q.Form <WatchedFormViewModel>().Ordering == OrderingPreset.ByNames
                    ? Ordering.Ascending.ToFilterTuple()
                    : FilterTuple.None <Ordering>(),
                              x => x.Title);

            conf.FreeOrdering(q =>
                              q.Form <WatchedFormViewModel>().Ordering == OrderingPreset.ByPrices
                        ? Ordering.Descending.ToFilterTuple()
                        : FilterTuple.None <Ordering>(),
                              x => x.Price);

            conf.FreeFilter(q =>
                            q.Form <WatchedFormViewModel>().Ordering.ToFilterTuple(x => x == OrderingPreset.ByScopeRating),
                            (x, v) => x.OrderByDescending(c => c.Rating).ThenByDescending(c => c.Scope));

            conf.FreeFilter(q => q.Form <WatchedFormViewModel>().Title.TupleIfNotNull(), (q, v) => q.Where(x => x.Title.Contains(v)));

            conf.FreeFilter(
                q => q.Form <WatchedFormViewModel>().Ratings.TupleIfNotNull(x => x.Length > 0),
                (q, v) => q.Where(x => v.Contains(x.Rating))
                );

            conf.FreeFilter(q => q.Form <WatchedFormViewModel>().EndYear.TupleIfNotNull(),
                            (q, v) => v == -1 ? q.Where(c => c.EndDate == null) : q.Where(x => x.EndDate != null && x.EndDate.Value.Year == v));

            conf.FreeFilter(q => q.Form <WatchedFormViewModel>().Priorities.TupleIfNotNull(x => x.Length > 0),
                            (q, v) => q.Where(x => v.Contains(x.Priority) || x.Priority == Priority.Critical));

            conf.FreeFilter(q => q.Form <WatchedFormViewModel>().TupleIfNotNull(), FilterTax);
            conf.FreeFilter(q => q.Form <WatchedFormViewModel>().PriceRanges.TupleIfNotNull(c => c.Length > 0), FilterPrices);
            return(conf);
        }
Example #3
0
        protected void InitializeViewModel(FilterTuple filterTupleStartup)
        {
            if (FilterViewCollection == null)
            {
                InitializeViewModelCollection();
            }

            InitializeData(filterTupleStartup);
        }
Example #4
0
        private static FilterTuple MakeFilter(ref TokenReader reader)
        {
            System.Diagnostics.Debug.WriteLine("MakeFilter");
            var ret = new FilterTuple()
            {
                Name       = AssertNext(ref reader, Token.TokenType.Literal),
                FilterAttr = MakeFilterAttr(ref reader)
            };

            AssertNextAny(ref reader, false, Token.TokenType.CloseBracket,
                          Token.TokenType.ConcatenatorAnd, Token.TokenType.ConcatenatorOr);
            return(ret);
        }
Example #5
0
        private void PopupFiltersRequestExecute(FilterTuple filterTuple)
        {
            var notification = new PopupContainerStickersFiltersViewModelNotification
            {
                Title       = "Filters",
                FilterTuple = filterTuple,
                Sticker     = SelectedBumperSticker
            };

            PopupFiltersRequest.Raise(notification,
                                      returned =>
            {
                SelectedBumperSticker.BuiltFilter = new BuiltFilterModel(FilterServices.Stickers);
                SelectedBumperSticker.BuiltFilter.BindFilterSectionCollection();
            });
        }
        public static Configurator <Contract, ContractRow> ConfigureValueFilters(this Configurator <Contract, ContractRow> conf)
        {
            conf.Table();
            conf.Column(c => c.Id).DataOnly();

            // Simple server filtering
            conf.Column(c => c.Title).FilterValue(c => c.Title);

            // Server configuration in order to continue configure filter
            // in cshtml
            conf.Column(c => c.Supplier).FilterValueNoUi(c => c.Supplier);

            // Value filter overriden by filtering delegate
            conf.Column(c => c.Price).FilterValueNoUi(c => c.Price)
            .By((q, v) => q.Where(x => x.Price < v));

            // Exactly the same as above
            conf.Column(c => c.Price).FilterValueNoUiBy((q, v) => q.Where(x => x.Price < v));

            // Overriden value extractor
            conf.Column(c => c.Tax)
            .FilterValueBy((q, v) => q.Where(x => x.Tax > v))
            .Value(q =>
            {
                if (!q.Filterings.ContainsKey("Tax"))
                {
                    return(FilterTuple.None <double?>());
                }
                var f = q.Filterings["Tax"];
                if (string.IsNullOrEmpty(f))
                {
                    return(FilterTuple.None <double?>());
                }
                var d = ValueConverter.Convert <double>(f);
                if (d > 10)
                {
                    d = d / 100;
                }
                return(((double?)d).ToFilterTuple());
            });

            // Automatic datepickers demo
            conf.Column(c => c.StartDate).FilterValue(c => c.StartDate).CompareOnlyDates();
            conf.Column(c => c.EndDate).FilterValueNoUi(c => c.StartDate).CompareOnlyDates();

            return(conf);
        }
Example #7
0
        protected override Tuple <bool, TFilteringKey> DefaultExtract(Query filterArgument)
        {
            string filterValue      = null;
            bool   presentFiltering = filterArgument.Filterings.TryGetValue(ColumnName, out filterValue);

            if (string.IsNullOrEmpty(filterValue))
            {
                presentFiltering = false;
            }
            if (!presentFiltering)
            {
                return(FilterTuple.None <TFilteringKey>());
            }
            TFilteringKey key = ParseFunction(filterValue);

            return(key.ToFilterTuple());
        }
Example #8
0
        private void InitializeData(FilterTuple filterTupleStartup)
        {
            if (filterTupleStartup != null)
            {
                EnumViewModelType enumViewModelTypeStartup = filterTupleStartup.ViewModelType;

                if (FilterViewCollection.Where(x => x.ViewModel.GetType().Name == filterTupleStartup.ViewModelType.ToString()).Any())
                {
                    FilterViewSelectedItem = FilterViewCollection.FirstOrDefault(x => x.ViewModel.GetType().Name == filterTupleStartup.ViewModelType.ToString());
                }
                else
                {
                    FilterViewSelectedItem = FilterViewCollection.ElementAt(0);
                }
            }
            else
            {
                FilterViewSelectedItem = FilterViewCollection.ElementAt(0);
            }

            CurrentlyBuiltFilter = new BuiltFilterModel(FilterService);
            CurrentlyBuiltFilter.BindFilterSectionCollection();
        }
        private static Tuple <bool, RangeTuple <double?> > ExtractTaxRange(Query q)
        {
            if (!q.Filterings.ContainsKey("Tax"))
            {
                return(FilterTuple.None <RangeTuple <double?> >());
            }
            var f = q.Filterings["Tax"];

            if (string.IsNullOrEmpty(f))
            {
                return(FilterTuple.None <RangeTuple <double?> >());
            }
            var spl   = f.Split('|');
            var sFrom = spl[0];
            var sTo   = spl[1];
            var from  = string.IsNullOrEmpty(sFrom) ? (double?)null : ValueConverter.Convert <double>(sFrom);
            var to    = string.IsNullOrEmpty(sTo) ? (double?)null : ValueConverter.Convert <double>(sTo);

            if (from.HasValue && from >= 10)
            {
                from = from / 100;
            }
            if (to.HasValue && to >= 10)
            {
                to = to / 100;
            }
            var rng = new RangeTuple <double?>
            {
                From    = @from,
                HasFrom = @from.HasValue,
                To      = to,
                HasTo   = to.HasValue
            };

            return(rng.ToFilterTuple());
        }
Example #10
0
 private static FilterTuple MakeFilter(ref TokenReader reader)
 {
     System.Diagnostics.Debug.WriteLine("MakeFilter");
     var ret = new FilterTuple()
     {
         Name = AssertNext(ref reader, Token.TokenType.Literal),
         FilterAttr = MakeFilterAttr(ref reader)
     };
     AssertNextAny(ref reader, false, Token.TokenType.CloseBracket,
         Token.TokenType.ConcatenatorAnd, Token.TokenType.ConcatenatorOr);
     return ret;
 }
Example #11
0
 private static FilterBase AnalysisFilterAndAttr(FilterTuple filterTuple)
 {
     var negate = filterTuple.FilterAttr.IsNegate;
     var argument = AnalysisArgDescript(filterTuple.FilterAttr.ArgDescript).ToArray();
     if(filterTuple.Name.Type != Token.TokenType.Literal)
         throw new InvalidOperationException("[内部エラー]MISMATCHED TYPE: FILTER TYPE REQUIRED Literal, BUT " + filterTuple.Name.Type.ToString() + ".");
     var filters = Core.FilterRegistrant.GetFilter(filterTuple.Name.Value);
     if(filters == null || filters.Count() == 0)
         throw new InvalidOperationException("ID \"" + filterTuple.Name.Value + "\" のフィルタは見つかりませんでした。");
     foreach(var f in filters)
     {
         var wellformed = (from c in f.GetConstructors()
                           let cp = c.GetParameters()
                           where cp.Count() == argument.Count()
                           select cp)
                           .Any(pia => pia.Zip(argument, (pi, o) => new { pi, o })
                              .All(a => a.pi.ParameterType.Equals(a.o.GetType())));
         if (wellformed)
         {
             var instance = CreateFilterInstance(f, argument);
             instance.Negate = negate;
             return instance;
         }
     }
     // オーバーロードが何も一致しない
     throw new ArgumentException("ID \"" + filterTuple.Name.Value + "\" のフィルタは存在しますが、引数が一致しません。(引数:" + String.Join(", ", argument.Select(a => a.ToString())) + ")");
 }
Example #12
0
 private void ViewModelSwitch(FilterTuple filterTuple)
 {
     FilterViewSelectedItem = FilterViewCollection.FirstOrDefault(x => x.ViewModel.GetType().Name == filterTuple.ViewModelType.ToString());
 }
Example #13
0
        public static Configurator <Contract, ContractRow> ConfigureMixedFilters(this Configurator <Contract, ContractRow> conf)
        {
            conf.Table();
            conf.Column(c => c.Id).DataOnly();

            // Simple server filtering
            conf.Column(c => c.Title).FilterValue(c => c.Title);

            // Server configuration in order to continue configure filter
            // in cshtml
            conf.Column(c => c.Supplier).FilterValueNoUi(c => c.Supplier);

            // Simple server filtering
            conf.Column(c => c.Price).FilterRange(c => c.Price);

            // Simple select filter
            conf.Column(c => c.Rating)
            .FilterSelect(c => c.Rating, ui => ui.SelectAny()
                          .SelectItems(new UiListItem[]
            {
                new UiListItem()
                {
                    Text = "*", Value = "1"
                },
                new UiListItem()
                {
                    Text = "**", Value = "2"
                },
                new UiListItem()
                {
                    Text = "***", Value = "3"
                },
                new UiListItem()
                {
                    Text = "****", Value = "4"
                },
                new UiListItem()
                {
                    Text = "*****", Value = "5"
                },
            })
                          .ClientFiltering() // with client filtering!
                          );

            // Select filter for enumeration with client filtering
            conf.Column(c => c.Scope)
            .FilterSelect(c => c.Scope,
                          ui => ui.SelectAny().SelectItems(EnumHelper.GetSelectList(typeof(Scope))).ClientFiltering());

            // Overriden value extractor
            conf.Column(c => c.Tax)
            .FilterValueBy((q, v) => q.Where(x => x.Tax > v))
            .Value(q =>
            {
                if (!q.Filterings.ContainsKey("Tax"))
                {
                    return(FilterTuple.None <double?>());
                }
                var f = q.Filterings["Tax"];
                if (string.IsNullOrEmpty(f))
                {
                    return(FilterTuple.None <double?>());
                }
                var d = ValueConverter.Convert <double>(f);
                if (d > 10)
                {
                    d = d / 100;
                }
                return(((double?)d).ToFilterTuple());
            });

            // Automatic datepickers demo
            conf.Column(c => c.StartDate).FilterRange(c => c.StartDate).CompareOnlyDates();

            conf.Column(c => c.EndDate).FilterValueNoUi(c => c.StartDate).CompareOnlyDates();

            return(conf);
        }