Exemplo n.º 1
0
        public static Product GetInstance(eProduct productType)
        {
            Product p = null;

            switch (productType)
            {
            case eProduct.A:
            {
                p = new ProductA();
            }
            break;

            case eProduct.B:
            {
                p = new ProductB();
            }
            break;

            case eProduct.C:
            {
                p = new ProductC();
            }
            break;

            default:
            {
                p = new Product();
            }
            break;
            }

            return(p);
        }
Exemplo n.º 2
0
        public override int GetDiscountOnCD(int quanDis, int price, int quantity)
        {
            IProductType prodTypeC = new ProductC();
            IProductType prodTypeD = new ProductD();

            discountedPrice = (quantity / quanDis) * price + GetDiscountOnC(1, prodTypeC.getPrice(), quantity % quanDis) + GetDiscountOnD(1, prodTypeC.getPrice(), quantity % quanDis);
            return(discountedPrice);
        }
Exemplo n.º 3
0
        public void Setup()
        {
            _pointOfSale = new POS();
            _terminal    = new Terminal(_pointOfSale);

            var productA = new ProductA();
            var productB = new ProductB();
            var productC = new ProductC();
            var productD = new ProductD();

            List <Product> products = new List <Product> {
                productA, productB, productC, productD
            };

            foreach (var product in products)
            {
                Utils.DoSafe(() =>
                {
                    _pointOfSale.AddProduct(product);
                });
            }

            Utils.DoSafe(() =>
            {
                _terminal.SetPricing(productA.Code, (decimal)1.25d);
            });

            Utils.DoSafe(() =>
            {
                _terminal.SetPricing(productA.Code, (decimal)3.00d, 3);
            });

            Utils.DoSafe(() =>
            {
                _terminal.SetPricing(productB.Code, (decimal)4.25d);
            });

            Utils.DoSafe(() =>
            {
                _terminal.SetPricing(productC.Code, (decimal)1.00d);
            });

            Utils.DoSafe(() =>
            {
                _terminal.SetPricing(productC.Code, (decimal)5.00d, 6);
            });

            Utils.DoSafe(() =>
            {
                _terminal.SetPricing(productD.Code, (decimal)0.75d);
            });
        }
Exemplo n.º 4
0
        public void TestPointOfSale_InitialiseWithProductList()
        {
            var productA = new ProductA();
            var productB = new ProductB();
            var productC = new ProductC();
            var productD = new ProductD();

            List <Product> products = new List <Product> {
                productA, productB, productC, productD
            };

            Assert.DoesNotThrow(() => {
                var pointOfSale = new POS(products);

                Assert.IsNotEmpty(products);
                Assert.AreEqual(products, pointOfSale.Products);
            });
        }
Exemplo n.º 5
0
        private static void Init()
        {
            var productA = new ProductA();
            var productB = new ProductB();
            var productC = new ProductC();
            var productD = new ProductD();

            List <Product> products = new List <Product> {
                productA, productB, productC, productD
            };

            PointOfSale = new POS(products);
            Terminal    = new Terminal(PointOfSale);

            Utils.DoSafe(() =>
            {
                Terminal.SetPricing(productA.Code, (decimal)1.25d);
            });

            Utils.DoSafe(() =>
            {
                Terminal.SetPricing(productA.Code, (decimal)3.00d, 3);
            });

            Utils.DoSafe(() =>
            {
                Terminal.SetPricing(productB.Code, (decimal)4.25d);
            });

            Utils.DoSafe(() =>
            {
                Terminal.SetPricing(productC.Code, (decimal)1.00d);
            });

            Utils.DoSafe(() =>
            {
                Terminal.SetPricing(productC.Code, (decimal)5.00d, 6);
            });

            Utils.DoSafe(() =>
            {
                Terminal.SetPricing(productD.Code, (decimal)0.75d);
            });
        }
Exemplo n.º 6
0
        public void TestPointOfSale_AddProducts()
        {
            var productA = new ProductA();
            var productB = new ProductB();
            var productC = new ProductC();
            var productD = new ProductD();

            List <Product> products = new List <Product> {
                productA, productB, productC, productD
            };

            var pointOfSale = new POS();

            Assert.DoesNotThrow(() => {
                foreach (var product in products)
                {
                    pointOfSale.AddProduct(product);
                }

                Assert.IsNotEmpty(products);
                Assert.AreEqual(products, pointOfSale.Products);
            });
        }
Exemplo n.º 7
0
        public void Setup()
        {
            _pointOfSale = new POS();
            _terminal    = new Terminal(_pointOfSale);

            var productA = new ProductA();
            var productB = new ProductB();
            var productC = new ProductC();
            var productD = new ProductD();

            List <Product> products = new List <Product> {
                productA, productB, productC, productD
            };


            foreach (var product in products)
            {
                Utils.DoSafe(() =>
                {
                    _pointOfSale.AddProduct(product);
                });
            }
        }
Exemplo n.º 8
0
        public int DisplayTotalAmountwithProducts()
        {
            int       NoOfA  = 0;
            int       NoOfB  = 0;
            int       NoOfC  = 0;
            int       NoOfD  = 0;
            bool      promoA = false;
            bool      promoB = false;
            bool      promoC = false;
            bool      promoD = false;
            Product   prodA  = new ProductA("A");
            Product   prodB  = new ProductB("B");
            Product   prodC  = new ProductC("C");
            Product   prodD  = new ProductD("D");
            int       Total  = 0;
            Factory   factory;
            FactoryCD factoryCD;

            NoOfA = CartProducts.Where(n => n.ProductCode == "A").Count();
            NoOfB = CartProducts.Where(n => n.ProductCode == "B").Count();
            NoOfC = CartProducts.Where(n => n.ProductCode == "C").Count();
            NoOfD = CartProducts.Where(n => n.ProductCode == "D").Count();

            if (NoOfA > 2)
            {
                int promopairs  = 0;
                int remainitems = 0;
                remainitems = NoOfA % 3;
                promopairs  = NoOfA / 3;
                factory     = new FactoryA();
                _IPromo     = factory.CreatePromotion();
                Total       = Total + _IPromo.Calculate(NoOfA, promopairs, remainitems);
                promoA      = true;
            }
            else if (NoOfB > 1)
            {
                int promopairs  = 0;
                int remainitems = 0;
                remainitems = NoOfB % 2;
                promopairs  = NoOfB / 2;
                factory     = new FactoryB();
                _IPromo     = factory.CreatePromotion();
                Total       = Total + _IPromo.Calculate(NoOfB, promopairs, remainitems);
                promoB      = true;
            }
            else if (NoOfC > 0 && NoOfD > 0)
            {
                int promopairs   = 0;
                int remainitemsC = 0;
                int remainitemsD = 0;

                if (NoOfC == NoOfD)
                {
                    promopairs   = NoOfC;
                    remainitemsC = 0;
                    remainitemsD = 0;
                }
                else if (NoOfC > NoOfD)
                {
                    promopairs   = NoOfD;
                    remainitemsC = NoOfC - NoOfD;
                    remainitemsD = 0;
                }
                else
                {
                    promopairs   = NoOfC;
                    remainitemsC = 0;
                    remainitemsD = NoOfD - NoOfC;
                }
                factoryCD = new FactoryPromoCD();
                _IPromoCD = factoryCD.CreatePromotionCD();
                Total     = Total + _IPromoCD.Calculate(NoOfC, NoOfD, promopairs, remainitemsC, remainitemsD);
                promoC    = true;
                promoD    = true;
            }
            foreach (Product prod in CartProducts)
            {
                if (prod.GetType().Name == "ProductA" && promoA == false)
                {
                    Console.WriteLine("{0} * A {1}", NoOfA, (NoOfA * prodA.price));
                    promoA = true;
                    Total  = Total + (NoOfA * prodA.price);
                }
                else if (prod.GetType().Name == "ProductB" && promoB == false)
                {
                    Console.WriteLine("{0} * B {1}", NoOfB, (NoOfB * prodB.price));
                    promoB = true;
                    Total  = Total + (NoOfB * prodB.price);
                }
                else if (prod.GetType().Name == "ProductC" && promoC == false)
                {
                    Console.WriteLine("{0} * C {1}", NoOfC, (NoOfC * prodC.price));
                    promoC = true;
                    Total  = Total + (NoOfC * prodC.price);
                }
                else if (prod.GetType().Name == "ProductD" && promoD == false)
                {
                    Console.WriteLine("{0} * D {1}", NoOfD, (NoOfD * prodD.price));
                    promoD = true;
                    Total  = Total + (NoOfD * prodD.price);
                }
            }
            return(Total);
        }