protected override void OnInitialize() { base.OnInitialize(); if (Shell.LeaderCalculationWasStart) { Shell.PropertyChanged += (sender, e) => { if (e.PropertyName == nameof(Shell.LeaderCalculationWasStart)) { OnActivate(); } }; MessageResult.Warn("Идет расчет прайс-лидеров. Прайс-лидеры и минимальные цены отобразятся после окончания расчета, это может занять какое-то время.") .Execute(new ActionExecutionContext()); } Price.Value = Env.Query(s => s.Get <Price>(priceId)).Result; Promotions.FilterBySupplierId = Price?.Value?.SupplierId; ProducerPromotions.FilterByProducerId = CurrentProducer.Value.Id; DbReloadToken .Do(_ => IsLoading.Value = true) .SelectMany(_ => RxQuery(s => s.Query <Offer>().Where(o => o.Price.Id == priceId) .Fetch(o => o.Price) .Fetch(o => o.LeaderPrice) .ToList())) .CatchSubscribe(BindOffers, CloseCancellation); }
public override void OfferCommitted() { base.OfferCommitted(); //мы могли создать новую строку или удалить существующую //нужно обновить список строк DbReloadToken.Refresh(); }
protected override void OnInitialize() { base.OnInitialize(); DbReloadToken .Merge(Begin.Select(x => (object)x)) .Merge(End.Select(x => (object)x)) .Merge(IsNotPosted.Changed()) .Merge(IsPosted.Changed()) .Subscribe(_ => Update(), CloseCancellation.Token); }
protected override void OnInitialize() { base.OnInitialize(); DbReloadToken .Merge(Begin.Select(x => (object)x)) .Merge(End.Select(x => (object)x)) .SelectMany(_ => RxQuery(s => s.Query <ReassessmentDoc>() .Where(x => x.Date > Begin.Value && x.Date < End.Value.AddDays(1)) .Fetch(x => x.Address) .OrderByDescending(x => x.Date).ToList())) .Subscribe(Items); }
protected override void OnInitialize() { base.OnInitialize(); DbReloadToken .Merge(Begin.Changed()) .Merge(End.Changed()) .Merge(IsNotOverdue.Changed()) .Merge(IsOverdue.Changed()) .SelectMany(_ => RxQuery(LoadItems)) .Subscribe(Items); }
protected override void OnInitialize() { base.OnInitialize(); DbReloadToken .Merge(DateBegin.Changed()) .Merge(DateEnd.Changed()) .Merge(SupplierCostBegin.Changed()) .Merge(SupplierCostEnd.Changed()) .Merge(RetailCostBegin.Changed()) .Merge(RetailCostEnd.Changed()) .SelectMany(_ => RxQuery(LoadItems)) .Subscribe(Items); }
protected override void OnInitialize() { base.OnInitialize(); DbReloadToken .Do(_ => IsLoading.Value = true) .SelectMany(_ => RxQuery(s => s.Query <Offer>() .Where(o => o.Junk) .OrderBy(o => o.ProductSynonym) .Fetch(o => o.Price) .ToList() )) .CatchSubscribe(o => { UpdateOffers(o); IsLoading.Value = false; }, CloseCancellation); }
protected override void OnInitialize() { base.OnInitialize(); DbReloadToken .Merge(Begin.Select(x => (object)x)) .Merge(End.Select(x => (object)x)) .SelectMany(_ => RxQuery(s => s.Query <Check>() .Where(x => x.Clerk != null && x.Date <= End.Value.AddDays(1) && x.Date >= Begin.Value) .Select(x => x.Clerk) .Distinct().ToList() .Select(x => new Selectable <string>(x)).ToList())) .Subscribe(Users); AddressSelector.Init(); AddressSelector.FilterChanged.Cast <object>() .Merge(DbReloadToken) .Merge(Begin.Select(x => (object)x)) .Merge(End.Select(x => (object)x)) .Merge(Users.SelectMany(x => x?.Select(p => p.Changed()).Merge() ?? Observable.Empty <EventPattern <PropertyChangedEventArgs> >())) .Throttle(Consts.FilterUpdateTimeout, UiScheduler) .SelectMany(_ => RxQuery(s => { var query = s.Query <Check>() .Where(c => c.Date <= End.Value.AddDays(1) && c.Date >= Begin.Value && AddressSelector.GetActiveFilter().Contains(c.Address)); var selectedUsers = Users.Value.Where(x => x.IsSelected).Select(x => x.Item).ToArray(); if (selectedUsers.Length != Users.Value.Count && Users.Value.Count > 0) { query = query.Where(x => selectedUsers.Contains(x.Clerk)); } return(query.OrderByDescending(x => x.Date) .Fetch(x => x.Address) .ToList()); })) .Subscribe(Items); }
protected override void OnInitialize() { base.OnInitialize(); Bus.Listen <string>("db") .Where(m => m == "Reload") .Subscribe(_ => CatalogOffers?.Clear(), CloseCancellation.Token); Offers.Select(v => { v = v ?? new List <Offer>(); if (IsFilterByCatalogName) { return(v.GroupBy(g => g.GroupName) .Select(g => new object[] { new GroupHeader(g.Key) }.Concat(g)) .SelectMany(o => o) .ToList()); } else { return(v.Cast <object>().ToList()); } }) .Subscribe(DisplayItems); CurrentDisplayItem.OfType <Offer>().Subscribe(CurrentOffer); CurrentOffer.Subscribe(CurrentDisplayItem); //.Skip(1) - пропускаем начальные значения CurrentRegion.Cast <Object>().Skip(1) .Merge(CurrentFilter.Skip(1)) .Merge(CurrentProducer.Skip(1)) .Merge(HideJunk.Select(v => (object)v).Skip(1)) .Subscribe(_ => Filter()); DbReloadToken.SelectMany(_ => Env.RxQuery(s => { if (IsFilterByCatalogName) { var catalogs = s.Query <Catalog>() .Fetch(c => c.Name) .Where(c => c.Name == filterCatalogName).ToArray(); var ids = catalogs.Select(c => c.Id).ToArray(); var result = s.Query <Offer>() .Where(o => ids.Contains(o.CatalogId)) .Fetch(o => o.Price) .ToList(); result.Each(o => o.GroupName = catalogs.Where(c => c.Id == o.CatalogId) .Select(c => c.FullName) .FirstOrDefault()); return(result); } else { var catalogId = filterCatalog.Id; return(s.Query <Offer>().Where(o => o.CatalogId == catalogId) .Fetch(o => o.Price) .ToList()); } })).CatchSubscribe(x => { CatalogOffers = x; UpdateFilters(); Filter(false); UpdateOffers(Offers.Value); if (x.Count == 0) { Manager.Warning("Нет предложений"); TryClose(); } }, CloseCancellation); UpdateMaxProducers(); }
protected override void OnInitialize() { base.OnInitialize(); var obProducers = DbReloadToken .SelectMany(_ => RxQuery(s => new[] { EmptyProducer } .Concat(s.Query <Producer>() .OrderBy(p => p.Name) .ToList()) .ToList())); obProducers.Subscribe(Producers); obProducers.Subscribe(_ => { var currentFilterProducerId = CurrentFilterProducer.HasValue ? CurrentFilterProducer.Value.Id : 0; if (CanSaveFilterProducer.Value && currentFilterProducerId > 0 && Producers.Value.Any(d => d.Id == currentFilterProducerId)) { CurrentProducer.Value = CurrentFilterProducer.Value; } }); SearchBehavior.ActiveSearchTerm.Cast <object>() .Merge(Prices.Select(p => p.Changed()).Merge().Throttle(Consts.FilterUpdateTimeout, UiScheduler)) .Merge(OnlyBase.Changed()) .Merge(CurrentProducer.Changed()) .Merge(HideJunk.Changed()) .Merge(DbReloadToken) .Select(v => { ProducerFilterStateSet(); var term = SearchBehavior.ActiveSearchTerm.Value; if (String.IsNullOrEmpty(term)) { return(Observable.Return(new List <Offer>())); } IsLoading.Value = true; return(RxQuery(s => { var query = s.Query <Offer>(); query = Util.ContainsAny(query, o => o.ProductSynonym, term.Split(new [] { ' ' }, StringSplitOptions.RemoveEmptyEntries)); query = Util.Filter(query, o => o.Price.Id, Prices); var producer = CurrentProducer.Value; if (producer != null && producer.Id > 0) { var id = producer.Id; query = query.Where(o => o.ProducerId == id); } if (OnlyBase) { query = query.Where(o => o.Price.BasePrice); } if (HideJunk) { query = query.Where(o => !o.Junk); } var result = SortOffers(query.Fetch(o => o.Price).ToList()); return result; })); }) .Switch() //будь бдителен CalculateRetailCost и LoadOrderItems может вызвать обращение к базе если данные еще не загружены //тк синхронизация не производится загрузка должна выполняться в основной нитке .Do(v => { LoadOrderItems(v); Calculate(v); IsLoading.Value = false; }) .Subscribe(Offers, CloseCancellation.Token); //используется в случае если нужно найти предложения по позиции отказа if (!String.IsNullOrEmpty(initTerm)) { DbReloadToken .Do(_ => IsLoading.Value = true) .SelectMany(_ => RxQuery(s => QueryByFullText(s, initTerm))) .Do(v => { LoadOrderItems(v); Calculate(v); IsLoading.Value = false; }) .Subscribe(Offers, CloseCancellation.Token); } }