public List calculateTotal(
      List<BudgetConstructionLevelSummary> bclsList,
      List<BudgetConstructionLevelSummary> simpleList) {

    KualiInteger revenueFinancialBeginningBalanceLineAmount = KualiInteger.ZERO;
    KualiInteger revenueAccountLineAnnualBalanceAmount = KualiInteger.ZERO;

    KualiInteger expenditureFinancialBeginningBalanceLineAmount = KualiInteger.ZERO;
    KualiInteger expenditureAccountLineAnnualBalanceAmount = KualiInteger.ZERO;

    KualiInteger differenceFinancialBeginningBalanceLineAmount = KualiInteger.ZERO;
    KualiInteger differenceAccountLineAnnualBalanceAmount = KualiInteger.ZERO;

    List returnList = new ArrayList();
    for (BudgetConstructionLevelSummary simpleBclsEntry : simpleList) {
      BudgetConstructionOrgLevelSummaryReportTotal bcLevelTotal =
          new BudgetConstructionOrgLevelSummaryReportTotal();
      for (BudgetConstructionLevelSummary bclsListEntry : bclsList) {
        if (BudgetConstructionReportHelper.isSameEntry(
            simpleBclsEntry, bclsListEntry, fieldsForTotal())) {

          if (bclsListEntry.getIncomeExpenseCode().equals("A")) {
            revenueFinancialBeginningBalanceLineAmount =
                revenueFinancialBeginningBalanceLineAmount.add(
                    bclsListEntry.getFinancialBeginningBalanceLineAmount());
            revenueAccountLineAnnualBalanceAmount =
                revenueAccountLineAnnualBalanceAmount.add(
                    bclsListEntry.getAccountLineAnnualBalanceAmount());
          } else {
            expenditureFinancialBeginningBalanceLineAmount =
                expenditureFinancialBeginningBalanceLineAmount.add(
                    bclsListEntry.getFinancialBeginningBalanceLineAmount());
            expenditureAccountLineAnnualBalanceAmount =
                expenditureAccountLineAnnualBalanceAmount.add(
                    bclsListEntry.getAccountLineAnnualBalanceAmount());
          }
        }
      }

      bcLevelTotal.setBcls(simpleBclsEntry);

      bcLevelTotal.setRevenueFinancialBeginningBalanceLineAmount(
          revenueFinancialBeginningBalanceLineAmount);
      bcLevelTotal.setRevenueAccountLineAnnualBalanceAmount(revenueAccountLineAnnualBalanceAmount);

      bcLevelTotal.setExpenditureFinancialBeginningBalanceLineAmount(
          expenditureFinancialBeginningBalanceLineAmount);
      bcLevelTotal.setExpenditureAccountLineAnnualBalanceAmount(
          expenditureAccountLineAnnualBalanceAmount);

      differenceFinancialBeginningBalanceLineAmount =
          revenueFinancialBeginningBalanceLineAmount.subtract(
              expenditureFinancialBeginningBalanceLineAmount);
      differenceAccountLineAnnualBalanceAmount =
          revenueAccountLineAnnualBalanceAmount.subtract(expenditureAccountLineAnnualBalanceAmount);
      bcLevelTotal.setDifferenceFinancialBeginningBalanceLineAmount(
          differenceFinancialBeginningBalanceLineAmount);
      bcLevelTotal.setDifferenceAccountLineAnnualBalanceAmount(
          differenceAccountLineAnnualBalanceAmount);

      returnList.add(bcLevelTotal);

      revenueFinancialBeginningBalanceLineAmount = KualiInteger.ZERO;
      revenueAccountLineAnnualBalanceAmount = KualiInteger.ZERO;

      expenditureFinancialBeginningBalanceLineAmount = KualiInteger.ZERO;
      expenditureAccountLineAnnualBalanceAmount = KualiInteger.ZERO;

      differenceFinancialBeginningBalanceLineAmount = KualiInteger.ZERO;
      differenceAccountLineAnnualBalanceAmount = KualiInteger.ZERO;
    }
    return returnList;
  }
  public List calculateGexpAndTypeTotal(
      List<BudgetConstructionLevelSummary> bclsList,
      List<BudgetConstructionLevelSummary> simpleList) {

    KualiInteger grossFinancialBeginningBalanceLineAmount = KualiInteger.ZERO;
    KualiInteger grossAccountLineAnnualBalanceAmount = KualiInteger.ZERO;

    BigDecimal typePositionCsfLeaveFteQuantity = BigDecimal.ZERO;
    BigDecimal typePositionCsfFullTimeEmploymentQuantity = BigDecimal.ZERO;
    KualiInteger typeFinancialBeginningBalanceLineAmount = KualiInteger.ZERO;
    BigDecimal typeAppointmentRequestedCsfFteQuantity = BigDecimal.ZERO;
    BigDecimal typeAppointmentRequestedFteQuantity = BigDecimal.ZERO;
    KualiInteger typeAccountLineAnnualBalanceAmount = KualiInteger.ZERO;
    KualiInteger typeAmountChange = KualiInteger.ZERO;
    BigDecimal typePercentChange = BigDecimal.ZERO;

    List returnList = new ArrayList();
    for (BudgetConstructionLevelSummary simpleBclsEntry : simpleList) {
      BudgetConstructionOrgLevelSummaryReportTotal bcLevelTotal =
          new BudgetConstructionOrgLevelSummaryReportTotal();
      for (BudgetConstructionLevelSummary bclsListEntry : bclsList) {
        if (BudgetConstructionReportHelper.isSameEntry(
            simpleBclsEntry, bclsListEntry, fieldsForGexpAndType())) {

          typeFinancialBeginningBalanceLineAmount =
              typeFinancialBeginningBalanceLineAmount.add(
                  bclsListEntry.getFinancialBeginningBalanceLineAmount());
          typeAccountLineAnnualBalanceAmount =
              typeAccountLineAnnualBalanceAmount.add(
                  bclsListEntry.getAccountLineAnnualBalanceAmount());
          typePositionCsfLeaveFteQuantity =
              typePositionCsfLeaveFteQuantity.add(bclsListEntry.getPositionCsfLeaveFteQuantity());
          typePositionCsfFullTimeEmploymentQuantity =
              typePositionCsfFullTimeEmploymentQuantity.add(
                  bclsListEntry.getCsfFullTimeEmploymentQuantity());
          typeAppointmentRequestedCsfFteQuantity =
              typeAppointmentRequestedCsfFteQuantity.add(
                  bclsListEntry.getAppointmentRequestedCsfFteQuantity());
          typeAppointmentRequestedFteQuantity =
              typeAppointmentRequestedFteQuantity.add(
                  bclsListEntry.getAppointmentRequestedFteQuantity());

          if (bclsListEntry.getIncomeExpenseCode().equals("B")
              && !bclsListEntry.getFinancialObjectLevelCode().equals("CORI")
              && !bclsListEntry.getFinancialObjectLevelCode().equals("TRIN")) {
            grossFinancialBeginningBalanceLineAmount =
                grossFinancialBeginningBalanceLineAmount.add(
                    bclsListEntry.getFinancialBeginningBalanceLineAmount());
            grossAccountLineAnnualBalanceAmount =
                grossAccountLineAnnualBalanceAmount.add(
                    bclsListEntry.getAccountLineAnnualBalanceAmount());
          }
        }
      }
      bcLevelTotal.setBcls(simpleBclsEntry);

      bcLevelTotal.setGrossFinancialBeginningBalanceLineAmount(
          grossFinancialBeginningBalanceLineAmount);
      bcLevelTotal.setGrossAccountLineAnnualBalanceAmount(grossAccountLineAnnualBalanceAmount);

      bcLevelTotal.setTypePositionCsfLeaveFteQuantity(typePositionCsfLeaveFteQuantity);
      bcLevelTotal.setTypePositionCsfFullTimeEmploymentQuantity(
          typePositionCsfFullTimeEmploymentQuantity);
      bcLevelTotal.setTypeFinancialBeginningBalanceLineAmount(
          typeFinancialBeginningBalanceLineAmount);
      bcLevelTotal.setTypeAppointmentRequestedCsfFteQuantity(
          typeAppointmentRequestedCsfFteQuantity);
      bcLevelTotal.setTypeAppointmentRequestedFteQuantity(typeAppointmentRequestedFteQuantity);
      bcLevelTotal.setTypeAccountLineAnnualBalanceAmount(typeAccountLineAnnualBalanceAmount);

      returnList.add(bcLevelTotal);
      grossFinancialBeginningBalanceLineAmount = KualiInteger.ZERO;
      grossAccountLineAnnualBalanceAmount = KualiInteger.ZERO;

      typePositionCsfLeaveFteQuantity = BigDecimal.ZERO;
      typePositionCsfFullTimeEmploymentQuantity = BigDecimal.ZERO;
      typeFinancialBeginningBalanceLineAmount = KualiInteger.ZERO;
      typeAppointmentRequestedCsfFteQuantity = BigDecimal.ZERO;
      typeAppointmentRequestedFteQuantity = BigDecimal.ZERO;
      typeAccountLineAnnualBalanceAmount = KualiInteger.ZERO;
      typeAmountChange = KualiInteger.ZERO;
      typePercentChange = BigDecimal.ZERO;
    }
    return returnList;
  }
  public List calculateConsTotal(
      List<BudgetConstructionLevelSummary> bclsList,
      List<BudgetConstructionLevelSummary> simpleList) {

    BigDecimal totalConsolidationPositionCsfLeaveFteQuantity = BigDecimal.ZERO;
    BigDecimal totalConsolidationPositionCsfFullTimeEmploymentQuantity = BigDecimal.ZERO;
    KualiInteger totalConsolidationFinancialBeginningBalanceLineAmount = KualiInteger.ZERO;
    BigDecimal totalConsolidationAppointmentRequestedCsfFteQuantity = BigDecimal.ZERO;
    BigDecimal totalConsolidationAppointmentRequestedFteQuantity = BigDecimal.ZERO;
    KualiInteger totalConsolidationAccountLineAnnualBalanceAmount = KualiInteger.ZERO;

    List returnList = new ArrayList();
    for (BudgetConstructionLevelSummary simpleBclsEntry : simpleList) {
      BudgetConstructionOrgLevelSummaryReportTotal bcLevelTotal =
          new BudgetConstructionOrgLevelSummaryReportTotal();
      for (BudgetConstructionLevelSummary bclsListEntry : bclsList) {
        if (BudgetConstructionReportHelper.isSameEntry(
            simpleBclsEntry, bclsListEntry, fieldsForCons())) {
          totalConsolidationFinancialBeginningBalanceLineAmount =
              totalConsolidationFinancialBeginningBalanceLineAmount.add(
                  bclsListEntry.getFinancialBeginningBalanceLineAmount());
          totalConsolidationAccountLineAnnualBalanceAmount =
              totalConsolidationAccountLineAnnualBalanceAmount.add(
                  bclsListEntry.getAccountLineAnnualBalanceAmount());
          totalConsolidationPositionCsfLeaveFteQuantity =
              totalConsolidationPositionCsfLeaveFteQuantity.add(
                  bclsListEntry.getPositionCsfLeaveFteQuantity());
          totalConsolidationPositionCsfFullTimeEmploymentQuantity =
              totalConsolidationPositionCsfFullTimeEmploymentQuantity.add(
                  bclsListEntry.getCsfFullTimeEmploymentQuantity());
          totalConsolidationAppointmentRequestedCsfFteQuantity =
              totalConsolidationAppointmentRequestedCsfFteQuantity.add(
                  bclsListEntry.getAppointmentRequestedCsfFteQuantity());
          totalConsolidationAppointmentRequestedFteQuantity =
              totalConsolidationAppointmentRequestedFteQuantity.add(
                  bclsListEntry.getAppointmentRequestedFteQuantity());
        }
      }
      bcLevelTotal.setBcls(simpleBclsEntry);
      bcLevelTotal.setTotalConsolidationPositionCsfLeaveFteQuantity(
          totalConsolidationPositionCsfLeaveFteQuantity);
      bcLevelTotal.setTotalConsolidationPositionCsfFullTimeEmploymentQuantity(
          totalConsolidationPositionCsfFullTimeEmploymentQuantity);
      bcLevelTotal.setTotalConsolidationFinancialBeginningBalanceLineAmount(
          totalConsolidationFinancialBeginningBalanceLineAmount);
      bcLevelTotal.setTotalConsolidationAppointmentRequestedCsfFteQuantity(
          totalConsolidationAppointmentRequestedCsfFteQuantity);
      bcLevelTotal.setTotalConsolidationAppointmentRequestedFteQuantity(
          totalConsolidationAppointmentRequestedFteQuantity);
      bcLevelTotal.setTotalConsolidationAccountLineAnnualBalanceAmount(
          totalConsolidationAccountLineAnnualBalanceAmount);
      returnList.add(bcLevelTotal);

      totalConsolidationPositionCsfLeaveFteQuantity = BigDecimal.ZERO;
      totalConsolidationPositionCsfFullTimeEmploymentQuantity = BigDecimal.ZERO;
      totalConsolidationFinancialBeginningBalanceLineAmount = KualiInteger.ZERO;
      totalConsolidationAppointmentRequestedCsfFteQuantity = BigDecimal.ZERO;
      totalConsolidationAppointmentRequestedFteQuantity = BigDecimal.ZERO;
      totalConsolidationAccountLineAnnualBalanceAmount = KualiInteger.ZERO;
    }
    return returnList;
  }
  /**
   * builds report total
   *
   * @param BudgetConstructionLevelSummary bcas
   * @param List reportTotalList
   */
  public void buildReportsTotal(
      BudgetConstructionOrgLevelSummaryReport orgLevelSummaryReportEntry,
      BudgetConstructionLevelSummary levelSummary,
      List<BudgetConstructionOrgLevelSummaryReportTotal> levelSummaryTotalConsList,
      List<BudgetConstructionOrgLevelSummaryReportTotal> levelSummaryTotalGexpAndTypeList,
      List<BudgetConstructionOrgLevelSummaryReportTotal> levelSummaryTotalList) {

    for (BudgetConstructionOrgLevelSummaryReportTotal consTotal : levelSummaryTotalConsList) {
      if (BudgetConstructionReportHelper.isSameEntry(
          levelSummary, consTotal.getBcls(), fieldsForCons())) {
        orgLevelSummaryReportEntry.setTotalConsolidationDescription(
            levelSummary.getFinancialConsolidationObject().getFinConsolidationObjectName());

        // The total part shouldn't have null value, so just checking '0'
        orgLevelSummaryReportEntry.setTotalConsolidationPositionCsfLeaveFteQuantity(
            BudgetConstructionReportHelper.setDecimalDigit(
                consTotal.getTotalConsolidationPositionCsfLeaveFteQuantity(), 2, true));
        orgLevelSummaryReportEntry.setTotalConsolidationPositionCsfFullTimeEmploymentQuantity(
            BudgetConstructionReportHelper.setDecimalDigit(
                consTotal.getTotalConsolidationPositionCsfFullTimeEmploymentQuantity(), 2, true));
        orgLevelSummaryReportEntry.setTotalConsolidationFinancialBeginningBalanceLineAmount(
            consTotal.getTotalConsolidationFinancialBeginningBalanceLineAmount());
        orgLevelSummaryReportEntry.setTotalConsolidationAppointmentRequestedCsfFteQuantity(
            BudgetConstructionReportHelper.setDecimalDigit(
                consTotal.getTotalConsolidationAppointmentRequestedCsfFteQuantity(), 2, true));
        orgLevelSummaryReportEntry.setTotalConsolidationAppointmentRequestedFteQuantity(
            BudgetConstructionReportHelper.setDecimalDigit(
                consTotal.getTotalConsolidationAppointmentRequestedFteQuantity(), 2, true));
        orgLevelSummaryReportEntry.setTotalConsolidationAccountLineAnnualBalanceAmount(
            consTotal.getTotalConsolidationAccountLineAnnualBalanceAmount());

        KualiInteger amountChange =
            consTotal
                .getTotalConsolidationAccountLineAnnualBalanceAmount()
                .subtract(consTotal.getTotalConsolidationFinancialBeginningBalanceLineAmount());
        orgLevelSummaryReportEntry.setTotalConsolidationAmountChange(amountChange);
        orgLevelSummaryReportEntry.setTotalConsolidationPercentChange(
            BudgetConstructionReportHelper.calculatePercent(
                amountChange,
                consTotal.getTotalConsolidationFinancialBeginningBalanceLineAmount()));
      }
    }

    for (BudgetConstructionOrgLevelSummaryReportTotal gexpAndTypeTotal :
        levelSummaryTotalGexpAndTypeList) {
      if (BudgetConstructionReportHelper.isSameEntry(
          levelSummary, gexpAndTypeTotal.getBcls(), fieldsForGexpAndType())) {

        orgLevelSummaryReportEntry.setGrossFinancialBeginningBalanceLineAmount(
            gexpAndTypeTotal.getGrossFinancialBeginningBalanceLineAmount());
        orgLevelSummaryReportEntry.setGrossAccountLineAnnualBalanceAmount(
            gexpAndTypeTotal.getGrossAccountLineAnnualBalanceAmount());
        KualiInteger gexpAndTypeAmountChange =
            gexpAndTypeTotal
                .getGrossAccountLineAnnualBalanceAmount()
                .subtract(gexpAndTypeTotal.getGrossFinancialBeginningBalanceLineAmount());
        orgLevelSummaryReportEntry.setGrossAmountChange(gexpAndTypeAmountChange);
        orgLevelSummaryReportEntry.setGrossPercentChange(
            BudgetConstructionReportHelper.calculatePercent(
                gexpAndTypeAmountChange,
                gexpAndTypeTotal.getGrossFinancialBeginningBalanceLineAmount()));

        if (levelSummary.getIncomeExpenseCode().equals(BCConstants.Report.INCOME_EXP_TYPE_A)) {
          orgLevelSummaryReportEntry.setTypeDesc(
              kualiConfigurationService.getPropertyValueAsString(
                  BCKeyConstants.MSG_REPORT_INCOME_EXP_DESC_UPPERCASE_REVENUE));
        } else {
          orgLevelSummaryReportEntry.setTypeDesc(
              kualiConfigurationService.getPropertyValueAsString(
                  BCKeyConstants.MSG_REPORT_INCOME_EXP_DESC_EXPENDITURE_NET_TRNFR));
        }
        orgLevelSummaryReportEntry.setTypePositionCsfLeaveFteQuantity(
            BudgetConstructionReportHelper.setDecimalDigit(
                gexpAndTypeTotal.getTypePositionCsfLeaveFteQuantity(), 2, true));
        orgLevelSummaryReportEntry.setTypePositionCsfFullTimeEmploymentQuantity(
            BudgetConstructionReportHelper.setDecimalDigit(
                gexpAndTypeTotal.getTypePositionCsfFullTimeEmploymentQuantity(), 2, true));
        orgLevelSummaryReportEntry.setTypeFinancialBeginningBalanceLineAmount(
            gexpAndTypeTotal.getTypeFinancialBeginningBalanceLineAmount());
        orgLevelSummaryReportEntry.setTypeAppointmentRequestedCsfFteQuantity(
            BudgetConstructionReportHelper.setDecimalDigit(
                gexpAndTypeTotal.getTypeAppointmentRequestedCsfFteQuantity(), 2, true));
        orgLevelSummaryReportEntry.setTypeAppointmentRequestedFteQuantity(
            BudgetConstructionReportHelper.setDecimalDigit(
                gexpAndTypeTotal.getTypeAppointmentRequestedFteQuantity(), 2, true));

        orgLevelSummaryReportEntry.setTypeAccountLineAnnualBalanceAmount(
            gexpAndTypeTotal.getTypeAccountLineAnnualBalanceAmount());
        KualiInteger typeAmountChange =
            gexpAndTypeTotal
                .getTypeAccountLineAnnualBalanceAmount()
                .subtract(gexpAndTypeTotal.getTypeFinancialBeginningBalanceLineAmount());
        orgLevelSummaryReportEntry.setTypeAmountChange(typeAmountChange);
        orgLevelSummaryReportEntry.setTypePercentChange(
            BudgetConstructionReportHelper.calculatePercent(
                typeAmountChange, gexpAndTypeTotal.getTypeFinancialBeginningBalanceLineAmount()));
      }
    }

    for (BudgetConstructionOrgLevelSummaryReportTotal total : levelSummaryTotalList) {
      if (BudgetConstructionReportHelper.isSameEntry(
          levelSummary, total.getBcls(), fieldsForTotal())) {

        orgLevelSummaryReportEntry.setTotalSubFundGroupDesc(
            levelSummary.getSubFundGroup().getSubFundGroupDescription());
        orgLevelSummaryReportEntry.setRevenueFinancialBeginningBalanceLineAmount(
            total.getRevenueFinancialBeginningBalanceLineAmount());
        orgLevelSummaryReportEntry.setRevenueAccountLineAnnualBalanceAmount(
            total.getRevenueAccountLineAnnualBalanceAmount());
        orgLevelSummaryReportEntry.setExpenditureFinancialBeginningBalanceLineAmount(
            total.getExpenditureFinancialBeginningBalanceLineAmount());
        orgLevelSummaryReportEntry.setExpenditureAccountLineAnnualBalanceAmount(
            total.getExpenditureAccountLineAnnualBalanceAmount());

        KualiInteger revenueAmountChange =
            total
                .getRevenueAccountLineAnnualBalanceAmount()
                .subtract(total.getRevenueFinancialBeginningBalanceLineAmount());
        orgLevelSummaryReportEntry.setRevenueAmountChange(revenueAmountChange);
        orgLevelSummaryReportEntry.setRevenuePercentChange(
            BudgetConstructionReportHelper.calculatePercent(
                revenueAmountChange, total.getRevenueFinancialBeginningBalanceLineAmount()));

        KualiInteger expenditureAmountChange =
            total
                .getExpenditureAccountLineAnnualBalanceAmount()
                .subtract(total.getExpenditureFinancialBeginningBalanceLineAmount());
        orgLevelSummaryReportEntry.setExpenditureAmountChange(expenditureAmountChange);
        orgLevelSummaryReportEntry.setExpenditurePercentChange(
            BudgetConstructionReportHelper.calculatePercent(
                expenditureAmountChange,
                total.getExpenditureFinancialBeginningBalanceLineAmount()));

        orgLevelSummaryReportEntry.setDifferenceFinancialBeginningBalanceLineAmount(
            total.getDifferenceFinancialBeginningBalanceLineAmount());
        orgLevelSummaryReportEntry.setDifferenceAccountLineAnnualBalanceAmount(
            total.getDifferenceAccountLineAnnualBalanceAmount());

        KualiInteger differenceAmountChange =
            total
                .getDifferenceAccountLineAnnualBalanceAmount()
                .subtract(total.getDifferenceFinancialBeginningBalanceLineAmount());
        orgLevelSummaryReportEntry.setDifferenceAmountChange(differenceAmountChange);
        orgLevelSummaryReportEntry.setDifferencePercentChange(
            BudgetConstructionReportHelper.calculatePercent(
                differenceAmountChange, total.getDifferenceFinancialBeginningBalanceLineAmount()));
      }
    }
  }
  /**
   * builds report body
   *
   * @param BudgetConstructionLevelSummary bcas
   */
  public void buildReportsBody(
      BudgetConstructionOrgLevelSummaryReport orgLevelSummaryReportEntry,
      BudgetConstructionLevelSummary levelSummary) {

    if (levelSummary.getFinancialObjectLevel() == null) {
      orgLevelSummaryReportEntry.setFinancialObjectLevelName(
          kualiConfigurationService.getPropertyValueAsString(
              BCKeyConstants.ERROR_REPORT_GETTING_OBJECT_LEVEL_NAME));
    } else {
      orgLevelSummaryReportEntry.setFinancialObjectLevelName(
          levelSummary.getFinancialObjectLevel().getFinancialObjectLevelName());
    }

    orgLevelSummaryReportEntry.setPositionCsfLeaveFteQuantity(
        BudgetConstructionReportHelper.setDecimalDigit(
            levelSummary.getPositionCsfLeaveFteQuantity(), 2, true));
    orgLevelSummaryReportEntry.setCsfFullTimeEmploymentQuantity(
        BudgetConstructionReportHelper.setDecimalDigit(
            levelSummary.getCsfFullTimeEmploymentQuantity(), 2, true));
    orgLevelSummaryReportEntry.setAppointmentRequestedCsfFteQuantity(
        BudgetConstructionReportHelper.setDecimalDigit(
            levelSummary.getAppointmentRequestedCsfFteQuantity(), 2, true));
    orgLevelSummaryReportEntry.setAppointmentRequestedFteQuantity(
        BudgetConstructionReportHelper.setDecimalDigit(
            levelSummary.getAppointmentRequestedFteQuantity(), 2, true));

    if (levelSummary.getAccountLineAnnualBalanceAmount() != null) {
      orgLevelSummaryReportEntry.setAccountLineAnnualBalanceAmount(
          levelSummary.getAccountLineAnnualBalanceAmount());
    }

    if (levelSummary.getFinancialBeginningBalanceLineAmount() != null) {
      orgLevelSummaryReportEntry.setFinancialBeginningBalanceLineAmount(
          levelSummary.getFinancialBeginningBalanceLineAmount());
    }

    if (levelSummary.getAccountLineAnnualBalanceAmount() != null
        && levelSummary.getFinancialBeginningBalanceLineAmount() != null) {
      orgLevelSummaryReportEntry.setAmountChange(
          levelSummary
              .getAccountLineAnnualBalanceAmount()
              .subtract(levelSummary.getFinancialBeginningBalanceLineAmount()));
    }

    orgLevelSummaryReportEntry.setPercentChange(
        BudgetConstructionReportHelper.calculatePercent(
            orgLevelSummaryReportEntry.getAmountChange(),
            orgLevelSummaryReportEntry.getFinancialBeginningBalanceLineAmount()));
  }
  /**
   * builds report Header
   *
   * @param BudgetConstructionLevelSummary bcas
   */
  public void buildReportsHeader(
      Integer universityFiscalYear,
      BudgetConstructionOrgLevelSummaryReport orgLevelSummaryReportEntry,
      BudgetConstructionLevelSummary levelSummary) {
    String orgChartDesc =
        levelSummary.getOrganizationChartOfAccounts().getFinChartOfAccountDescription();
    String chartDesc = levelSummary.getChartOfAccounts().getFinChartOfAccountDescription();
    String orgName = levelSummary.getOrganization().getOrganizationName();
    String reportChartDesc =
        levelSummary
            .getChartOfAccounts()
            .getReportsToChartOfAccounts()
            .getFinChartOfAccountDescription();
    String subFundGroupName = levelSummary.getSubFundGroup().getSubFundGroupCode();
    String subFundGroupDes = levelSummary.getSubFundGroup().getSubFundGroupDescription();
    String fundGroupName = levelSummary.getSubFundGroup().getFundGroupCode();
    String fundGroupDes = levelSummary.getSubFundGroup().getFundGroup().getName();

    Integer prevFiscalyear = universityFiscalYear - 1;
    orgLevelSummaryReportEntry.setFiscalYear(
        prevFiscalyear.toString() + "-" + universityFiscalYear.toString().substring(2, 4));
    orgLevelSummaryReportEntry.setOrgChartOfAccountsCode(
        levelSummary.getOrganizationChartOfAccountsCode());

    if (orgChartDesc == null) {
      orgLevelSummaryReportEntry.setOrgChartOfAccountDescription(
          kualiConfigurationService.getPropertyValueAsString(
              BCKeyConstants.ERROR_REPORT_GETTING_CHART_DESCRIPTION));
    } else {
      orgLevelSummaryReportEntry.setOrgChartOfAccountDescription(orgChartDesc);
    }

    orgLevelSummaryReportEntry.setOrganizationCode(levelSummary.getOrganizationCode());
    if (orgName == null) {
      orgLevelSummaryReportEntry.setOrganizationName(
          kualiConfigurationService.getPropertyValueAsString(
              BCKeyConstants.ERROR_REPORT_GETTING_ORGANIZATION_NAME));
    } else {
      orgLevelSummaryReportEntry.setOrganizationName(orgName);
    }

    orgLevelSummaryReportEntry.setChartOfAccountsCode(levelSummary.getChartOfAccountsCode());
    if (chartDesc == null) {
      orgLevelSummaryReportEntry.setChartOfAccountDescription(
          kualiConfigurationService.getPropertyValueAsString(
              BCKeyConstants.ERROR_REPORT_GETTING_CHART_DESCRIPTION));
    } else {
      orgLevelSummaryReportEntry.setChartOfAccountDescription(chartDesc);
    }

    orgLevelSummaryReportEntry.setFundGroupCode(levelSummary.getSubFundGroup().getFundGroupCode());
    if (fundGroupDes == null) {
      orgLevelSummaryReportEntry.setFundGroupName(
          kualiConfigurationService.getPropertyValueAsString(
              BCKeyConstants.ERROR_REPORT_GETTING_FUNDGROUP_NAME));
    } else {
      orgLevelSummaryReportEntry.setFundGroupName(fundGroupDes);
    }

    orgLevelSummaryReportEntry.setSubFundGroupCode(levelSummary.getSubFundGroupCode());
    if (subFundGroupDes == null) {
      orgLevelSummaryReportEntry.setSubFundGroupDescription(
          kualiConfigurationService.getPropertyValueAsString(
              BCKeyConstants.ERROR_REPORT_GETTING_SUBFUNDGROUP_DESCRIPTION));
    } else {
      orgLevelSummaryReportEntry.setSubFundGroupDescription(subFundGroupDes);
    }

    Integer prevPrevFiscalyear = prevFiscalyear - 1;
    orgLevelSummaryReportEntry.setBaseFy(
        prevPrevFiscalyear.toString() + "-" + prevFiscalyear.toString().substring(2, 4));
    orgLevelSummaryReportEntry.setReqFy(
        prevFiscalyear.toString() + "-" + universityFiscalYear.toString().substring(2, 4));
    orgLevelSummaryReportEntry.setHeader1("Object Level Name");
    orgLevelSummaryReportEntry.setHeader2a("Lv. FTE");
    orgLevelSummaryReportEntry.setHeader2("FTE");
    orgLevelSummaryReportEntry.setHeader3("Amount");
    orgLevelSummaryReportEntry.setHeader31("FTE");
    orgLevelSummaryReportEntry.setHeader40("FTE");
    orgLevelSummaryReportEntry.setHeader4("Amount");
    orgLevelSummaryReportEntry.setHeader5(
        kualiConfigurationService.getPropertyValueAsString(
            BCKeyConstants.MSG_REPORT_HEADER_CHANGE));
    orgLevelSummaryReportEntry.setHeader6(
        kualiConfigurationService.getPropertyValueAsString(
            BCKeyConstants.MSG_REPORT_HEADER_CHANGE));
    orgLevelSummaryReportEntry.setConsHdr("");

    // For page break for objectLevelCode
    orgLevelSummaryReportEntry.setFinancialObjectLevelCode(
        levelSummary.getFinancialObjectLevelCode());
    orgLevelSummaryReportEntry.setIncomeExpenseCode(levelSummary.getIncomeExpenseCode());
    orgLevelSummaryReportEntry.setFinancialConsolidationSortCode(
        levelSummary.getFinancialConsolidationSortCode());
  }