public void CalculateTest() { RodSetInput input = new RodSetInput(); input.FormulaCode = "F94_1"; input.Set = 2; input.ReadyMadeProduct = new List <ReadyMadeProduct>(); //Rod: 2 (quantity), Endcap: 2 x 2 (quantity) = 4, Bracket: 2 x 2 (quantity) = 4 input.ReadyMadeProduct.Add(new ReadyMadeProduct("F94_1.5", "5", Constant.WithRing, 41.50)); //Rod: 2 (quantity), Endcap: 2 x 2 (quantity) = 4, Bracket: 3 x 2 (quantity) = 6 input.ReadyMadeProduct.Add(new ReadyMadeProduct("F94_1.8", "6", Constant.WithoutRing, 46.80)); //Rod: 2 (quantity), Endcap: 2 x 2 (quantity) = 4, Bracket: 4 x 2 (quantity) = 8 input.ReadyMadeProduct.Add(new ReadyMadeProduct("F94_1.19", "14", Constant.WithRing, 116.20)); foreach (var p in input.ReadyMadeProduct) { p.Quantity = 2; } RodSetOutput actual = new F94_1().Calculate(input); Assert.AreEqual(actual.RodQuantity, 6); // 3 rod x 2 quantity Assert.AreEqual(actual.BracketQuantity, 18); // 4 + 6 + 8 Assert.AreEqual(actual.BracketSubtotal, 0); Assert.AreEqual(actual.EndCapQuantity, 12); //4 + 4 + 4 Assert.AreEqual(actual.EndCapSubtotal, 0); Assert.AreEqual(actual.RodOnlySubtotal, 818); // 166 + 187.2 + 464.8 Assert.AreEqual(actual.RodSetTotal, 818); //818 + 288 + 156 }
public RodSetOutput CalculateRodWithInstallation(RodSetInput input) { RodSetOutput result = new RodSetOutput() { ProductName = input.ProductName, ReadyMadeProduct = input.ReadyMadeProduct, Set = input.Set }; if (input.ReadyMadeProduct.Count != 0) { result.ReadyMadeProduct = new List <ReadyMadeProduct>(); if (input.Set == 0) { input.Set = 1; } foreach (ReadyMadeProduct product in input.ReadyMadeProduct) { product.Subtotal = Math.Round(product.Price * product.Quantity * input.Set, 2); result.ReadyMadeProduct.Add(product); result.RodOnlySubtotal += product.Subtotal; } } return(CalculateRodQuantity(result)); }
public void CalculateTest() { RodSetInput input = new RodSetInput(); input.FormulaCode = "F92_1"; input.Set = 2; input.ReadyMadeProduct = new List <ReadyMadeProduct>(); //Price: 60, Rod: 2 (quantity), Endcap: 2 x 2 (quantity) x 2 (set) = 8, Bracket: 2 x 2 (quantity) x 2 (set) = 8 input.ReadyMadeProduct.Add(new ReadyMadeProduct("F92_1.4", "4", Constant.WithoutRing, 30.00)); //Price: 128, Rod: 2 (quantity), Endcap: 2 x 2 (quantity) x 2 (set) = 8, Bracket: 3 x 2 (quantity) x 2 (set) = 12 input.ReadyMadeProduct.Add(new ReadyMadeProduct("F92_1.7", "8", Constant.WithRing, 64.00)); foreach (var p in input.ReadyMadeProduct) { p.Quantity = 2; } RodSetOutput actual = new F92_1().Calculate(input); Assert.AreEqual(actual.RodQuantity, 4); // 2 rod x 2 quantity Assert.AreEqual(actual.BracketQuantity, 10); Assert.AreEqual(actual.BracketSubtotal, 0); Assert.AreEqual(actual.EndCapQuantity, 8); Assert.AreEqual(actual.EndCapSubtotal, 0); //Price: 6/unit Assert.AreEqual(actual.RodOnlySubtotal, 376); Assert.AreEqual(actual.RodSetTotal, 376); }
public void CalculateTest_Sequence2() { RodSetInput input = new RodSetInput(); input.FormulaCode = "F97"; input.ReadyMadeProduct = new List <ReadyMadeProduct>(); input.Sequence = 2; input.ReadyMadeProduct.Add(new ReadyMadeProduct("F97.4", Constant.RodAluminiumMeroon, string.Empty, 0)); foreach (var p in input.ReadyMadeProduct) { p.Quantity = 2; p.Meter = 2; } RodSetOutput actual = new F97().Calculate(input); Assert.AreEqual(actual.RodOnlySubtotal, 40); Assert.AreEqual(actual.RodQuantity, 2); Assert.AreEqual(actual.EndCapQuantity, 4); Assert.AreEqual(actual.EndCapSubtotal, 0); Assert.AreEqual(actual.BracketQuantity, 4); Assert.AreEqual(actual.BracketSubtotal, 0); Assert.AreEqual(actual.RodSetTotal, 40); }
public void CalculateTest() { RodSetInput input = new RodSetInput(); input.FormulaCode = "F93_2"; input.Set = 2; input.ReadyMadeProduct = new List <ReadyMadeProduct>(); //Bracket: 2 x 2 x 2 = 8 input.ReadyMadeProduct.Add(new ReadyMadeProduct("F93_2.12", "6.5", Constant.WithoutRing, 84.5)); //Bracket: 2 x 2 x 3 = 12 input.ReadyMadeProduct.Add(new ReadyMadeProduct("F93_2.13", "7", Constant.WithRing, 98.00)); foreach (var p in input.ReadyMadeProduct) { p.Quantity = 2; } RodSetOutput actual = new F93_2().Calculate(input); Assert.AreEqual(actual.RodQuantity, 4); // 2 + 2 Assert.AreEqual(actual.EndCapQuantity, 8); Assert.AreEqual(actual.EndCapSubtotal, 0); Assert.AreEqual(actual.BracketQuantity, 10); Assert.AreEqual(actual.BracketSubtotal, 0); Assert.AreEqual(actual.RodOnlySubtotal, 730); //338 + 392 Assert.AreEqual(actual.RodSetTotal, 730); }
// Only for kedai pasang public RodSetOutput Calculate(RodSetInput input) { RodSetOutput result = new RodSetOutput(); result.Set = input.Set; if (input.ReadyMadeProduct != null && input.ReadyMadeProduct.Count != 0) { result.ReadyMadeProduct = new List <ReadyMadeProduct>(); ReadyMadeProduct product = input.ReadyMadeProduct[0]; if (input.Sequence == 1) { product.Subtotal = Math.Round(product.Quantity * product.Meter * 13, 2); } else if (input.Sequence == 2) { product.Subtotal = Math.Round(product.Quantity * product.Meter * 10, 2); } result.ReadyMadeProduct.Add(product); result.RodQuantity = input.ReadyMadeProduct[0].Quantity; result.RodOnlySubtotal = Math.Round(product.Subtotal, 2); result = HandleEndcapBracket(result, product); result.RodSetTotal = result.RodOnlySubtotal + result.EndCapSubtotal + result.BracketSubtotal; } return(result); }
public void CalculateTest() { RodSetInput input = new RodSetInput(); input.FormulaCode = "F92_2"; input.Set = 2; input.ReadyMadeProduct = new List <ReadyMadeProduct>(); //Bracket: 2 x 2 x 2 = 8 input.ReadyMadeProduct.Add(new ReadyMadeProduct("F92_2.14", "6.5", Constant.WithoutRing, 84.50)); //Bracket: 2 x 2 x 3 = 12 input.ReadyMadeProduct.Add(new ReadyMadeProduct("F92_2.15", "7", Constant.WithRing, 98.00)); //Bracket: 2 x 2 x 4 = 16 input.ReadyMadeProduct.Add(new ReadyMadeProduct("F92_2.25", "14", Constant.WithRing, 196.00)); foreach (var p in input.ReadyMadeProduct) { p.Quantity = 2; } RodSetOutput actual = new F92_2().Calculate(input); Assert.AreEqual(actual.RodQuantity, 6); // 2 + 2 + 2 Assert.AreEqual(actual.EndCapQuantity, 12); Assert.AreEqual(actual.EndCapSubtotal, 0); Assert.AreEqual(actual.BracketQuantity, 18); Assert.AreEqual(actual.BracketSubtotal, 0); Assert.AreEqual(actual.RodOnlySubtotal, 1514); // 338 + 392 + 784 Assert.AreEqual(actual.RodSetTotal, 1514); //1514 + 144 + 270 }
public void CalculateTest() { RodSetInput input = new RodSetInput(); input.FormulaCode = "F94_2"; input.Set = 2; input.ReadyMadeProduct = new List <ReadyMadeProduct>(); // Endcap: 2 x 2 = 4 input.ReadyMadeProduct.Add(new ReadyMadeProduct("F94_2.6", "5", Constant.WithoutRing, 65.00)); // Endcap: 2 x 3 = 6 input.ReadyMadeProduct.Add(new ReadyMadeProduct("F94_2.7", "6", Constant.WithRing, 84.00)); // Endcap: 2 x 4 = 8 input.ReadyMadeProduct.Add(new ReadyMadeProduct("F94_2.19", "14", Constant.WithRing, 196.00)); foreach (var p in input.ReadyMadeProduct) { p.Quantity = 2; } RodSetOutput actual = new F94_2().Calculate(input); Assert.AreEqual(actual.RodQuantity, 6); // 2 + 2 + 2 Assert.AreEqual(actual.EndCapQuantity, 12); Assert.AreEqual(actual.EndCapSubtotal, 0); Assert.AreEqual(actual.BracketQuantity, 18); Assert.AreEqual(actual.BracketSubtotal, 0); Assert.AreEqual(actual.RodOnlySubtotal, 1380); //260 + 336 + 784 Assert.AreEqual(actual.RodSetTotal, 1380); // 1380 + 156 + 288 }
public RodSetOutput Calculate(RodSetInput input) { Product p = new Product(null, null, null, true); F93_2ProductCollection products = new F93_2ProductCollection(); p = products.Initialize(p, true); ReadyMadeProduct bracket = p.ReadyMadeProduct.Find(x => x.Name == Constant.Bracket); ReadyMadeProduct endcap = p.ReadyMadeProduct.Find(x => x.Name == Constant.EndCap); RodSetOutput output = CalculateRodWithInstallation(input); output = CalculateEndcapBracket(output, 2, bracket, endcap); return(output); }
public RodSetOutput Identify(RodSetInput input) { try { Type type = Type.GetType("YkCalculator.Logic." + input.FormulaCode); ConstructorInfo constructor = type.GetConstructor(Type.EmptyTypes); object classObject = constructor.Invoke(new object[] { }); MethodInfo method = type.GetMethod("Calculate"); RodSetOutput result = (RodSetOutput)method.Invoke(classObject, new object[] { input }); return(result); } catch (Exception ex) { throw new Exception($"{ex.Message} {Environment.NewLine} Could not resolve {input.FormulaCode}"); } }
public RodSetOutput CalculateRod(RodSetInput rodSetInput) { Input input = new Input() { FormulaCode = rodSetInput.FormulaCode, ReadyMadeProduct = rodSetInput.ReadyMadeProduct, Set = rodSetInput.Set, }; Output result = CalculateReadyMadeProduct(input); RodSetOutput rodSetOutput = new RodSetOutput() { ProductName = rodSetInput.ProductName, RodOnlySubtotal = result.Jumlah, ReadyMadeProduct = result.ReadyMadeProduct, Set = rodSetInput.Set }; rodSetOutput = CalculateRodQuantity(rodSetOutput); return(rodSetOutput); }
public void CalculateTest() { RodSetInput rodSetInput1 = new RodSetInput(); rodSetInput1.FormulaCode = "F97"; rodSetInput1.ReadyMadeProduct = new List <ReadyMadeProduct>(); rodSetInput1.Sequence = 1; rodSetInput1.ReadyMadeProduct.Add(new ReadyMadeProduct("F97.1", Constant.RodKayuHitam, string.Empty, 0)); foreach (var p in rodSetInput1.ReadyMadeProduct) { p.Quantity = 2; p.Meter = 2; } RodSetOutput rodSetOutput1 = new F97().Calculate(rodSetInput1); RodSetInput rodSetInput2 = new RodSetInput(); rodSetInput2.FormulaCode = "F97"; rodSetInput2.ReadyMadeProduct = new List <ReadyMadeProduct>(); rodSetInput2.Sequence = 2; rodSetInput2.ReadyMadeProduct.Add(new ReadyMadeProduct("F97.4", Constant.RodAluminiumMeroon, string.Empty, 0)); foreach (var p in rodSetInput2.ReadyMadeProduct) { p.Quantity = 2; p.Meter = 2; } RodSetOutput rodSetOutput2 = new F97().Calculate(rodSetInput2); Input input = new Input { Set = 1, HargaKainA = 13, Lebar = 120, Tinggi = 100, Layout = "L", HargaCincin = 10.5, RodSetOutput = rodSetOutput1, RodSetOutput2 = rodSetOutput2, }; IFormula formula = new F97_2_2(); Output actual = formula.Calculate(input); Assert.AreEqual(actual.Keping, 4); Assert.AreEqual(actual.Jumlah, 273.2); Assert.AreEqual(actual.HargaKainA, 93.6); Assert.AreEqual(actual.UpahKainA, 12); Assert.AreEqual(actual.HargaCincin, 75.6); Assert.AreEqual(actual.TailorTotalKeping, 4); Assert.AreEqual(actual.TailorKeping, 4); Assert.AreEqual(actual.TailorSheer, 1); Assert.AreEqual(actual.TailorKainTebal, 1); Assert.AreEqual(actual.TailorMeterA, 9999); Assert.IsTrue(actual.DetailedBreakdown.Contains("Jumlah")); Assert.IsTrue(actual.DetailedBreakdown.Contains("Harga")); input.Layout = "T"; actual = formula.Calculate(input); Assert.AreEqual(actual.TailorKeping, 2); Assert.AreEqual(actual.TailorSheer, 1); Assert.AreEqual(actual.TailorKainTebal, 1); Assert.AreEqual(actual.TailorMeterA, 9999); }
public RodSetOutput CalculateRodset(RodSetInput input) { FormulaManager manager = new FormulaManager(); return(manager.Identify(input)); }