/**
  * {@inheritDoc}
  *
  * <p>This implementation will convert from a {@link KualiInteger} to a {@link Long}.
  */
 @Override
 public Long convertToDatabaseColumn(KualiInteger objectValue) {
   if (objectValue == null) {
     return null;
   }
   return objectValue.longValue();
 }
  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 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 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;
  }