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();
}
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;
}
}
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;
}
Aggregations