/** * The method should be invoked before collection of disbursement DTO has been saved within * staging database. * * @param dtos Input collection of DisbursementDTO * @return collection of DisbursementDTO processed successfully. */ public Collection<DisbursementDTO> preProcess(Collection<DisbursementDTO> dtos) { /* * Disbursement State of "Incomplete" and Disbursement * Status of "Incomplete Payment" that have not been sent to Payment * Processor for processing and a Disbursement Date less than or equal * to the Business Date is eligible for processing. */ Collection<DisbursementDTO> validDisbursement = new ArrayList<DisbursementDTO>(); if (dtos != null && dtos.size() > 0) { logger.debug( "Process Started. [ClientExportPaymentHelper] Validate disbursement to be exported."); Date businessDate = MuleServiceFactory.getService(DateService.class) .getBusinessDate(1L, BusinessDateType.BUSINESS); for (DisbursementDTO dto : dtos) { if (DisbursementConstants.DISB_STATE_TYPE_CODE_INCOMPLETE.equalsIgnoreCase( dto.getStateCode()) && DisbursementConstants.DISB_STATUS_TYPE_CODE_INCOMPLETE_PAYMENT.equalsIgnoreCase( dto.getStatusCode()) && (DateUtility.compareDate(dto.getEffectiveDate(), businessDate) <= 0) && (dto.getEndDate() == null || DateUtility.compareDate(dto.getEndDate(), businessDate) >= 0)) { validDisbursement.add(dto); } else if (DisbursementConstants.DISB_STATE_TYPE_CODE_OPEN.equalsIgnoreCase( dto.getStateCode()) && DisbursementConstants.DISB_STATUS_TYPE_CODE_PAYMENT_STOPPED_NOT_REISSUED .equalsIgnoreCase(dto.getStatusCode()) && (DateUtility.compareDate(dto.getEffectiveDate(), businessDate) <= 0) && (dto.getEndDate() == null || DateUtility.compareDate(dto.getEndDate(), businessDate) >= 0)) { validDisbursement.add(dto); } else if (DisbursementConstants.DISB_STATE_TYPE_CODE_OPEN.equalsIgnoreCase( dto.getStateCode()) && DisbursementConstants.DISB_STATUS_TYPE_CODE_ISSUED_PAYMENT.equalsIgnoreCase( dto.getStatusCode()) && (dto.getDisbursementStatuses().size() == 1) && (DateUtility.compareDate(dto.getEffectiveDate(), businessDate) <= 0) && (dto.getEndDate() == null || DateUtility.compareDate(dto.getEndDate(), businessDate) >= 0)) { validDisbursement.add(dto); } else if (DisbursementConstants.DISB_STATE_TYPE_CODE_COMPLETE.equalsIgnoreCase( dto.getStateCode()) && DisbursementConstants.DISB_STATUS_TYPE_CODE_PAYMENT_VOIDED_NOT_REISSUED .equalsIgnoreCase(dto.getStatusCode()) && (DateUtility.compareDate(dto.getEffectiveDate(), businessDate) <= 0) && (dto.getEndDate() == null || DateUtility.compareDate(dto.getEndDate(), businessDate) >= 0)) { validDisbursement.add(dto); } else { logger.debug( "[ClientExportPaymentHelper] Criteria Not Met for Disbursement ID = {} ", dto.getRecordId()); } } // Flush all context to re initialize sequence generator. ExportPaymentSequenceGenHelper.flushAllContext(); } return validDisbursement; }