コード例 #1
0
        public void GivenOrderItemForGood1WithRequiredMarkupPercentage_WhenDerivingPrices_ThenCalculateActualUnitPrice()
        {
            this.InstantiateObjects(this.DatabaseSession);

            var item1 = new SalesOrderItemBuilder(this.DatabaseSession).WithProduct(this.good).WithQuantityOrdered(3).WithRequiredMarkupPercentage(45).Build();
            this.order.AddSalesOrderItem(item1);
            item1.Confirm();

            this.DatabaseSession.Derive(true);

            Assert.AreEqual(10.15M, item1.ActualUnitPrice);
            Assert.AreEqual(10M, item1.UnitBasePrice);
            Assert.AreEqual(0, item1.UnitDiscount);
            Assert.AreEqual(0, item1.UnitSurcharge);
            Assert.AreEqual(10.15M, item1.CalculatedUnitPrice);
            Assert.AreEqual(2.13, item1.UnitVat);
            Assert.AreEqual(30.45M, item1.TotalBasePrice);
            Assert.AreEqual(0, item1.TotalDiscount);
            Assert.AreEqual(0, item1.TotalSurcharge);
            Assert.AreEqual(30.45M, item1.TotalExVat);
            Assert.AreEqual(6.39M, item1.TotalVat);
            Assert.AreEqual(36.84M, item1.TotalIncVat);
            Assert.AreEqual(7, item1.UnitPurchasePrice);

            Assert.AreEqual(decimal.Round(((item1.UnitBasePrice / this.goodPurchasePrice.Price) - 1) * 100, 2), item1.InitialMarkupPercentage);
            Assert.AreEqual(decimal.Round(((item1.CalculatedUnitPrice / this.goodPurchasePrice.Price) - 1) * 100, 2), item1.MaintainedMarkupPercentage);
            Assert.AreEqual(decimal.Round(((item1.UnitBasePrice - this.goodPurchasePrice.Price) / item1.UnitBasePrice) * 100, 2), item1.InitialProfitMargin);
            Assert.AreEqual(decimal.Round(((item1.CalculatedUnitPrice - this.goodPurchasePrice.Price) / item1.CalculatedUnitPrice) * 100, 2), item1.MaintainedProfitMargin);

            Assert.AreEqual(30.45M, this.order.TotalBasePrice);
            Assert.AreEqual(0, this.order.TotalDiscount);
            Assert.AreEqual(0, this.order.TotalSurcharge);
            Assert.AreEqual(30.45M, this.order.TotalExVat);
            Assert.AreEqual(6.39M, this.order.TotalVat);
            Assert.AreEqual(36.84M, this.order.TotalIncVat);
            Assert.AreEqual(10.15M, this.order.TotalListPrice);
            Assert.AreEqual(7, this.order.TotalPurchasePrice);
        }