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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
            }
        }