Exemplo n.º 1
0
        public Mails()
        {
            DisplayName = "Минипочта";
            Sort        = new[] {
                "Сортировка: Дата",
                "Сортировка: Тема",
                "Сортировка: Отправитель",
                "Сортировка: Важность",
            };

            Term          = new NotifyValue <string>();
            CurrentItem   = new NotifyValue <Mail>();
            SelectedItems = new ObservableCollection <Mail>();
            CurrentSort   = new NotifyValue <string>("Сортировка: Дата");
            IsAsc         = new NotifyValue <bool>(false);

            Items = Term.Cast <object>()
                    .Throttle(TimeSpan.FromMilliseconds(100), Scheduler)
                    .Merge(CurrentSort)
                    .Merge(IsAsc.Select(v => (object)v))
                    .ObserveOn(UiScheduler)
                    .ToValue(_ => Apply());
            CanDelete = SelectedItems.Changed().ToValue(_ => SelectedItems.Count > 0);
            var updateStat = Items.ObservableForProperty(i => i.Value)
                             .Select(l => l.Value.Changed())
                             .Switch();

            OnCloseDisposable.Add(updateStat.Subscribe(_ => Shell.NewMailsCount.Value = mails.Count(m => m.IsNew)));
        }
Exemplo n.º 2
0
 public ExcelExporter(Screen model, string[] properties, string dir)
 {
     this.model      = model;
     this.Properties = properties;
     ExportDir       = dir;
     ActiveProperty  = new NotifyValue <string>();
     CanExport       = new NotifyValue <bool>();
     ActiveProperty.Select(p => Properties.Length > 0 && (p == null || Properties.Contains(p))).Subscribe(CanExport);
 }
Exemplo n.º 3
0
        public Awaited()
        {
            DisplayName = "Ожидаемые позиции";
            Items       = new NotifyValue <ObservableCollection <AwaitedItem> >();
            CurrentItem = new NotifyValue <AwaitedItem>();
            CanDelete   = CurrentItem.Select(i => i != null).ToValue();
            ActivePrint = new NotifyValue <string>();
            ActivePrint.Subscribe(ExcelExporter.ActiveProperty);

            PrintMenuItems = new ObservableCollection <MenuItem>();
            IsView         = true;
        }
        public WaybillLineSearch(DateTime begin, DateTime end)
        {
            DisplayName = "Поиск товара в накладных";
            this.begin  = begin;
            this.end    = end;

            Lines          = new NotifyValue <List <WaybillLine> >(new List <WaybillLine>());
            SearchBehavior = new SearchBehavior(this);
            CurrentLine    = new NotifyValue <WaybillLine>();
            CanEnterLine   = new NotifyValue <bool>();

            CurrentLine.Select(x => x != null)
            .Subscribe(CanEnterLine);
        }
        public RejectsViewModel()
        {
            DisplayName     = "Забракованные препараты";
            Begin           = new NotifyValue <DateTime>(DateTime.Today.AddMonths(-3));
            End             = new NotifyValue <DateTime>(DateTime.Today);
            ShowCauseReason = new NotifyValue <bool>();
            CurrentReject   = new NotifyValue <Reject>();
            CanMark         = CurrentReject.Select(r => r != null).ToValue();
            IsLoading       = new NotifyValue <bool>(true);
            QuickSearch     = new QuickSearch <Reject>(UiScheduler,
                                                       t => Rejects.Value.FirstOrDefault(o => o.Product.IndexOf(t, StringComparison.CurrentCultureIgnoreCase) >= 0),
                                                       CurrentReject);

            WatchForUpdate(CurrentReject);
            PrintMenuItems = new ObservableCollection <MenuItem>();
            IsView         = true;
        }
Exemplo n.º 6
0
        public Debug()
        {
            layout.ActivateOptions();
            Error      = "";
            Stack      = new NotifyValue <bool>();
            Sql        = new NotifyValue <string>("");
            SqlCount   = new NotifyValue <int>();
            ErrorCount = new NotifyValue <int>();
            HaveErrors = ErrorCount.Select(c => c > 0).ToValue();

            PresentationTraceSources.DataBindingSource.Listeners.Add(new DelegateTraceListner(m => {
                ErrorCount.Value++;
                Error += m + "\r\n";
            }));

            var catcherSql = new QueryCatcher();

            catcherSql.Appender = this;
            catcherSql.Start();

            var repository = (Hierarchy)log4net.LogManager.GetRepository();
            var logger     = (Logger)repository.GetLogger("AnalitF.Net.Client");

            if (logger.Level > Level.Warn)
            {
                logger.Level = Level.Warn;
            }
            logger.AddAppender(this);

            var caliburncatcher = new QueryCatcher("Caliburn.Micro");

            caliburncatcher.Additivity = true;
            caliburncatcher.Level      = Level.Warn;
            caliburncatcher.Appender   = this;
            caliburncatcher.Start();
        }
        public CatalogViewModel()
        {
            ViewOffersByCatalog        = true;
            ViewOffersByCatalogEnabled = Settings.Select(s => s.CanViewOffersByCatalogName).ToValue();

            this.ObservableForProperty(m => m.Mode).Subscribe(x =>
            {
                CatalogSelectorVisible.Value = Mode == CatalogViewMode.CatalogSelector;
                AddToAwaitedVisible.Value    = Mode == CatalogViewMode.Basic;
                ShowAwaitedVisible.Value     = Mode == CatalogViewMode.Basic;
            });


            DisplayName = "Поиск препаратов в каталоге";
            Filters     = new[] {
                new FilterDeclaration("Все"),
                new FilterDeclaration("Жизненно важные", "жизненно важным", "только жизненно важные",
                                      FilterType.VitallyImportant),
                new FilterDeclaration("Обязательный ассортимент", "обязательному ассортименту", "только обязательные ассортимент",
                                      FilterType.Mandatory),
                new FilterDeclaration("Ожидаемые позиции", "ожидаемым позициям", "только ожидаемые позиции",
                                      FilterType.Awaited),
                new FilterDeclaration("ПКУ", "ПКУ", "только ПКУ",
                                      FilterType.PKU),
                new FilterDeclaration("ПКУ:Наркотические и психотропные",
                                      "ПКУ:Наркотические и психотропные",
                                      "только ПКУ:Наркотические и психотропные",
                                      FilterType.PKUNarcotic),
                new FilterDeclaration("ПКУ:Сильнодействующие. и ядовитые",
                                      "ПКУ:Сильнодействующие. и ядовитые",
                                      "только ПКУ:Сильнодействующие. и ядовитые",
                                      FilterType.PKUToxic),
                new FilterDeclaration("ПКУ:Комбинированные", "ПКУ:Комбинированные", "только ПКУ:Комбинированные",
                                      FilterType.PKUCombined),
                new FilterDeclaration("ПКУ:Иные лек.средства", "ПКУ:Иные лек.средства", "только ПКУ:Иные лек.средства",
                                      FilterType.PKUOther),
            };
            CurrentFilter = Filters[0];

            CatalogSearch = new NotifyValue <bool>();
            this.ObservableForProperty(m => m.ActiveItem)
            .Select(i => i.Value != null ? i.Value.CanExport : Observable.Return(false))
            .Switch()
            .Subscribe(CanExport);
            CatalogSearch.CatchSubscribe(_ => UpdateActiveItem(), CloseCancellation);

            CanAddToAwaited = this
                              .ObservableForProperty(m => (object)m.CurrentCatalog, skipInitial: false)
                              .Merge(this.ObservableForProperty(m => (object)m.CurrentCatalogName))
                              .Select(v => GuessCatalog() != null)
                              .ToValue();

            CanCatalogSelector = this
                                 .ObservableForProperty(m => (object)m.CurrentCatalog, skipInitial: false)
                                 .Merge(this.ObservableForProperty(m => (object)m.CurrentCatalogName))
                                 .Select(v => CurrentCatalog != null)
                                 .ToValue();

            this.ObservableForProperty(m => m.CurrentCatalogName)
            .Subscribe(_ => NotifyOfPropertyChange("CanShowDescription"));

            ViewOffersByCatalogVisible = CatalogSearch.Select(v => !v)
                                         .ToValue();

            OnCloseDisposable.Add(Disposable.Create(() => {
                if (ActiveItem is IDisposable)
                {
                    ((IDisposable)ActiveItem).Dispose();
                }
            }));
            IsEnabled = new NotifyValue <bool>(true);
            InitFields();
            Mode = CatalogViewMode.Basic;
        }
Exemplo n.º 8
0
        public Batch()
        {
            NavigateOnShowCatalog = true;
            DisplayName           = "АвтоЗаказ";
            AddressSelector       = new AddressSelector(this);
            Filter = new[] {
                "Все",
                "Заказано",
                "   Минимальные",
                "   Не минимальные",
                "   Присутствующие в замороженных заказах",
                "   Ограничен лимитом",
                "Не заказано",
                "   Нет предложений",
                "   Нулевое количество",
                "   Прочее",
                "   Не сопоставлено",
                "   Лимит исчерпан"
            };
            CurrentFilter  = new NotifyValue <string>("Все");
            SearchBehavior = new SearchBehavior(this);
            Lines          = new NotifyValue <ObservableCollection <BatchLineView> >(new ObservableCollection <BatchLineView>());
            ReportLines    = new NotifyValue <ObservableCollection <BatchLineView> >(() => {
                var query = Lines.Value.Where(l => l.Product.CultureContains(SearchBehavior.ActiveSearchTerm.Value) &&
                                              (l.OrderLine != null || !l.BatchLine.Status.HasFlag(ItemToOrderStatus.Ordered)));
                if (CurrentFilter.Value == Filter[1])
                {
                    query = query.Where(l => !l.IsNotOrdered);
                }
                else if (CurrentFilter.Value == Filter[2])
                {
                    query = query.Where(l => !l.IsNotOrdered && l.IsMinCost);
                }
                else if (CurrentFilter.Value == Filter[3])
                {
                    query = query.Where(l => !l.IsNotOrdered && !l.IsMinCost);
                }
                else if (CurrentFilter.Value == Filter[4])
                {
                    query = query.Where(l => !l.IsNotOrdered && l.ExistsInFreezed);
                }
                else if (CurrentFilter.Value == Filter[5])
                {
                    query = query.Where(l => l.IsSplitByLimit);
                }
                else if (CurrentFilter.Value == Filter[6])
                {
                    query = query.Where(l => l.IsNotOrdered);
                }
                else if (CurrentFilter.Value == Filter[7])
                {
                    query = query.Where(l => l.IsNotOrdered && !l.BatchLine.Status.HasFlag(ItemToOrderStatus.OffersExists));
                }
                else if (CurrentFilter.Value == Filter[8])
                {
                    query = query.Where(l => l.IsNotOrdered && l.BatchLine.Quantity == 0);
                }
                else if (CurrentFilter.Value == Filter[9])
                {
                    query = query.Where(l => l.IsNotOrdered && l.BatchLine.Quantity > 0 &&
                                        l.BatchLine.ProductId != null &&
                                        l.BatchLine.Status.HasFlag(ItemToOrderStatus.OffersExists));
                }
                else if (CurrentFilter.Value == Filter[10])
                {
                    query = query.Where(l => l.IsNotOrdered && l.BatchLine.ProductId == null);
                }
                else if (CurrentFilter.Value == Filter[11])
                {
                    query = query.Where(l => l.IsLimited);
                }
                return(query.OrderBy(l => l.Product).ToObservableCollection());
            }, CurrentFilter, SearchBehavior.ActiveSearchTerm);
            CurrentReportLine   = new NotifyValue <BatchLineView>();
            CanDelete           = CurrentReportLine.Select(l => l != null).ToValue();
            SelectedReportLines = new List <BatchLineView>();
            CanClear            = Lines.CollectionChanged()
                                  .Select(e => e.Sender as ObservableCollection <BatchLineView>)
                                  .Select(v => v != null && v.Count > 0).ToValue();
            CanReload = Lines.CollectionChanged()
                        .Select(e => e.Sender as ObservableCollection <BatchLineView>)
                        .Select(v => CanUpload && v != null && v.Count > 0).ToValue();
            WatchForUpdate(CurrentReportLine.Select(l => l?.BatchLine));
            ActivePrint = new NotifyValue <string>();
            ActivePrint.Subscribe(ExcelExporter.ActiveProperty);
            CurrentFilter.Subscribe(_ => SearchBehavior.ActiveSearchTerm.Value = "");
            ReportEditor = new ReportEditor(this);

            PrintMenuItems = new ObservableCollection <MenuItem>();
            IsView         = true;
        }
Exemplo n.º 9
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;
        }