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; }
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 }; }
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"); }