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())) + ")"); }
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); }
protected void InitializeViewModel(FilterTuple filterTupleStartup) { if (FilterViewCollection == null) { InitializeViewModelCollection(); } InitializeData(filterTupleStartup); }
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); }
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); }
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()); }
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()); }
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; }
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())) + ")"); }
private void ViewModelSwitch(FilterTuple filterTuple) { FilterViewSelectedItem = FilterViewCollection.FirstOrDefault(x => x.ViewModel.GetType().Name == filterTuple.ViewModelType.ToString()); }
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); }