示例#1
0
        protected override void OnInitialize()
        {
            base.OnInitialize();

            ProductInfo  = new ProductInfo(this, CurrentLine.OfType <BaseOffer>());
            OrderWarning = new InlineEditWarning(UiScheduler, Manager);

            //если это отправленный заказ редактор не должен работать
            var currentOrderLine = new NotifyValue <OrderLine>();

            if (IsCurrentOrder)
            {
                currentOrderLine = CurrentLine.Select(v => (OrderLine)v).ToValue();
                currentOrderLine.Subscribe(v => CurrentLine.Value = v);
            }
            editor             = new Editor(OrderWarning, Manager, currentOrderLine, Lines.Cast <IList>().ToValue());
            OnlyWarningVisible = new NotifyValue <bool>(User.IsPreprocessOrders && IsCurrentOrder);
            CurrentLine.OfType <BaseOffer>()
            .Throttle(Consts.LoadOrderHistoryTimeout, Scheduler)
            .Select(x => RxQuery(s => BaseOfferViewModel.LoadOrderHistory(s, Cache, Settings.Value, x, Address)))
            .Switch()
            .Subscribe(HistoryOrders, CloseCancellation.Token);

            FilterItems.Select(p => p.Changed()).Merge().Throttle(Consts.FilterUpdateTimeout, UiScheduler)
            .Select(_ => Filter())
            .Subscribe(Lines, CloseCancellation.Token);
        }
        public InputQuantity(OrderedStock stock)
        {
            InitFields();
            Quantity.Value     = null;
            Multiplicity.Value = null;
            SrcStock.Value     = stock;
            var env = Config.Env.Current;

            Warning      = new InlineEditWarning(env.Scheduler, null);
            WasCancelled = true;
        }
示例#3
0
 public Frontend2()
 {
     DisplayName = "Регистрация продаж";
     InitFields();
     Status.Value        = "Готов к работе(F1 для справки)";
     Lines               = new ReactiveCollection <CheckLine>();
     CheckLinesForReturn = new List <CheckLine>();
     Warning             = new InlineEditWarning(Scheduler, Manager);
     OnCloseDisposable.Add(SearchBehavior = new SearchBehavior(Env));
     SearchBehavior.ActiveSearchTerm.Where(x => !String.IsNullOrEmpty(x))
     .Subscribe(x => Coroutine.BeginExecute(Enter().GetEnumerator()));
     CurrentCatalog.Select(x => x?.Name?.Description != null)
     .Subscribe(CanShowDescription);
 }
        public InputQuantity(Stock stock)
        {
            InitFields();
            Quantity.Value     = null;
            Multiplicity.Value = null;
            SrcStock.Value     = Session.Connection
                                 .Query <OrderedStock>("select * from Stocks where Id = @Id", new { stock.Id })
                                 .First();
            SrcStock.Value.Address = stock.Address;
            var env = Config.Env.Current;

            Warning      = new InlineEditWarning(env.Scheduler, null);
            WasCancelled = true;
        }
示例#5
0
        public OrderLinesViewModel()
        {
            DisplayName = "Сводный заказ";

            InitFields();
            Lines             = new NotifyValue <ObservableCollection <OrderLine> >(new ObservableCollection <OrderLine>());
            SentLines         = new NotifyValue <List <SentOrderLine> >(new List <SentOrderLine>());
            IsCurrentSelected = new NotifyValue <bool>(true);
            Begin             = new NotifyValue <DateTime>(DateTime.Today.AddMonths(-3).FirstDayOfMonth());
            End             = new NotifyValue <DateTime>(DateTime.Today);
            AddressSelector = new AddressSelector(this);

            FilterItems = new List <Selectable <Tuple <string, string> > >();
            FilterItems.Add(new Selectable <Tuple <string, string> >(Tuple.Create("InFrozenOrders", "Позиции присутствуют в замороженных заказах")));
            FilterItems.Add(new Selectable <Tuple <string, string> >(Tuple.Create("IsMinCost", "Позиции по мин.ценам")));
            FilterItems.Add(new Selectable <Tuple <string, string> >(Tuple.Create("IsNotMinCost", "Позиции не по мин.ценам")));
            FilterItems.Add(new Selectable <Tuple <string, string> >(Tuple.Create("OnlyWarning", "Только позиции с корректировкой")));

            CanDelete    = CurrentLine.CombineLatest(IsCurrentSelected, (l, s) => l != null && s).ToValue();
            BeginEnabled = IsSentSelected.ToValue();
            EndEnabled   = IsSentSelected.ToValue();

            IsCurrentSelected.Subscribe(_ => NotifyOfPropertyChange(nameof(CanPrint)));
            IsCurrentSelected.Subscribe(_ => NotifyOfPropertyChange(nameof(CanExport)));

            Sum = new NotifyValue <decimal>(() => {
                if (IsCurrentSelected)
                {
                    return(Lines.Value.Sum(l => l.MixedSum));
                }
                return(SentLines.Value.Sum(l => l.MixedSum));
            }, SentLines, Lines, IsCurrentSelected);

            OrderWarning = new InlineEditWarning(UiScheduler, Manager);
            QuickSearch  = new QuickSearch <OrderLine>(UiScheduler,
                                                       s => Lines.Value.FirstOrDefault(l => l.ProductSynonym.IndexOf(s, StringComparison.CurrentCultureIgnoreCase) >= 0),
                                                       CurrentLine);
            QuickSearch2 = new QuickSearch <SentOrderLine>(UiScheduler,
                                                           s => SentLines.Value.FirstOrDefault(l => l.ProductSynonym.IndexOf(s, StringComparison.CurrentCultureIgnoreCase) >= 0),
                                                           SelectedSentLine);
            Editor = new Editor(OrderWarning, Manager, CurrentLine, Lines.Cast <IList>().ToValue());

            var currentLinesChanged = this.ObservableForProperty(m => m.CurrentLine.Value.Count)
                                      .Throttle(Consts.RefreshOrderStatTimeout, UiScheduler)
                                      .Select(e => new Stat(Address));

            OnCloseDisposable.Add(Bus.RegisterMessageSource(currentLinesChanged));
            OnCloseDisposable.Add(currentLinesChanged.Subscribe(_ => Sum.Recalculate()));

            Settings.Subscribe(_ => CalculateOrderLine());

            if (Session != null)
            {
                Prices = Session.Query <Price>().OrderBy(p => p.Name).ToList()
                         .Select(p => new Selectable <Price>(p))
                         .ToList();
            }
            else
            {
                Prices = new List <Selectable <Price> >();
            }

            MatchedWaybills = new MatchedWaybills(this, SelectedSentLine, IsSentSelected);
            IsCurrentSelected
            .Select(v => v ? "Lines" : "SentLines")
            .Subscribe(ExcelExporter.ActiveProperty);

            Observable.Merge(IsCurrentSelected.Select(x => (object)x), Lines, SentLines, currentLinesChanged)
            .Select(_ => {
                if (IsCurrentSelected)
                {
                    return(Lines.Value?.Count ?? 0);
                }
                return(SentLines.Value?.Count ?? 0);
            })
            .Subscribe(LinesCount);
            IsLoading = new NotifyValue <bool>();
            IsCurrentSelected.Where(v => v)
            .Select(_ => false)
            .Subscribe(IsLoading);

            SessionValue(Begin, GetType().Name + ".Begin");
            SessionValue(End, GetType().Name + ".End");
            SessionValue(IsSentSelected, GetType().Name + ".IsSentSelected");
            Persist(IsExpanded, "IsExpanded");

            PrintMenuItems = new ObservableCollection <MenuItem>();
            IsView         = true;
        }
        public StockChooser(uint catalogId, IList <CheckLine> lines, Address address)
        {
            BaseScreen.InitFields(this);
            DisplayName                  = "Выберите товар";
            ShowEquivalents.Value        = true;
            ShowEquivalentsEnabled.Value = true;
            var env = Config.Env.Current;

            Warning = new InlineEditWarning(env.Scheduler, null);

            env.RxQuery(s => s.Get <Catalog>(catalogId)?.FullName)
            .Subscribe(Name);
            ShowEquivalents.Do(_ => IsLoading.Value = true).SelectMany(_ =>
                                                                       env.RxQuery(s => {
                var catalogIds = new [] { catalogId };
                var catalog    = s.Query <Catalog>().Fetch(x => x.Name).FirstOrDefault(x => x.Id == catalogId);
                if (catalog?.Type != null && catalog.Name.Mnn != null)
                {
                    if (ShowEquivalents)
                    {
                        var similars = s.Query <Catalog>().Where(x => x.Type == catalog.Type && x.Name.Mnn == catalog.Name.Mnn).ToArray();
                        catalogIds   = catalogIds.Concat(similars.Select(x => x.Id)).ToArray();
                    }
                }
                else
                {
                    ShowEquivalentsEnabled.Value = false;
                }

                var sql   = @"select * from Stocks
where CatalogId in @catalogIds
	and AddressId = @addressId
	and Quantity > 0
	and RejectStatus <> @status
	and Status = @stockStatus
	and RetailCost > 0"    ;
                var items = s.Connection.Query <OrderedStock>(sql, new {
                    catalogIds,
                    addressId   = address.Id,
                    status      = RejectStatus.Defective,
                    stockStatus = StockStatus.Available
                })
                            .OrderBy(x => x.Exp)
                            .ToList();
                foreach (var item in items)
                {
                    if (item.Exp != null)
                    {
                        item.Exp = item.Exp.Value.ToLocalTime();
                    }
                    item.Address = address;
                    item.Ordered = (uint?)lines.FirstOrDefault(x => x.Id == item.Id)?.Quantity;
                }
                return(items);
            })).Do(_ => IsLoading.Value = false).Subscribe(Items);

            Items.Take(1).Subscribe(x => {
                if (x.All(y => y.CatalogId != catalogId))
                {
                    ShowEquivalentsEnabled.Value = false;
                    Message.Value = "Предложений по товару не найдено, отображены эквиваленты";
                }
            });

            CurrentCatalog.Value = Session.Query <Catalog>()
                                   .Fetch(c => c.Name)
                                   .ThenFetch(n => n.Mnn)
                                   .FirstOrDefault(c => c.Id == catalogId);
        }
示例#7
0
        protected override void OnInitialize()
        {
            base.OnInitialize();

            Promotions         = new PromotionPopup(Shell.Config, CurrentCatalog.Select(x => x?.Name), Env);
            ProducerPromotions = new ProducerPromotionPopup(Shell.Config, CurrentCatalog.Select(x => x?.Name), Env);

            OrderWarning = new InlineEditWarning(UiScheduler, Manager);
            CurrentOffer
            .Throttle(Consts.LoadOrderHistoryTimeout, Scheduler)
            .Select(_ => RxQuery(LoadHistoryOrders))
            .Switch()
            .Subscribe(HistoryOrders, CloseCancellation.Token);
            CurrentOffer
            .Where(x => !(x?.StatLoaded).GetValueOrDefault())
            .Throttle(Consts.LoadOrderHistoryTimeout, Scheduler)
            .Select(_ => RxQuery(LoadStat))
            .Switch()
            .Subscribe(x => {
                if (x == null || CurrentOffer.Value == null)
                {
                    return;
                }
                ApplyStat(x);
            }, CloseCancellation.Token);

            CurrentOffer
#if !DEBUG
            .Throttle(Consts.ScrollLoadTimeout)
#endif
            .Select(x => RxQuery(s => {
                if (x == null)
                {
                    return(null);
                }
                if (CurrentCatalog.Value?.Id == x.CatalogId)
                {
                    return(CurrentCatalog.Value);
                }
                var sql = @"select c.*, cn.*, m.*, cn.DescriptionId as Id
from Catalogs c
join CatalogNames cn on cn.Id = c.NameId
left join Mnns m on m.Id = cn.MnnId
where c.Id = ?";
                return(s
                       .Connection.Query <Catalog, CatalogName, Mnn, ProductDescription, Catalog>(sql, (c, cn, m, d) => {
                    c.Name = cn;
                    if (cn != null)
                    {
                        cn.Mnn = m;
                        cn.Description = d;
                    }
                    return c;
                }, new { x.CatalogId }).FirstOrDefault());
            }))
            .Switch()
            .Subscribe(CurrentCatalog, CloseCancellation.Token);

            //изменения в LastEditOffer могут произойти уже после перехода на другое предложение
            //по этому нужно отслеживать изменения в CurrentOffer и LastEditOffer
            var observable = this.ObservableForProperty(m => m.CurrentOffer.Value.OrderCount)
                             .Merge(this.ObservableForProperty(m => m.LastEditOffer.Value.OrderCount))
                             .Throttle(Consts.RefreshOrderStatTimeout, UiScheduler)
                             .Select(e => new Stat(Address));

            OnCloseDisposable.Add(Bus.RegisterMessageSource(observable));
        }