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.web.struts;
017
018 import java.text.MessageFormat;
019 import java.util.HashMap;
020 import java.util.List;
021 import java.util.Map;
022 import java.util.Properties;
023
024 import javax.servlet.http.HttpServletRequest;
025 import javax.servlet.http.HttpServletResponse;
026
027 import org.apache.commons.lang.StringUtils;
028 import org.apache.struts.action.ActionForm;
029 import org.apache.struts.action.ActionForward;
030 import org.apache.struts.action.ActionMapping;
031 import org.kuali.kfs.pdp.PdpKeyConstants;
032 import org.kuali.kfs.pdp.PdpParameterConstants;
033 import org.kuali.kfs.pdp.PdpPropertyConstants;
034 import org.kuali.kfs.pdp.businessobject.PaymentDetail;
035 import org.kuali.kfs.pdp.service.PaymentMaintenanceService;
036 import org.kuali.kfs.pdp.util.PdpPaymentDetailQuestionCallback;
037 import org.kuali.kfs.sys.KFSConstants;
038 import org.kuali.kfs.sys.context.SpringContext;
039 import org.kuali.rice.kim.bo.Person;
040 import org.kuali.rice.kns.question.ConfirmationQuestion;
041 import org.kuali.rice.kns.service.BusinessObjectService;
042 import org.kuali.rice.kns.service.KNSServiceLocator;
043 import org.kuali.rice.kns.service.KualiConfigurationService;
044 import org.kuali.rice.kns.util.ErrorMessage;
045 import org.kuali.rice.kns.util.GlobalVariables;
046 import org.kuali.rice.kns.util.KNSConstants;
047 import org.kuali.rice.kns.util.MessageMap;
048 import org.kuali.rice.kns.util.ObjectUtils;
049 import org.kuali.rice.kns.util.UrlFactory;
050 import org.kuali.rice.kns.web.struts.action.KualiAction;
051
052 /**
053 * This class defines actions for Payment
054 */
055 public class PaymentDetailAction extends KualiAction {
056
057 private PaymentMaintenanceService paymentMaintenanceService;
058 private BusinessObjectService businessObjectService;
059
060 /**
061 * Constructs a PaymentDetailAction.java.
062 */
063 public PaymentDetailAction() {
064 setPaymentMaintenanceService(SpringContext.getBean(PaymentMaintenanceService.class));
065 setBusinessObjectService(SpringContext.getBean(BusinessObjectService.class));
066
067 }
068
069 /**
070 * This method confirms and cancels a payment.
071 * @param mapping
072 * @param form
073 * @param request
074 * @param response
075 * @return
076 * @throws Exception
077 */
078 public ActionForward confirmAndCancel(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
079
080 PdpPaymentDetailQuestionCallback callback = new PdpPaymentDetailQuestionCallback() {
081 public boolean doPostQuestion(int paymentDetailId, String changeText, Person user) {
082 return performCancel( paymentDetailId, changeText, user);
083 }
084 };
085
086 return askQuestionWithInput(mapping, form, request, response, PdpKeyConstants.PaymentDetail.Confirmation.CANCEL_PAYMENT_QUESTION, PdpKeyConstants.PaymentDetail.Confirmation.CANCEL_PAYMENT_MESSAGE, PdpKeyConstants.PaymentDetail.Messages.PAYMENT_SUCCESSFULLY_CANCELED, "confirmAndCancel", callback);
087 }
088
089 /**
090 * This method cancels a payment.
091 * @param paymentDetailId the payment detail id.
092 * @param changeText the text of the change
093 * @param user the user that perfomed the change
094 * @return true if payment successfully canceled, false otherwise
095 */
096 private boolean performCancel(int paymentDetailId, String changeText, Person user) {
097
098 Map keyMap = new HashMap();
099 keyMap.put(PdpPropertyConstants.PaymentDetail.PAYMENT_ID, paymentDetailId);
100
101 PaymentDetail paymentDetail = (PaymentDetail) businessObjectService.findByPrimaryKey(PaymentDetail.class, keyMap);
102 if (ObjectUtils.isNotNull(paymentDetail)) {
103 int paymentGroupId = paymentDetail.getPaymentGroupId().intValue();
104 return paymentMaintenanceService.cancelPendingPayment(paymentGroupId, paymentDetailId, changeText, user);
105 }
106 else {
107 GlobalVariables.getMessageMap().putError(PdpPropertyConstants.PaymentDetail.PAYMENT_ID, PdpKeyConstants.PaymentDetail.ErrorMessages.ERROR_PAYMENT_NOT_FOUND);
108 return false;
109 }
110 }
111
112 /**
113 * This method confirms and holds a payment
114 *
115 * @param mapping
116 * @param form
117 * @param request
118 * @param response
119 * @return
120 * @throws Exception
121 */
122 public ActionForward confirmAndHold(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
123 PdpPaymentDetailQuestionCallback callback = new PdpPaymentDetailQuestionCallback() {
124 public boolean doPostQuestion(int paymentDetailId, String changeText, Person user) {
125 return performHold( paymentDetailId, changeText, user);
126 }
127 };
128 return askQuestionWithInput(mapping, form, request, response, PdpKeyConstants.PaymentDetail.Confirmation.HOLD_PAYMENT_QUESTION, PdpKeyConstants.PaymentDetail.Confirmation.HOLD_PAYMENT_MESSAGE, PdpKeyConstants.PaymentDetail.Messages.PAYMENT_SUCCESSFULLY_HOLD, "confirmAndHold", callback);
129 }
130
131 /**
132
133 */
134 /**
135 * This method performs a hold on a payment.
136 * @param paymentDetailId the payment detail id
137 * @param changeText the text of the user change
138 * @param user the user that performed the change
139 * @return true if payment successfully held, false otherwise
140 */
141 private boolean performHold(int paymentDetailId, String changeText, Person user) {
142
143 Map keyMap = new HashMap();
144 keyMap.put(PdpPropertyConstants.PaymentDetail.PAYMENT_ID, paymentDetailId);
145
146 PaymentDetail paymentDetail = (PaymentDetail) businessObjectService.findByPrimaryKey(PaymentDetail.class, keyMap);
147 if (ObjectUtils.isNotNull(paymentDetail)) {
148 int paymentGroupId = paymentDetail.getPaymentGroupId().intValue();
149 return paymentMaintenanceService.holdPendingPayment(paymentGroupId, changeText, user);
150 }
151 else {
152 GlobalVariables.getMessageMap().putError(PdpPropertyConstants.PaymentDetail.PAYMENT_ID, PdpKeyConstants.PaymentDetail.ErrorMessages.ERROR_PAYMENT_NOT_FOUND);
153 return false;
154 }
155 }
156
157 /**
158 * This method confirms and removes a hold on a payment.
159 *
160 * @param mapping
161 * @param form
162 * @param request
163 * @param response
164 * @return an ActionForward
165 * @throws Exception
166 */
167 public ActionForward confirmAndRemoveHold(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
168 PdpPaymentDetailQuestionCallback callback = new PdpPaymentDetailQuestionCallback() {
169 public boolean doPostQuestion(int paymentDetailId, String changeText, Person user) {
170 return performRemoveHold( paymentDetailId, changeText, user);
171 }
172 };
173 return askQuestionWithInput(mapping, form, request, response, PdpKeyConstants.PaymentDetail.Confirmation.REMOVE_HOLD_PAYMENT_QUESTION, PdpKeyConstants.PaymentDetail.Confirmation.REMOVE_HOLD_PAYMENT_MESSAGE, PdpKeyConstants.PaymentDetail.Messages.HOLD_SUCCESSFULLY_REMOVED_ON_PAYMENT, "confirmAndRemoveHold", callback);
174 }
175
176 /**
177 * This method removes a hold on payment.
178 * @param paymentDetailId the payment detail id
179 * @param changeText the text of the user change
180 * @param user the user that performs the change
181 * @return true if hold successfully removed from payment, false otherwise
182 */
183 private boolean performRemoveHold(int paymentDetailId, String changeText, Person user) {
184
185 Map keyMap = new HashMap();
186 keyMap.put(PdpPropertyConstants.PaymentDetail.PAYMENT_ID, paymentDetailId);
187
188 PaymentDetail paymentDetail = (PaymentDetail) businessObjectService.findByPrimaryKey(PaymentDetail.class, keyMap);
189 if (ObjectUtils.isNotNull(paymentDetail)) {
190 int paymentGroupId = paymentDetail.getPaymentGroupId().intValue();
191 return paymentMaintenanceService.removeHoldPendingPayment(paymentGroupId, changeText, user);
192 }
193 else {
194 GlobalVariables.getMessageMap().putError(PdpPropertyConstants.PaymentDetail.PAYMENT_ID, PdpKeyConstants.PaymentDetail.ErrorMessages.ERROR_PAYMENT_NOT_FOUND);
195 return false;
196 }
197 }
198
199 /**
200 * This method confirms and sets the immediate flag.
201 * @param mapping
202 * @param form
203 * @param request
204 * @param response
205 * @return an ActionForward
206 * @throws Exception
207 */
208 public ActionForward confirmAndSetImmediate(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
209
210 PdpPaymentDetailQuestionCallback callback = new PdpPaymentDetailQuestionCallback() {
211 public boolean doPostQuestion(int paymentDetailId, String changeText, Person user) {
212 return performSetImmediate(paymentDetailId, changeText, user);
213
214 }
215 };
216 return askQuestionWithInput(mapping, form, request, response, PdpKeyConstants.PaymentDetail.Confirmation.CHANGE_IMMEDIATE_PAYMENT_QUESTION, PdpKeyConstants.PaymentDetail.Confirmation.CHANGE_IMMEDIATE_PAYMENT_MESSAGE, PdpKeyConstants.PaymentDetail.Messages.PAYMENT_SUCCESSFULLY_SET_AS_IMMEDIATE, "confirmAndSetImmediate", callback);
217 }
218
219 /**
220 * This method sets the immediate flag
221 * @param paymentDetailId the payment detail id
222 * @param changeText the text of the change
223 * @param user the user that performed the change
224 * @return true if flag successfully set on payment, false otherwise
225 */
226 private boolean performSetImmediate(int paymentDetailId, String changeText, Person user) {
227 Map keyMap = new HashMap();
228 keyMap.put(PdpPropertyConstants.PaymentDetail.PAYMENT_ID, paymentDetailId);
229
230 PaymentDetail paymentDetail = (PaymentDetail) businessObjectService.findByPrimaryKey(PaymentDetail.class, keyMap);
231 if (ObjectUtils.isNotNull(paymentDetail)) {
232 int paymentGroupId = paymentDetail.getPaymentGroupId().intValue();
233 paymentMaintenanceService.changeImmediateFlag(paymentGroupId, changeText, user);
234 return true;
235 }
236 else {
237 GlobalVariables.getMessageMap().putError(PdpPropertyConstants.PaymentDetail.PAYMENT_ID, PdpKeyConstants.PaymentDetail.ErrorMessages.ERROR_PAYMENT_NOT_FOUND);
238 return false;
239 }
240
241 }
242
243 /**
244 * This method confirms and removes the immediate flag.
245 * @param mapping
246 * @param form
247 * @param request
248 * @param response
249 * @return
250 * @throws Exception
251 */
252 public ActionForward confirmAndRemoveImmediate(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
253 PdpPaymentDetailQuestionCallback callback = new PdpPaymentDetailQuestionCallback() {
254 public boolean doPostQuestion(int paymentDetailId, String changeText, Person user) {
255 return performSetImmediate(paymentDetailId, changeText, user);
256
257 }
258 };
259 return askQuestionWithInput(mapping, form, request, response, PdpKeyConstants.PaymentDetail.Confirmation.CHANGE_IMMEDIATE_PAYMENT_QUESTION, PdpKeyConstants.PaymentDetail.Confirmation.CHANGE_IMMEDIATE_PAYMENT_MESSAGE, PdpKeyConstants.PaymentDetail.Messages.IMMEDIATE_SUCCESSFULLY_REMOVED_ON_PAYMENT, "confirmAndRemoveImmediate", callback);
260 }
261
262 /**
263 * This method confirms and cancels a disbursement.
264 * @param mapping
265 * @param form
266 * @param request
267 * @param response
268 * @return an ActionForward
269 * @throws Exception
270 */
271 public ActionForward confirmAndCancelDisbursement(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
272 PdpPaymentDetailQuestionCallback callback = new PdpPaymentDetailQuestionCallback() {
273 public boolean doPostQuestion(int paymentDetailId, String changeText, Person user) {
274 return performCancelDisbursement( paymentDetailId, changeText, user);
275 }
276 };
277 return askQuestionWithInput(mapping, form, request, response, PdpKeyConstants.PaymentDetail.Confirmation.CANCEL_DISBURSEMENT_QUESTION, PdpKeyConstants.PaymentDetail.Confirmation.CANCEL_DISBURSEMENT_MESSAGE, PdpKeyConstants.PaymentDetail.Messages.DISBURSEMENT_SUCCESSFULLY_CANCELED, "confirmAndRemoveHold", callback);
278 }
279
280 /**
281 * This method cancels a disbursement
282 * @param paymentDetailId the payment detail id
283 * @param changeText the text entered by user
284 * @param user the user that canceled the disbursement
285 * @return true if disbursement successfully canceled, false otherwise
286 */
287 private boolean performCancelDisbursement(int paymentDetailId, String changeText, Person user) {
288 Map keyMap = new HashMap();
289 keyMap.put(PdpPropertyConstants.PaymentDetail.PAYMENT_ID, paymentDetailId);
290
291 PaymentDetail paymentDetail = (PaymentDetail) businessObjectService.findByPrimaryKey(PaymentDetail.class, keyMap);
292 if (ObjectUtils.isNotNull(paymentDetail)) {
293 int paymentGroupId = paymentDetail.getPaymentGroupId().intValue();
294 return paymentMaintenanceService.cancelDisbursement(paymentGroupId, paymentDetailId, changeText, user);
295 }
296 else {
297 GlobalVariables.getMessageMap().putError(PdpPropertyConstants.PaymentDetail.PAYMENT_ID, PdpKeyConstants.PaymentDetail.ErrorMessages.ERROR_PAYMENT_NOT_FOUND);
298 return false;
299 }
300 }
301
302 /**
303 * This method confirms an reissues/cancels a disbursement.
304 * @param mapping
305 * @param form
306 * @param request
307 * @param response
308 * @return
309 * @throws Exception
310 */
311 public ActionForward confirmAndReIssueCancel(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
312 PdpPaymentDetailQuestionCallback callback = new PdpPaymentDetailQuestionCallback() {
313 public boolean doPostQuestion(int paymentDetailId, String changeText, Person user) {
314 return performReIssueDisbursement( paymentDetailId, changeText, user);
315 }
316 };
317 return askQuestionWithInput(mapping, form, request, response, PdpKeyConstants.PaymentDetail.Confirmation.CANCEL_REISSUE_DISBURSEMENT_QUESTION, PdpKeyConstants.PaymentDetail.Confirmation.CANCEL_REISSUE_DISBURSEMENT_MESSAGE, PdpKeyConstants.PaymentDetail.Messages.DISBURSEMENT_SUCCESSFULLY_CANCELED, "confirmAndReissueCancel", callback);
318 }
319
320 /**
321 * This method reissue/cancels a disbursement
322 * @param paymentDetailId the payment detail id
323 * @param changeText the text entered by the user
324 * @param user the user that canceled the disbursement
325 * @return true if disbursement successfully reissued/canceled, false otherwise
326 */
327 private boolean performReIssueDisbursement(int paymentDetailId, String changeText, Person user) {
328 Map keyMap = new HashMap();
329 keyMap.put(PdpPropertyConstants.PaymentDetail.PAYMENT_ID, paymentDetailId);
330
331 PaymentDetail paymentDetail = (PaymentDetail) businessObjectService.findByPrimaryKey(PaymentDetail.class, keyMap);
332 if (ObjectUtils.isNotNull(paymentDetail)) {
333 int paymentGroupId = paymentDetail.getPaymentGroupId().intValue();
334 return paymentMaintenanceService.cancelReissueDisbursement(paymentGroupId, changeText, user);
335 }
336 else {
337 GlobalVariables.getMessageMap().putError(PdpPropertyConstants.PaymentDetail.PAYMENT_ID, PdpKeyConstants.PaymentDetail.ErrorMessages.ERROR_PAYMENT_NOT_FOUND);
338 return false;
339 }
340 }
341
342 /**
343 * This method prompts for a reason to perform an action on a payment detail.
344 *
345 * @param mapping
346 * @param form
347 * @param request
348 * @param response
349 * @param confirmationQuestion
350 * @param confirmationText
351 * @param caller
352 * @param callback
353 * @return
354 * @throws Exception
355 */
356 private ActionForward askQuestionWithInput(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response, String confirmationQuestion, String confirmationText, String successMessage, String caller, PdpPaymentDetailQuestionCallback callback) throws Exception {
357 Object question = request.getParameter(KNSConstants.QUESTION_INST_ATTRIBUTE_NAME);
358 String reason = request.getParameter(KNSConstants.QUESTION_REASON_ATTRIBUTE_NAME);
359 String noteText = KFSConstants.EMPTY_STRING;
360 Person person = GlobalVariables.getUserSession().getPerson();
361 boolean actionStatus;
362 String message = KFSConstants.EMPTY_STRING;
363
364 String paymentDetailId = request.getParameter(PdpParameterConstants.PaymentDetail.DETAIL_ID_PARAM);
365 if (paymentDetailId == null) {
366 paymentDetailId = request.getParameter(KNSConstants.QUESTION_CONTEXT);
367 }
368
369 KualiConfigurationService kualiConfiguration = KNSServiceLocator.getKualiConfigurationService();
370 confirmationText = kualiConfiguration.getPropertyString(confirmationText);
371 confirmationText = MessageFormat.format(confirmationText, paymentDetailId);
372
373 if (question == null) {
374
375 // ask question if not already asked
376 return this.performQuestionWithInput(mapping, form, request, response, confirmationQuestion, confirmationText, KNSConstants.CONFIRMATION_QUESTION, caller, paymentDetailId);
377 }
378 else {
379 Object buttonClicked = request.getParameter(KNSConstants.QUESTION_CLICKED_BUTTON);
380 if ((confirmationQuestion.equals(question)) && ConfirmationQuestion.NO.equals(buttonClicked)) {
381 actionStatus = false;
382 }
383 else {
384 noteText = reason;
385 int noteTextLength = (reason == null) ? 0 : noteText.length();
386 int noteTextMaxLength = PdpKeyConstants.BatchConstants.Confirmation.NOTE_TEXT_MAX_LENGTH;
387
388 if (StringUtils.isBlank(reason)) {
389
390 if (reason == null) {
391 // prevent a NPE by setting the reason to a blank string
392 reason = KFSConstants.EMPTY_STRING;
393 }
394 return this.performQuestionWithInputAgainBecauseOfErrors(mapping, form, request, response, confirmationQuestion, confirmationText, KNSConstants.CONFIRMATION_QUESTION, KFSConstants.MAPPING_BASIC, paymentDetailId, reason, PdpKeyConstants.BatchConstants.ErrorMessages.ERROR_NOTE_EMPTY, KNSConstants.QUESTION_REASON_ATTRIBUTE_NAME, "");
395 }
396 else if (noteTextLength > noteTextMaxLength) {
397 return this.performQuestionWithInputAgainBecauseOfErrors(mapping, form, request, response, confirmationQuestion, confirmationText, KNSConstants.CONFIRMATION_QUESTION, KFSConstants.MAPPING_BASIC, paymentDetailId, reason, PdpKeyConstants.BatchConstants.ErrorMessages.ERROR_NOTE_TOO_LONG, KNSConstants.QUESTION_REASON_ATTRIBUTE_NAME, "");
398 }
399
400 actionStatus = callback.doPostQuestion(Integer.parseInt(paymentDetailId), noteText, person);
401 if (actionStatus) {
402 message = successMessage;
403 }
404
405 }
406 }
407
408 String returnUrl = buildUrl(paymentDetailId, actionStatus, message, buildErrorMesageKeyList());
409 return new ActionForward(returnUrl, true);
410 }
411
412 /**
413 * This method builds the forward url.
414 *
415 * @param paymentDetailId the payment detail id
416 * @param success action status: true if success, false otherwise
417 * @param message the message for the user
418 * @return the build url
419 */
420 private String buildUrl(String paymentDetailId, boolean success, String message, String errorList) {
421 String basePath = SpringContext.getBean(KualiConfigurationService.class).getPropertyString(KFSConstants.APPLICATION_URL_KEY);
422
423 Properties parameters = new Properties();
424 parameters.put(KFSConstants.DISPATCH_REQUEST_PARAMETER, KFSConstants.SEARCH_METHOD);
425 parameters.put(KFSConstants.BACK_LOCATION, basePath + "/" + KFSConstants.MAPPING_PORTAL + ".do");
426 parameters.put(KNSConstants.DOC_FORM_KEY, "88888888");
427 parameters.put(KFSConstants.BUSINESS_OBJECT_CLASS_ATTRIBUTE, PaymentDetail.class.getName());
428 parameters.put(KFSConstants.HIDE_LOOKUP_RETURN_LINK, "true");
429 parameters.put(KFSConstants.SUPPRESS_ACTIONS, "false");
430 parameters.put(PdpPropertyConstants.PaymentDetail.PAYMENT_ID, paymentDetailId);
431 parameters.put(PdpParameterConstants.ACTION_SUCCESSFUL_PARAM, String.valueOf(success));
432 if (message != null && !message.equalsIgnoreCase(KFSConstants.EMPTY_STRING)) {
433 parameters.put(PdpParameterConstants.MESSAGE_PARAM, message);
434 }
435
436 if (StringUtils.isNotEmpty(errorList)) {
437 parameters.put(PdpParameterConstants.ERROR_KEY_LIST_PARAM, errorList);
438 }
439
440 String lookupUrl = UrlFactory.parameterizeUrl(basePath + "/" + KFSConstants.LOOKUP_ACTION, parameters);
441
442 return lookupUrl;
443 }
444
445 /**
446 * This method build a string list of error message keys out of the error map in GlobalVariables
447 *
448 * @return a String representing the list of error message keys
449 */
450 private String buildErrorMesageKeyList() {
451 MessageMap errorMap = GlobalVariables.getMessageMap();
452 StringBuffer errorList = new StringBuffer();
453
454 for (String errorKey : (List<String>) errorMap.getPropertiesWithErrors()) {
455 for (ErrorMessage errorMessage : (List<ErrorMessage>) errorMap.getMessages(errorKey)) {
456
457 errorList.append(errorMessage.getErrorKey());
458 errorList.append(PdpParameterConstants.ERROR_KEY_LIST_SEPARATOR);
459 }
460 }
461 if (errorList.length() > 0) {
462 errorList.replace(errorList.lastIndexOf(PdpParameterConstants.ERROR_KEY_LIST_SEPARATOR), errorList.lastIndexOf(PdpParameterConstants.ERROR_KEY_LIST_SEPARATOR) + PdpParameterConstants.ERROR_KEY_LIST_SEPARATOR.length(), "");
463 }
464
465 return errorList.toString();
466 }
467
468 /**
469 * This method gets the payment maintenance service
470 * @return the paymentMaintenanceService
471 */
472 public PaymentMaintenanceService getPaymentMaintenanceService() {
473 return paymentMaintenanceService;
474 }
475
476 /**
477 * This method sets the payment maintenance service
478 * @param paymentMaintenanceService
479 */
480 public void setPaymentMaintenanceService(PaymentMaintenanceService paymentMaintenanceService) {
481 this.paymentMaintenanceService = paymentMaintenanceService;
482 }
483
484 /**
485 * This method gets the business object service
486 * @return the businessObjectService
487 */
488 public BusinessObjectService getBusinessObjectService() {
489 return businessObjectService;
490 }
491
492 /**
493 * This method sets the business object service.
494 * @param businessObjectService
495 */
496 public void setBusinessObjectService(BusinessObjectService businessObjectService) {
497 this.businessObjectService = businessObjectService;
498 }
499
500 }
501