Exemplo n.º 1
0
        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
        }
Exemplo n.º 2
0
        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));
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        // 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);
        }
Exemplo n.º 7
0
        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
        }
Exemplo n.º 8
0
        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
        }
Exemplo n.º 9
0
        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);
        }
Exemplo n.º 10
0
 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}");
     }
 }
Exemplo n.º 11
0
        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);
        }
Exemplo n.º 12
0
        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);
        }
Exemplo n.º 13
0
        public RodSetOutput CalculateRodset(RodSetInput input)
        {
            FormulaManager manager = new FormulaManager();

            return(manager.Identify(input));
        }