001 /* 002 * Copyright 2011 The Kuali Foundation. 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package org.kuali.kfs.pdp.batch.service.impl; 017 018 import java.sql.Date; 019 import java.util.ArrayList; 020 import java.util.Iterator; 021 import java.util.List; 022 023 import org.kuali.kfs.fp.batch.service.DisbursementVoucherExtractService; 024 import org.kuali.kfs.fp.document.DisbursementVoucherConstants; 025 import org.kuali.kfs.fp.document.DisbursementVoucherDocument; 026 import org.kuali.kfs.integration.purap.PurchasingAccountsPayableModuleService; 027 import org.kuali.kfs.pdp.PdpConstants; 028 import org.kuali.kfs.pdp.batch.service.ProcessPdpCancelPaidService; 029 import org.kuali.kfs.pdp.businessobject.PaymentDetail; 030 import org.kuali.kfs.pdp.service.PaymentDetailService; 031 import org.kuali.kfs.pdp.service.PaymentGroupService; 032 import org.kuali.kfs.sys.KFSParameterKeyConstants; 033 import org.kuali.kfs.sys.service.impl.KfsParameterConstants; 034 import org.kuali.rice.kns.service.DateTimeService; 035 import org.kuali.rice.kns.service.ParameterService; 036 import org.springframework.transaction.annotation.Transactional; 037 038 /** 039 * Implementation of ProcessPdpCancelPaidService 040 */ 041 @Transactional 042 public class ProcessPdpCancelPaidServiceImpl implements ProcessPdpCancelPaidService { 043 private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(ProcessPdpCancelPaidServiceImpl.class); 044 045 private PaymentGroupService paymentGroupService; 046 private PaymentDetailService paymentDetailService; 047 private ParameterService parameterService; 048 private DateTimeService dateTimeService; 049 private PurchasingAccountsPayableModuleService purchasingAccountsPayableModuleService; 050 private DisbursementVoucherExtractService dvExtractService; 051 052 /** 053 * @see org.kuali.kfs.module.purap.service.ProcessPdpCancelPaidService#processPdpCancels() 054 */ 055 public void processPdpCancels() { 056 LOG.debug("processPdpCancels() started"); 057 058 Date processDate = dateTimeService.getCurrentSqlDate(); 059 060 String organization = parameterService.getParameterValue(KfsParameterConstants.PURCHASING_BATCH.class, KFSParameterKeyConstants.PurapPdpParameterConstants.PURAP_PDP_ORG_CODE); 061 String purapSubUnit = parameterService.getParameterValue(KfsParameterConstants.PURCHASING_BATCH.class, KFSParameterKeyConstants.PurapPdpParameterConstants.PURAP_PDP_SUB_UNIT_CODE); 062 String dvSubUnit = parameterService.getParameterValue(DisbursementVoucherDocument.class, DisbursementVoucherConstants.DvPdpExtractGroup.DV_PDP_SBUNT_CODE); 063 064 List<String> subUnits = new ArrayList<String>(); 065 subUnits.add(purapSubUnit); 066 subUnits.add(dvSubUnit); 067 068 Iterator<PaymentDetail> details = paymentDetailService.getUnprocessedCancelledDetails(organization, subUnits); 069 while (details.hasNext()) { 070 PaymentDetail paymentDetail = details.next(); 071 072 String documentTypeCode = paymentDetail.getFinancialDocumentTypeCode(); 073 String documentNumber = paymentDetail.getCustPaymentDocNbr(); 074 075 boolean primaryCancel = paymentDetail.getPrimaryCancelledPayment(); 076 boolean disbursedPayment = PdpConstants.PaymentStatusCodes.CANCEL_PAYMENT.equals(paymentDetail.getPaymentGroup().getPaymentStatusCode()); 077 078 if(purchasingAccountsPayableModuleService.isPurchasingBatchDocument(documentTypeCode)) { 079 purchasingAccountsPayableModuleService.handlePurchasingBatchCancels(documentNumber, documentTypeCode, primaryCancel, disbursedPayment); 080 } 081 else if (DisbursementVoucherConstants.DOCUMENT_TYPE_CHECKACH.equals(documentTypeCode)) { 082 DisbursementVoucherDocument dv = dvExtractService.getDocumentById(documentNumber); 083 if (dv != null) { 084 if (disbursedPayment || primaryCancel) { 085 dvExtractService.cancelExtractedDisbursementVoucher(dv, processDate); 086 } else { 087 dvExtractService.resetExtractedDisbursementVoucher(dv, processDate); 088 } 089 } 090 } 091 else { 092 LOG.warn("processPdpCancels() Unknown document type (" + documentTypeCode + ") for document ID: " + documentNumber); 093 continue; 094 } 095 096 paymentGroupService.processCancelledGroup(paymentDetail.getPaymentGroup(), processDate); 097 } 098 } 099 100 /** 101 * @see org.kuali.kfs.module.purap.service.ProcessPdpCancelPaidService#processPdpPaids() 102 */ 103 public void processPdpPaids() { 104 LOG.debug("processPdpPaids() started"); 105 106 Date processDate = dateTimeService.getCurrentSqlDate(); 107 108 String organization = parameterService.getParameterValue(KfsParameterConstants.PURCHASING_BATCH.class, KFSParameterKeyConstants.PurapPdpParameterConstants.PURAP_PDP_ORG_CODE); 109 String purapSubUnit = parameterService.getParameterValue(KfsParameterConstants.PURCHASING_BATCH.class, KFSParameterKeyConstants.PurapPdpParameterConstants.PURAP_PDP_SUB_UNIT_CODE); 110 String dvSubUnit = parameterService.getParameterValue(DisbursementVoucherDocument.class, DisbursementVoucherConstants.DvPdpExtractGroup.DV_PDP_SBUNT_CODE); 111 112 List<String> subUnits = new ArrayList<String>(); 113 subUnits.add(purapSubUnit); 114 subUnits.add(dvSubUnit); 115 116 Iterator<PaymentDetail> details = paymentDetailService.getUnprocessedPaidDetails(organization, subUnits); 117 while (details.hasNext()) { 118 PaymentDetail paymentDetail = details.next(); 119 120 String documentTypeCode = paymentDetail.getFinancialDocumentTypeCode(); 121 String documentNumber = paymentDetail.getCustPaymentDocNbr(); 122 123 if(purchasingAccountsPayableModuleService.isPurchasingBatchDocument(documentTypeCode)) { 124 purchasingAccountsPayableModuleService.handlePurchasingBatchPaids(documentNumber, documentTypeCode, processDate); 125 } 126 else if (documentTypeCode.equals(DisbursementVoucherConstants.DOCUMENT_TYPE_CHECKACH)) { 127 DisbursementVoucherDocument dv = dvExtractService.getDocumentById(documentNumber); 128 dvExtractService.markDisbursementVoucherAsPaid(dv, processDate); 129 } 130 else { 131 LOG.warn("processPdpPaids() Unknown document type (" + documentTypeCode + ") for document ID: " + documentNumber); 132 continue; 133 } 134 135 paymentGroupService.processPaidGroup(paymentDetail.getPaymentGroup(), processDate); 136 } 137 } 138 139 /** 140 * @see org.kuali.kfs.module.purap.service.ProcessPdpCancelPaidService#processPdpCancelsAndPaids() 141 */ 142 public void processPdpCancelsAndPaids() { 143 LOG.debug("processPdpCancelsAndPaids() started"); 144 145 processPdpCancels(); 146 processPdpPaids(); 147 } 148 149 public void setPaymentDetailService(PaymentDetailService paymentDetailService) { 150 this.paymentDetailService = paymentDetailService; 151 } 152 153 public void setPaymentGroupService(PaymentGroupService paymentGroupService) { 154 this.paymentGroupService = paymentGroupService; 155 } 156 157 public void setParameterService(ParameterService parameterService) { 158 this.parameterService = parameterService; 159 } 160 161 public void setPurchasingAccountsPayableModuleService(PurchasingAccountsPayableModuleService purchasingAccountsPayableModuleService) { 162 this.purchasingAccountsPayableModuleService = purchasingAccountsPayableModuleService; 163 } 164 165 public void setDateTimeService(DateTimeService dts) { 166 this.dateTimeService = dts; 167 } 168 169 /** 170 * Sets the dvExtractService attribute value. 171 * @param dvExtractService The dvExtractService to set. 172 */ 173 public void setDvExtractService(DisbursementVoucherExtractService dvExtractService) { 174 this.dvExtractService = dvExtractService; 175 } 176 177 }