/** * Checks the continuation account system indicator. If on checks whether the account is expired * or closed, and if so calls the contination logic. */ protected Message handleExpiredClosedAccount( Account account, LaborOriginEntry laborOriginEntry, LaborOriginEntry laborWorkingEntry, UniversityDate universityRunDate) { List<String> continuationAccountBypassBalanceTypeCodes = balanceTypService.getContinuationAccountBypassBalanceTypeCodes( universityRunDate.getUniversityFiscalYear()); List<String> continuationAccountBypassOriginationCodes = new ArrayList<String>( parameterService.getParameterValuesAsString( LaborScrubberStep.class, LaborConstants.Scrubber.CONTINUATION_ACCOUNT_BYPASS_ORIGINATION_CODES)); List<String> continuationAccountBypassDocumentTypeCodes = new ArrayList<String>( parameterService.getParameterValuesAsString( LaborScrubberStep.class, LaborConstants.Scrubber.CONTINUATION_ACCOUNT_BYPASS_DOCUMENT_TYPE_CODES)); Calendar today = Calendar.getInstance(); today.setTime(universityRunDate.getUniversityDate()); long offsetAccountExpirationTime = getAdjustedAccountExpirationDate(account); boolean isAccountExpiredOrClosed = (account.getAccountExpirationDate() != null && isAccountExpired(account, universityRunDate)) || !account.isActive(); boolean continuationAccountLogicInd = parameterService.getParameterValueAsBoolean( LaborScrubberStep.class, LaborConstants.Scrubber.CONTINUATION_ACCOUNT_LOGIC_PARAMETER); if (continuationAccountLogicInd && isAccountExpiredOrClosed) { // special checks for origination codes that have override ability boolean isOverrideOriginCode = continuationAccountBypassOriginationCodes.contains( laborOriginEntry.getFinancialSystemOriginationCode()); if (isOverrideOriginCode && !account.isActive()) { return MessageBuilder.buildMessage( KFSKeyConstants.ERROR_ORIGIN_CODE_CANNOT_HAVE_CLOSED_ACCOUNT, laborOriginEntry.getChartOfAccountsCode() + "-" + laborOriginEntry.getAccountNumber(), Message.TYPE_FATAL); } boolean canBypass = isOverrideOriginCode || continuationAccountBypassBalanceTypeCodes.contains( laborOriginEntry.getFinancialBalanceTypeCode()) || continuationAccountBypassDocumentTypeCodes.contains( laborOriginEntry.getFinancialDocumentTypeCode().trim()); if (account.isActive() && canBypass) { return null; } return continuationAccountLogic( account, laborOriginEntry, laborWorkingEntry, universityRunDate); } return null; }
/** Performs Account Validation. */ protected Message validateAccount( LaborOriginEntry laborOriginEntry, LaborOriginEntry laborWorkingEntry, UniversityDate universityRunDate, LaborAccountingCycleCachingService laborAccountingCycleCachingService) { LOG.debug("validateAccount() started"); Account account = laborOriginEntry.getAccount(); boolean suspenseAccountLogicInd = parameterService.getParameterValueAsBoolean( LaborScrubberStep.class, LaborConstants.Scrubber.SUSPENSE_ACCOUNT_LOGIC_PARAMETER); if (ObjectUtils.isNull(account)) { if (suspenseAccountLogicInd) { return useSuspenseAccount(laborWorkingEntry); } return MessageBuilder.buildMessage( KFSKeyConstants.ERROR_ACCOUNT_NOT_FOUND, laborOriginEntry.getChartOfAccountsCode() + "-" + laborOriginEntry.getAccountNumber(), Message.TYPE_FATAL); } // default laborWorkingEntry.setAccount(account); laborWorkingEntry.setChartOfAccountsCode(account.getChartOfAccountsCode()); laborWorkingEntry.setAccountNumber(account.getAccountNumber()); // no further validation for gl annual doc type String glAnnualClosingType = parameterService.getParameterValueAsString( KfsParameterConstants.GENERAL_LEDGER_BATCH.class, KFSConstants.SystemGroupParameterNames.GL_ANNUAL_CLOSING_DOC_TYPE); if (glAnnualClosingType.equals(laborOriginEntry.getFinancialDocumentTypeCode())) { return null; } // Sub-Fund Wage Exclusion String orginationCode = laborOriginEntry.getFinancialSystemOriginationCode(); List<String> nonWageSubfundBypassOriginationCodes = new ArrayList<String>( parameterService.getParameterValuesAsString( LaborScrubberStep.class, LaborConstants.Scrubber.NON_WAGE_SUB_FUND_BYPASS_ORIGINATIONS)); boolean subfundWageExclusionInd = parameterService.getParameterValueAsBoolean( LaborScrubberStep.class, LaborConstants.Scrubber.SUBFUND_WAGE_EXCLUSION_PARAMETER); if (subfundWageExclusionInd && !account.getSubFundGroup().isSubFundGroupWagesIndicator() && !nonWageSubfundBypassOriginationCodes.contains(orginationCode)) { if (suspenseAccountLogicInd) { return useSuspenseAccount(laborWorkingEntry); } return MessageBuilder.buildMessage( LaborKeyConstants.ERROR_SUN_FUND_NOT_ACCEPT_WAGES, Message.TYPE_FATAL); } // Account Fringe Validation List<String> nonFringeAccountBypassOriginationCodes = new ArrayList<String>( parameterService.getParameterValuesAsString( LaborScrubberStep.class, LaborConstants.Scrubber.NON_FRINGE_ACCOUNT_BYPASS_ORIGINATIONS)); boolean accountFringeExclusionInd = parameterService.getParameterValueAsBoolean( LaborScrubberStep.class, LaborConstants.Scrubber.ACCOUNT_FRINGE_EXCLUSION_PARAMETER); if (accountFringeExclusionInd && !nonFringeAccountBypassOriginationCodes.contains(orginationCode)) { return checkAccountFringeIndicator( laborOriginEntry, laborWorkingEntry, account, universityRunDate, laborAccountingCycleCachingService); } // Expired/Closed Validation return handleExpiredClosedAccount( laborOriginEntry.getAccount(), laborOriginEntry, laborWorkingEntry, universityRunDate); }