public void Load_delay_of_payment()
        {
            settings.LastLeaderCalculation = DateTime.Today.AddDays(-1);
            Fixture <CreateDelayOfPayment>();
            Run(new UpdateCommand());
            DbMaintain.UpdateLeaders(localStateless);

            var user = localSession.Query <User>().First();

            Assert.IsTrue(user.IsDelayOfPaymentEnabled);
            Assert.IsTrue(user.ShowSupplierCost);
            localSession.Refresh(settings);
            Assert.AreEqual(DateTime.Today, settings.LastLeaderCalculation);
            Assert.That(localSession.Query <DelayOfPayment>().Count(), Is.GreaterThan(0));

            // #68427 Корректировка цены БАД
            var delay = localSession.Query <DelayOfPayment>().First();
            var price = delay.Price;

            Assert.AreEqual(price.SupplementCostFactor, 1.02m);
            var offer = localSession.Query <Offer>().First(x => x.Price == price);

            offer.CategoryId       = 1;
            offer.VitallyImportant = false;
            Assert.AreEqual(offer.ResultCost, Math.Round(offer.Cost * price.SupplementCostFactor, 2));
        }
        public void Import()
        {
            localSession.CreateSQLQuery("delete from offers").ExecuteUpdate();
            var user = localSession.Query <User>().First();

            user.LastSync = null;

            var command = new UpdateCommand();

            Run(command);
            DbMaintain.UpdateLeaders(localStateless);

            Assert.AreEqual("Обновление завершено успешно.", command.SuccessMessage);
            Assert.That(localSession.Query <Offer>().Count(), Is.GreaterThan(0));
            Assert.That(localSession.Query <Offer>().Count(x => x.BarCode != null), Is.GreaterThan(0));
            Assert.That(localSession.Query <Offer>().Count(x => x.Properties != ""), Is.GreaterThan(0));
            Assert.That(localSession.Query <Offer>().Count(x => x.NDS != null), Is.GreaterThan(0));

            var productId = localSession.Query <Offer>()
                            .Where(o => !o.Junk).GroupBy(o => o.ProductId)
                            .Where(g => g.Count() > 1)
                            .Select(g => g.Key)
                            .First();

            var minCostCount = localSession.Query <MinCost>().Count();

            Assert.That(minCostCount, Is.GreaterThan(0));
            var cost = localSession.Query <MinCost>().First(m => m.ProductId == productId);

            Assert.IsNotNull(cost.Catalog, "product id = {0}", productId);
            Assert.IsNotNull(cost.NextCost, "product id = {0}", productId);
            Assert.That(localSession.Query <Offer>().Count(o => o.Exp != null), Is.GreaterThan(0));
        }
        public IEnumerable <IResult> Save()
        {
            UpdateMarkups();
            UpdatePriceTags();
            var error = Settings.Value.Validate(validateMarkups: HaveAddresses);

            if (error?.Count > 0)
            {
                if (Session != null)
                {
                    Session.FlushMode = FlushMode.Never;
                }
                GoToErrorTab(error.First()[0]);
                yield return(MessageResult.Warn(error.First()[1]));

                yield break;
            }

            if (passwordUpdated)
            {
                Settings.Value.Password = password;
            }
            if (diadokPasswordUpdated)
            {
                Settings.Value.DiadokPassword = diadokPassword;
            }
            if (sbisPasswordUpdated)
            {
                Settings.Value.SbisPassword = sbisPassword;
            }

            if (App.Current != null)
            {
                StyleHelper.BuildStyles(App.Current.Resources, Styles);
            }

            if (Session != null)
            {
                IsCredentialsChanged = Session.IsChanged(Settings.Value, s => s.Password) ||
                                       Session.IsChanged(Settings.Value, s => s.UserName);
                if (Session.IsChanged(Settings.Value, s => s.GroupWaybillsBySupplier) &&
                    Settings.Value.GroupWaybillsBySupplier)
                {
                    foreach (var dirMap in DirMaps)
                    {
                        try {
                            Directory.CreateDirectory(dirMap.Dir);
                        }
                        catch (Exception e) {
                            Log.Error($"Не удалось создать директорию {dirMap.Dir}", e);
                        }
                    }
                }

                if (Session.IsChanged(Settings.Value, x => x.JunkPeriod))
                {
                    yield return(new Models.Results.TaskResult(Query(s => DbMaintain.CalcJunk(s, Settings.Value))));
                }

                Session.FlushMode = FlushMode.Auto;
                Settings.Value.ApplyChanges(Session);
                SynchronizeSpecialMarkUps();
            }
            TryClose();
        }