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