/**
   * This method determines whether or not an asset has different object sub type codes in its
   * documents.
   *
   * @return true when the asset has payments with object codes that point to different object sub
   *     type codes
   */
  public boolean hasDifferentObjectSubTypes(
      List<CapitalAccountingLines> capitalAccountingLines, List<AccountingLine> accountingLines) {
    List<String> subTypes = new ArrayList<String>();
    List<String> objectSubTypeList = new ArrayList<String>();
    List<String> validObjectSubTypes = new ArrayList<String>();

    subTypes =
        new ArrayList<String>(
            SpringContext.getBean(ParameterService.class)
                .getParameterValuesAsString(
                    Asset.class,
                    KFSParameterKeyConstants.CamParameterConstants.OBJECT_SUB_TYPE_GROUPS));

    for (String subType : subTypes) {
      validObjectSubTypes = Arrays.asList(StringUtils.split(subType, ","));
    }

    for (CapitalAccountingLines capitalAccountLine : capitalAccountingLines) {
      if (capitalAccountLine.isSelectLine() && capitalAccountLine.isAmountDistributed()) {
        AccountingLine matchAccountingLine =
            findAccountingLine(accountingLines, capitalAccountLine);
        if (ObjectUtils.isNotNull(matchAccountingLine)) {
          matchAccountingLine.refreshReferenceObject("objectCode");
        }
        if (validObjectSubTypes.contains(
            matchAccountingLine.getObjectCode().getFinancialObjectSubTypeCode())) {
          if (!objectSubTypeList.contains(
              matchAccountingLine.getObjectCode().getFinancialObjectSubTypeCode())) {
            // different object subtypes
            return true;
          }
          objectSubTypeList.add(
              matchAccountingLine.getObjectCode().getFinancialObjectSubTypeCode());
        }
      }
    }

    if (objectSubTypeList.isEmpty()) {
      return false;
    }

    return false;
  }