private CatalogOfferViewModel(OfferComposedId initOfferId = null)
            : base(initOfferId)
        {
            InitFields();
            NeedToCalculateDiff = true;
            DisplayName         = "Сводный прайс-лист";
            Filters             = new[] { "Все", "Основные", "Неосновные" };

            CurrentFilter.Value = Filters[0];
            CurrentRegion.Value = Consts.AllRegionLabel;

            GroupByProduct.Value = Settings.Value.GroupByProduct;
            GroupByProduct.Subscribe(_ => Offers.Value = Sort(Offers.Value));

            RetailMarkup = new NotifyValue <decimal>(true,
                                                     () => MarkupConfig.Calculate(Settings.Value.Markups, CurrentOffer.Value, User, Address),
                                                     Settings);

            RetailCost = CurrentOffer.CombineLatest(RetailMarkup, Rounding,
                                                    (o, m, r) => Round(NullableHelper.Round(o?.ResultCost * (1 + m / 100), 2), r))
                         .ToValue();

            CurrentOffer.Subscribe(_ => RetailMarkup.Recalculate());

            Persist(HideJunk, "HideJunk");
            Persist(GroupByProduct, "GroupByProduct");
            SessionValue(CurrentRegion, "CurrentRegion");
            SessionValue(CurrentFilter, "CurrentFilter");

            PrintMenuItems = new ObservableCollection <MenuItem>();
            IsView         = true;
        }
        public PriceOfferViewModel(PriceComposedId priceId, bool showLeaders, OfferComposedId initOfferId = null)
            : base(initOfferId)
        {
            //мы не можем принимать объект который принадлежит другой форме
            //это может вызвать исключение если сессия в которой был загружен объект будет закрыта
            //утечки памяти если текущая форма подпишется на события изменения в переданном объекте
            //между формами можно передавать только примитивные объекты
            this.priceId = priceId;

            DisplayName = "Заявка поставщику";
            Price       = new NotifyValue <Price>();
            IsLoading   = new NotifyValue <bool>();

            Filters       = filters;
            CurrentFilter = new NotifyValue <string>(filters[0]);
            if (showLeaders)
            {
                FilterLeader();
            }

            //по идее это не нужно тк обо всем должен позаботится сборщик мусора
            //но если не удалить подписку будет утечка памяти
            OnCloseDisposable.Add(this.ObservableForProperty(m => m.Price.Value.Order)
                                  .Subscribe(_ => NotifyOfPropertyChange(nameof(CanDeleteOrder))));
            SearchBehavior = new SearchBehavior(this);

            CurrentProducer.Cast <object>()
            .Merge(CurrentFilter.Cast <object>())
            .Merge(SearchBehavior.ActiveSearchTerm.Cast <object>())
            .Subscribe(_ => Filter());

            PrintMenuItems = new ObservableCollection <MenuItem>();
            IsView         = true;
        }
 public CatalogOfferViewModel(Catalog catalog, OfferComposedId initOfferId = null)
     : this(initOfferId)
 {
     filterCatalog = catalog;
     ViewHeader    = catalog.FullName;
     //тк мы фильтруем по каталожному продукту то нет нужды загружать его
     CurrentCatalog.Value = catalog;
 }
Exemplo n.º 4
0
        public ProductInfo(BaseScreen screen, IObservable <BaseOffer> value)
        {
            CurrentCatalog = new NotifyValue <Catalog>();
            manager        = screen.Manager;
            shell          = screen.Shell;

            value.Subscribe(x => {
                currentOffer = x;
                offerId      = (x as OrderLine)?.OfferId;
                NotifyOfPropertyChange(nameof(CurrentOffer));
            });
            value.Throttle(Consts.ScrollLoadTimeout, screen.Env.Scheduler)
            .Where(x => x?.CatalogId != CurrentCatalog.Value?.Id)
            .SelectMany(x => screen.Env.RxQuery(s => {
                if (x == null)
                {
                    return(null);
                }
                return(s.Query <Catalog>()
                       .Fetch(c => c.Name)
                       .ThenFetch(n => n.Mnn)
                       .First(c => c.Id == x.CatalogId));
            }))
            .Subscribe(CurrentCatalog);

            this.ObservableForProperty(m => m.CurrentCatalog)
            .Subscribe(_ => {
                NotifyOfPropertyChange(nameof(CanShowDescription));
                NotifyOfPropertyChange(nameof(CanShowCatalog));
                NotifyOfPropertyChange(nameof(CanShowCatalogWithMnnFilter));
            });

            var binding = new CommandBinding(ShowCatalogCommand,
                                             (sender, args) => ShowCatalog(),
                                             (sender, args) => {
                args.CanExecute = CanShowCatalog;
            });
            var binding1 = new CommandBinding(ShowDescriptionCommand,
                                              (sender, args) => ShowDescription(),
                                              (sender, args) => {
                args.CanExecute = CanShowDescription;
            });
            var binding2 = new CommandBinding(ShowMnnCommand,
                                              (sender, args) => ShowCatalogWithMnnFilter(),
                                              (sender, args) => {
                args.CanExecute = CanShowCatalogWithMnnFilter;
            });

            Bindings = new[] { binding, binding1, binding2 };
        }
Exemplo n.º 5
0
        public BaseOfferViewModel(OfferComposedId initOfferId = null)
        {
            Readonly         = true;
            UpdateOnActivate = false;

            this.initOfferId = initOfferId;

            LastEditOffer   = new NotifyValue <Offer>();
            Offers          = new NotifyValue <IList <Offer> >(new List <Offer>());
            CurrentProducer = new NotifyValue <Producer>(EmptyProducer);
            Producers       = new NotifyValue <List <Producer> >(new List <Producer> {
                EmptyProducer
            });
            InitFields();

            CurrentCatalog.Select(x => x?.Name?.Description != null)
            .Subscribe(CanShowDescription);
            CurrentCatalog.Select(x => x?.Name?.Mnn != null)
            .Subscribe(CanShowCatalogWithMnnFilter);
            CurrentOffer.Select(x => x?.OrderLine?.Order)
            .Subscribe(CurrentOrder);

            CurrentOffer.Subscribe(_ => {
                if (ResetAutoComment)
                {
                    AutoCommentText = CurrentOffer.Value?.OrderLine?.Comment;
                }
            });
            CurrentOffer
            .Select(_ => (List <SentOrderLine>)Cache[HistoryOrdersCacheKey(Settings.Value, CurrentOffer.Value)])
            .Subscribe(HistoryOrders);

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

            SessionValue(CanSaveFilterProducer, "CanSaveFilterProducer");
            SessionValue(CurrentFilterProducer, "CurrentFilterProducer");
        }