Search in sources :

Example 1 with PaymentProcess

use of org.kuali.kfs.pdp.businessobject.PaymentProcess in project cu-kfs by CU-CommunityApps.

the class AchBundlerFormatServiceImpl method performFormat.

/**
 ************************************************************************************************
 *     MODS START HERE
 *************************************************************************************************
 */
/**
 * MOD: Overridden to detect if the Bundle ACH Payments system parameter is on and if so, to
 * call the new helper method
 * @see org.kuali.kfs.pdp.service.FormatService#performFormat(java.lang.Integer)
 */
@Override
public void performFormat(Integer processId) throws FormatException {
    LOG.debug("performFormat() started - ACH Bundler Mod");
    // get the PaymentProcess for the given id
    @SuppressWarnings("rawtypes") Map primaryKeys = new HashMap();
    primaryKeys.put(PdpPropertyConstants.PaymentProcess.PAYMENT_PROCESS_ID, processId);
    PaymentProcess paymentProcess = (PaymentProcess) businessObjectService.findByPrimaryKey(PaymentProcess.class, primaryKeys);
    if (paymentProcess == null) {
        LOG.error("performFormat() Invalid proc ID " + processId);
        throw new RuntimeException("Invalid proc ID");
    }
    String processCampus = paymentProcess.getCampusCode();
    FormatProcessSummary postFormatProcessSummary = new FormatProcessSummary();
    // step 1 get ACH or Check, Bank info, ACH info, sorting
    Iterator<PaymentGroup> paymentGroupIterator = SpringContext.getBean(PaymentGroupService.class).getByProcess(paymentProcess);
    while (paymentGroupIterator.hasNext()) {
        PaymentGroup paymentGroup = paymentGroupIterator.next();
        LOG.debug("performFormat() Step 1 Payment Group ID " + paymentGroup.getId());
        // process payment group data
        boolean groupProcessed = processPaymentGroup(paymentGroup, paymentProcess);
        if (!groupProcessed) {
            throw new FormatException("Error encountered during format");
        }
        // save payment group
        businessObjectService.save(paymentGroup);
        // Add to summary information
        postFormatProcessSummary.add(paymentGroup);
    }
    /**
     * MOD: This mod calls a new method that bundles both Checks
     * and ACHs into single disbursements.
     */
    boolean disbursementNumbersAssigned = false;
    if (getAchBundlerHelperService().shouldBundleAchPayments()) {
        LOG.info("ACH BUNDLER MOD: ACTIVE - bundling ACH payments");
        disbursementNumbersAssigned = assignDisbursementNumbersAndBundle(paymentProcess, postFormatProcessSummary);
    } else {
        // KFSPTS-1460: Our method signature for FormatServiceImpl.assignDisbursementNumbersAndCombineChecks did not
        // match this method call: disbursementNumbersAssigned = assignDisbursementNumbersAndCombineChecks(paymentProcess, postFormatProcessSummary);
        // Added parameter "processCampus" so method signatures matched.
        LOG.info("ACH BUNDLER MOD: NOT Active - ACH payments will NOT be bundled");
        disbursementNumbersAssigned = assignDisbursementNumbersAndCombineChecks(paymentProcess, postFormatProcessSummary);
    }
    if (!disbursementNumbersAssigned) {
        throw new FormatException("Error encountered during format");
    }
    // step 3 save the summarizing info
    LOG.debug("performFormat() Save summarizing information");
    postFormatProcessSummary.save();
    // step 4 set formatted indicator to true and save in the db
    paymentProcess.setFormattedIndicator(true);
    businessObjectService.save(paymentProcess);
    // step 5 end the format process for this campus
    LOG.debug("performFormat() End the format process for this campus");
    endFormatProcess(processCampus);
/**
 * MOD: No longer automatically kick off the extractChecks process.  This has to be scheduled in the batch system or run manually there.
 * Otherwise, may conflict with grouping by payee done.
 */
// step 6 tell the extract batch job to start
// LOG.debug("performFormat() Start extract");
// extractChecks();
}
Also used : PaymentGroup(org.kuali.kfs.pdp.businessobject.PaymentGroup) PaymentProcess(org.kuali.kfs.pdp.businessobject.PaymentProcess) FormatProcessSummary(org.kuali.kfs.pdp.businessobject.FormatProcessSummary) HashMap(java.util.HashMap) HashMap(java.util.HashMap) Map(java.util.Map) PaymentGroupService(org.kuali.kfs.pdp.service.PaymentGroupService) FormatException(org.kuali.kfs.pdp.service.impl.exception.FormatException)

Example 2 with PaymentProcess

use of org.kuali.kfs.pdp.businessobject.PaymentProcess in project cu-kfs by CU-CommunityApps.

the class CuExtractPaymentServiceImpl method writePayeeSpecificsToAchFile.

/*
     * New method created due to refactoring the code from ExtractPaymentServiceImpl and AchBundlerExtractPaymnetServiceImpl.
     * Method writes all tags and data for a single payee from open ach to close of customerProfile.
     */
protected void writePayeeSpecificsToAchFile(BufferedWriter os, PaymentGroup paymentGroup, Date processDate, SimpleDateFormat sdf) throws IOException {
    try {
        writeOpenTagAttribute(os, 2, "ach", "disbursementNbr", paymentGroup.getDisbursementNbr().toString());
        PaymentProcess paymentProcess = paymentGroup.getProcess();
        writeTag(os, 4, "processCampus", paymentProcess.getCampusCode());
        writeTag(os, 4, "processId", paymentProcess.getId().toString());
        writeBank(os, 4, paymentGroup.getBank());
        writeTag(os, 4, "disbursementDate", sdf.format(processDate));
        writeTag(os, 4, "netAmount", paymentGroup.getNetPaymentAmount().toString());
        writePayeeAch(os, 4, paymentGroup);
        writeTag(os, 4, "paymentDate", sdf.format(paymentGroup.getPaymentDate()));
        CustomerProfile cp = paymentGroup.getBatch().getCustomerProfile();
        writeCustomerProfile(os, 4, cp);
        writeOpenTag(os, 4, "payments");
    } catch (IOException ioe) {
        LOG.error("writePayeeSpecificsToAchFile(): Problem writing to file - IOException caught and rethrown.");
        throw ioe;
    }
}
Also used : PaymentProcess(org.kuali.kfs.pdp.businessobject.PaymentProcess) CustomerProfile(org.kuali.kfs.pdp.businessobject.CustomerProfile) IOException(java.io.IOException)

Example 3 with PaymentProcess

use of org.kuali.kfs.pdp.businessobject.PaymentProcess in project cu-kfs by CU-CommunityApps.

the class CuFormatServiceImpl method startFormatProcess.

@Override
public FormatProcessSummary startFormatProcess(Person user, String campus, List<CustomerProfile> customers, Date paydate, String paymentTypes, String paymentDistribution) {
    LOG.debug("startFormatProcess() started");
    for (CustomerProfile element : customers) {
        LOG.debug("startFormatProcess() Customer: " + element);
    }
    // Create the process
    Date d = new Date();
    PaymentProcess paymentProcess = new PaymentProcess();
    paymentProcess.setCampusCode(campus);
    paymentProcess.setProcessUser(user);
    paymentProcess.setProcessTimestamp(new Timestamp(d.getTime()));
    this.businessObjectService.save(paymentProcess);
    // add an entry in the format process table (to lock the format process)
    FormatProcess formatProcess = new FormatProcess();
    formatProcess.setPhysicalCampusProcessCode(campus);
    formatProcess.setBeginFormat(dateTimeService.getCurrentTimestamp());
    formatProcess.setPaymentProcIdentifier(paymentProcess.getId().intValue());
    this.businessObjectService.save(formatProcess);
    Timestamp now = new Timestamp((new Date()).getTime());
    java.sql.Date sqlDate = new java.sql.Date(paydate.getTime());
    Calendar c = Calendar.getInstance();
    c.setTime(sqlDate);
    c.set(Calendar.HOUR, 11);
    c.set(Calendar.MINUTE, 59);
    c.set(Calendar.SECOND, 59);
    c.set(Calendar.MILLISECOND, 59);
    c.set(Calendar.AM_PM, Calendar.PM);
    Timestamp paydateTs = new Timestamp(c.getTime().getTime());
    LOG.debug("startFormatProcess() last update = " + now);
    LOG.debug("startFormatProcess() entered paydate = " + paydate);
    LOG.debug("startFormatProcess() actual paydate = " + paydateTs);
    PaymentStatus format = this.businessObjectService.findBySinglePrimaryKey(PaymentStatus.class, PdpConstants.PaymentStatusCodes.FORMAT);
    List customerIds = new ArrayList();
    for (Iterator iter = customers.iterator(); iter.hasNext(); ) {
        CustomerProfile element = (CustomerProfile) iter.next();
        customerIds.add(element.getId());
    }
    // Mark all of them ready for format
    Iterator groupIterator = ((CuFormatPaymentDao) formatPaymentDao).markPaymentsForFormat(customerIds, paydateTs, paymentTypes, paymentDistribution);
    while (groupIterator.hasNext()) {
        PaymentGroup paymentGroup = (PaymentGroup) groupIterator.next();
        paymentGroup.setLastUpdatedTimestamp(paydateTs);
        paymentGroup.setPaymentStatus(format);
        paymentGroup.setProcess(paymentProcess);
        businessObjectService.save(paymentGroup);
    }
    // summarize them
    FormatProcessSummary preFormatProcessSummary = new FormatProcessSummary();
    Iterator<PaymentGroup> iterator = this.paymentGroupService.getByProcess(paymentProcess);
    while (iterator.hasNext()) {
        PaymentGroup paymentGroup = iterator.next();
        preFormatProcessSummary.add(paymentGroup);
    }
    // if no payments found for format clear the format process
    if (preFormatProcessSummary.getProcessSummaryList().size() == 0) {
        LOG.debug("startFormatProcess() No payments to process.  Format process ending");
        // ?? maybe call end format process
        clearUnfinishedFormat(paymentProcess.getId().intValue());
    }
    return preFormatProcessSummary;
}
Also used : PaymentGroup(org.kuali.kfs.pdp.businessobject.PaymentGroup) Calendar(java.util.Calendar) ArrayList(java.util.ArrayList) CustomerProfile(org.kuali.kfs.pdp.businessobject.CustomerProfile) FormatProcess(org.kuali.kfs.pdp.businessobject.FormatProcess) Timestamp(java.sql.Timestamp) Date(java.util.Date) PaymentProcess(org.kuali.kfs.pdp.businessobject.PaymentProcess) FormatProcessSummary(org.kuali.kfs.pdp.businessobject.FormatProcessSummary) Iterator(java.util.Iterator) ArrayList(java.util.ArrayList) List(java.util.List) CuFormatPaymentDao(edu.cornell.kfs.pdp.dataaccess.CuFormatPaymentDao) PaymentStatus(org.kuali.kfs.pdp.businessobject.PaymentStatus)

Aggregations

PaymentProcess (org.kuali.kfs.pdp.businessobject.PaymentProcess)3 CustomerProfile (org.kuali.kfs.pdp.businessobject.CustomerProfile)2 FormatProcessSummary (org.kuali.kfs.pdp.businessobject.FormatProcessSummary)2 PaymentGroup (org.kuali.kfs.pdp.businessobject.PaymentGroup)2 CuFormatPaymentDao (edu.cornell.kfs.pdp.dataaccess.CuFormatPaymentDao)1 IOException (java.io.IOException)1 Timestamp (java.sql.Timestamp)1 ArrayList (java.util.ArrayList)1 Calendar (java.util.Calendar)1 Date (java.util.Date)1 HashMap (java.util.HashMap)1 Iterator (java.util.Iterator)1 List (java.util.List)1 Map (java.util.Map)1 FormatProcess (org.kuali.kfs.pdp.businessobject.FormatProcess)1 PaymentStatus (org.kuali.kfs.pdp.businessobject.PaymentStatus)1 PaymentGroupService (org.kuali.kfs.pdp.service.PaymentGroupService)1 FormatException (org.kuali.kfs.pdp.service.impl.exception.FormatException)1