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.module.purap.document.service.impl;
017
018 import java.sql.Date;
019 import java.util.ArrayList;
020 import java.util.Collection;
021 import java.util.HashMap;
022 import java.util.List;
023 import java.util.Map;
024
025 import org.kuali.kfs.integration.purap.PurchasingAccountsPayableModuleService;
026 import org.kuali.kfs.integration.purap.PurchasingAccountsPayableSensitiveData;
027 import org.kuali.kfs.module.purap.PurapConstants;
028 import org.kuali.kfs.module.purap.PurapParameterConstants;
029 import org.kuali.kfs.module.purap.businessobject.SensitiveData;
030 import org.kuali.kfs.module.purap.document.PaymentRequestDocument;
031 import org.kuali.kfs.module.purap.document.PurchaseOrderDocument;
032 import org.kuali.kfs.module.purap.document.VendorCreditMemoDocument;
033 import org.kuali.kfs.module.purap.document.service.CreditMemoService;
034 import org.kuali.kfs.module.purap.document.service.PaymentRequestService;
035 import org.kuali.kfs.module.purap.document.service.PurapService;
036 import org.kuali.kfs.module.purap.document.service.PurchaseOrderService;
037 import org.kuali.kfs.sys.context.SpringContext;
038 import org.kuali.rice.kns.bo.Note;
039 import org.kuali.rice.kns.service.BusinessObjectService;
040 import org.kuali.rice.kns.service.DocumentService;
041 import org.kuali.rice.kns.service.NoteService;
042 import org.kuali.rice.kns.service.ParameterService;
043 import org.kuali.rice.kns.util.ObjectUtils;
044
045 public class PurchasingAccountsPayableModuleServiceImpl implements PurchasingAccountsPayableModuleService {
046 private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(PurchasingAccountsPayableModuleServiceImpl.class);
047
048 private PurchaseOrderService purchaseOrderService;
049 private PurapService purapService;
050 private DocumentService documentService;
051
052 /**
053 * @see org.kuali.kfs.integration.service.PurchasingAccountsPayableModuleService#addAssignedAssetNumbers(java.lang.Integer,
054 * java.util.List)
055 */
056 public void addAssignedAssetNumbers(Integer purchaseOrderNumber, String principalId, String noteText) {
057 PurchaseOrderDocument document = purchaseOrderService.getCurrentPurchaseOrder(purchaseOrderNumber);
058
059 try {
060 Note assetNote = SpringContext.getBean(DocumentService.class).createNoteFromDocument(document, noteText);
061 // set the initiator user info to the new note
062 assetNote.setAuthorUniversalIdentifier(principalId);
063 document.addNote(assetNote);
064 SpringContext.getBean(NoteService.class).save(assetNote);
065 }
066 catch (Exception e) {
067 throw new RuntimeException(e);
068 }
069 }
070
071 /**
072 * @see org.kuali.kfs.integration.service.PurchasingAccountsPayableModuleService#getPurchaseOrderInquiryUrl(java.lang.Integer)
073 */
074 public String getPurchaseOrderInquiryUrl(Integer purchaseOrderNumber) {
075 PurchaseOrderDocument po = purchaseOrderService.getCurrentPurchaseOrder(purchaseOrderNumber);
076 if (ObjectUtils.isNotNull(po)) {
077 return "purapPurchaseOrder.do?methodToCall=docHandler&docId=" + po.getDocumentNumber() + "&command=displayDocSearchView";
078 }
079 else {
080 return "";
081 }
082 }
083
084 /**
085 * @see org.kuali.kfs.integration.service.PurchasingAccountsPayableModuleService#getAllSensitiveDatas()
086 */
087 public List<PurchasingAccountsPayableSensitiveData> getAllSensitiveDatas() {
088 List<PurchasingAccountsPayableSensitiveData> sensitiveDatas = new ArrayList<PurchasingAccountsPayableSensitiveData>();
089 Collection sensitiveDatasAsObjects = SpringContext.getBean(BusinessObjectService.class).findAll(SensitiveData.class);
090 for (Object rm : sensitiveDatasAsObjects) {
091 sensitiveDatas.add((PurchasingAccountsPayableSensitiveData) rm);
092 }
093 return sensitiveDatas;
094 }
095
096 /**
097 * @see org.kuali.kfs.integration.service.PurchasingAccountsPayableModuleService#getSensitiveDataByCode(java.lang.String)
098 */
099 public PurchasingAccountsPayableSensitiveData getSensitiveDataByCode(String sensitiveDataCode) {
100 Map primaryKeys = new HashMap();
101 primaryKeys.put("sensitiveDataCode", sensitiveDataCode);
102 return (PurchasingAccountsPayableSensitiveData) SpringContext.getBean(BusinessObjectService.class).findByPrimaryKey(SensitiveData.class, primaryKeys);
103 }
104
105 /**
106 * @see org.kuali.kfs.integration.service.PurchasingAccountsPayableModuleService#isPurchasingBatchDocument(java.lang.String)
107 */
108 public boolean isPurchasingBatchDocument(String documentTypeCode) {
109 if (PurapConstants.PurapDocTypeCodes.PAYMENT_REQUEST_DOCUMENT.equals(documentTypeCode) || PurapConstants.PurapDocTypeCodes.CREDIT_MEMO_DOCUMENT.equals(documentTypeCode)) {
110 return true;
111 }
112 return false;
113 }
114
115 /**
116 * @see org.kuali.kfs.integration.service.PurchasingAccountsPayableModuleService#handlePurchasingBatchCancels(java.lang.String)
117 */
118 public void handlePurchasingBatchCancels(String documentNumber, String documentTypeCode, boolean primaryCancel, boolean disbursedPayment) {
119 ParameterService parameterService = SpringContext.getBean(ParameterService.class);
120 PaymentRequestService paymentRequestService = SpringContext.getBean(PaymentRequestService.class);
121 CreditMemoService creditMemoService = SpringContext.getBean(CreditMemoService.class);
122
123 String preqCancelNote = parameterService.getParameterValue(PaymentRequestDocument.class, PurapParameterConstants.PURAP_PDP_PREQ_CANCEL_NOTE);
124 String preqResetNote = parameterService.getParameterValue(PaymentRequestDocument.class, PurapParameterConstants.PURAP_PDP_PREQ_RESET_NOTE);
125 String cmCancelNote = parameterService.getParameterValue(VendorCreditMemoDocument.class, PurapParameterConstants.PURAP_PDP_CM_CANCEL_NOTE);
126 String cmResetNote = parameterService.getParameterValue(VendorCreditMemoDocument.class, PurapParameterConstants.PURAP_PDP_CM_RESET_NOTE);
127
128 if (PurapConstants.PurapDocTypeCodes.PAYMENT_REQUEST_DOCUMENT.equals(documentTypeCode)) {
129 PaymentRequestDocument pr = paymentRequestService.getPaymentRequestByDocumentNumber(documentNumber);
130 if (pr != null) {
131 if (disbursedPayment || primaryCancel) {
132 paymentRequestService.cancelExtractedPaymentRequest(pr, preqCancelNote);
133 }
134 else {
135 paymentRequestService.resetExtractedPaymentRequest(pr, preqResetNote);
136 }
137 }
138 else {
139 LOG.error("processPdpCancels() DOES NOT EXIST, CANNOT PROCESS - Payment Request with doc type of " + documentTypeCode + " with id " + documentNumber);
140 }
141 }
142 else if (PurapConstants.PurapDocTypeCodes.CREDIT_MEMO_DOCUMENT.equals(documentTypeCode)) {
143 VendorCreditMemoDocument cm = creditMemoService.getCreditMemoByDocumentNumber(documentNumber);
144 if (cm != null) {
145 if (disbursedPayment || primaryCancel) {
146 creditMemoService.cancelExtractedCreditMemo(cm, cmCancelNote);
147 }
148 else {
149 creditMemoService.resetExtractedCreditMemo(cm, cmResetNote);
150 }
151 }
152 else {
153 LOG.error("processPdpCancels() DOES NOT EXIST, CANNOT PROCESS - Credit Memo with doc type of " + documentTypeCode + " with id " + documentNumber);
154 }
155 }
156 }
157
158 /**
159 * @see org.kuali.kfs.integration.service.PurchasingAccountsPayableModuleService#handlePurchasingBatchPaids(java.lang.String)
160 */
161 public void handlePurchasingBatchPaids(String documentNumber, String documentTypeCode, Date processDate) {
162 ParameterService parameterService = SpringContext.getBean(ParameterService.class);
163 PaymentRequestService paymentRequestService = SpringContext.getBean(PaymentRequestService.class);
164 CreditMemoService creditMemoService = SpringContext.getBean(CreditMemoService.class);
165
166 if (PurapConstants.PurapDocTypeCodes.PAYMENT_REQUEST_DOCUMENT.equals(documentTypeCode)) {
167 PaymentRequestDocument pr = paymentRequestService.getPaymentRequestByDocumentNumber(documentNumber);
168 if (pr != null) {
169 paymentRequestService.markPaid(pr, processDate);
170 }
171 else {
172 LOG.error("processPdpPaids() DOES NOT EXIST, CANNOT MARK - Payment Request with doc type of " + documentTypeCode + " with id " + documentNumber);
173 }
174 }
175 else if (PurapConstants.PurapDocTypeCodes.CREDIT_MEMO_DOCUMENT.equals(documentTypeCode)) {
176 VendorCreditMemoDocument cm = creditMemoService.getCreditMemoByDocumentNumber(documentNumber);
177 if (cm != null) {
178 creditMemoService.markPaid(cm, processDate);
179 }
180 else {
181 LOG.error("processPdpPaids() DOES NOT EXIST, CANNOT PROCESS - Credit Memo with doc type of " + documentTypeCode + " with id " + documentNumber);
182 }
183 }
184
185 }
186
187 public String getB2BUrlString() {
188 return PurapConstants.B2B_URL_STRING;
189 }
190
191 public void setPurchaseOrderService(PurchaseOrderService purchaseOrderService) {
192 this.purchaseOrderService = purchaseOrderService;
193 }
194
195 public void setDocumentService(DocumentService documentService) {
196 this.documentService = documentService;
197 }
198
199 public void setPurapService(PurapService purapService) {
200 this.purapService = purapService;
201 }
202
203 }
204