/*
  * This method set ReportType data to ReportTypeList for
  * BudgetCumulativeNonPersonnel
  */
 private void setReportTypeForBudgetCumulativeNonPersonnel(List<ReportType> reportTypeList) {
   Map<String, ReportTypeVO> reportTypeMap = new HashMap<String, ReportTypeVO>();
   List<ReportTypeVO> tempReportTypeVOList = new ArrayList<ReportTypeVO>();
   for (BudgetPeriod budgetPeriod : budget.getBudgetPeriods()) {
     for (BudgetLineItem budgetLineItem : budgetPeriod.getBudgetLineItems()) {
       if (!isBudgetCategoryPersonnel(budgetLineItem)) {
         ReportTypeVO tempReportTypeVO =
             getReportTypeVOForBudgetCumulativeNonPersonnel(budgetLineItem);
         tempReportTypeVOList.add(tempReportTypeVO);
       }
     }
   }
   for (ReportTypeVO reportTypeVO : tempReportTypeVOList) {
     String cumulativeNonPersKey = reportTypeVO.getCostElementDesc();
     if (reportTypeMap.containsKey(cumulativeNonPersKey)) {
       continue;
     }
     ScaleTwoDecimal calculatedCost = ScaleTwoDecimal.ZERO;
     for (ReportTypeVO reportTypeVO1 : tempReportTypeVOList) {
       String cumulativeNonPersTempKey = reportTypeVO1.getCostElementDesc();
       if (cumulativeNonPersTempKey.equals(cumulativeNonPersKey)) {
         calculatedCost = calculatedCost.add(reportTypeVO1.getCalculatedCost());
       }
     }
     ReportType reportType =
         getReportTypeForBudgetCumulativeNonPersonnel(calculatedCost, reportTypeVO);
     reportTypeMap.put(cumulativeNonPersKey, reportTypeVO);
     reportTypeList.add(reportType);
   }
 }
 /*
  * This method sets reportTypeVO to ReportTypeList for
  * CumulativeBudgetSalary by groping reportTypeVo based on
  * cumulativeBudgetSalaryKey and gets sum of fringe also get calculated
  * vacationRate, empBenefitRate
  */
 private void setReportTypeListFromReportTypeVoListForCumulativeBudgetSalary(
     List<ReportType> reportTypeList, List<ReportTypeVO> reportTypeVOList) {
   Map<String, ReportTypeVO> reportTypeMap = new HashMap<String, ReportTypeVO>();
   for (ReportTypeVO reportTypeVO : reportTypeVOList) {
     String cumulativeBudgetSalaryKey = getKeyForBudgetSalarySummary(reportTypeVO);
     if (reportTypeMap.containsKey(cumulativeBudgetSalaryKey)) {
       continue;
     }
     ScaleTwoDecimal vacationRate = ScaleTwoDecimal.ZERO;
     ScaleTwoDecimal empBenefitRate = ScaleTwoDecimal.ZERO;
     ScaleTwoDecimal fringe = ScaleTwoDecimal.ZERO;
     for (ReportTypeVO tempReportTypeVO : reportTypeVOList) {
       String cumulativeBudgetSalaryTempKey = getKeyForBudgetSalarySummary(tempReportTypeVO);
       if (cumulativeBudgetSalaryTempKey.equals(cumulativeBudgetSalaryKey)) {
         if (vacationRate.isLessThan(tempReportTypeVO.getVacationRate())) {
           vacationRate = tempReportTypeVO.getVacationRate();
         }
         if (empBenefitRate.isLessThan(tempReportTypeVO.getEmployeeBenefitRate())) {
           empBenefitRate = tempReportTypeVO.getEmployeeBenefitRate();
         }
         fringe = fringe.add(tempReportTypeVO.getFringe());
       }
     }
     ReportType reportType =
         getReportTypeForCumulativeBudgetSalary(
             vacationRate, empBenefitRate, fringe, reportTypeVO);
     reportTypeMap.put(cumulativeBudgetSalaryKey, reportTypeVO);
     reportTypeList.add(reportType);
   }
 }
 /**
  * This method generates XML for Award Delta Report. It uses data passed in {@link
  * org.kuali.coeus.sys.framework.model.KcTransactionalDocumentBase} for populating the XML nodes.
  * The XMl once generated is returned as {@link XmlObject}
  *
  * @param printableBusinessObject using which XML is generated
  * @param reportParameters parameters related to XML generation
  * @return {@link XmlObject} representing the XML
  */
 public Map<String, XmlObject> generateXmlStream(
     KcPersistableBusinessObjectBase printableBusinessObject,
     Map<String, Object> reportParameters) {
   Map<String, XmlObject> xmlObjectList = new LinkedHashMap<String, XmlObject>();
   this.budget = (Budget) printableBusinessObject;
   if (budget != null) {
     BudgetSummaryReport budgetSummaryReport = BudgetSummaryReport.Factory.newInstance();
     BudgetSummaryReportDocument budgetSummaryReportDocument =
         BudgetSummaryReportDocument.Factory.newInstance();
     budgetSummaryReport = getBudgetCumulativeReport();
     budgetSummaryReportDocument.setBudgetSummaryReport(budgetSummaryReport);
     xmlObjectList.put(CUMULATIVE_BUDGET, budgetSummaryReportDocument);
   }
   return xmlObjectList;
 }
 /*
  * This method gets subReportType for CumulativeBudgetLARateBase by
  * BudgetPeriod for RateClassType LAB_ALLOCATION
  */
 private SubReportType getCumulativeBudgetLARateBase() {
   SubReportType subReportType = SubReportType.Factory.newInstance();
   String rateClassType = RateClassType.LAB_ALLOCATION.getRateClassType();
   List<ReportTypeVO> tempReportTypeVOList = new ArrayList<ReportTypeVO>();
   Map<String, ReportType> reportTypeMap = new HashMap<String, ReportType>();
   for (BudgetPeriod budgetPeriod : budget.getBudgetPeriods()) {
     for (BudgetLineItem budgetLineItem : budgetPeriod.getBudgetLineItems()) {
       setBudgetPersRateAndBaseListForBudgetLARateAndBase(tempReportTypeVOList, budgetLineItem);
       if (!isBudgetCategoryPersonnel(budgetLineItem)) {
         setBudgetRateAndBaseListForBudgetLARateAndBase(tempReportTypeVOList, budgetLineItem);
       }
     }
   }
   setReportTypeMapFromReportTypeVOList(tempReportTypeVOList, reportTypeMap);
   List<ReportType> reportTypeList = new ArrayList<ReportType>(reportTypeMap.values());
   subReportType.setGroupArray(getGroupsType(reportTypeList, rateClassRateType));
   return subReportType;
 }