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); }
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); }
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); }); }
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); }); }
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); }); }
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); }); }
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); }); } }
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); }