Exemplo n.º 1
0
 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);
 }
Exemplo n.º 2
0
 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);
 }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        protected override void OnInitialize()
        {
            base.OnInitialize();

            OnlyWarningVisible = IsCurrentSelected.Select(v => v && User.IsPreprocessOrders).ToValue();
            ProductInfo        = new ProductInfo(this, CurrentLine);
            ProductInfo2       = new ProductInfo(this, SelectedSentLine);
            AddressSelector.Init();
            AddressSelector.FilterChanged
            .Merge(Prices.Select(p => p.Changed()).Merge().Throttle(Consts.FilterUpdateTimeout, UiScheduler))
            .Merge(DbReloadToken)
            .Merge(OrdersReloadToken)
            .Merge(FilterItems.Select(p => p.Changed()).Merge().Throttle(Consts.FilterUpdateTimeout, UiScheduler))
            .Where(_ => IsCurrentSelected && Session != null)
            .Select(_ =>
            {
                var orders = AddressSelector.GetActiveFilter().SelectMany(o => o.Orders)
                             .Where(x => Prices.Where(y => y.IsSelected).Select(y => y.Item.Id).Contains(x.Price.Id)).ToList();
                var activeOrders = orders.Where(x => !x.Frozen).ToList();

                var lines = activeOrders.SelectMany(o => o.Lines)
                            .OrderBy(l => l.Id)
                            .ToObservableCollection();
                lines.Each(l => {
                    l.Settings = Settings;
                    l.Order.CalculateStyle(Address);
                    if (l.Order.IsAddressExists())
                    {
                        l.CalculateRetailCost(Settings.Value.Markups, Shell?.SpecialMarkupProducts.Value, User);
                    }
                });

                // #48323 Присутствует в замороженных заказах
                var productInFrozenOrders = orders.Where(x => x.Frozen).SelectMany(x => x.Lines)
                                            .Select(x => x.ProductId).Distinct().ToList();
                lines.Where(x => productInFrozenOrders.Contains(x.ProductId))
                .Each(x => x.InFrozenOrders = true);

                var selected = FilterItems.Where(p => p.IsSelected).Select(p => p.Item.Item1).ToArray();
                if (selected.Count() != FilterItems.Count())
                {
                    var ids = new List <uint>();
                    if (selected.Contains("InFrozenOrders"))
                    {
                        ids.AddRange(lines.Where(x => x.InFrozenOrders).Select(x => x.Id));
                    }
                    if (selected.Contains("IsMinCost"))
                    {
                        ids.AddRange(lines.Where(x => x.IsMinCost).Select(x => x.Id));
                    }
                    if (selected.Contains("IsNotMinCost"))
                    {
                        ids.AddRange(lines.Where(x => !x.IsMinCost).Select(x => x.Id));
                    }
                    if (selected.Contains("OnlyWarning"))
                    {
                        ids.AddRange(lines.Where(x => x.SendResult != LineResultStatus.OK).Select(x => x.Id));
                    }
                    return(lines.Where(x => ids.Contains(x.Id)).ToObservableCollection());
                }
                return(lines);
            })
            .Subscribe(Lines, CloseCancellation.Token);

            IsSentSelected.Where(v => v)
            .Select(v => (object)v)
            .Merge(Begin.Select(d => (object)d))
            .Merge(End.Select(d => (object)d))
            .Merge(Prices.Select(p => p.Changed()).Merge().Throttle(Consts.FilterUpdateTimeout, UiScheduler))
            .Merge(AddressSelector.FilterChanged)
            .Merge(DbReloadToken)
            .Do(_ => { IsLoading.Value = true; })
            //защита от множества запросов
            .Throttle(TimeSpan.FromMilliseconds(30), Scheduler)
            .Where(_ => IsSentSelected)
            .Select(_ => RxQuery(s => {
                var begin      = Begin.Value;
                var end        = End.Value.AddDays(1);
                var addressIds = AddressSelector.GetActiveFilter().Select(a => a.Id).ToArray();
                var query      = s.Query <SentOrderLine>()
                                 .Fetch(l => l.Order)
                                 .ThenFetch(o => o.Address)
                                 .Fetch(o => o.Order)
                                 .ThenFetch(o => o.Price)
                                 .Where(l => l.Order.SentOn > begin && l.Order.SentOn < end)
                                 .Where(l => addressIds.Contains(l.Order.Address.Id));

                query = Util.Filter(query, l => l.Order.Price.Id, Prices);

                var lines = query.OrderBy(l => l.ProductSynonym)
                            .ThenBy(l => l.ProductSynonym)
                            .Take(1000)
                            .ToList();
                if (Settings.Value.HighlightUnmatchedOrderLines)
                {
                    var lookup = MatchedWaybills.GetLookUp(s, lines);
                    lines.Each(l => l.Order.CalculateStyle(Address));
                    lines.Each(l => l.Configure(User, lookup));
                }
                else
                {
                    lines.Each(l => l.Order.CalculateStyle(Address));
                    lines.Each(l => l.Configure(User));
                }
                return(lines);
            }))
            .Switch()
            .Do(_ => IsLoading.Value = false)
            .Subscribe(SentLines, CloseCancellation.Token);

            CurrentLine
            .Throttle(Consts.ScrollLoadTimeout, UiScheduler)
            .Merge(DbReloadToken)
            .Subscribe(_ => UpdateAsync(), CloseCancellation.Token);
            CurrentLine
            .Throttle(Consts.LoadOrderHistoryTimeout, Scheduler)
            .SelectMany(x => Env.RxQuery(s => LoadOrderHistory(s, Cache, Settings.Value, x, ActualAddress)))
            .Subscribe(HistoryOrders, CloseCancellation.Token);
        }