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;
        }
Example #2
0
        public void Validate()
        {
            var markups = new[] {
                new MarkupConfig(address, 0, 100, 20),
                new MarkupConfig(address, 80, 200, 20)
            };

            Assert.AreEqual("Некорректно введены границы цен.", MarkupConfig.Validate(markups)[0][1]);
            Assert.That(markups[1].BeginOverlap, Is.True);
        }
        public IList <MarkupConfig> MarkupByType(MarkupType type, Address currentddress)
        {
            var result = Settings.Value.Markups
                         .Where(t => t.Type == type && t.Address == currentddress)
                         .OrderBy(m => m.Begin)
                         .LinkTo(Settings.Value.Markups, i => Settings.Value.AddMarkup((MarkupConfig)i));

            MarkupConfig.Validate(result);
            return(result);
        }
Example #4
0
        public void Validate_gap()
        {
            var markups = new[] {
                new MarkupConfig(address, 0, 100, 20),
                new MarkupConfig(address, 100, 200, 20),
                new MarkupConfig(address, 200, 1000, 20),
                new MarkupConfig(address, 0, 50, 20, MarkupType.VitallyImportant),
                new MarkupConfig(address, 50, 500, 20, MarkupType.VitallyImportant),
                new MarkupConfig(address, 500, 1000000, 20, MarkupType.VitallyImportant),
            };

            Assert.IsNull(MarkupConfig.Validate(markups));
        }
Example #5
0
        public void Reset_validation_error()
        {
            var markups = new[] {
                new MarkupConfig(address, 0, 100, 20),
                new MarkupConfig(address, 80, 200, 20),
                new MarkupConfig(address, 0, 50, 20, MarkupType.VitallyImportant),
                new MarkupConfig(address, 50, 500, 20, MarkupType.VitallyImportant),
                new MarkupConfig(address, 500, 1000000, 20, MarkupType.VitallyImportant),
            };

            Assert.AreEqual("Некорректно введены границы цен.", MarkupConfig.Validate(markups)[0][1]);

            markups[1].Begin = 100;
            Assert.IsNull(MarkupConfig.Validate(markups));
            Assert.That(markups[1].BeginOverlap, Is.False);
        }
Example #6
0
        public void Revalidate_on_edit()
        {
            var settings = new Settings();

            settings.AddMarkup(new MarkupConfig(address, 0, 100, 20));
            settings.AddMarkup(new MarkupConfig(address, 100, 200, 20));
            var markup  = new MarkupConfig(address, 150, 300, 20);
            var changes = markup.CollectChanges();

            settings.AddMarkup(markup);
            Assert.IsTrue(markup.BeginOverlap);
            Assert.AreEqual("BeginOverlap", changes.Implode(c => c.PropertyName));

            markup.Begin = 200;
            Assert.IsFalse(markup.BeginOverlap);
            Assert.AreEqual("BeginOverlap, BeginOverlap", changes.Implode(c => c.PropertyName));
        }
        public void Settings()
        {
            var model = new SettingsViewModel();

            Open(model);
            model.CurrentProduct.Value = model.Products.Value.First();
            model.SpecialMarkupCheck();

            Assert.AreEqual(1, model.SpecialMarkupProducts.Value.Count);
            model.CurrentSpecialMarkupProduct.Value = model.SpecialMarkupProducts.Value.First();
            model.SpecialMarkupUncheck();
            Assert.AreEqual(0, model.SpecialMarkupProducts.Value.Count);

            model.CurrentProduct.Value = model.Products.Value[1];
            model.SpecialMarkupCheck();

            var markups = model.SpecialMarkups.Value;

            Assert.AreEqual("Special: 0 - 1000000 20%", markups.Implode());
            markups[0].End = 500;
            var markup = new MarkupConfig();

            model.NewSpecialMarkup(new InitializingNewItemEventArgs(markup));
            markup.Begin     = 500;
            markup.End       = 10000;
            markup.Markup    = 20;
            markup.MaxMarkup = 50;
            model.SpecialMarkups.Value.Add(markup);

            model.Save().ToList();
            Close(model);
            Assert.AreEqual(1, session.Query <SpecialMarkupCatalog>().Count());
            session.Refresh(settings);
            Assert.AreEqual("Special: 0 - 500 20%, Special: 500 - 10000 20%",
                            settings.Markups.Where(x => x.Type == MarkupType.Special).Implode());
        }
Example #8
0
        private bool CheckSettings(bool overrideHash)
        {
            using (var session = Factory.OpenSession())
                using (var transaction = session.BeginTransaction()) {
                    var settings     = session.Query <Settings>().FirstOrDefault();
                    var mappingToken = AppBootstrapper.NHibernate.MappingHash;
                    if (settings == null)
                    {
                        settings = new Settings(mappingToken, session.Query <Address>().ToArray());
                        settings.CheckToken();
                        session.Save(settings);
                    }
                    else
                    {
                        settings.CheckToken();
                        if (overrideHash)
                        {
                            settings.MappingToken = mappingToken;
                        }

                        if (settings.MappingToken != mappingToken)
                        {
                            return(true);
                        }

                        if (settings.Waybills.Count == 0)
                        {
                            session.Query <WaybillSettings>().Each(settings.Waybills.Add);
                        }
                    }

                    var markupGlobalConfigList = session.Query <MarkupGlobalConfig>().ToList();
                    var addresses = session.Query <Address>().ToList();
                    settings.SetGlobalMarkupsSettingsForAddress(addresses, markupGlobalConfigList);

                    var mainAddress = addresses.FirstOrDefault();
                    foreach (var address in addresses.Except(new [] { mainAddress }))
                    {
                        settings.CopyMarkups(mainAddress, address);
                    }
                    //если ничего восстановить не удалось тогда берем значения по умолчанию
                    foreach (var address in addresses)
                    {
                        foreach (MarkupType type in Enum.GetValues(typeof(MarkupType)))
                        {
                            if (settings.Markups.Count(x => x.Address == address && x.Type == type) == 0)
                            {
                                MarkupConfig.Defaults(address).Where(x => x.Type == type).Each(settings.AddMarkup);
                            }
                        }
                        if (settings.PriceTags.Count(r => r.Address == address) == 0)
                        {
                            PriceTagSettings.Defaults(address).Each(settings.AddPriceTag);
                        }
                    }

                    settings.PriceTags.RemoveEach(settings.PriceTags.Where(x => x.Address == null || !addresses.Contains(x.Address)));

                    var addressConfigs = session.Query <AddressConfig>().ToArray();
                    session.DeleteEach(addressConfigs.Where(x => x.Address == null));
                    session.SaveEach(addresses.Except(addressConfigs.Select(x => x.Address)).Select(x => new AddressConfig(x)));

                    //если есть адреса то должен быть и пользователь
                    //если только база не была поломана
                    var user = session.Query <User>().FirstOrDefault()
                               ?? new User();

                    settings.Waybills.AddEach(addresses
                                              .Except(settings.Waybills.Select(w => w.BelongsToAddress))
                                              .Select(a => new WaybillSettings(user, a)));

                    if (!session.Query <WriteoffReason>().Any())
                    {
                        session.SaveEach(WriteoffReason.Default());
                    }

                    var suppliers  = session.Query <Supplier>().ToList();
                    var dirMaps    = session.Query <DirMap>().ToList();
                    var newDirMaps = suppliers
                                     .Except(dirMaps.Select(m => m.Supplier))
                                     .Select(s => new DirMap(settings, s))
                                     .ToArray();
                    session.SaveEach(newDirMaps);
                    transaction.Commit();
                }
            return(false);
        }