//======================================================================================================
        public BLL.InterfaceToBLL Calculate(BLL.InterfaceToBLL iBLL)
        {
            //get the mode of calculation
            TempResult gotResult = getModeAndGrossCounts(iBLL);

            KeyValuePair <decimal, string> priceAndReceipt;

            //-----------------------------------------------------------
            //evaluate the total price by calling the specific methods..
            //-----------------------------------------------------------
            if (gotResult.Mode.Equals("Homogeneous"))
            {
                //returns a <Key,Value> pair. Key: price, Value: receipt
                priceAndReceipt = HomogeneousOrder.processResult(gotResult);//process order
            }
            else if (gotResult.Mode.Equals("Heterogeneous"))
            {
                //returns a <Key,Value> pair. Key: price, Value: receipt
                priceAndReceipt = HeterogeneousOrder.processResult(gotResult);//process order
            }
            else
            {
                //just for sanity check
                throw new Exception("Invalid value obtained! Error @ loc 184-194871-9.");
            }

            //-----------------------------------------------------------
            //evaluate the dicounted price here.
            //skipping for now...
            //....
            //..
            //-----------------------------------------------------------


            priceAndReceipt = applyDiscount(priceAndReceipt, gotResult, iBLL);



            //-----------------------------------------------------------
            var resultBLL = new BLL.InterfaceToBLL();

            //-----------------------------------------------------------
            //do assignments... and return the computed price, receipt, and discount.
            resultBLL.Total_Count = gotResult.GrossTotal;
            resultBLL.Total_Price = priceAndReceipt.Key;
            resultBLL.Receipt     = priceAndReceipt.Value;
            //When ready, assign discount here.

            //return the final result
            return(resultBLL);
        }
Esempio n. 2
0
        //======================================================================================================
        public static KeyValuePair <decimal, string> processResult(TempResult gotResult)
        {
            //declare some local variables
            decimal rateLEQ50           = 0.0M;
            decimal rateLEQ75           = 0.0M;
            decimal rateLEQ100          = 0.0M;
            decimal pricePerMatteFinish = 0.0M;
            decimal price1HourLEQ60     = 0.0M;
            decimal price1HourGT60      = 0.0M;


            int countTotal = 0;
            int countMatte = 0;
            int count1Hour = 0;


            //end local var declarations

            //-----------------------------------------------------------
            //initialize local var based on mode.
            //-----------------------------------------------------------
            if (gotResult.Size.Equals("4x6"))
            {
                rateLEQ50           = 0.14M;
                rateLEQ75           = 0.12M;
                rateLEQ100          = 0.10M;
                pricePerMatteFinish = 0.02M;

                countMatte = gotResult.GrossMatteCount4x6;
                count1Hour = gotResult.Gross1HourCount4x6;
                countTotal = gotResult.GrossCount4x6;
            }
            else if (gotResult.Size.Equals("5x7"))
            {
                rateLEQ50           = 0.34M;
                rateLEQ75           = 0.31M;
                rateLEQ100          = 0.28M;
                pricePerMatteFinish = 0.03M;

                countMatte = gotResult.GrossMatteCount5x7;
                count1Hour = gotResult.Gross1HourCount5x7;
                countTotal = gotResult.GrossCount5x7;
            }
            else if (gotResult.Size.Equals("8x10"))
            {
                rateLEQ50           = 0.68M;
                rateLEQ75           = 0.64M;
                rateLEQ100          = 0.60M;
                pricePerMatteFinish = 0.04M;

                countMatte = gotResult.GrossMatteCount8x10;
                count1Hour = gotResult.Gross1HourCount8x10;

                countTotal = gotResult.GrossCount8x10;
            } //end if (mode.equals(...))

            //set rates for 1 hour processing
            price1HourLEQ60 = 1.0M;
            price1HourGT60  = 1.50M;

            var priceAndReceipt = HomogeneousOrder.calculateTotalPrice(
                countTotal, countMatte, count1Hour,
                rateLEQ50, rateLEQ75, rateLEQ100,
                pricePerMatteFinish, price1HourLEQ60, price1HourGT60);

            return(priceAndReceipt);
        }