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