1 package org.kuali.asr.service.impl;
2
3
4 import org.apache.log4j.Logger;
5 import org.kuali.ole.DataCarrierService;
6 import org.kuali.ole.LoanUtil;
7 import org.kuali.ole.OLEConstants;
8 import org.kuali.ole.OLEParameterConstants;
9 import org.kuali.ole.deliver.batch.OleDeliverBatchServiceImpl;
10 import org.kuali.ole.deliver.batch.OleMailer;
11 import org.kuali.ole.deliver.batch.OleNoticeBo;
12 import org.kuali.ole.deliver.batch.OleSms;
13 import org.kuali.ole.deliver.bo.*;
14 import org.kuali.ole.deliver.processor.LoanProcessor;
15 import org.kuali.ole.describe.bo.OleInstanceItemType;
16 import org.kuali.ole.docstore.common.client.DocstoreClientLocator;
17 import org.kuali.ole.docstore.common.document.ItemOleml;
18 import org.kuali.ole.docstore.common.document.content.enums.DocType;
19 import org.kuali.ole.docstore.common.document.content.instance.xstream.ItemOlemlRecordProcessor;
20 import org.kuali.ole.docstore.common.search.SearchResponse;
21 import org.kuali.ole.docstore.common.search.SearchResult;
22 import org.kuali.ole.docstore.common.search.SearchResultField;
23 import org.kuali.ole.ingest.pojo.MatchBo;
24 import org.kuali.ole.sys.context.SpringContext;
25 import org.kuali.ole.util.DocstoreUtil;
26 import org.kuali.rice.core.api.config.property.ConfigContext;
27 import org.kuali.rice.core.api.mail.EmailBody;
28 import org.kuali.rice.core.api.mail.EmailFrom;
29 import org.kuali.rice.core.api.mail.EmailSubject;
30 import org.kuali.rice.core.api.mail.EmailTo;
31 import org.kuali.rice.core.api.resourceloader.GlobalResourceLoader;
32 import org.kuali.rice.coreservice.impl.parameter.ParameterBo;
33 import org.kuali.rice.kim.api.permission.PermissionService;
34 import org.kuali.rice.kim.api.role.RoleService;
35 import org.kuali.rice.kim.api.services.KimApiServiceLocator;
36 import org.kuali.rice.kim.impl.identity.type.EntityTypeContactInfoBo;
37 import org.kuali.rice.krad.service.BusinessObjectService;
38 import org.kuali.rice.krad.service.KRADServiceLocator;
39 import org.kuali.rice.krad.util.GlobalVariables;
40 import org.kuali.rice.krad.util.ObjectUtils;
41 import org.kuali.rice.krms.api.KrmsApiServiceLocator;
42 import org.kuali.rice.krms.api.engine.*;
43 import org.kuali.rice.krms.impl.repository.AgendaBo;
44
45 import java.math.BigDecimal;
46 import java.sql.Timestamp;
47 import java.text.DateFormat;
48 import java.text.SimpleDateFormat;
49 import java.util.*;
50
51
52
53
54
55
56
57
58 public class OLEASRPlaceRequestHelperServiceImpl {
59 private static final Logger LOG = Logger.getLogger(OLEASRPlaceRequestHelperServiceImpl.class);
60 private static final String NAMESPACE_CODE_SELECTOR = "namespaceCode";
61 private static final String NAME_SELECTOR = "name";
62 private final static String RULE_EVALUATED = "Rule Evaluated";
63 private final static String ROUTED_EXTERNAL = "Routed External";
64 private BusinessObjectService businessObjectService = KRADServiceLocator.getBusinessObjectService();
65 private int queuePosition = 0;
66 private LoanProcessor loanProcessor = new LoanProcessor();
67 private DocstoreUtil docstoreUtil = new DocstoreUtil();
68
69 private PermissionService getPermissionService() {
70 PermissionService service = KimApiServiceLocator.getPermissionService();
71 return service;
72 }
73
74 private DocstoreClientLocator docstoreClientLocator;
75
76 public DocstoreClientLocator getDocstoreClientLocator() {
77
78 if (docstoreClientLocator == null) {
79 docstoreClientLocator = SpringContext.getBean(DocstoreClientLocator.class);
80
81 }
82 return docstoreClientLocator;
83 }
84
85
86
87
88
89
90 private BusinessObjectService getBusinessObjectService() {
91 if (null == businessObjectService) {
92 businessObjectService = KRADServiceLocator.getBusinessObjectService();
93 }
94 return businessObjectService;
95 }
96
97 public void setbusinessObjectService(BusinessObjectService businessObjectService) {
98 this.businessObjectService = businessObjectService;
99 }
100
101 public LoanProcessor getLoanProcessor() {
102 return loanProcessor;
103 }
104
105 public void setLoanProcessor(LoanProcessor loanProcessor) {
106 this.loanProcessor = loanProcessor;
107 }
108
109
110
111
112
113
114
115 public OleDeliverRequestBo processRequestType(OleDeliverRequestBo oleDeliverRequestBo) {
116
117 LOG.debug("Inside processRequestType for the Request id :" + oleDeliverRequestBo.getRequestId());
118 oleDeliverRequestBo = processPatron(oleDeliverRequestBo);
119 oleDeliverRequestBo = processItem(oleDeliverRequestBo);
120 if (oleDeliverRequestBo.getRequestTypeId() != null) {
121 if (oleDeliverRequestBo.getRequestTypeId().equals("3") && oleDeliverRequestBo.getPickUpLocationId() != null && !oleDeliverRequestBo.getPickUpLocationId().isEmpty()) {
122 oleDeliverRequestBo.setRequestTypeId("4");
123 } else if (oleDeliverRequestBo.getRequestTypeId().equals("5") && oleDeliverRequestBo.getPickUpLocationId() != null && !oleDeliverRequestBo.getPickUpLocationId().isEmpty()) {
124 oleDeliverRequestBo.setRequestTypeId("6");
125 } else if (oleDeliverRequestBo.getRequestTypeId().equals("1") && oleDeliverRequestBo.getPickUpLocationId() != null && !oleDeliverRequestBo.getPickUpLocationId().isEmpty()) {
126 oleDeliverRequestBo.setRequestTypeId("2");
127 }
128 }
129 return oleDeliverRequestBo;
130 }
131
132
133
134
135
136
137
138
139 public OleDeliverRequestBo processPatron(OleDeliverRequestBo oleDeliverRequestBo) {
140 LOG.debug("Inside processPatron");
141 OleDeliverRequestBo deliver = oleDeliverRequestBo;
142
143 if (oleDeliverRequestBo.getBorrowerBarcode() != null || oleDeliverRequestBo.getProxyBorrowerBarcode() != null) {
144 Map<String, String> patronMap = new HashMap<String, String>();
145 patronMap.put(OLEConstants.OleDeliverRequest.PATRON_BARCODE, oleDeliverRequestBo.getBorrowerBarcode());
146 List<OlePatronDocument> olePatronDocumentList = (List<OlePatronDocument>) businessObjectService.findMatching(OlePatronDocument.class, patronMap);
147 if (olePatronDocumentList != null && olePatronDocumentList.size() > 0) {
148 deliver.setOlePatron(olePatronDocumentList.get(0));
149 deliver.setBorrowerName(olePatronDocumentList.get(0).getPatronName());
150 deliver.setBorrowerId(olePatronDocumentList.get(0).getOlePatronId());
151 } else if (olePatronDocumentList != null && olePatronDocumentList.size() == 0) {
152 deliver.setBorrowerId(null);
153 deliver.setFirstName(null);
154 deliver.setLastName(null);
155 deliver.setOlePatron(null);
156 deliver.setBorrowerName(null);
157 deliver.setBorrowerBarcode(null);
158 }
159 if (oleDeliverRequestBo.getRequestCreator().equals(OLEConstants.OleDeliverRequest.REQUESTER_PROXY_PATRON)) {
160 Map<String, String> proxyPatronMap = new HashMap<String, String>();
161 proxyPatronMap.put(OLEConstants.OleDeliverRequest.PATRON_BARCODE, oleDeliverRequestBo.getProxyBorrowerBarcode());
162 List<OlePatronDocument> oleProxyPatronDocumentList = (List<OlePatronDocument>) businessObjectService.findMatching(OlePatronDocument.class, proxyPatronMap);
163 if (oleProxyPatronDocumentList != null && oleProxyPatronDocumentList.size() > 0) {
164 deliver.setOleProxyPatron(oleProxyPatronDocumentList.get(0));
165 deliver.setProxyBorrowerName(oleProxyPatronDocumentList.get(0).getPatronName());
166 deliver.setProxyBorrowerId(oleProxyPatronDocumentList.get(0).getOlePatronId());
167 } else if (oleProxyPatronDocumentList != null && oleProxyPatronDocumentList.size() == 0) {
168 deliver.setProxyBorrowerId(null);
169 deliver.setProxyBorrowerName(null);
170 deliver.setOleProxyPatron(null);
171 }
172 }
173
174 }
175
176 return deliver;
177 }
178
179 public boolean processOperator(String principalId) {
180
181
182
183
184 boolean isOperator = true;
185 Collection<String> roles = getRoleService().getRoleMemberPrincipalIds(OLEConstants.OlePatron.PATRON_NAMESPACE, OLEConstants.OleDeliverRequest.REQUESTER_OPERATOR, null);
186 if (roles != null) {
187 isOperator = roles.contains(principalId);
188 }
189 return isOperator;
190 }
191
192
193
194
195
196
197
198 public boolean validateRequestType(OleDeliverRequestBo oleDeliverRequestBo) {
199 LOG.debug("Inside validateRequestType");
200 boolean validRequest = true;
201 if ((oleDeliverRequestBo.getRequestTypeId().equals("2") || oleDeliverRequestBo.getRequestTypeId().equals("4") || oleDeliverRequestBo.getRequestTypeId().equals("6")) && (oleDeliverRequestBo.getPickUpLocationId() == null) || (oleDeliverRequestBo.getPickUpLocationId() != null && oleDeliverRequestBo.getPickUpLocationId().isEmpty())) {
202 validRequest = false;
203 }
204 return validRequest;
205 }
206
207
208
209
210
211
212
213
214 public boolean validateDeliveryPrivilege(OleDeliverRequestBo oleDeliverRequestBo) {
215 LOG.debug("Inside validateDeliveryPrivilege");
216 boolean hasDeliveryPrivilege = true;
217 if (oleDeliverRequestBo.getRequestTypeId().equals("1") || oleDeliverRequestBo.getRequestTypeId().equals("3") || oleDeliverRequestBo.getRequestTypeId().equals("5")) {
218 if (oleDeliverRequestBo.getOlePatron() != null && !oleDeliverRequestBo.getOlePatron().isDeliveryPrivilege()) {
219 hasDeliveryPrivilege = false;
220 }
221 } else if (oleDeliverRequestBo.getRequestTypeId().equals("2") || oleDeliverRequestBo.getRequestTypeId().equals("4") || oleDeliverRequestBo.getRequestTypeId().equals("6")) {
222 if (oleDeliverRequestBo.getOlePatron() != null && !oleDeliverRequestBo.getOlePatron().isDeliveryPrivilege() && oleDeliverRequestBo.getPickUpLocationId() == null) {
223 hasDeliveryPrivilege = false;
224 }
225 }
226 return hasDeliveryPrivilege;
227 }
228
229
230
231
232
233
234
235
236 public boolean validatePagingPrivilege(OleDeliverRequestBo oleDeliverRequestBo) {
237 LOG.debug("Inside validatePagingPrivilege");
238 boolean hasPagePrivilege = true;
239 if (oleDeliverRequestBo.getRequestTypeId().equals("5") || oleDeliverRequestBo.getRequestTypeId().equals("6")) {
240 if (!oleDeliverRequestBo.getOlePatron().isPagingPrivilege()) {
241 hasPagePrivilege = false;
242 }
243 }
244 return hasPagePrivilege;
245 }
246
247
248
249
250
251
252
253
254 public OleDeliverRequestBo processRequester(OleDeliverRequestBo oleDeliverRequestBo) {
255 LOG.debug("Inside processRequester");
256 if (oleDeliverRequestBo.getRequestCreator().equals(OLEConstants.OleDeliverRequest.REQUESTER_PATRON)) {
257 oleDeliverRequestBo.setProxyBorrowerId(null);
258 oleDeliverRequestBo.setOleProxyPatron(null);
259 oleDeliverRequestBo.setOperatorCreateId(null);
260 oleDeliverRequestBo.setOperatorCreator(null);
261 } else if (oleDeliverRequestBo.getRequestCreator().equals(OLEConstants.OleDeliverRequest.REQUESTER_PROXY_PATRON)) {
262 oleDeliverRequestBo.setOperatorCreateId(null);
263 oleDeliverRequestBo.setOperatorCreator(null);
264 } else if (oleDeliverRequestBo.getRequestCreator().equals(OLEConstants.OleDeliverRequest.REQUESTER_OPERATOR)) {
265 oleDeliverRequestBo.setProxyBorrowerId(null);
266 oleDeliverRequestBo.setOleProxyPatron(null);
267 }
268 return oleDeliverRequestBo;
269 }
270
271
272
273
274
275
276
277
278 public boolean isValidProxyPatron(OleDeliverRequestBo oleDeliverRequestBo) {
279 LOG.debug("Inside isValidProxyPatron");
280 boolean validProxy = true;
281 Map<String, String> proxyMap = new HashMap<String, String>();
282 proxyMap.put(OLEConstants.OleDeliverRequest.PATRON_ID, oleDeliverRequestBo.getBorrowerId());
283 proxyMap.put(OLEConstants.OleDeliverRequest.PROXY_PATRON_ID, oleDeliverRequestBo.getProxyBorrowerId());
284 if (oleDeliverRequestBo.getProxyBorrowerId() != null && !oleDeliverRequestBo.getProxyBorrowerId().isEmpty()) {
285 List<OleProxyPatronDocument> proxyPatronDocuments = (List<OleProxyPatronDocument>) businessObjectService.findMatching(OleProxyPatronDocument.class, proxyMap);
286 if (proxyPatronDocuments.size() == 0) {
287 validProxy = false;
288 }
289 }
290 return validProxy;
291 }
292
293
294
295
296
297
298
299
300 public boolean isRequestAlreadyRaisedByPatron(OleDeliverRequestBo oleDeliverRequestBo) {
301 LOG.debug("Inside isRequestAlreadyRaised");
302 boolean alreadyExist = false;
303 Map<String, String> requestMap = new HashMap<String, String>();
304 requestMap.put(OLEConstants.OleDeliverRequest.BORROWER_ID, oleDeliverRequestBo.getBorrowerId());
305 requestMap.put(OLEConstants.ITEM_UUID, oleDeliverRequestBo.getItemUuid());
306 List<OleDeliverRequestBo> deliverRequestBos = (List<OleDeliverRequestBo>) businessObjectService.findMatching(OleDeliverRequestBo.class, requestMap);
307 if (deliverRequestBos != null && deliverRequestBos.size() > 0) {
308 alreadyExist = true;
309 }
310 return alreadyExist;
311 }
312
313
314
315
316
317
318
319
320 public boolean isAlreadyLoaned(OleDeliverRequestBo oleDeliverRequestBo) {
321 LOG.debug("Inside isAlreadyLoaned");
322 boolean alreadyLoaned = false;
323 Map<String, String> loanMap = new HashMap<String, String>();
324 loanMap.put(OLEConstants.OleDeliverRequest.LOAN_PATRON_ID, oleDeliverRequestBo.getBorrowerId());
325 loanMap.put(OLEConstants.ITEM_UUID, oleDeliverRequestBo.getItemUuid());
326 List<OleLoanDocument> loanDocuments = (List<OleLoanDocument>) businessObjectService.findMatching(OleLoanDocument.class, loanMap);
327 if (loanDocuments != null && loanDocuments.size() > 0) {
328 alreadyLoaned = true;
329 }
330 return alreadyLoaned;
331 }
332
333
334
335
336
337
338
339
340 public boolean isItemAvailable(OleDeliverRequestBo oleDeliverRequestBo) {
341 LOG.debug("Inside isItemAvailable");
342 boolean itemAvailable = true;
343
344 String itemStatuslist = null;
345 String requestTypeCode = oleDeliverRequestBo.getRequestTypeCode();
346 if (requestTypeCode.equals("Recall/Delivery Request")) {
347 itemStatuslist = loanProcessor.getParameter(OLEConstants.RECALL_DELIVERY_ITEM_STATUS);
348 } else if (requestTypeCode.equals("Recall/Hold Request")) {
349 itemStatuslist = loanProcessor.getParameter(OLEConstants.RECALL_HOLD_ITEM_STATUS);
350 } else if (requestTypeCode.equals("Hold/Delivery Request")) {
351 itemStatuslist = loanProcessor.getParameter(OLEConstants.HOLD_DELIVERY_ITEM_STATUS);
352 } else if (requestTypeCode.equals("Hold/Hold Request")) {
353 itemStatuslist = loanProcessor.getParameter(OLEConstants.HOLD_HOLD_ITEM_STATUS);
354 } else if (requestTypeCode.equals("Page/Delivery Request")) {
355 itemStatuslist = loanProcessor.getParameter(OLEConstants.PAGE_DELIVERY_ITEM_STATUS);
356 } else if (requestTypeCode.equals("Page/Hold Request")) {
357 itemStatuslist = loanProcessor.getParameter(OLEConstants.PAGE_HOLD_ITEM_STATUS);
358 } else if (requestTypeCode.equals("Copy Request")) {
359 itemStatuslist = loanProcessor.getParameter(OLEConstants.COPY_REQUEST_ITEM_STATUS);
360 } else {
361 GlobalVariables.getMessageMap().putError(OLEConstants.OleDeliverRequest.REQUEST_TYPE_ID, OLEConstants.OleDeliverRequest.REQUEST_ID_INVALID);
362 }
363 String[] str = itemStatuslist.split(";");
364 for (String itemStatus : str) {
365 if ((itemStatus != null) && (!itemStatus.isEmpty()) && (itemStatus.equals(oleDeliverRequestBo.getItemStatus()))) {
366 itemAvailable = false;
367 }
368 }
369 return itemAvailable;
370 }
371
372
373
374
375
376
377
378
379 public boolean isItemAvailableForLoan(OleDeliverRequestBo oleDeliverRequestBo) {
380 LOG.debug("Inside isItemAvailable");
381 boolean itemAvailable = false;
382 Map<String, String> loanItemMap = new HashMap<String, String>();
383 loanItemMap.put(OLEConstants.ITEM_UUID, oleDeliverRequestBo.getItemUuid());
384 List<OleLoanDocument> loanItemDocuments = (List<OleLoanDocument>) businessObjectService.findMatching(OleLoanDocument.class, loanItemMap);
385 if (loanItemDocuments.size() == 0) {
386 itemAvailable = true;
387 }
388 return itemAvailable;
389 }
390
391
392
393
394
395
396
397
398 public boolean isItemEligible(OleDeliverRequestBo oleDeliverRequestBo) {
399 LOG.debug("Inside isItemEligible");
400 boolean itemEligible = true;
401 Map<String, String> statusMap = new HashMap<String, String>();
402 statusMap.put(OLEConstants.OleDeliverRequest.LOSTBILLREPLACEMENT, OLEConstants.OleDeliverRequest.LOSTBILLREPLACEMENT);
403 statusMap.put(OLEConstants.OleDeliverRequest.MISSINGFINALOVERDUE, OLEConstants.OleDeliverRequest.MISSINGFINALOVERDUE);
404 statusMap.put(OLEConstants.OleDeliverRequest.WITHDRAWNCLIAMSRETURN, OLEConstants.OleDeliverRequest.WITHDRAWNCLIAMSRETURN);
405
406 if (statusMap.containsKey(oleDeliverRequestBo.getItemStatus())) {
407 itemEligible = false;
408 }
409 return itemEligible;
410 }
411
412
413
414
415
416
417
418 public String patronRecordExpired(OleDeliverRequestBo oleDeliverRequestBo) {
419 LOG.debug("Inside patronRecordExpired");
420 String expired = null;
421 Map<String, String> patronMap = new HashMap<String, String>();
422 patronMap.put(OLEConstants.OleDeliverRequest.PATRON_ID, oleDeliverRequestBo.getBorrowerId());
423 List<OlePatronDocument> olePatronDocuments = (List<OlePatronDocument>) businessObjectService.findMatching(OlePatronDocument.class, patronMap);
424 if (olePatronDocuments != null && olePatronDocuments.size() > 0) {
425 SimpleDateFormat fmt = new SimpleDateFormat(OLEConstants.OleDeliverRequest.DATE_FORMAT);
426 Date expirationDate = olePatronDocuments.get(0).getExpirationDate();
427 Date activationDate = olePatronDocuments.get(0).getActivationDate();
428 if ((fmt.format(activationDate)).compareTo(fmt.format(new Date(System.currentTimeMillis()))) <= 0) {
429 if (expirationDate != null) {
430 if ((fmt.format(expirationDate)).compareTo(fmt.format(new Date(System.currentTimeMillis()))) < 0) {
431 expired = OLEConstants.OleDeliverRequest.PATRON_RECORD_EXPIRE;
432 }
433 }
434 } else {
435 expired = OLEConstants.OleDeliverRequest.PATRON_RECORD_FUTURE;
436 }
437 }
438 return expired;
439 }
440
441
442
443
444
445
446
447
448 public List<OleDeliverRequestBo> getRequestedItems(String olePatronId) {
449 LOG.debug("Inside getRequestedItems");
450 Map<String, String> requestMap = new HashMap<String, String>();
451 requestMap.put(OLEConstants.OleDeliverRequest.BORROWER_ID, olePatronId);
452 List<OleDeliverRequestBo> deliverRequestBos = (List<OleDeliverRequestBo>) businessObjectService.findMatching(OleDeliverRequestBo.class, requestMap);
453 for (int i = 0; i < deliverRequestBos.size(); i++) {
454 processItem(deliverRequestBos.get(i));
455 }
456 return deliverRequestBos;
457
458 }
459
460
461
462
463
464
465
466
467 public String validateQueuePosition(List<OleDeliverRequestBo> itemList) {
468 LOG.debug("Inside validateQueuePosition");
469 String message = OLEConstants.OleDeliverRequest.REORDER_SUCCESS;
470 List<Integer> queuePositionList = new ArrayList<Integer>();
471 if (itemList.get(0).getBorrowerQueuePosition() < 1) {
472 return OLEConstants.OleDeliverRequest.POSITIVE_QUEUE_POSITION;
473 }
474 queuePositionList.add(itemList.get(0).getBorrowerQueuePosition());
475
476 for (int i = 1; i < itemList.size(); i++) {
477 for (int j = 0; j < queuePositionList.size(); j++) {
478 if (itemList.get(i).getBorrowerQueuePosition() != null) {
479 if ((itemList.get(i).getBorrowerQueuePosition() >= 1) && (itemList.get(i).getBorrowerQueuePosition() == queuePositionList.get(j))) {
480 return OLEConstants.OleDeliverRequest.QUEUE_DUPLICATE;
481 } else if ((itemList.get(i).getBorrowerQueuePosition() <= 0)) {
482 return OLEConstants.OleDeliverRequest.POSITIVE_QUEUE_POSITION;
483 }
484 }
485 }
486 queuePositionList.add(itemList.get(i).getBorrowerQueuePosition());
487 }
488 return message;
489 }
490
491
492
493
494
495
496
497
498
499 public boolean isRequestRaised(OleDeliverRequestBo oleDeliverRequestBo) {
500 LOG.debug("Inside isRequestRaised");
501 boolean exist = false;
502 Map<String, String> requestMap = new HashMap<String, String>();
503 requestMap.put(OLEConstants.ITEM_UUID, oleDeliverRequestBo.getItemUuid());
504 List<OleDeliverRequestBo> deliverRequestBos = (List<OleDeliverRequestBo>) businessObjectService.findMatching(OleDeliverRequestBo.class, requestMap);
505 if (deliverRequestBos.size() > 0) {
506 exist = true;
507 }
508 return exist;
509 }
510
511
512
513
514
515
516
517 public void cancelDocument(OleDeliverRequestBo oleDeliverRequestBo) {
518 LOG.debug("Inside cancelDocument");
519 Map<String, String> itemMap = new HashMap<String, String>();
520 itemMap.put(OLEConstants.ITEM_UUID, oleDeliverRequestBo.getItemUuid());
521 Map<String, String> requestMap = new HashMap<String, String>();
522 requestMap.put(OLEConstants.OleDeliverRequest.REQUEST_ID, oleDeliverRequestBo.getRequestId());
523 businessObjectService.deleteMatching(OleDeliverRequestBo.class, requestMap);
524 List<OleDeliverRequestBo> oleDeliverRequestDocumentsList = (List<OleDeliverRequestBo>) businessObjectService.findMatchingOrderBy(OleDeliverRequestBo.class, itemMap, OLEConstants.OleDeliverRequest.QUEUE_POSITION, true);
525 businessObjectService.delete(oleDeliverRequestDocumentsList);
526 int queuePosition = 1;
527 for (int i = 0; i < oleDeliverRequestDocumentsList.size(); i++) {
528 oleDeliverRequestDocumentsList.get(i).setBorrowerQueuePosition(queuePosition);
529 queuePosition = queuePosition + 1;
530 }
531 businessObjectService.save(oleDeliverRequestDocumentsList);
532 }
533
534 public void cancelPendingRequestForClaimsReturnedItem(String itemUuid) throws Exception {
535 Map<String, String> requestMap = new HashMap<String, String>();
536 requestMap.put("itemUuid", itemUuid);
537 OleDeliverBatchServiceImpl oleDeliverBatchService = new OleDeliverBatchServiceImpl();
538 List<OleDeliverRequestBo> oleDeliverRequestBoList = (List<OleDeliverRequestBo>) businessObjectService.findMatching(OleDeliverRequestBo.class, requestMap);
539 for (OleDeliverRequestBo oleDeliverRequestBo : oleDeliverRequestBoList) {
540 cancelDocument(oleDeliverRequestBo);
541 OleItemSearch itemSearch = docstoreUtil.getOleItemSearchList(itemUuid);
542 EntityTypeContactInfoBo entityTypeContactInfoBo = oleDeliverRequestBo.getOlePatron().getEntity().getEntityTypeContactInfos().get(0);
543 List<OleNoticeBo> oleNoticeBos = new ArrayList<OleNoticeBo>();
544 OleNoticeBo oleNoticeBo = new OleNoticeBo();
545 oleNoticeBo.setNoticeName(OLEConstants.CANCELLATION_NOTICE);
546 oleNoticeBo.setAuthor(itemSearch.getAuthor() != null ? itemSearch.getAuthor() : "");
547 oleNoticeBo.setItemCallNumber(itemSearch.getCallNumber() != null ? itemSearch.getCallNumber() : "");
548 oleNoticeBo.setItemShelvingLocation(itemSearch.getShelvingLocation() != null ? itemSearch.getShelvingLocation() : "");
549 oleNoticeBo.setItemId(itemSearch.getItemUUID() != null ? itemSearch.getItemUUID() : "");
550 oleNoticeBo.setTitle(itemSearch.getTitle() != null ? itemSearch.getTitle() : "");
551 oleNoticeBo.setOleItem(getItem(oleDeliverRequestBo.getItemUuid()));
552 oleNoticeBo.setPatronEmailAddress(getPatronHomeEmailId(entityTypeContactInfoBo) != null ? getPatronHomeEmailId(entityTypeContactInfoBo) : "");
553 String fromAddress = getLoanProcessor().getParameter(OLEParameterConstants.NOTICE_FROM_MAIL);
554 if (fromAddress != null && (fromAddress.equals("") || fromAddress.trim().isEmpty())) {
555 fromAddress = OLEConstants.KUALI_MAIL;
556 }
557 if (oleNoticeBo.getPatronEmailAddress() != null && !oleNoticeBo.getPatronEmailAddress().isEmpty()) {
558 oleNoticeBos.add(oleNoticeBo);
559 List list = oleDeliverBatchService.getNoticeForPatron(oleNoticeBos);
560 String content = list.toString();
561 content = content.replace('[', ' ');
562 content = content.replace(']', ' ');
563 if (!content.trim().equals("")) {
564 OleMailer oleMailer = GlobalResourceLoader.getService("oleMailer");
565 oleMailer.sendEmail(new EmailFrom(fromAddress), new EmailTo(oleNoticeBo.getPatronEmailAddress()), new EmailSubject(OLEConstants.CANCELLATION_NOTICE), new EmailBody(content), true);
566 }
567 }
568 }
569 }
570
571
572
573
574
575
576
577 public OleDeliverRequestBo processItem(OleDeliverRequestBo oleDeliverRequestBo) {
578 LOG.debug("Inside processItem");
579 OleItemSearch oleItemSearch = null;
580 if (oleDeliverRequestBo.getItemType() == null) {
581
582
583 OleItemSearch itemSearchList = docstoreUtil.getOleItemSearchList(oleDeliverRequestBo.getItemUuid());
584 try {
585
586
587
588 if (itemSearchList != null) {
589 oleItemSearch = itemSearchList;
590 oleDeliverRequestBo.setTitle(itemSearchList.getTitle());
591 oleDeliverRequestBo.setAuthor(itemSearchList.getAuthor());
592 oleDeliverRequestBo.setCallNumber(itemSearchList.getCallNumber());
593 oleDeliverRequestBo.setItemType(itemSearchList.getItemType());
594 oleDeliverRequestBo.setItemLocation(itemSearchList.getShelvingLocation());
595 }
596 } catch (Exception ex) {
597 ex.printStackTrace();
598 }
599 try {
600 if (oleItemSearch == null) {
601 oleItemSearch = new OleItemSearch();
602 }
603
604 String itemXml = loanProcessor.getItemXML(oleDeliverRequestBo.getItemUuid());
605 org.kuali.ole.docstore.common.document.content.instance.Item oleItem = loanProcessor.getItemPojo(itemXml);
606 oleItemSearch.setCopyNumber(oleItem.getCopyNumber());
607 if (oleItem.getItemStatus() != null) {
608 oleItemSearch.setItemStatus(oleItem.getItemStatus().getCodeValue());
609 }
610 oleItemSearch.setShelvingLocation(getShelvingLocation(oleItem.getLocation()));
611 oleDeliverRequestBo.setCopyNumber(oleItem.getCopyNumber());
612 if (oleItem.getItemStatus() != null) {
613 oleDeliverRequestBo.setItemStatus(oleItem.getItemStatus().getCodeValue());
614 }
615 oleDeliverRequestBo.setShelvingLocation(getShelvingLocation(oleItem.getLocation()));
616 if (oleDeliverRequestBo.getRequestTypeId().equals("8")) {
617 oleDeliverRequestBo.setInTransitCheckInNote(oleItem.getCheckinNote());
618 }
619 } catch (Exception e) {
620 LOG.error(ConfigContext.getCurrentContextConfig().getProperty(OLEConstants.INVAL_LOC), e);
621 }
622 }
623 oleDeliverRequestBo.setOleItemSearch(oleItemSearch);
624 oleDeliverRequestBo = processItemType(oleDeliverRequestBo);
625 return oleDeliverRequestBo;
626 }
627
628
629
630
631
632
633
634 public OleDeliverRequestBo processItemType(OleDeliverRequestBo oleDeliverRequestBo) {
635 LOG.debug("Inside process Item Type");
636 Map<String, String> itemMap = new HashMap<String, String>();
637 itemMap = new HashMap<String, String>();
638 itemMap.put(OLEConstants.OleDeliverRequest.ITEM_TYPE_CODE, oleDeliverRequestBo.getItemType());
639 List<OleInstanceItemType> oleInstanceItemTypeList = (List<OleInstanceItemType>) businessObjectService.findMatching(OleInstanceItemType.class, itemMap);
640 if (oleInstanceItemTypeList != null && oleInstanceItemTypeList.size() > 0) {
641 OleInstanceItemType oleInstanceItemType = oleInstanceItemTypeList.get(0);
642 oleDeliverRequestBo.setItemTypeName(oleInstanceItemType.getInstanceItemTypeName());
643 }
644
645 return oleDeliverRequestBo;
646 }
647
648
649
650
651
652
653
654 private String getShelvingLocation(org.kuali.ole.docstore.common.document.content.instance.Location oleLocation) {
655
656 LOG.debug("Inside getShelvingLocation");
657 String locationLevelName = "";
658 if (oleLocation != null) {
659 org.kuali.ole.docstore.common.document.content.instance.LocationLevel locationLevel =
660 oleLocation.getLocationLevel();
661 if (locationLevel != null) {
662 while (locationLevel.getLocationLevel() != null && !locationLevel.getLevel().equalsIgnoreCase(OLEConstants.OleDeliverRequest.SHELVING)) {
663 locationLevel = locationLevel.getLocationLevel();
664 }
665 locationLevelName = locationLevel.getName();
666 }
667 }
668 return locationLevelName;
669 }
670
671
672
673
674
675
676
677
678 public boolean canRaiseRequest(OleDeliverRequestBo oleDeliverRequestBo) {
679 LOG.debug("Inside canRaiseRequest");
680 boolean canRaiseRequest = true;
681
682 if (isItemAvailable(oleDeliverRequestBo)) {
683 canRaiseRequest = false;
684
685
686 }
687 return canRaiseRequest;
688 }
689
690
691
692
693
694
695
696
697 public OleDeliverRequestBo updateLoanDocument(OleDeliverRequestBo oleDeliverRequestBo) {
698 LOG.debug("Inside updateLoanDocument");
699 Map<String, String> loanMap = new HashMap<String, String>();
700 loanMap.put(OLEConstants.ITEM_UUID, oleDeliverRequestBo.getItemUuid());
701 List<OleLoanDocument> oleLoanDocumentList = (List<OleLoanDocument>) businessObjectService.findMatching(OleLoanDocument.class, loanMap);
702 if (oleLoanDocumentList != null && oleLoanDocumentList.size() > 0 && oleLoanDocumentList.get(0) != null && oleLoanDocumentList.get(0).getOleRequestId() == null) {
703 if (oleLoanDocumentList.get(0).getLoanId() != null) {
704
705 oleDeliverRequestBo.setLoanTransactionRecordNumber(oleLoanDocumentList.get(0).getLoanId());
706 }
707
708
709 }
710 return oleDeliverRequestBo;
711 }
712
713
714
715
716
717
718
719 public void deleteRequest(String requestId, String itemUUID, String operatorId, String loanTransactionNumber) {
720 LOG.debug("Inside deleteRequest");
721 Map<String, String> requestMap = new HashMap<String, String>();
722 requestMap.put(OLEConstants.OleDeliverRequest.REQUEST_ID, requestId);
723 createRequestHistoryRecord(requestId, operatorId, loanTransactionNumber);
724 Map<String, String> itemMap = new HashMap<String, String>();
725 itemMap.put(OLEConstants.ITEM_UUID, itemUUID);
726 List<OleDeliverRequestBo> oleDeliverRequestDocumentsList = (List<OleDeliverRequestBo>) businessObjectService.findMatchingOrderBy(OleDeliverRequestBo.class, itemMap, OLEConstants.OleDeliverRequest.QUEUE_POSITION, true);
727 businessObjectService.delete(oleDeliverRequestDocumentsList);
728 int queuePosition = 1;
729 for (int i = 0; i < oleDeliverRequestDocumentsList.size(); i++) {
730 oleDeliverRequestDocumentsList.get(i).setBorrowerQueuePosition(queuePosition);
731 queuePosition = queuePosition + 1;
732 }
733 businessObjectService.save(oleDeliverRequestDocumentsList);
734
735 }
736
737
738
739
740
741
742
743 public OleItemSearch getItemDetails(String itemUUID) {
744 LOG.debug("Inside getItemDetails");
745 OleItemSearch oleItemSearch = getItemDetailsForPatron(itemUUID);
746 try {
747
748 String itemXml = loanProcessor.getItemXML(itemUUID);
749 org.kuali.ole.docstore.common.document.content.instance.Item oleItem = loanProcessor.getItemPojo(itemXml);
750 if (oleItem != null && oleItem.getItemType() != null) {
751 oleItemSearch.setItemType(processItemType(oleItem.getItemType().getCodeValue()));
752 }
753 oleItemSearch.setCopyNumber(oleItem.getCopyNumber());
754 if (oleItem.getItemStatus() != null) {
755 oleItemSearch.setItemStatus(oleItem.getItemStatus().getCodeValue());
756 }
757 oleItemSearch.setShelvingLocation(getShelvingLocation(oleItem.getLocation()));
758 oleItemSearch.setVolumeNumber(oleItem.getVolumeNumber());
759 } catch (Exception e) {
760 LOG.error("Not able to retrieve information from the docstore for the Item Barcode : " + itemUUID, e);
761 }
762 return oleItemSearch;
763 }
764
765
766
767
768
769
770
771 public OleItemSearch getItemDetailsForPatron(String itemUUID) {
772 LOG.debug("Inside getItemDetailsForPatron");
773 OleItemSearch oleItemSearch;
774 try {
775
776 Map<String, String> itemMap = new HashMap<String, String>();
777
778 OleItemSearch itemSearchList = docstoreUtil.getOleItemSearchList(itemUUID);
779 if (itemSearchList != null) {
780 return oleItemSearch = itemSearchList;
781 }
782 } catch (NullPointerException e) {
783 LOG.error("No item details available for the Item Barcode : " + itemUUID, e);
784 }
785
786 return new OleItemSearch();
787
788 }
789
790
791
792
793
794
795
796 public OleDeliverRequestBo reOrderQueuePosition(OleDeliverRequestBo oleDeliverRequestBo) {
797 LOG.debug("Inside reOrderQueuePosition");
798 List<OleDeliverRequestBo> existingRequest = new ArrayList<OleDeliverRequestBo>();
799 String queue = getLoanProcessor().getParameter(OLEConstants.OleDeliverRequest.REQUEST_QUEUE);
800 List<String> orderQueue = new ArrayList<String>();
801 String[] queueArray = queue.split(";");
802 for (int i = 0; i < queueArray.length; i++) {
803 orderQueue.add(queueArray[i]);
804 }
805 List<OleDeliverRequestBo> finalList = new ArrayList<OleDeliverRequestBo>();
806 Map<String, String> recallRequestMap = new HashMap<String, String>();
807 recallRequestMap.put(OLEConstants.ITEM_UUID, oleDeliverRequestBo.getItemUuid());
808 recallRequestMap.put(OLEConstants.OleDeliverRequest.REQUEST_TYPE_ID, "1");
809 Map<String, String> recallHoldRequestMap = new HashMap<String, String>();
810 recallHoldRequestMap.put(OLEConstants.ITEM_UUID, oleDeliverRequestBo.getItemUuid());
811 recallHoldRequestMap.put(OLEConstants.OleDeliverRequest.REQUEST_TYPE_ID, "2");
812 Map<String, String> holdRequestMap = new HashMap<String, String>();
813 holdRequestMap.put(OLEConstants.ITEM_UUID, oleDeliverRequestBo.getItemUuid());
814 holdRequestMap.put(OLEConstants.OleDeliverRequest.REQUEST_TYPE_ID, "3");
815 Map<String, String> holdHoldRequestMap = new HashMap<String, String>();
816 holdHoldRequestMap.put(OLEConstants.ITEM_UUID, oleDeliverRequestBo.getItemUuid());
817 holdHoldRequestMap.put(OLEConstants.OleDeliverRequest.REQUEST_TYPE_ID, "4");
818 Map<String, String> pageRequestMap = new HashMap<String, String>();
819 pageRequestMap.put(OLEConstants.ITEM_UUID, oleDeliverRequestBo.getItemUuid());
820 pageRequestMap.put(OLEConstants.OleDeliverRequest.REQUEST_TYPE_ID, "5");
821 Map<String, String> pageHoldRequestMap = new HashMap<String, String>();
822 pageHoldRequestMap.put(OLEConstants.ITEM_UUID, oleDeliverRequestBo.getItemUuid());
823 pageHoldRequestMap.put(OLEConstants.OleDeliverRequest.REQUEST_TYPE_ID, "6");
824 Map<String, String> copyRequestMap = new HashMap<String, String>();
825 copyRequestMap.put(OLEConstants.ITEM_UUID, oleDeliverRequestBo.getItemUuid());
826 copyRequestMap.put(OLEConstants.OleDeliverRequest.REQUEST_TYPE_ID, "7");
827 Map<String, String> inTransitRequestMap = new HashMap<String, String>();
828 inTransitRequestMap.put(OLEConstants.ITEM_UUID, oleDeliverRequestBo.getItemUuid());
829 inTransitRequestMap.put(OLEConstants.OleDeliverRequest.REQUEST_TYPE_ID, "8");
830 List<OleDeliverRequestBo> recallList = (List<OleDeliverRequestBo>) businessObjectService.findMatchingOrderBy(OleDeliverRequestBo.class, recallRequestMap, OLEConstants.OleDeliverRequest.QUEUE_POSITION, true);
831 List<OleDeliverRequestBo> recallHoldList = (List<OleDeliverRequestBo>) businessObjectService.findMatchingOrderBy(OleDeliverRequestBo.class, recallHoldRequestMap, OLEConstants.OleDeliverRequest.QUEUE_POSITION, true);
832 List<OleDeliverRequestBo> holdList = (List<OleDeliverRequestBo>) businessObjectService.findMatchingOrderBy(OleDeliverRequestBo.class, holdRequestMap, OLEConstants.OleDeliverRequest.QUEUE_POSITION, true);
833 List<OleDeliverRequestBo> holdHoldList = (List<OleDeliverRequestBo>) businessObjectService.findMatchingOrderBy(OleDeliverRequestBo.class, holdHoldRequestMap, OLEConstants.OleDeliverRequest.QUEUE_POSITION, true);
834 List<OleDeliverRequestBo> pageList = (List<OleDeliverRequestBo>) businessObjectService.findMatchingOrderBy(OleDeliverRequestBo.class, pageRequestMap, OLEConstants.OleDeliverRequest.QUEUE_POSITION, true);
835 List<OleDeliverRequestBo> pageHoldList = (List<OleDeliverRequestBo>) businessObjectService.findMatchingOrderBy(OleDeliverRequestBo.class, pageHoldRequestMap, OLEConstants.OleDeliverRequest.QUEUE_POSITION, true);
836 List<OleDeliverRequestBo> copyList = (List<OleDeliverRequestBo>) businessObjectService.findMatchingOrderBy(OleDeliverRequestBo.class, copyRequestMap, OLEConstants.OleDeliverRequest.QUEUE_POSITION, true);
837 List<OleDeliverRequestBo> inTransitList = (List<OleDeliverRequestBo>) businessObjectService.findMatchingOrderBy(OleDeliverRequestBo.class, inTransitRequestMap, OLEConstants.OleDeliverRequest.QUEUE_POSITION, true);
838 if (oleDeliverRequestBo.getOleDeliverRequestType().getRequestTypeCode().contains(OLEConstants.OleDeliverRequest.RECALL_DELIVERY)) {
839 recallList.add(oleDeliverRequestBo);
840 } else if (oleDeliverRequestBo.getOleDeliverRequestType().getRequestTypeCode().contains(OLEConstants.OleDeliverRequest.HOLD_DELIVERY)) {
841 holdList.add(oleDeliverRequestBo);
842 } else if (oleDeliverRequestBo.getOleDeliverRequestType().getRequestTypeCode().contains(OLEConstants.OleDeliverRequest.PAGE_DELIVERY)) {
843 pageList.add(oleDeliverRequestBo);
844 } else if (oleDeliverRequestBo.getOleDeliverRequestType().getRequestTypeCode().contains(OLEConstants.OleDeliverRequest.COPY)) {
845 copyList.add(oleDeliverRequestBo);
846 } else if (oleDeliverRequestBo.getOleDeliverRequestType().getRequestTypeCode().contains(OLEConstants.OleDeliverRequest.INTRANSIT)) {
847 inTransitList.add(oleDeliverRequestBo);
848 } else if (oleDeliverRequestBo.getOleDeliverRequestType().getRequestTypeCode().contains(OLEConstants.OleDeliverRequest.RECALL_HOLD)) {
849 recallHoldList.add(oleDeliverRequestBo);
850 } else if (oleDeliverRequestBo.getOleDeliverRequestType().getRequestTypeCode().contains(OLEConstants.OleDeliverRequest.HOLD_HOLD)) {
851 holdHoldList.add(oleDeliverRequestBo);
852 } else if (oleDeliverRequestBo.getOleDeliverRequestType().getRequestTypeCode().contains(OLEConstants.OleDeliverRequest.PAGE_HOLD)) {
853 pageHoldList.add(oleDeliverRequestBo);
854 }
855 OleDeliverRequestBo oleDeliverRequestBo1;
856 for (int i = 0; i < orderQueue.size(); i++) {
857 if (orderQueue.get(i).equals(OLEConstants.OleDeliverRequest.RECALL) && recallList.size() > 0) {
858 for (int x = 0; x < recallList.size(); x++) {
859 oleDeliverRequestBo1 = (OleDeliverRequestBo) ObjectUtils.deepCopy(recallList.get(x));
860 oleDeliverRequestBo1.setBorrowerQueuePosition(this.queuePosition + 1);
861 this.queuePosition = this.queuePosition + 1;
862 finalList.add(oleDeliverRequestBo1);
863
864 }
865 }
866 if (orderQueue.get(i).equals(OLEConstants.OleDeliverRequest.HOLD) && holdList.size() > 0) {
867 for (int x = 0; x < holdList.size(); x++) {
868 oleDeliverRequestBo1 = (OleDeliverRequestBo) ObjectUtils.deepCopy(holdList.get(x));
869 oleDeliverRequestBo1.setBorrowerQueuePosition(this.queuePosition + 1);
870 this.queuePosition = this.queuePosition + 1;
871 finalList.add(oleDeliverRequestBo1);
872
873 }
874 }
875 if (orderQueue.get(i).equals(OLEConstants.OleDeliverRequest.PAGE) && pageList.size() > 0) {
876 for (int x = 0; x < pageList.size(); x++) {
877 oleDeliverRequestBo1 = (OleDeliverRequestBo) ObjectUtils.deepCopy(pageList.get(x));
878 oleDeliverRequestBo1.setBorrowerQueuePosition(this.queuePosition + 1);
879 this.queuePosition = this.queuePosition + 1;
880 finalList.add(oleDeliverRequestBo1);
881 }
882 }
883 if (orderQueue.get(i).equals(OLEConstants.OleDeliverRequest.RECALL) && recallHoldList.size() > 0) {
884 for (int x = 0; x < recallHoldList.size(); x++) {
885 oleDeliverRequestBo1 = (OleDeliverRequestBo) ObjectUtils.deepCopy(recallHoldList.get(x));
886 oleDeliverRequestBo1.setBorrowerQueuePosition(this.queuePosition + 1);
887 this.queuePosition = this.queuePosition + 1;
888 finalList.add(oleDeliverRequestBo1);
889
890 }
891 }
892 if (orderQueue.get(i).equals(OLEConstants.OleDeliverRequest.HOLD) && holdHoldList.size() > 0) {
893 for (int x = 0; x < holdHoldList.size(); x++) {
894 oleDeliverRequestBo1 = (OleDeliverRequestBo) ObjectUtils.deepCopy(holdHoldList.get(x));
895 oleDeliverRequestBo1.setBorrowerQueuePosition(this.queuePosition + 1);
896 this.queuePosition = this.queuePosition + 1;
897 finalList.add(oleDeliverRequestBo1);
898
899 }
900 }
901 if (orderQueue.get(i).equals(OLEConstants.OleDeliverRequest.PAGE) && pageHoldList.size() > 0) {
902 for (int x = 0; x < pageHoldList.size(); x++) {
903 oleDeliverRequestBo1 = (OleDeliverRequestBo) ObjectUtils.deepCopy(pageHoldList.get(x));
904 oleDeliverRequestBo1.setBorrowerQueuePosition(this.queuePosition + 1);
905 this.queuePosition = this.queuePosition + 1;
906 finalList.add(oleDeliverRequestBo1);
907 }
908 }
909 if (orderQueue.get(i).equals(OLEConstants.OleDeliverRequest.COPY) && copyList.size() > 0) {
910 for (int x = 0; x < copyList.size(); x++) {
911 oleDeliverRequestBo1 = (OleDeliverRequestBo) ObjectUtils.deepCopy(copyList.get(x));
912 oleDeliverRequestBo1.setBorrowerQueuePosition(this.queuePosition + 1);
913 this.queuePosition = this.queuePosition + 1;
914 finalList.add(oleDeliverRequestBo1);
915
916 }
917 }
918 if (orderQueue.get(i).equals(OLEConstants.OleDeliverRequest.INTRANSIT) && inTransitList.size() > 0) {
919 for (int x = 0; x < inTransitList.size(); x++) {
920 oleDeliverRequestBo1 = (OleDeliverRequestBo) ObjectUtils.deepCopy(inTransitList.get(x));
921 oleDeliverRequestBo1.setBorrowerQueuePosition(this.queuePosition + 1);
922 this.queuePosition = this.queuePosition + 1;
923 finalList.add(oleDeliverRequestBo1);
924
925 }
926 }
927 }
928 for (int i = 0; i < finalList.size(); i++) {
929 if (finalList.get(i).getRequestId() == null) {
930 oleDeliverRequestBo.setBorrowerQueuePosition(finalList.get(i).getBorrowerQueuePosition());
931 finalList.remove(finalList.get(i));
932 }
933 }
934 businessObjectService.save(finalList);
935 this.queuePosition = 0;
936 return oleDeliverRequestBo;
937 }
938
939
940
941
942
943
944
945 public boolean isItemAvailbleInDocstore(OleDeliverRequestBo oleDeliverRequestBo) {
946 LOG.debug("Inside isItemAvailbleInDocstore");
947 boolean available = false;
948 Map<String, String> itemMap = new HashMap<String, String>();
949 try {
950 String itemUUID = "";
951 org.kuali.ole.docstore.common.document.Item item = new ItemOleml();
952 org.kuali.ole.docstore.common.search.SearchParams search_Params = new org.kuali.ole.docstore.common.search.SearchParams();
953 SearchResponse searchResponse = null;
954 search_Params.getSearchConditions().add(search_Params.buildSearchCondition("", search_Params.buildSearchField(org.kuali.ole.docstore.common.document.content.enums.DocType.ITEM.getCode(), item.ITEM_BARCODE, oleDeliverRequestBo.getItemId()), ""));
955
956
957 search_Params.getSearchResultFields().add(search_Params.buildSearchResultField(org.kuali.ole.docstore.common.document.content.enums.DocType.ITEM.getCode(), "id"));
958 ;
959
960
961
962
963
964 searchResponse = getDocstoreClientLocator().getDocstoreClient().search(search_Params);
965 for (SearchResult searchResult : searchResponse.getSearchResults()) {
966 for (SearchResultField searchResultField : searchResult.getSearchResultFields()) {
967 String fieldName = searchResultField.getFieldName();
968 String fieldValue = searchResultField.getFieldValue() != null ? searchResultField.getFieldValue() : "";
969
970 if (fieldName.equalsIgnoreCase("id") && !fieldValue.isEmpty() && searchResultField.getDocType().equalsIgnoreCase("item")) {
971 itemUUID = fieldValue;
972 }
973
974 }
975 }
976
977
978 oleDeliverRequestBo.setItemUuid(itemUUID);
979 } catch (Exception e) {
980 LOG.error(e, e);
981
982 }
983
984 OleItemSearch itemSearchList = docstoreUtil.getOleItemSearchList(oleDeliverRequestBo.getItemUuid());
985 if (itemSearchList != null) {
986 oleDeliverRequestBo.setTitle(itemSearchList.getTitle());
987 oleDeliverRequestBo.setAuthor(itemSearchList.getAuthor());
988 oleDeliverRequestBo.setCallNumber(itemSearchList.getCallNumber());
989 oleDeliverRequestBo.setItemType(itemSearchList.getItemType());
990 }
991 try {
992
993 String itemXml = loanProcessor.getItemXML(oleDeliverRequestBo.getItemUuid());
994 org.kuali.ole.docstore.common.document.content.instance.Item oleItem = loanProcessor.getItemPojo(itemXml);
995
996 oleDeliverRequestBo.setCopyNumber(oleItem.getCopyNumber());
997 if (oleItem.getItemStatus() != null) {
998 oleDeliverRequestBo.setItemStatus(oleItem.getItemStatus().getCodeValue());
999 }
1000 oleDeliverRequestBo.setShelvingLocation(getShelvingLocation(oleItem.getLocation()));
1001 available = true;
1002 } catch (Exception e) {
1003 LOG.error(ConfigContext.getCurrentContextConfig().getProperty(OLEConstants.INVAL_LOC), e);
1004 }
1005 return available;
1006 }
1007
1008 public OleDeliverRequestBo populateItemDetailsToRequest(OleDeliverRequestBo oleDeliverRequestBo, OleItemSearch oleItemSearch) {
1009 LOG.debug("Inside populateItemDetailsToRequest");
1010 if (oleDeliverRequestBo != null && oleItemSearch != null) {
1011 oleDeliverRequestBo.setAuthor(oleItemSearch.getAuthor());
1012 oleDeliverRequestBo.setTitle(oleItemSearch.getTitle());
1013 oleDeliverRequestBo.setCallNumber(oleItemSearch.getCallNumber());
1014 oleDeliverRequestBo.setCopyNumber(oleItemSearch.getCopyNumber());
1015 oleDeliverRequestBo.setItemType(oleItemSearch.getItemType());
1016 oleDeliverRequestBo.setItemStatus(oleItemSearch.getItemStatus());
1017 oleItemSearch.setShelvingLocation(oleDeliverRequestBo.getShelvingLocation());
1018 }
1019 return oleDeliverRequestBo;
1020 }
1021
1022
1023 public OleDeliverRequestBo generateRecallNotice(OleDeliverRequestBo oleDeliverRequestBo) throws Exception {
1024 Map<String, String> loanMap = new HashMap<String, String>();
1025 loanMap.put(OLEConstants.ITEM_UUID, oleDeliverRequestBo.getItemUuid());
1026 List<OleLoanDocument> loanDocuments = (List<OleLoanDocument>) businessObjectService.findMatching(OleLoanDocument.class, loanMap);
1027 OleLoanDocument oleLoanDocument = loanDocuments.get(0);
1028 Map<String, String> patronMap = new HashMap<String, String>();
1029 patronMap.put(OLEConstants.OleDeliverRequest.PATRON_ID, oleLoanDocument.getPatronId());
1030 List<OlePatronDocument> patronDocumentList = (List<OlePatronDocument>) businessObjectService.findMatching(OlePatronDocument.class, patronMap);
1031 OleNoticeBo oleNoticeBo = new OleNoticeBo();
1032 org.kuali.ole.docstore.common.document.content.instance.Item item;
1033 if (patronDocumentList.size() > 0) {
1034 OlePatronDocument olePatronDocument = patronDocumentList.get(0);
1035 EntityTypeContactInfoBo entityTypeContactInfoBo = olePatronDocument.getEntity().getEntityTypeContactInfos().get(0);
1036 oleNoticeBo.setPatronName(olePatronDocument.getEntity().getNames().get(0).getFirstName() + " " + oleDeliverRequestBo.getOlePatron().getEntity().getNames().get(0).getLastName());
1037 oleNoticeBo.setPatronAddress(getPatronPreferredAddress(entityTypeContactInfoBo) != null ? getPatronPreferredAddress(entityTypeContactInfoBo) : "");
1038 oleNoticeBo.setPatronEmailAddress(getPatronHomeEmailId(entityTypeContactInfoBo) != null ? getPatronHomeEmailId(entityTypeContactInfoBo) : "");
1039 oleNoticeBo.setPatronPhoneNumber(getPatronHomePhoneNumber(entityTypeContactInfoBo) != null ? getPatronHomePhoneNumber(entityTypeContactInfoBo) : "");
1040 }
1041 oleNoticeBo.setAuthor(oleDeliverRequestBo.getAuthor() != null ? oleDeliverRequestBo.getAuthor() : "");
1042 oleNoticeBo.setCirculationDeskAddress("");
1043 oleNoticeBo.setCirculationDeskName("");
1044 oleNoticeBo.setCirculationDeskEmailAddress("");
1045 oleNoticeBo.setCirculationDeskPhoneNumber("");
1046 oleNoticeBo.setItemCallNumber(oleDeliverRequestBo.getCallNumber() != null ? oleDeliverRequestBo.getCallNumber() : "");
1047 oleNoticeBo.setItemShelvingLocation(oleDeliverRequestBo.getShelvingLocation() != null ? oleDeliverRequestBo.getShelvingLocation() : "");
1048 oleNoticeBo.setItemId(oleDeliverRequestBo.getItemId() != null ? oleDeliverRequestBo.getItemId() : "");
1049 oleNoticeBo.setTitle(oleDeliverRequestBo.getTitle() != null ? oleDeliverRequestBo.getTitle() : "");
1050 oleNoticeBo.setOleItem(getItem(oleDeliverRequestBo.getItemUuid()));
1051 oleNoticeBo.setOlePatron(oleDeliverRequestBo.getOlePatron());
1052 oleNoticeBo.setVolumeNumber(oleNoticeBo.getOleItem().getVolumeNumber() != null ? oleNoticeBo.getOleItem().getVolumeNumber() : "");
1053 oleNoticeBo.setOriginalDueDate(oleLoanDocument.getLoanDueDate());
1054 oleNoticeBo.setNewDueDate(oleDeliverRequestBo.getNewDueDate());
1055 oleNoticeBo.setOriginalDueDate(oleDeliverRequestBo.getOriginalDueDate());
1056
1057
1058
1059
1060
1061 oleNoticeBo.setNoticeName(OLEConstants.NOTICE_RECALL);
1062 String noticeContent = getLoanProcessor().getParameter(OLEConstants.OleDeliverRequest.RECALL_BODY);
1063 oleNoticeBo.setNoticeSpecificContent(noticeContent);
1064
1065 OleDeliverBatchServiceImpl oleDeliverBatchService = new OleDeliverBatchServiceImpl();
1066 List<OleNoticeBo> oleNoticeBos = new ArrayList<OleNoticeBo>();
1067 String noticeType = getLoanProcessor().getParameter(OLEConstants.OleDeliverRequest.RECALL_NOTICE_TYPE);
1068 oleNoticeBos.add(oleNoticeBo);
1069 if (noticeType.equalsIgnoreCase(OLEConstants.EMAIL)) {
1070 String fromAddress = getLoanProcessor().getParameter(OLEParameterConstants.NOTICE_FROM_MAIL);
1071 if (fromAddress != null && (fromAddress.equals("") || fromAddress.trim().isEmpty())) {
1072 fromAddress = OLEConstants.KUALI_MAIL;
1073 }
1074 if (oleNoticeBo.getPatronEmailAddress() != null && !oleNoticeBo.getPatronEmailAddress().isEmpty()) {
1075 List list = oleDeliverBatchService.getNoticeForPatron(oleNoticeBos);
1076 String content = list.toString();
1077 content = content.replace('[', ' ');
1078 content = content.replace(']', ' ');
1079 if (!content.trim().equals("")) {
1080 OleMailer oleMailer = GlobalResourceLoader.getService("oleMailer");
1081 oleMailer.sendEmail(new EmailFrom(fromAddress), new EmailTo(oleNoticeBo.getPatronEmailAddress()), new EmailSubject(OLEConstants.NOTICE_MAIL), new EmailBody(content), true);
1082 } else {
1083 for (OleNoticeBo oleNoticeBo1 : oleNoticeBos) {
1084 LOG.info("Notice Type :" + oleNoticeBo1.getNoticeName() + " " + "Item Barcode : " + oleNoticeBo1.getItemId() + " " + "Patron Name :" + oleNoticeBo1.getPatronName());
1085 }
1086 }
1087 LOG.info("Mail send successfully to " + oleNoticeBo.getPatronEmailAddress());
1088
1089
1090
1091
1092 }
1093 } else if (noticeType.equalsIgnoreCase(OLEConstants.SMS)) {
1094
1095 Map map = oleDeliverBatchService.getSMSForPatron(oleNoticeBos);
1096 HashMap sms = (HashMap) map.get(OLEConstants.OleDeliverRequest.RECALL);
1097 Iterator it = sms.entrySet().iterator();
1098 while (it.hasNext()) {
1099 Map.Entry pairs = (Map.Entry) it.next();
1100 String patronPhoneNumber = oleNoticeBo.getPatronPhoneNumber();
1101 OleSms oleSms = new OleSms();
1102 oleSms.sendSms("", patronPhoneNumber, (String) pairs.getValue());
1103 }
1104
1105 }
1106 if (noticeType.equalsIgnoreCase(OLEConstants.MAIL) || noticeType.equalsIgnoreCase(OLEConstants.EMAIL)) {
1107
1108 oleDeliverBatchService.getPdfNoticeForPatron(oleNoticeBos);
1109 LOG.info("Recall Notice Pdf generated for item Id" + oleNoticeBo.getItemId());
1110 }
1111 oleDeliverRequestBo = (OleDeliverRequestBo) ObjectUtils.deepCopy(oleDeliverRequestBo);
1112 oleDeliverRequestBo.setRecallNoticeSentDate(new java.sql.Date(System.currentTimeMillis()));
1113 return oleDeliverRequestBo;
1114 }
1115
1116
1117 public void generateOnHoldNotice() throws Exception {
1118
1119 List<OleDeliverRequestBo> finalDeliverRequestBoList = new ArrayList<OleDeliverRequestBo>();
1120 Map<String, String> onHoldNoticeMap = new HashMap<String, String>();
1121 onHoldNoticeMap.put(OLEConstants.OleDeliverRequest.REQUEST_TYPE_ID, "2");
1122 List<OleDeliverRequestBo> oleDeliverRequestBoList = (List<OleDeliverRequestBo>) businessObjectService.findMatching(OleDeliverRequestBo.class, onHoldNoticeMap);
1123 Map<String, String> onHoldHoldNoticeMap = new HashMap<String, String>();
1124 onHoldHoldNoticeMap.put(OLEConstants.OleDeliverRequest.REQUEST_TYPE_ID, "4");
1125 List<OleDeliverRequestBo> oleDeliverRequestBoList1 = (List<OleDeliverRequestBo>) businessObjectService.findMatching(OleDeliverRequestBo.class, onHoldHoldNoticeMap);
1126 oleDeliverRequestBoList.addAll(oleDeliverRequestBoList1);
1127 OleDeliverRequestBo oleDeliverRequestBo;
1128 List<OleNoticeBo> noticesList = new ArrayList<OleNoticeBo>();
1129 EntityTypeContactInfoBo entityTypeContactInfoBo;
1130 OleNoticeBo oleNoticeBo;
1131 org.kuali.ole.docstore.common.document.content.instance.Item item;
1132 for (int i = 0; i < oleDeliverRequestBoList.size(); i++) {
1133 if (docstoreUtil.isItemAvailableInDocStore(oleDeliverRequestBoList.get(i))) {
1134 item = oleDeliverRequestBoList.get(i).getOleItem();
1135 if (item != null && item.getItemStatus() != null && item.getItemStatus().getCodeValue() != null && item.getItemStatus().getCodeValue().equals(OLEConstants.ITEM_STATUS_ON_HOLD) && oleDeliverRequestBoList.get(i).getOnHoldNoticeSentDate() == null) {
1136 entityTypeContactInfoBo = oleDeliverRequestBoList.get(i).getOlePatron().getEntity().getEntityTypeContactInfos().get(0);
1137 oleNoticeBo = new OleNoticeBo();
1138 oleNoticeBo.setAuthor(oleDeliverRequestBoList.get(i).getAuthor());
1139 oleNoticeBo.setCirculationDeskAddress("");
1140 oleNoticeBo.setCirculationDeskName("");
1141 oleNoticeBo.setCirculationDeskEmailAddress("");
1142 oleNoticeBo.setCirculationDeskPhoneNumber("");
1143 oleNoticeBo.setPatronName(oleDeliverRequestBoList.get(i).getOlePatron().getEntity().getNames().get(0).getFirstName() + " " + oleDeliverRequestBoList.get(i).getOlePatron().getEntity().getNames().get(0).getLastName());
1144 oleNoticeBo.setPatronAddress(getPatronPreferredAddress(entityTypeContactInfoBo) != null ? getPatronPreferredAddress(entityTypeContactInfoBo) : "");
1145 oleNoticeBo.setPatronEmailAddress(getPatronHomeEmailId(entityTypeContactInfoBo) != null ? getPatronHomeEmailId(entityTypeContactInfoBo) : "");
1146 oleNoticeBo.setPatronPhoneNumber(getPatronHomePhoneNumber(entityTypeContactInfoBo) != null ? getPatronHomePhoneNumber(entityTypeContactInfoBo) : "");
1147 oleNoticeBo.setItemCallNumber(oleDeliverRequestBoList.get(i).getCallNumber() != null ? oleDeliverRequestBoList.get(i).getCallNumber() : "");
1148 oleNoticeBo.setItemShelvingLocation(oleDeliverRequestBoList.get(i).getShelvingLocation() != null ? oleDeliverRequestBoList.get(i).getShelvingLocation() : "");
1149 oleNoticeBo.setItemId(oleDeliverRequestBoList.get(i).getItemId() != null ? oleDeliverRequestBoList.get(i).getItemId() : "");
1150 oleNoticeBo.setTitle(oleDeliverRequestBoList.get(i).getTitle() != null ? oleDeliverRequestBoList.get(i).getTitle() : "");
1151 oleNoticeBo.setOleItem(item);
1152 oleNoticeBo.setOlePatron(oleDeliverRequestBoList.get(i).getOlePatron());
1153 oleNoticeBo.setVolumeNumber(item.getVolumeNumber() != null ? item.getVolumeNumber() : "");
1154 oleNoticeBo.setNewDueDate(new Date());
1155 oleNoticeBo.setOriginalDueDate(new Date());
1156 oleNoticeBo.setNoticeName(OLEConstants.NOTICE_ONHOLD);
1157 oleNoticeBo.setCirculationDeskName(oleDeliverRequestBoList.get(i).getOlePickUpLocation().getCirculationDeskPublicName());
1158 String circulationDeskId = oleDeliverRequestBoList.get(i).getPickUpLocationId();
1159 int noDays = 0;
1160 Map<String, String> mapCirculationDesk = new HashMap<String, String>();
1161 mapCirculationDesk.put("circulationDeskId", circulationDeskId);
1162 List<OleCirculationDesk> oleCirculationDesks = (List<OleCirculationDesk>) KRADServiceLocator.getBusinessObjectService().findMatching(OleCirculationDesk.class, mapCirculationDesk);
1163 if (oleCirculationDesks.size() > 0) {
1164 OleCirculationDesk oleCirculationDesk = oleCirculationDesks.get(0);
1165 noDays = Integer.parseInt(oleCirculationDesk.getOnHoldDays());
1166 }
1167 Calendar calendar = Calendar.getInstance();
1168 calendar.add(Calendar.DATE, noDays);
1169 Date date = calendar.getTime();
1170 oleNoticeBo.setExpiredOnHoldDate(date);
1171 String maxNumOfDays = oleDeliverRequestBoList.get(i).getOlePickUpLocation().getOnHoldDays() != null ? oleDeliverRequestBoList.get(i).getOlePickUpLocation().getOnHoldDays() : loanProcessor.getParameter(OLEConstants.MAX_NO_OF_DAYS_ON_HOLD);
1172 Integer maxNumberOfDaysOnHold = new Integer(maxNumOfDays);
1173 oleNoticeBo.setOnHoldDueDate(dateAdd(oleDeliverRequestBoList.get(i).getCreateDate(), maxNumberOfDaysOnHold));
1174 String noticeContent = getLoanProcessor().getParameter(OLEConstants.OleDeliverRequest.ONHOLD_BODY);
1175 oleNoticeBo.setNoticeSpecificContent(noticeContent);
1176 noticesList.add(oleNoticeBo);
1177 OleDeliverBatchServiceImpl oleDeliverBatchService = new OleDeliverBatchServiceImpl();
1178 String agendaName = OLEConstants.BATCH_PROGRAM_AGENDA;
1179 HashMap<String, Object> termValues = new HashMap<String, Object>();
1180 OleCirculationDesk oleCirculationDesk = oleDeliverRequestBoList.get(i).getOlePickUpLocation();
1181 OlePatronDocument olePatronDocument = oleDeliverRequestBoList.get(i).getOlePatron();
1182 String deskLocation = oleCirculationDesk != null ? oleCirculationDesk.getCirculationDeskCode() : "";
1183 String deskLocationName = oleCirculationDesk != null ? oleCirculationDesk.getCirculationDeskPublicName() : "";
1184 termValues.put(OLEConstants.BORROWER_TYPE, olePatronDocument.getOleBorrowerType().getBorrowerTypeCode());
1185 termValues.put(OLEConstants.DESK_LOCATION, deskLocation);
1186 termValues.put(OLEConstants.NOTICE, OLEConstants.NOTICE_ONHOLD);
1187 LOG.info("termValues.toString()" + termValues.toString());
1188 EngineResults engineResults = loanProcessor.getEngineResults(agendaName, termValues);
1189 String noticeType = (String) engineResults.getAttribute(OLEConstants.NOTICE_TYPE);
1190 LOG.info("**************" + noticeType);
1191 noticeType = noticeType != null ? noticeType : getLoanProcessor().getParameter(OLEConstants.OleDeliverRequest.ONHOLD_NOTICE_TYPE);
1192 if (noticeType != null && (noticeType.equalsIgnoreCase(OLEConstants.EMAIL) || noticeType.equalsIgnoreCase(OLEConstants.MAIL))) {
1193 LOG.info("noticesList.size()" + noticesList.size());
1194 oleDeliverBatchService.getPdfNoticeForPatron(noticesList);
1195 LOG.info("OnHold Notice Pdf generated for item Id" + oleNoticeBo.getItemId());
1196 }
1197 if (noticeType != null && noticeType.equalsIgnoreCase(OLEConstants.EMAIL)) {
1198 String fromAddress = getLoanProcessor().getParameter(OLEParameterConstants.NOTICE_FROM_MAIL);
1199 if (fromAddress != null && (fromAddress.equals("") || fromAddress.trim().isEmpty())) {
1200 fromAddress = OLEConstants.KUALI_MAIL;
1201 }
1202 if (oleNoticeBo.getPatronEmailAddress() != null && !oleNoticeBo.getPatronEmailAddress().isEmpty()) {
1203 List list = oleDeliverBatchService.getNoticeForPatron(noticesList);
1204 String content = list.toString();
1205 content = content.replace('[', ' ');
1206 content = content.replace(']', ' ');
1207 if (!content.trim().equals("")) {
1208 OleMailer oleMailer = GlobalResourceLoader.getService("oleMailer");
1209 oleMailer.sendEmail(new EmailFrom(fromAddress), new EmailTo(oleNoticeBo.getPatronEmailAddress()), new EmailSubject(OLEConstants.NOTICE_MAIL), new EmailBody(content), true);
1210 } else {
1211 for (OleNoticeBo oleNoticeBo1 : noticesList) {
1212 LOG.info("Notice Type :" + oleNoticeBo1.getNoticeName() + " " + "Item Barcode : " + oleNoticeBo1.getItemId() + " " + "Patron Name :" + oleNoticeBo1.getPatronName());
1213 }
1214 }
1215 LOG.info("Mail send successfully to " + oleNoticeBo.getPatronEmailAddress());
1216
1217
1218
1219 }
1220 } else if (noticeType != null && noticeType.equalsIgnoreCase(OLEConstants.SMS)) {
1221 Map map = oleDeliverBatchService.getSMSForPatron(noticesList);
1222 HashMap sms = (HashMap) map.get(OLEConstants.NOTICE_ONHOLD);
1223 Iterator it = sms.entrySet().iterator();
1224 while (it.hasNext()) {
1225 Map.Entry pairs = (Map.Entry) it.next();
1226 String patronPhoneNumber = oleNoticeBo.getPatronPhoneNumber();
1227 OleSms oleSms = new OleSms();
1228 oleSms.sendSms("", patronPhoneNumber, (String) pairs.getValue());
1229 }
1230 }
1231
1232 oleDeliverRequestBoList.get(i).setOleItem(null);
1233 oleDeliverRequestBo = (OleDeliverRequestBo) ObjectUtils.deepCopy(oleDeliverRequestBoList.get(i));
1234 oleDeliverRequestBo.setOnHoldNoticeSentDate(new java.sql.Date(System.currentTimeMillis()));
1235 finalDeliverRequestBoList.add(oleDeliverRequestBo);
1236 }
1237 }
1238 businessObjectService.save(finalDeliverRequestBoList);
1239 }
1240 }
1241
1242 public void generateRequestExpirationNotice() throws Exception {
1243 List<OleDeliverRequestBo> oleDeliverRequestBoList = new ArrayList<OleDeliverRequestBo>();
1244 OleDeliverBatchServiceImpl oleDeliverBatchService = new OleDeliverBatchServiceImpl();
1245 oleDeliverRequestBoList = (List<OleDeliverRequestBo>) businessObjectService.findAll(OleDeliverRequestBo.class);
1246 SimpleDateFormat fmt = new SimpleDateFormat(OLEConstants.OleDeliverRequest.DATE_FORMAT);
1247 EntityTypeContactInfoBo entityTypeContactInfoBo;
1248 List<OleNoticeBo> noticesList = new ArrayList<OleNoticeBo>();
1249 org.kuali.ole.docstore.common.document.content.instance.Item item;
1250 String noticeType = null;
1251 OleNoticeBo oleNoticeBo = new OleNoticeBo();
1252 if (oleDeliverRequestBoList.size() > 0) {
1253 for (int i = 0; i < oleDeliverRequestBoList.size(); i++) {
1254 if (docstoreUtil.isItemAvailableInDocStore(oleDeliverRequestBoList.get(i))) {
1255
1256 item = oleDeliverRequestBoList.get(i).getOleItem();
1257 LOG.info("Expiration Date :" + oleDeliverRequestBoList.get(i).getRequestExpiryDate());
1258 if (oleDeliverRequestBoList.get(i).getOlePatron().isCourtesyNotice() && (fmt.format(oleDeliverRequestBoList.get(i).getRequestExpiryDate())).compareTo(fmt.format(new Date(System.currentTimeMillis()))) <= 0) {
1259 LOG.info("Inside Expiration Date :" + oleDeliverRequestBoList.get(i).getRequestExpiryDate());
1260 entityTypeContactInfoBo = oleDeliverRequestBoList.get(i).getOlePatron().getEntity().getEntityTypeContactInfos().get(0);
1261 oleNoticeBo = new OleNoticeBo();
1262 oleNoticeBo.setAuthor(oleDeliverRequestBoList.get(i).getAuthor());
1263 oleNoticeBo.setCirculationDeskAddress("");
1264 oleNoticeBo.setCirculationDeskName("");
1265 oleNoticeBo.setCirculationDeskEmailAddress("");
1266 oleNoticeBo.setCirculationDeskPhoneNumber("");
1267 oleNoticeBo.setPatronName(oleDeliverRequestBoList.get(i).getOlePatron().getEntity().getNames().get(0).getFirstName() + " " + oleDeliverRequestBoList.get(i).getOlePatron().getEntity().getNames().get(0).getLastName());
1268 oleNoticeBo.setPatronAddress(getPatronPreferredAddress(entityTypeContactInfoBo) != null ? getPatronPreferredAddress(entityTypeContactInfoBo) : "");
1269 oleNoticeBo.setPatronEmailAddress(getPatronHomeEmailId(entityTypeContactInfoBo) != null ? getPatronHomeEmailId(entityTypeContactInfoBo) : "");
1270 oleNoticeBo.setPatronPhoneNumber(getPatronHomePhoneNumber(entityTypeContactInfoBo) != null ? getPatronHomePhoneNumber(entityTypeContactInfoBo) : "");
1271 oleNoticeBo.setItemCallNumber(oleDeliverRequestBoList.get(i).getCallNumber() != null ? oleDeliverRequestBoList.get(i).getCallNumber() : "");
1272 oleNoticeBo.setItemShelvingLocation(oleDeliverRequestBoList.get(i).getShelvingLocation() != null ? oleDeliverRequestBoList.get(i).getShelvingLocation() : "");
1273 oleNoticeBo.setItemId(oleDeliverRequestBoList.get(i).getItemId() != null ? oleDeliverRequestBoList.get(i).getItemId() : "");
1274 oleNoticeBo.setTitle(oleDeliverRequestBoList.get(i).getTitle() != null ? oleDeliverRequestBoList.get(i).getTitle() : "");
1275 oleNoticeBo.setOleItem(item);
1276 oleNoticeBo.setOlePatron(oleDeliverRequestBoList.get(i).getOlePatron());
1277 oleNoticeBo.setVolumeNumber(item.getVolumeNumber() != null ? item.getVolumeNumber() : "");
1278 oleNoticeBo.setNewDueDate(new Date());
1279 oleNoticeBo.setOriginalDueDate(new Date());
1280 oleNoticeBo.setNoticeName(OLEConstants.OleDeliverRequest.EXPIRED_REQUEST);
1281 String noticeContent = getLoanProcessor().getParameter(OLEParameterConstants.EXPIRED_BODY);
1282 oleNoticeBo.setNoticeSpecificContent(noticeContent);
1283 noticesList.add(oleNoticeBo);
1284 String agendaName = OLEConstants.BATCH_PROGRAM_AGENDA;
1285 HashMap<String, Object> termValues = new HashMap<String, Object>();
1286 OleCirculationDesk oleCirculationDesk = oleDeliverRequestBoList.get(i).getOlePickUpLocation();
1287 OlePatronDocument olePatronDocument = oleDeliverRequestBoList.get(i).getOlePatron();
1288 String deskLocation = oleCirculationDesk != null ? oleCirculationDesk.getCirculationDeskCode() : "";
1289 String deskLocationName = oleCirculationDesk != null ? oleCirculationDesk.getCirculationDeskPublicName() : "";
1290 termValues.put(OLEConstants.BORROWER_TYPE, olePatronDocument.getOleBorrowerType().getBorrowerTypeCode());
1291 termValues.put(OLEConstants.DESK_LOCATION, deskLocation);
1292 termValues.put(OLEConstants.NOTICE, OLEConstants.OleDeliverRequest.EXPIRED_REQUEST);
1293 LOG.info("termValues.toString()" + termValues.toString());
1294 EngineResults engineResults = loanProcessor.getEngineResults(agendaName, termValues);
1295 noticeType = (String) engineResults.getAttribute(OLEConstants.NOTICE_TYPE);
1296 LOG.info("**************" + noticeType);
1297 noticeType = noticeType != null ? noticeType : getLoanProcessor().getParameter(OLEConstants.OleDeliverRequest.RQST_EXPR_NOTICE_TYPE);
1298 if (noticeType != null && noticeType.equalsIgnoreCase(OLEConstants.SMS)) {
1299
1300 Map map = oleDeliverBatchService.getSMSForPatron(noticesList);
1301 HashMap sms = (HashMap) map.get(OLEConstants.OleDeliverRequest.EXPIRED_REQUEST);
1302 Iterator it = sms.entrySet().iterator();
1303 while (it.hasNext()) {
1304 Map.Entry pairs = (Map.Entry) it.next();
1305
1306 String patronPhoneNumber = oleNoticeBo.getPatronPhoneNumber();
1307 OleSms oleSms = new OleSms();
1308 oleSms.sendSms("", patronPhoneNumber, (String) pairs.getValue());
1309 }
1310 }
1311 }
1312 }
1313 if (noticeType != null && (noticeType.equalsIgnoreCase(OLEConstants.EMAIL) || noticeType.equalsIgnoreCase(OLEConstants.MAIL))) {
1314 oleDeliverBatchService.getPdfNoticeForPatron(noticesList);
1315 LOG.info("Request Expiration Notice Pdf generated for item Id");
1316 }
1317 if (noticeType != null && noticeType.equalsIgnoreCase(OLEConstants.EMAIL)) {
1318 String fromAddress = getLoanProcessor().getParameter(OLEParameterConstants.NOTICE_FROM_MAIL);
1319 if (fromAddress != null && (fromAddress.equals("") || fromAddress.trim().isEmpty())) {
1320 fromAddress = OLEConstants.KUALI_MAIL;
1321 }
1322
1323 List list = (List) oleDeliverBatchService.getNoticeForPatron(noticesList);
1324 String noticeContent = list.toString();
1325 noticeContent = noticeContent.replace('[', ' ');
1326 noticeContent = noticeContent.replace(']', ' ');
1327 if (!noticeContent.trim().equals("")) {
1328 OleMailer oleMailer = GlobalResourceLoader.getService("oleMailer");
1329 oleMailer.sendEmail(new EmailFrom(fromAddress), new EmailTo(oleNoticeBo.getPatronEmailAddress()), new EmailSubject(OLEConstants.NOTICE_MAIL), new EmailBody(noticeContent), true);
1330 } else {
1331 for (OleNoticeBo oleNoticeBo1 : noticesList) {
1332 LOG.info("Notice Type :" + oleNoticeBo1.getNoticeName() + " " + "Item Barcode : " + oleNoticeBo1.getItemId() + " " + "Patron Name :" + oleNoticeBo1.getPatronName());
1333 }
1334 }
1335 LOG.info("Mail send successfully to " + oleNoticeBo.getPatronEmailAddress());
1336
1337 }
1338 }
1339 }
1340 }
1341
1342 private java.sql.Date dateAdd(java.sql.Date in, int daysToAdd) {
1343 if (in == null) {
1344 return null;
1345 }
1346 GregorianCalendar cal = new GregorianCalendar();
1347 cal.setTime(in);
1348 cal.add(Calendar.DAY_OF_MONTH, daysToAdd);
1349 return new java.sql.Date(cal.getTime().getTime());
1350 }
1351
1352 public void deletingExpiredRequests() {
1353 LOG.info("Inside deletingExpiredRequests");
1354 List<OleDeliverRequestBo> oleDeliverRequestBoList = new ArrayList<OleDeliverRequestBo>();
1355 List<OleDeliverRequestBo> newOleDeliverRequestBoList = new ArrayList<OleDeliverRequestBo>();
1356 try {
1357 oleDeliverRequestBoList = (List<OleDeliverRequestBo>) businessObjectService.findAll(OleDeliverRequestBo.class);
1358 businessObjectService.delete(oleDeliverRequestBoList);
1359 SimpleDateFormat fmt = new SimpleDateFormat(OLEConstants.OleDeliverRequest.DATE_FORMAT);
1360 for (int i = 0; i < oleDeliverRequestBoList.size(); i++) {
1361 if ((fmt.format(oleDeliverRequestBoList.get(i).getRequestExpiryDate())).compareTo(fmt.format(new Date(System.currentTimeMillis()))) > 0) {
1362 newOleDeliverRequestBoList.add(oleDeliverRequestBoList.get(i));
1363 }
1364 }
1365 businessObjectService.save(newOleDeliverRequestBoList);
1366 } catch (Exception e) {
1367 businessObjectService.save(oleDeliverRequestBoList);
1368 LOG.error(e, e);
1369 }
1370 }
1371
1372 private org.kuali.ole.docstore.common.document.content.instance.Item getItem(String itemUUID) {
1373 LOG.debug("Inside getItem");
1374 try {
1375
1376 String itemXml = loanProcessor.getItemXML(itemUUID);
1377 org.kuali.ole.docstore.common.document.content.instance.Item oleItem = loanProcessor.getItemPojo(itemXml);
1378 return oleItem;
1379 } catch (Exception e) {
1380 LOG.error("Item not available in doc store", e);
1381 }
1382 return null;
1383 }
1384
1385
1386 private OleNoticeBo setPatronDetailsForNotice(OleNoticeBo oleNoticeBo, OlePatronDocument olePatronDocument) {
1387 LOG.debug("Inside setPatronDetailsForNotice");
1388 if (oleNoticeBo.getAuthor() != null && olePatronDocument.getOlePatronId() != null) {
1389 oleNoticeBo.setPatronName(olePatronDocument.getName().getFirstName());
1390 if (olePatronDocument.getAddresses().size() > 0) {
1391 oleNoticeBo.setPatronAddress(olePatronDocument.getAddresses().get(0).getLine1() + "/n" + olePatronDocument.getAddresses().get(0).getLine2() + "/n" + olePatronDocument.getAddresses().get(0).getCity());
1392 }
1393 oleNoticeBo.setPatronEmailAddress(olePatronDocument.getEmailAddress());
1394 oleNoticeBo.setPatronPhoneNumber(olePatronDocument.getPhoneNumber());
1395 }
1396 return oleNoticeBo;
1397 }
1398
1399
1400 private void createRequestHistoryRecord(String requestId, String OperatorId, String loanTransactionNumber) {
1401 LOG.debug("Inside createRequestHistoryRecord");
1402 Map<String, String> requestMap = new HashMap<String, String>();
1403 requestMap.put(OLEConstants.OleDeliverRequest.REQUEST_ID, requestId);
1404 List<OleDeliverRequestBo> oleDeliverRequestBoList = (List<OleDeliverRequestBo>) businessObjectService.findMatching(OleDeliverRequestBo.class, requestMap);
1405 if (oleDeliverRequestBoList.size() > 0) {
1406 OleDeliverRequestBo oleDeliverRequestBo = oleDeliverRequestBoList.get(0);
1407 OleDeliverRequestHistoryRecord oleDeliverRequestHistoryRecord = new OleDeliverRequestHistoryRecord();
1408 oleDeliverRequestHistoryRecord.setRequestId(oleDeliverRequestBo.getRequestId());
1409 oleDeliverRequestHistoryRecord.setItemId(oleDeliverRequestBo.getItemId());
1410 oleDeliverRequestHistoryRecord.setArchiveDate(new java.sql.Date(System.currentTimeMillis()));
1411 oleDeliverRequestHistoryRecord.setPickUpLocationCode(oleDeliverRequestBo.getPickUpLocationCode());
1412 oleDeliverRequestHistoryRecord.setOperatorId(OperatorId);
1413 oleDeliverRequestHistoryRecord.setDeliverRequestTypeCode(oleDeliverRequestBo.getRequestTypeCode());
1414 oleDeliverRequestHistoryRecord.setPoLineItemNumber("");
1415 oleDeliverRequestHistoryRecord.setLoanTransactionId(loanTransactionNumber);
1416
1417 businessObjectService.save(oleDeliverRequestHistoryRecord);
1418 }
1419 businessObjectService.delete(oleDeliverRequestBoList);
1420 }
1421
1422 public OleDeliverRequestBo getOleDeliverRequestBo(String itemUUID) {
1423
1424 LOG.debug("Inside getOleDeliverRequestBo method");
1425 Map<String, String> requestMap = new HashMap<String, String>();
1426 requestMap.put(OLEConstants.ITEM_UUID, itemUUID);
1427 List<OleDeliverRequestBo> oleDeliverRequestBoList = (List<OleDeliverRequestBo>) businessObjectService.findMatching(OleDeliverRequestBo.class, requestMap);
1428 if (oleDeliverRequestBoList.size() > 0)
1429 return oleDeliverRequestBoList.get(0);
1430 return null;
1431 }
1432
1433 public String getPatronPreferredAddress(EntityTypeContactInfoBo entityTypeContactInfoBo) throws Exception {
1434 LOG.debug("Inside the getPatronPreferredAddress method");
1435 String address = "";
1436 if (entityTypeContactInfoBo.getAddresses() != null) {
1437 for (int i = 0; i < entityTypeContactInfoBo.getAddresses().size(); i++) {
1438 if (entityTypeContactInfoBo.getAddresses().get(i).isDefaultValue()) {
1439 if (entityTypeContactInfoBo.getAddresses().get(i).getLine1() != null)
1440 if (!entityTypeContactInfoBo.getAddresses().get(i).getLine1().isEmpty())
1441 address += entityTypeContactInfoBo.getAddresses().get(i).getLine1() + ",";
1442
1443 if (entityTypeContactInfoBo.getAddresses().get(i).getLine2() != null)
1444 if (!entityTypeContactInfoBo.getAddresses().get(i).getLine2().isEmpty())
1445 address += entityTypeContactInfoBo.getAddresses().get(i).getLine2() + ",";
1446
1447 if (entityTypeContactInfoBo.getAddresses().get(i).getLine3() != null)
1448 if (!entityTypeContactInfoBo.getAddresses().get(i).getLine3().isEmpty())
1449 address += entityTypeContactInfoBo.getAddresses().get(i).getLine3() + ",";
1450
1451 if (entityTypeContactInfoBo.getAddresses().get(i).getCity() != null)
1452 if (!entityTypeContactInfoBo.getAddresses().get(i).getCity().isEmpty())
1453 address += entityTypeContactInfoBo.getAddresses().get(i).getCity() + ",";
1454
1455 if (entityTypeContactInfoBo.getAddresses().get(i).getStateProvinceCode() != null)
1456 if (!entityTypeContactInfoBo.getAddresses().get(i).getStateProvinceCode().isEmpty())
1457 address += entityTypeContactInfoBo.getAddresses().get(i).getStateProvinceCode() + ",";
1458
1459 if (entityTypeContactInfoBo.getAddresses().get(i).getCountryCode() != null)
1460 if (!entityTypeContactInfoBo.getAddresses().get(i).getCountryCode().isEmpty())
1461 address += entityTypeContactInfoBo.getAddresses().get(i).getCountryCode() + ",";
1462
1463 if (entityTypeContactInfoBo.getAddresses().get(i).getPostalCode() != null)
1464 if (!entityTypeContactInfoBo.getAddresses().get(i).getPostalCode().isEmpty())
1465 address += entityTypeContactInfoBo.getAddresses().get(i).getPostalCode();
1466 }
1467 }
1468 }
1469
1470 return address;
1471 }
1472
1473 public String getPatronHomePhoneNumber(EntityTypeContactInfoBo entityTypeContactInfoBo) throws Exception {
1474 LOG.debug("Inside the getPatronHomePhoneNumber method");
1475 String phoneNumber = "";
1476 if (entityTypeContactInfoBo.getPhoneNumbers() != null) {
1477 for (int j = 0; j < entityTypeContactInfoBo.getPhoneNumbers().size(); j++) {
1478 if (entityTypeContactInfoBo.getPhoneNumbers().get(j).getPhoneTypeCode().equalsIgnoreCase("HM")) {
1479 phoneNumber = (entityTypeContactInfoBo.getPhoneNumbers().get(j).getPhoneNumber());
1480 }
1481 }
1482 }
1483 return phoneNumber;
1484 }
1485
1486 public String getPatronHomeEmailId(EntityTypeContactInfoBo entityTypeContactInfoBo) throws Exception {
1487 LOG.debug("Inside the getPatronHomeEmailId method");
1488 String emailId = "";
1489 if (entityTypeContactInfoBo.getEmailAddresses() != null) {
1490 for (int j = 0; j < entityTypeContactInfoBo.getEmailAddresses().size(); j++) {
1491 if (entityTypeContactInfoBo.getEmailAddresses().get(j).getEmailTypeCode().equalsIgnoreCase("HM")) {
1492 emailId = (entityTypeContactInfoBo.getEmailAddresses().get(j).getEmailAddress());
1493 }
1494 }
1495 }
1496 return emailId;
1497 }
1498
1499 private static int determineDifferenceInDays(Date currentDate, Date dueDate) {
1500 Calendar calendar1 = Calendar.getInstance();
1501 calendar1.setTime(dueDate);
1502 Calendar calendar2 = Calendar.getInstance();
1503 calendar2.setTime(currentDate);
1504 long diffInMillis = calendar2.getTimeInMillis() - calendar1.getTimeInMillis();
1505 return (int) (diffInMillis / (24 * 1000 * 60 * 60));
1506 }
1507
1508
1509 public void generateNotices() throws Exception {
1510 DataCarrierService dataCarrierService = GlobalResourceLoader.getService(OLEConstants.DATA_CARRIER_SERVICE);
1511 List<OlePatronDocument> patronDocumentList = (List<OlePatronDocument>) KRADServiceLocator.getBusinessObjectService().findAll(OlePatronDocument.class);
1512 for (OlePatronDocument olePatronDocument : patronDocumentList) {
1513 Map<String, String> requestMap = new HashMap<String, String>();
1514 requestMap.put(OLEConstants.OleDeliverRequest.LOAN_PATRON_ID, olePatronDocument.getOlePatronId());
1515 List<OleLoanDocument> oleLoanDocumentList = (List<OleLoanDocument>) KRADServiceLocator.getBusinessObjectService().findMatching(OleLoanDocument.class, requestMap);
1516 for (OleLoanDocument oleLoanDocument : oleLoanDocumentList) {
1517 try {
1518 List<OleNoticeBo> oleNoticeBos = new ArrayList<OleNoticeBo>();
1519 org.kuali.ole.docstore.common.document.Item item = new ItemOleml();
1520 org.kuali.ole.docstore.common.search.SearchParams search_Params = new org.kuali.ole.docstore.common.search.SearchParams();
1521 SearchResponse searchResponse = null;
1522 search_Params.getSearchConditions().add(search_Params.buildSearchCondition("", search_Params.buildSearchField(org.kuali.ole.docstore.common.document.content.enums.DocType.ITEM.getCode(), item.ITEM_BARCODE, oleLoanDocument.getItemId()), ""));
1523
1524 search_Params.getSearchResultFields().add(search_Params.buildSearchResultField(org.kuali.ole.docstore.common.document.content.enums.DocType.HOLDINGS.getCode(), "id"));
1525
1526
1527
1528
1529 searchResponse = getDocstoreClientLocator().getDocstoreClient().search(search_Params);
1530 for (SearchResult searchResult : searchResponse.getSearchResults()) {
1531 for (SearchResultField searchResultField : searchResult.getSearchResultFields()) {
1532 String fieldName = searchResultField.getFieldName();
1533 String fieldValue = searchResultField.getFieldValue() != null ? searchResultField.getFieldValue() : "";
1534
1535 if (fieldName.equalsIgnoreCase("id") && !fieldValue.isEmpty() && searchResultField.getDocType().equalsIgnoreCase("holdings")) {
1536 oleLoanDocument.setInstanceUuid(fieldValue);
1537 }
1538
1539 }
1540 }
1541 String itemXml = loanProcessor.getItemXML(oleLoanDocument.getItemUuid());
1542 org.kuali.ole.docstore.common.document.content.instance.Item oleItem = loanProcessor.getItemPojo(itemXml);
1543 oleLoanDocument.setOleItem(oleItem);
1544 oleLoanDocument.setOlePatron(olePatronDocument);
1545 OleNoticeBo oleNoticeBo = new OleNoticeBo();
1546 Date dueDate = oleLoanDocument.getLoanDueDate();
1547 Date currentDate = new Date();
1548 Integer dueDateDiffInterval = dueDate!=null ? determineDifferenceInDays(dueDate, currentDate) : 0;
1549 DateFormat formatter = new SimpleDateFormat(OLEConstants.DAT_FORMAT_EFFECTIVE_NOTICE);
1550 LOG.info("oleItem.getItemStatusEffectiveDate()" + oleItem.getItemStatusEffectiveDate());
1551 Date itemStatusEffectiveDate = (Date) formatter.parse(oleItem.getItemStatusEffectiveDate());
1552 Integer numberOfDaysOnHold = determineDifferenceInDays(itemStatusEffectiveDate, currentDate);
1553 Integer dueDateSumInterval = dueDate!=null ? determineDifferenceInDays(currentDate, dueDate) : 0;
1554 Integer overdueNoticeInterval = Integer.parseInt(getIntervalForOverdueNotice());
1555 Integer intervalWithNoticeCount = 0;
1556 Integer loanNoOfOverdueNoticeSent = oleLoanDocument.getNumberOfOverdueNoticesSent() != null ? Integer.parseInt(oleLoanDocument.getNumberOfOverdueNoticesSent()) : 0;
1557 if (oleLoanDocument.getNumberOfOverdueNoticesSent() != null) {
1558 intervalWithNoticeCount = Integer.parseInt(oleLoanDocument.getNumberOfOverdueNoticesSent()) + 1;
1559 } else {
1560 intervalWithNoticeCount = intervalWithNoticeCount + 1;
1561 }
1562
1563 dueDateSumInterval = dueDateSumInterval / intervalWithNoticeCount;
1564 if (dueDateSumInterval < 0) {
1565 dueDateSumInterval = 0;
1566 }
1567 if (dueDateDiffInterval < 0) {
1568 dueDateDiffInterval = 0;
1569 }
1570 Integer maxNumberOfDaysOnHold = 0;
1571 OleCirculationDesk oleCirculationDesk = null;
1572 if (oleLoanDocument.getCirculationLocationId() != null) {
1573 oleCirculationDesk = loanProcessor.getOleCirculationDesk(oleLoanDocument.getCirculationLocationId());
1574 String maxNumOfDays = oleCirculationDesk.getOnHoldDays() != null ? oleCirculationDesk.getOnHoldDays() : loanProcessor.getParameter(OLEConstants.MAX_NO_OF_DAYS_ON_HOLD);
1575 maxNumberOfDaysOnHold = new Integer(maxNumOfDays);
1576 }
1577 if (oleItem.getTemporaryItemType() != null && oleItem.getTemporaryItemType().getCodeValue() != "") {
1578 OleInstanceItemType oleInstanceItemType = loanProcessor.getItemTypeIdByItemType(oleItem.getTemporaryItemType().getCodeValue());
1579 oleLoanDocument.setItemTypeName(oleInstanceItemType.getInstanceItemTypeCode());
1580 }
1581 else if (oleItem.getItemType() != null && oleItem.getItemType().getCodeValue() != "") {
1582 OleInstanceItemType oleInstanceItemType = loanProcessor.getItemTypeIdByItemType(oleItem.getItemType().getCodeValue());
1583 oleLoanDocument.setItemTypeName(oleInstanceItemType.getInstanceItemTypeCode());
1584 }
1585 oleLoanDocument.setInstanceUuid(oleLoanDocument.getInstanceUuid());
1586 loanProcessor.getLocation(oleItem, oleLoanDocument);
1587 String agendaName = OLEConstants.NOTICE_AGENDA_NM;
1588 dataCarrierService.addData(OLEConstants.CIRC_POLICY_FOUND, null);
1589 HashMap<String, Object> termValues = new HashMap<String, Object>();
1590 termValues.put(OLEConstants.BORROWER_TYPE, olePatronDocument.getOleBorrowerType().getBorrowerTypeCode());
1591 termValues.put(OLEConstants.ITEM_TYPE, oleLoanDocument.getItemTypeName());
1592 termValues.put(OLEConstants.OVERLAY_ITEM_LOCATION, oleLoanDocument.getItemLocation());
1593 termValues.put(OLEConstants.DUE_DATE_DIFF_INTERVAL, dueDateDiffInterval);
1594 if (oleItem.getItemStatus() != null)
1595 termValues.put(OLEConstants.ITEM_STATUS, oleItem.getItemStatus().getCodeValue());
1596 termValues.put(OLEConstants.NO_OF_DAYS_ON_HOLD, numberOfDaysOnHold);
1597 termValues.put(OLEConstants.MAX_NO_OF_DAYS_ONHOLD, maxNumberOfDaysOnHold);
1598 termValues.put(OLEConstants.OleDeliverRequest.CLAIM_RETURNED, oleItem.isClaimsReturnedFlag() ? "true" : "false");
1599 termValues.put(OLEConstants.OleDeliverRequest.REPLACEMENT_FEE_PATRON_BILL, oleLoanDocument.getRepaymentFeePatronBillId() != null ? "true" : "false");
1600 termValues.put(OLEConstants.OleDeliverRequest.NUBER_OF_OVER_DUE_SENT, loanNoOfOverdueNoticeSent);
1601 termValues.put(OLEConstants.OleDeliverRequest.DUE_DATE_SUM_INTERVAL, dueDateSumInterval);
1602 termValues.put(OLEConstants.OleDeliverRequest.CONFIGURABLE_INTERVAL, Integer.parseInt(getIntervalForCourtesyNotice()));
1603 termValues.put(OLEConstants.OleDeliverRequest.INTERVAL_WITH_NOTICE_COUNT, intervalWithNoticeCount);
1604 termValues.put(OLEConstants.ITEM_SHELVING, oleLoanDocument.getItemLocation());
1605 termValues.put(OLEConstants.ITEM_COLLECTION, oleLoanDocument.getItemCollection());
1606 termValues.put(OLEConstants.ITEM_LIBRARY, oleLoanDocument.getItemLibrary());
1607 termValues.put(OLEConstants.ITEM_CAMPUS, oleLoanDocument.getItemCampus());
1608 termValues.put(OLEConstants.ITEM_INSTITUTION, oleLoanDocument.getItemInstitution());
1609 LOG.info("termValues.toString()" + termValues.toString());
1610 EngineResults engineResults = loanProcessor.getEngineResults(agendaName, termValues);
1611 String notice = (String) engineResults.getAttribute(OLEConstants.NOTICE);
1612 String itemStatus = (String) engineResults.getAttribute(OLEConstants.ITEM_STATUS);
1613 BigDecimal replacementBill = (BigDecimal) engineResults.getAttribute(OLEConstants.REPLACEMENT_BILL);
1614 List<String> errorMessage = (List<String>) engineResults.getAttribute(OLEConstants.ERROR_ACTION);
1615 if (errorMessage != null) {
1616 LOG.info("errorMessage" + errorMessage.toString());
1617 }
1618 LOG.info("notice" + notice);
1619 agendaName = OLEConstants.BATCH_PROGRAM_AGENDA;
1620 termValues = new HashMap<String, Object>();
1621 String deskLocation = oleCirculationDesk != null ? oleCirculationDesk.getCirculationDeskCode() : "";
1622 String deskLocationName = oleCirculationDesk != null ? oleCirculationDesk.getCirculationDeskPublicName() : "";
1623 termValues.put(OLEConstants.BORROWER_TYPE, olePatronDocument.getOleBorrowerType().getBorrowerTypeCode());
1624 termValues.put(OLEConstants.DESK_LOCATION, deskLocation);
1625 termValues.put(OLEConstants.NOTICE, notice);
1626 engineResults = loanProcessor.getEngineResults(agendaName, termValues);
1627 String noticeType = (String) engineResults.getAttribute(OLEConstants.NOTICE_TYPE);
1628 errorMessage = (List<String>) engineResults.getAttribute(OLEConstants.ERROR_ACTION);
1629 if (errorMessage != null) {
1630 LOG.info("errorMessage" + errorMessage);
1631 }
1632 LOG.info("noticeType" + noticeType);
1633 if (itemStatus != null) {
1634 int noOfOverdueNoticeSent = Integer.parseInt(oleLoanDocument.getNumberOfOverdueNoticesSent() != null ? oleLoanDocument.getNumberOfOverdueNoticesSent() : "0");
1635 noOfOverdueNoticeSent = noOfOverdueNoticeSent + 1;
1636 oleLoanDocument.setNumberOfOverdueNoticesSent(Integer.toString(noOfOverdueNoticeSent));
1637 oleLoanDocument.setOverDueNoticeDate(new java.sql.Date(System.currentTimeMillis()));
1638 String billNumber = loanProcessor.generatePatronBillPayment(oleLoanDocument, OLEConstants.REPLACEMENT_FEE, replacementBill);
1639 oleLoanDocument.setRepaymentFeePatronBillId(billNumber);
1640 getBusinessObjectService().save(oleLoanDocument);
1641 loanProcessor.updateItemStatus(oleItem, itemStatus);
1642 }
1643 OleDeliverBatchServiceImpl oleDeliverBatchService = new OleDeliverBatchServiceImpl();
1644 if (notice != null) {
1645 oleNoticeBo.setNoticeName(notice);
1646
1647
1648
1649 if (notice.equalsIgnoreCase(OLEConstants.NOTICE_OVERDUE)) {
1650 oleNoticeBo = getOverdueNotice(oleLoanDocument);
1651 noticeType = noticeType == null ? loanProcessor.getParameter(OLEParameterConstants.OVERDUE_NOTICE_TYPE) : noticeType;
1652 } else if (notice.equalsIgnoreCase(OLEConstants.NOTICE_COURTESY) && olePatronDocument.isCourtesyNotice() && !oleLoanDocument.isCourtesyNoticeFlag()) {
1653 oleNoticeBo = getCourtesyNotice(oleLoanDocument);
1654 noticeType = noticeType == null ? loanProcessor.getParameter(OLEParameterConstants.COURTESY_NOTICE_TYPE) : noticeType;
1655 }
1656 oleNoticeBo.setCirculationDeskName(deskLocationName);
1657 if (!olePatronDocument.isCourtesyNotice()) {
1658 oleNoticeBo = null;
1659 }
1660 if (oleNoticeBo != null) {
1661 oleNoticeBos.add(oleNoticeBo);
1662 }
1663 if (oleNoticeBos != null && oleNoticeBos.size() > 0 && noticeType != null && (noticeType.equalsIgnoreCase(OLEConstants.EMAIL) || noticeType.equalsIgnoreCase(OLEConstants.MAIL))) {
1664 oleDeliverBatchService.getPdfNoticeForPatron(oleNoticeBos);
1665 }
1666 }
1667 olePatronDocument = oleLoanDocument.getOlePatron();
1668 if (oleNoticeBos != null && oleNoticeBos.size() > 0 && oleNoticeBos != null && oleNoticeBos.size() > 0 && noticeType != null && noticeType.equalsIgnoreCase(OLEConstants.EMAIL)) {
1669 String fromAddress = getLoanProcessor().getParameter(OLEParameterConstants.NOTICE_FROM_MAIL);
1670 if (fromAddress != null && (fromAddress.equals("") || fromAddress.trim().isEmpty())) {
1671 fromAddress = OLEConstants.KUALI_MAIL;
1672 }
1673 if (olePatronDocument.getEmailAddress() != null && !olePatronDocument.getEmailAddress().isEmpty()) {
1674 List list = oleDeliverBatchService.getNoticeForPatron(oleNoticeBos);
1675 String noticeContent = list.toString();
1676 noticeContent = noticeContent.replace('[', ' ');
1677 noticeContent = noticeContent.replace(']', ' ');
1678 if (!noticeContent.trim().equals("")) {
1679 OleMailer oleMailer = GlobalResourceLoader.getService("oleMailer");
1680 oleMailer.sendEmail(new EmailFrom(fromAddress), new EmailTo(oleNoticeBo.getPatronEmailAddress()), new EmailSubject(OLEConstants.NOTICE_MAIL), new EmailBody(noticeContent), true);
1681 } else {
1682 for (OleNoticeBo oleNoticeBo1 : oleNoticeBos) {
1683 LOG.info("Notice Type :" + oleNoticeBo1.getNoticeName() + " " + "Item Barcode : " + oleNoticeBo1.getItemId() + " " + "Patron Name :" + oleNoticeBo1.getPatronName());
1684 }
1685 }
1686 LOG.info("Mail send successfully to " + oleNoticeBo.getPatronEmailAddress());
1687
1688
1689
1690 LOG.info("olePatronDocument.getEmailAddress()" + olePatronDocument.getEmailAddress());
1691 }
1692 } else if (noticeType != null && noticeType.equalsIgnoreCase(OLEConstants.SMS)) {
1693
1694 }
1695 } catch (Exception e) {
1696 LOG.error("Exception in generateNotices()" + e.getMessage(), e);
1697 }
1698 }
1699 }
1700 }
1701
1702 public void generateHoldCourtesyNotice() throws Exception {
1703 List<OleDeliverRequestBo> oleDeliverRequestBos = (List<OleDeliverRequestBo>) KRADServiceLocator.getBusinessObjectService().findAll(OleDeliverRequestBo.class);
1704 for (OleDeliverRequestBo oleDeliverRequestBo : oleDeliverRequestBos) {
1705 List<OleNoticeBo> oleNoticeBos = new ArrayList<OleNoticeBo>();
1706 DataCarrierService dataCarrierService = GlobalResourceLoader.getService(OLEConstants.DATA_CARRIER_SERVICE);
1707 if (docstoreUtil.isItemAvailableInDocStore(oleDeliverRequestBo)) {
1708 org.kuali.ole.docstore.common.document.content.instance.Item oleItem = oleDeliverRequestBo.getOleItem();
1709 OleNoticeBo oleNoticeBo = new OleNoticeBo();
1710 Date currentDate = new Date();
1711 DateFormat formatter = new SimpleDateFormat(OLEConstants.DAT_FORMAT_EFFECTIVE_NOTICE);
1712 Date itemStatusEffectiveDate = (Date) formatter.parse(oleItem.getItemStatusEffectiveDate());
1713 Integer numberOfDaysOnHold = determineDifferenceInDays(currentDate, itemStatusEffectiveDate);
1714 Integer maxNumberOfDaysOnHold = 0;
1715 OleCirculationDesk oleCirculationDesk = null;
1716 if (oleDeliverRequestBo.getPickUpLocationId() != null) {
1717 oleCirculationDesk = loanProcessor.getOleCirculationDesk(oleDeliverRequestBo.getPickUpLocationId());
1718 String maxNumOfDays = oleCirculationDesk.getOnHoldDays() != null ? oleCirculationDesk.getOnHoldDays() : loanProcessor.getParameter(OLEConstants.MAX_NO_OF_DAYS_ON_HOLD);
1719 maxNumberOfDaysOnHold = new Integer(maxNumOfDays);
1720 }
1721 String itemTypeName = null;
1722 if (oleItem.getTemporaryItemType() != null && oleItem.getTemporaryItemType().getCodeValue() != "") {
1723 OleInstanceItemType oleInstanceItemType = loanProcessor.getItemTypeIdByItemType(oleItem.getTemporaryItemType().getCodeValue());
1724 itemTypeName = oleInstanceItemType.getInstanceItemTypeCode();
1725 }else if (oleItem.getItemType() != null && oleItem.getItemType().getCodeValue() != "") {
1726 OleInstanceItemType oleInstanceItemType = loanProcessor.getItemTypeIdByItemType(oleItem.getItemType().getCodeValue());
1727 itemTypeName = oleInstanceItemType.getInstanceItemTypeCode();
1728 }
1729 OlePatronDocument olePatronDocument = oleDeliverRequestBo.getOlePatron();
1730 String agendaName = "Notice Validation";
1731 dataCarrierService.addData(OLEConstants.CIRC_POLICY_FOUND, null);
1732 HashMap<String, Object> termValues = new HashMap<String, Object>();
1733 termValues.put(OLEConstants.BORROWER_TYPE, olePatronDocument.getOleBorrowerType().getBorrowerTypeCode());
1734 termValues.put(OLEConstants.ITEM_TYPE, itemTypeName);
1735 termValues.put(OLEConstants.OVERLAY_ITEM_LOCATION, oleDeliverRequestBo.getShelvingLocation());
1736 termValues.put(OLEConstants.NO_OF_DAYS_ON_HOLD, numberOfDaysOnHold);
1737 termValues.put(OLEConstants.MAX_NO_OF_DAYS_ONHOLD, maxNumberOfDaysOnHold);
1738 termValues.put(OLEConstants.ITEM_SHELVING, oleDeliverRequestBo.getShelvingLocation());
1739 termValues.put(OLEConstants.ITEM_COLLECTION, oleDeliverRequestBo.getItemCollection());
1740 termValues.put(OLEConstants.ITEM_LIBRARY, oleDeliverRequestBo.getItemLibrary());
1741 termValues.put(OLEConstants.ITEM_CAMPUS, oleDeliverRequestBo.getItemCampus());
1742 termValues.put(OLEConstants.ITEM_INSTITUTION, oleDeliverRequestBo.getItemInstitution());
1743 if (oleItem.getItemStatus() != null)
1744 termValues.put(OLEConstants.ITEM_STATUS, oleItem.getItemStatus().getCodeValue());
1745 LOG.info("termValues.toString()" + termValues.toString());
1746 EngineResults engineResults = loanProcessor.getEngineResults(agendaName, termValues);
1747 String notice = (String) engineResults.getAttribute(OLEConstants.NOTICE);
1748 LOG.info("notice" + notice);
1749 agendaName = OLEConstants.BATCH_PROGRAM_AGENDA;
1750 termValues = new HashMap<String, Object>();
1751 String deskLocation = oleCirculationDesk != null ? oleCirculationDesk.getCirculationDeskCode() : "";
1752 String deskLocationName = oleCirculationDesk != null ? oleCirculationDesk.getCirculationDeskPublicName() : "";
1753 termValues.put(OLEConstants.BORROWER_TYPE, olePatronDocument.getOleBorrowerType().getBorrowerTypeCode());
1754 termValues.put(OLEConstants.DESK_LOCATION, deskLocation);
1755 termValues.put(OLEConstants.NOTICE, notice);
1756 LOG.info("termValues.toString()" + termValues.toString());
1757 engineResults = loanProcessor.getEngineResults(agendaName, termValues);
1758 String noticeType = (String) engineResults.getAttribute(OLEConstants.NOTICE_TYPE);
1759 LOG.info("**************" + noticeType);
1760 OleDeliverBatchServiceImpl oleDeliverBatchService = new OleDeliverBatchServiceImpl();
1761 if (notice != null) {
1762 oleNoticeBo.setNoticeName(notice);
1763 if (notice.equalsIgnoreCase(OLEConstants.NOTICE_HOLD_COURTESY)) {
1764 oleNoticeBo = getExpiredHoldNotice(oleDeliverRequestBo);
1765 oleNoticeBo.setCirculationDeskName(deskLocationName);
1766 oleNoticeBos.add(oleNoticeBo);
1767 noticeType = noticeType == null ? loanProcessor.getParameter("HOLDCOURTESY_NOTICE_TYPE") : noticeType;
1768 }
1769 if (oleNoticeBos.size() > 0 && noticeType != null && (noticeType.equalsIgnoreCase(OLEConstants.EMAIL) || noticeType.equalsIgnoreCase(OLEConstants.MAIL))) {
1770 oleDeliverBatchService.getPdfNoticeForPatron(oleNoticeBos);
1771 }
1772
1773 }
1774 olePatronDocument = oleDeliverRequestBo.getOlePatron();
1775 if (noticeType != null && noticeType.equalsIgnoreCase(OLEConstants.EMAIL)) {
1776 String fromAddress = getLoanProcessor().getParameter(OLEParameterConstants.NOTICE_FROM_MAIL);
1777 if (fromAddress != null && (fromAddress.equals("") || fromAddress.trim().isEmpty())) {
1778 fromAddress = OLEConstants.KUALI_MAIL;
1779 }
1780 if (olePatronDocument.getEmailAddress() != null && !olePatronDocument.getEmailAddress().isEmpty()) {
1781 List list = oleDeliverBatchService.getNoticeForPatron(oleNoticeBos);
1782 String noticeContent = list.toString();
1783 noticeContent = noticeContent.replace('[', ' ');
1784 noticeContent = noticeContent.replace(']', ' ');
1785 if (!noticeContent.trim().equals("")) {
1786 OleMailer oleMailer = GlobalResourceLoader.getService("oleMailer");
1787 oleMailer.sendEmail(new EmailFrom(fromAddress), new EmailTo(oleNoticeBo.getPatronEmailAddress()), new EmailSubject(OLEConstants.NOTICE_MAIL), new EmailBody(noticeContent), true);
1788 } else {
1789 for (OleNoticeBo oleNoticeBo1 : oleNoticeBos) {
1790 LOG.info("Notice Type :" + oleNoticeBo1.getNoticeName() + " " + "Item Barcode : " + oleNoticeBo1.getItemId() + " " + "Patron Name :" + oleNoticeBo1.getPatronName());
1791 }
1792 }
1793
1794
1795
1796
1797 LOG.info("olePatronDocument.getEmailAddress()" + olePatronDocument.getEmailAddress());
1798 }
1799 } else if (noticeType != null && noticeType.equalsIgnoreCase(OLEConstants.SMS)) {
1800
1801 }
1802 }
1803 }
1804 }
1805
1806 public void deleteTemporaryHistoryRecord() throws Exception {
1807 List<OlePatronDocument> patronDocumentList = (List<OlePatronDocument>) KRADServiceLocator.getBusinessObjectService().findAll(OlePatronDocument.class);
1808 for (OlePatronDocument olePatronDocument : patronDocumentList) {
1809 Map<String, String> requestMap = new HashMap<String, String>();
1810 requestMap.put(OLEConstants.OlePatron.PATRON_ID, olePatronDocument.getOlePatronId());
1811 List<OleTemporaryCirculationHistory> oleTemporaryCirculationHistoryList = (List<OleTemporaryCirculationHistory>) KRADServiceLocator.getBusinessObjectService().findMatching(OleTemporaryCirculationHistory.class, requestMap);
1812 List<OleTemporaryCirculationHistory> deleteRecords = new ArrayList<OleTemporaryCirculationHistory>();
1813 for (OleTemporaryCirculationHistory oleTemporaryCirculationHistory : oleTemporaryCirculationHistoryList) {
1814 String agendaName = OLEConstants.BATCH_PROGRAM_AGENDA;
1815 HashMap<String, Object> termValues = new HashMap<String, Object>();
1816 termValues.put(OLEConstants.OleDeliverRequest.IS_TEMPORARY_HISTORY_RECORD, "true");
1817 DataCarrierService dataCarrierService = GlobalResourceLoader.getService(OLEConstants.DATA_CARRIER_SERVICE);
1818 dataCarrierService.addData(OLEConstants.DATE_CHECK_IN, oleTemporaryCirculationHistory.getCheckInDate());
1819 EngineResults engineResults = loanProcessor.getEngineResults(agendaName, termValues);
1820 Boolean deleteRecord = (Boolean) engineResults.getAttribute(OLEConstants.OVERLAY_OPTION_DELETE);
1821 if (deleteRecord != null && deleteRecord) {
1822 deleteRecords.add(oleTemporaryCirculationHistory);
1823 }
1824 }
1825 getBusinessObjectService().delete(deleteRecords);
1826 }
1827 }
1828
1829 private OleNoticeBo getExpiredHoldNotice(OleDeliverRequestBo oleDeliverRequestBo) throws Exception {
1830 LOG.debug("Expired Hold Notice");
1831 org.kuali.ole.docstore.common.document.content.instance.Item oleItem = oleDeliverRequestBo.getOleItem();
1832 EntityTypeContactInfoBo entityTypeContactInfoBo = oleDeliverRequestBo.getOlePatron().getEntity().getEntityTypeContactInfos().get(0);
1833 OleNoticeBo oleNoticeBo = new OleNoticeBo();
1834 org.kuali.ole.docstore.common.document.Item item = getDocstoreClientLocator().getDocstoreClient().retrieveItem(oleDeliverRequestBo.getItemUuid());
1835 String shelvingLocation = oleDeliverRequestBo.getShelvingLocation();
1836 OleCirculationDesk oleCirculationDesk = getOleCirculationDesk(oleDeliverRequestBo.getPickUpLocationId());
1837 if (oleCirculationDesk != null)
1838 oleNoticeBo.setCirculationDeskName(oleCirculationDesk.getCirculationDeskPublicName());
1839 else
1840 oleNoticeBo.setCirculationDeskName("");
1841 oleNoticeBo.setCirculationDeskAddress("");
1842 oleNoticeBo.setCirculationDeskEmailAddress("");
1843 oleNoticeBo.setCirculationDeskPhoneNumber("");
1844 oleNoticeBo.setCirculationDeskPhoneNumber("");
1845 oleNoticeBo.setPatronName(oleDeliverRequestBo.getOlePatron().getEntity().getNames().get(0).getFirstName() + " " + oleDeliverRequestBo.getOlePatron().getEntity().getNames().get(0).getLastName());
1846 oleNoticeBo.setPatronAddress(getPatronPreferredAddress(entityTypeContactInfoBo) != null ? getPatronPreferredAddress(entityTypeContactInfoBo) : "");
1847 oleNoticeBo.setPatronEmailAddress(getPatronHomeEmailId(entityTypeContactInfoBo) != null ? getPatronHomeEmailId(entityTypeContactInfoBo) : "");
1848 oleNoticeBo.setPatronPhoneNumber(getPatronHomePhoneNumber(entityTypeContactInfoBo) != null ? getPatronHomePhoneNumber(entityTypeContactInfoBo) : "");
1849 oleNoticeBo.setNoticeName(OLEConstants.NOTICE_HOLD_COURTESY);
1850 oleNoticeBo.setNoticeSpecificContent(LoanUtil.getLoanUtil().getProperty(OLEConstants.OleDeliverRequest.EXP_HOLD_NOTICE_CONTENT));
1851 oleNoticeBo.setTitle(item.getHolding().getBib().getTitle());
1852 oleNoticeBo.setAuthor(item.getHolding().getBib().getAuthor());
1853
1854
1855 oleNoticeBo.setVolumeNumber(item.getVolumeNumber());
1856 oleNoticeBo.setItemShelvingLocation(shelvingLocation != null ? shelvingLocation : "");
1857
1858 oleNoticeBo.setItemCallNumber((String) oleItem.getCallNumber().getNumber() != null && !oleItem.getCallNumber().getNumber().equals("") ? oleItem.getCallNumber().getNumber() : "");
1859 oleNoticeBo.setItemId(oleDeliverRequestBo.getItemId() != null ? oleDeliverRequestBo.getItemId() : "");
1860 oleNoticeBo.setOleItem(oleItem);
1861 oleNoticeBo.setOlePatron(oleDeliverRequestBo.getOlePatron());
1862 oleNoticeBo = setPatronDetailsForNotice(oleNoticeBo, oleDeliverRequestBo.getOlePatron());
1863 oleDeliverRequestBo.getOlePatron().setEmailAddress(oleNoticeBo.getPatronEmailAddress());
1864 return oleNoticeBo;
1865 }
1866
1867 private OleNoticeBo getCourtesyNotice(OleLoanDocument oleLoanDocument) throws Exception {
1868 LOG.debug("Courtesy Notice");
1869 oleLoanDocument.setCourtesyNoticeFlag(true);
1870 Map<String, String> map = new HashMap<String, String>();
1871 map.put("loanId", oleLoanDocument.getLoanId());
1872 KRADServiceLocator.getBusinessObjectService().save(oleLoanDocument);
1873 EntityTypeContactInfoBo entityTypeContactInfoBo = oleLoanDocument.getOlePatron().getEntity().getEntityTypeContactInfos().get(0);
1874 OleNoticeBo oleNoticeBo = new OleNoticeBo();
1875
1876 org.kuali.ole.docstore.common.document.content.instance.Item oleItem = oleLoanDocument.getOleItem();
1877 org.kuali.ole.docstore.common.document.Item item = getDocstoreClientLocator().getDocstoreClient().retrieveItem(oleLoanDocument.getItemUuid());
1878 ItemOlemlRecordProcessor itemOlemlRecordProcessor = new ItemOlemlRecordProcessor();
1879 org.kuali.ole.docstore.common.document.content.instance.Item itemContent = itemOlemlRecordProcessor.fromXML(item.getContent());
1880 String shelvingLocation = oleLoanDocument.getItemLocation();
1881 OleCirculationDesk oleCirculationDesk = getOleCirculationDesk(oleLoanDocument.getCirculationLocationId());
1882 if (oleCirculationDesk != null)
1883 oleNoticeBo.setCirculationDeskName(oleCirculationDesk.getCirculationDeskPublicName());
1884 else
1885 oleNoticeBo.setCirculationDeskName("");
1886 oleNoticeBo.setCirculationDeskAddress("");
1887 oleNoticeBo.setCirculationDeskEmailAddress("");
1888 oleNoticeBo.setCirculationDeskPhoneNumber("");
1889 oleNoticeBo.setPatronName(oleLoanDocument.getOlePatron().getEntity().getNames().get(0).getFirstName() + " " + oleLoanDocument.getOlePatron().getEntity().getNames().get(0).getLastName());
1890 oleNoticeBo.setPatronAddress(getPatronPreferredAddress(entityTypeContactInfoBo) != null ? getPatronPreferredAddress(entityTypeContactInfoBo) : "");
1891 oleNoticeBo.setPatronEmailAddress(getPatronHomeEmailId(entityTypeContactInfoBo) != null ? getPatronHomeEmailId(entityTypeContactInfoBo) : "");
1892 oleNoticeBo.setPatronPhoneNumber(getPatronHomePhoneNumber(entityTypeContactInfoBo) != null ? getPatronHomePhoneNumber(entityTypeContactInfoBo) : "");
1893 oleNoticeBo.setNoticeName(OLEConstants.NOTICE_COURTESY);
1894 oleNoticeBo.setNoticeSpecificContent(LoanUtil.getLoanUtil().getProperty(OLEConstants.OleDeliverRequest.COURTESY_NOTICE_CONTENT));
1895
1896
1897 oleNoticeBo.setTitle(item.getHolding().getBib().getTitle());
1898 oleNoticeBo.setAuthor(item.getHolding().getBib().getAuthor());
1899 oleNoticeBo.setVolumeNumber(item.getVolumeNumber());
1900 oleNoticeBo.setItemShelvingLocation(shelvingLocation != null ? shelvingLocation : "");
1901
1902 oleNoticeBo.setItemCallNumber((String) oleItem.getCallNumber().getNumber() != null && !oleItem.getCallNumber().getNumber().equals("") ? oleItem.getCallNumber().getNumber() : loanProcessor.getItemCallNumber(itemContent, item.getHolding().getId()));
1903 oleNoticeBo.setItemId(oleLoanDocument.getItemId());
1904 oleLoanDocument.getOlePatron().setEmailAddress(oleNoticeBo.getPatronEmailAddress());
1905 LOG.info("oleNoticeBo.getPatronEmailAddress()" + oleNoticeBo.getPatronEmailAddress());
1906 return oleNoticeBo;
1907 }
1908
1909 private OleNoticeBo getOverdueNotice(OleLoanDocument oleLoanDocument) throws Exception {
1910 LOG.debug("Overdue Notice");
1911 EntityTypeContactInfoBo entityTypeContactInfoBo = oleLoanDocument.getOlePatron().getEntity().getEntityTypeContactInfos().get(0);
1912 OleNoticeBo oleNoticeBo = new OleNoticeBo();
1913
1914 org.kuali.ole.docstore.common.document.content.instance.Item oleItem = oleLoanDocument.getOleItem();
1915
1916
1917 org.kuali.ole.docstore.common.document.Item item = getDocstoreClientLocator().getDocstoreClient().retrieveItem(oleLoanDocument.getItemUuid());
1918 OleCirculationDesk oleCirculationDesk = getOleCirculationDesk(oleLoanDocument.getCirculationLocationId());
1919 if (oleCirculationDesk != null)
1920 oleNoticeBo.setCirculationDeskName(oleCirculationDesk.getCirculationDeskPublicName());
1921 else
1922 oleNoticeBo.setCirculationDeskName("");
1923 oleNoticeBo.setCirculationDeskAddress("");
1924 oleNoticeBo.setCirculationDeskEmailAddress("");
1925 oleNoticeBo.setCirculationDeskPhoneNumber("");
1926 oleNoticeBo.setPatronName(oleLoanDocument.getOlePatron().getEntity().getNames().get(0).getFirstName() + " " + oleLoanDocument.getOlePatron().getEntity().getNames().get(0).getLastName());
1927 oleNoticeBo.setPatronAddress(getPatronPreferredAddress(entityTypeContactInfoBo) != null ? getPatronPreferredAddress(entityTypeContactInfoBo) : "");
1928 oleNoticeBo.setPatronEmailAddress(getPatronHomeEmailId(entityTypeContactInfoBo) != null ? getPatronHomeEmailId(entityTypeContactInfoBo) : "");
1929 oleNoticeBo.setPatronPhoneNumber(getPatronHomePhoneNumber(entityTypeContactInfoBo) != null ? getPatronHomePhoneNumber(entityTypeContactInfoBo) : "");
1930 oleNoticeBo.setNoticeName(OLEConstants.NOTICE_OVERDUE);
1931 oleNoticeBo.setNoticeSpecificContent(LoanUtil.getLoanUtil().getProperty(OLEConstants.OleDeliverRequest.OVERDUE_NOTICE_CONTENT));
1932 oleNoticeBo.setTitle(item.getHolding().getBib().getTitle());
1933 oleNoticeBo.setAuthor(item.getHolding().getBib().getAuthor());
1934
1935
1936
1937
1938 String volume = (String) oleItem.getEnumeration() != null && !oleItem.getEnumeration().equals("") ? oleItem.getEnumeration() : "";
1939 String issue = new String(" ");
1940 String copyNumber = (String) oleItem.getCopyNumber() != null && !oleItem.getCopyNumber().equals("") ? oleItem.getCopyNumber() : "";
1941 oleNoticeBo.setVolumeIssueCopyNumber(volume + "/" + issue + "/" + copyNumber);
1942 oleNoticeBo.setItemShelvingLocation(item.getLocationName());
1943 if (oleItem.getCallNumber().getNumber() != null && !oleItem.getCallNumber().getNumber().equals("")) {
1944 oleNoticeBo.setItemCallNumber((String) oleItem.getCallNumber().getNumber() != null && !oleItem.getCallNumber().getNumber().equals("") ? oleItem.getCallNumber().getNumber() : "");
1945 } else {
1946 oleNoticeBo.setItemCallNumber(getLoanProcessor().getItemCallNumber(oleItem, oleLoanDocument.getInstanceUuid()));
1947 }
1948
1949 oleNoticeBo.setItemId(oleLoanDocument.getItemId());
1950
1951 oleNoticeBo.setDueDate(oleLoanDocument.getLoanDueDate()!=null ? oleLoanDocument.getLoanDueDate() :null);
1952 oleLoanDocument.getOlePatron().setEmailAddress(oleNoticeBo.getPatronEmailAddress());
1953 LOG.info("oleNoticeBo.getPatronEmailAddress()" + oleNoticeBo.getPatronEmailAddress());
1954 int noOfOverdueNoticeSent = Integer.parseInt(oleLoanDocument.getNumberOfOverdueNoticesSent() != null ? oleLoanDocument.getNumberOfOverdueNoticesSent() : "0");
1955 noOfOverdueNoticeSent = noOfOverdueNoticeSent + 1;
1956 LOG.debug("Updated Loan Record : " + oleLoanDocument);
1957 oleLoanDocument.setNumberOfOverdueNoticesSent(Integer.toString(noOfOverdueNoticeSent));
1958 oleLoanDocument.setOverDueNoticeDate(new java.sql.Date(System.currentTimeMillis()));
1959 getBusinessObjectService().save(oleLoanDocument);
1960 return oleNoticeBo;
1961 }
1962
1963 public void updateItem(org.kuali.ole.docstore.common.document.content.instance.Item oleItem, String itemUuid) throws Exception {
1964 org.kuali.ole.docstore.common.document.content.instance.ItemStatus itemStatus = new org.kuali.ole.docstore.common.document.content.instance.ItemStatus();
1965 itemStatus.setCodeValue(OLEConstants.OleDeliverRequest.MISSING);
1966 itemStatus.setFullValue(OLEConstants.OleDeliverRequest.MISSING);
1967 oleItem.setItemStatus(itemStatus);
1968 oleItem.setStaffOnlyFlag(true);
1969 String itemContent = new ItemOlemlRecordProcessor().toXML(oleItem);
1970 org.kuali.ole.docstore.common.document.Item item = new ItemOleml();
1971 item.setId(itemUuid);
1972 item.setContent(itemContent);
1973 item.setCategory(OLEConstants.WORK_CATEGORY);
1974 item.setType(DocType.ITEM.getCode());
1975 item.setFormat(OLEConstants.OLEML_FORMAT);
1976 getDocstoreClientLocator().getDocstoreClient().updateItem(item);
1977 }
1978
1979 public String getShelvingLocation(org.kuali.ole.docstore.common.document.content.instance.LocationLevel oleLocationLevel) {
1980 String location = null;
1981 if (oleLocationLevel != null) {
1982 if (OLEConstants.LOCATION_LEVEL_SHELVING.equalsIgnoreCase(oleLocationLevel.getLevel()))
1983 location = oleLocationLevel.getName();
1984 else
1985 location = getShelvingLocation(oleLocationLevel.getLocationLevel());
1986 }
1987 if ("".equals(location) || location == null)
1988 return null;
1989 return location;
1990 }
1991
1992
1993 public String getIntervalForCourtesyNotice() {
1994 BusinessObjectService businessObjectService = KRADServiceLocator.getBusinessObjectService();
1995 Map<String, String> criteriaMap = new HashMap<String, String>();
1996 criteriaMap.put(OLEConstants.NAMESPACE_CODE, OLEConstants.DLVR_NMSPC);
1997 criteriaMap.put(OLEConstants.COMPONENT_CODE, OLEConstants.DLVR_CMPNT);
1998 criteriaMap.put(OLEConstants.NAME, OLEParameterConstants.COURTESY_NOTICE_INTER);
1999 List<ParameterBo> parametersList = (List<ParameterBo>) businessObjectService.findMatching(ParameterBo.class, criteriaMap);
2000 return parametersList.get(0).getValue();
2001 }
2002
2003 public String getIntervalForOverdueNotice() {
2004 BusinessObjectService businessObjectService = KRADServiceLocator.getBusinessObjectService();
2005 Map<String, String> criteriaMap = new HashMap<String, String>();
2006 criteriaMap.put(OLEConstants.NAMESPACE_CODE, OLEConstants.DLVR_NMSPC);
2007 criteriaMap.put(OLEConstants.COMPONENT_CODE, OLEConstants.DLVR_CMPNT);
2008 criteriaMap.put(OLEConstants.NAME, OLEConstants.OVERDUE_NOTICE_INTER);
2009 List<ParameterBo> parametersList = (List<ParameterBo>) businessObjectService.findMatching(ParameterBo.class, criteriaMap);
2010 return parametersList.get(0).getValue();
2011 }
2012
2013
2014 private PatronBillPayment getPatronBillPayment(String patronId) {
2015 LOG.debug("Inside the getPatronBillPayment method");
2016 Map billMap = new HashMap();
2017 billMap.put(OLEConstants.OleDeliverRequest.LOAN_PATRON_ID, patronId);
2018 List<PatronBillPayment> patronBillPaymentList = (List<PatronBillPayment>) getBusinessObjectService().findMatching(PatronBillPayment.class, billMap);
2019 return patronBillPaymentList != null && patronBillPaymentList.size() > 0 ? patronBillPaymentList.get(0) : null;
2020 }
2021
2022 private OlePaymentStatus getPaymentStatus() {
2023 LOG.debug("Inside the getPaymentStatus method");
2024 Map statusMap = new HashMap();
2025 statusMap.put(OLEConstants.OleDeliverRequest.PAYMENT_STATUS_NAME, OLEConstants.PAYMENT_STATUS_OUTSTANDING);
2026 List<OlePaymentStatus> olePaymentStatusList = (List<OlePaymentStatus>) getBusinessObjectService().findMatching(OlePaymentStatus.class, statusMap);
2027 return olePaymentStatusList != null && olePaymentStatusList.size() > 0 ? olePaymentStatusList.get(0) : null;
2028 }
2029
2030 private String getFeeTypeId(String feeTypeName) {
2031 LOG.debug("Inside the getOverdueFeeTypeId method");
2032 Map feeMap = new HashMap();
2033 feeMap.put(OLEConstants.FEE_TYPE_NAME, feeTypeName);
2034 List<OleFeeType> oleFeeTypes = (List<OleFeeType>) getBusinessObjectService().findMatching(OleFeeType.class, feeMap);
2035 return oleFeeTypes != null && oleFeeTypes.size() > 0 ? oleFeeTypes.get(0).getFeeTypeId() : null;
2036 }
2037
2038 public String processItemType(String itemType) {
2039
2040 LOG.debug("Inside process Item Type");
2041 Map<String, String> itemMap = new HashMap<String, String>();
2042 itemMap.put(OLEConstants.OleDeliverRequest.ITEM_TYPE_CODE, itemType);
2043 List<OleInstanceItemType> oleInstanceItemTypeList = (List<OleInstanceItemType>) businessObjectService.findMatching(OleInstanceItemType.class, itemMap);
2044 if (oleInstanceItemTypeList != null && oleInstanceItemTypeList.size() > 0) {
2045 OleInstanceItemType oleInstanceItemType = oleInstanceItemTypeList.get(0);
2046 return oleInstanceItemType.getInstanceItemTypeName();
2047 }
2048 return null;
2049 }
2050
2051 public String placeRequest(String patronId, String operatorId, String itemBarcode, String requestType, String pickUpLocation, String itemIdentifier) {
2052 OleDeliverRequestBo oleDeliverRequestBo = new OleDeliverRequestBo();
2053 oleDeliverRequestBo.setCreateDate(new java.sql.Date(System.currentTimeMillis()));
2054 OlePatronDocument olePatronDocument = null;
2055 Map<String, String> patronMap = new HashMap<String, String>();
2056 patronMap.put("olePatronId", patronId);
2057 OleNoticeBo oleNoticeBo = new OleNoticeBo();
2058 List<OlePatronDocument> olePatronDocumentList = (List<OlePatronDocument>) businessObjectService.findMatching(OlePatronDocument.class, patronMap);
2059 if (olePatronDocumentList.size() > 0) {
2060 olePatronDocument = olePatronDocumentList.get(0);
2061 oleDeliverRequestBo.setBorrowerId(patronId);
2062 oleDeliverRequestBo.setBorrowerBarcode(olePatronDocument.getBarcode());
2063 oleDeliverRequestBo.setOlePatron(olePatronDocument);
2064 EntityTypeContactInfoBo entityTypeContactInfoBo = olePatronDocument.getEntity().getEntityTypeContactInfos().get(0);
2065 try {
2066 oleNoticeBo.setPatronName(olePatronDocument.getEntity().getNames().get(0).getFirstName() + " " + oleDeliverRequestBo.getOlePatron().getEntity().getNames().get(0).getLastName());
2067 oleNoticeBo.setPatronAddress(getPatronPreferredAddress(entityTypeContactInfoBo) != null ? getPatronPreferredAddress(entityTypeContactInfoBo) : "");
2068 oleNoticeBo.setPatronEmailAddress(getPatronHomeEmailId(entityTypeContactInfoBo) != null ? getPatronHomeEmailId(entityTypeContactInfoBo) : "");
2069 oleNoticeBo.setPatronPhoneNumber(getPatronHomePhoneNumber(entityTypeContactInfoBo) != null ? getPatronHomePhoneNumber(entityTypeContactInfoBo) : "");
2070 } catch (Exception e) {
2071 LOG.error(e, e);
2072 LOG.info("Exception Occured while setting the patron information for the patron . Patron Barcode : " + oleDeliverRequestBo.getBorrowerBarcode());
2073 }
2074 } else {
2075 return "No patron information";
2076 }
2077 if (requestType != null) {
2078 Map<String, String> requestTypeMap = new HashMap<String, String>();
2079 requestTypeMap.put("requestTypeCode", requestType);
2080 List<OleDeliverRequestType> oleDeliverRequestTypeList = (List<OleDeliverRequestType>) businessObjectService.findMatching(OleDeliverRequestType.class, requestTypeMap);
2081 if (oleDeliverRequestTypeList != null && (oleDeliverRequestTypeList.size() > 0)) {
2082 oleDeliverRequestBo.setRequestTypeId(oleDeliverRequestTypeList.get(0).getRequestTypeId());
2083 oleDeliverRequestBo.setOleDeliverRequestType(oleDeliverRequestTypeList.get(0));
2084 } else
2085 return "Invalid Request Type Code";
2086
2087 }
2088 if (pickUpLocation != null) {
2089 Map<String, String> circulationDeskMap = new HashMap<String, String>();
2090 circulationDeskMap.put("circulationDeskCode", pickUpLocation);
2091 List<OleCirculationDesk> oleCirculationDeskList = (List<OleCirculationDesk>) businessObjectService.findMatching(OleCirculationDesk.class, circulationDeskMap);
2092 if (oleCirculationDeskList != null && oleCirculationDeskList.size() > 0) {
2093 oleDeliverRequestBo.setPickUpLocationId(oleCirculationDeskList.get(0).getCirculationDeskId());
2094 oleDeliverRequestBo.setPickUpLocationCode(oleCirculationDeskList.get(0).getCirculationDeskCode());
2095 oleDeliverRequestBo.setOlePickUpLocation(oleCirculationDeskList.get(0));
2096 } else {
2097 return "Invalid Pick Up Location";
2098 }
2099
2100 }
2101 try {
2102 if (itemBarcode == null || (itemBarcode != null && itemBarcode.isEmpty())) {
2103 return "invalid barcode";
2104 }
2105 oleDeliverRequestBo.setItemId(itemBarcode);
2106 oleDeliverRequestBo.setItemUuid(itemIdentifier);
2107 Thread.sleep(2000);
2108 docstoreUtil.isItemAvailableInDocStore(oleDeliverRequestBo);
2109 if (oleDeliverRequestBo.getItemUuid() == null || (oleDeliverRequestBo.getItemUuid() != null && oleDeliverRequestBo.getItemUuid().trim().isEmpty())) {
2110 return "invalid barcode";
2111 } else {
2112 oleDeliverRequestBo.setRequestCreator("Operator");
2113 oleDeliverRequestBo.setOperatorCreateId(operatorId);
2114 oleDeliverRequestBo.setBorrowerId(patronId);
2115 oleDeliverRequestBo.setItemId(itemBarcode);
2116 oleDeliverRequestBo.setRequestStatus("1");
2117 if (!processOperator(operatorId)) {
2118 return OLEConstants.INVALID_OPERATOR;
2119 }
2120 processRequestType(oleDeliverRequestBo);
2121 String message = this.patronRecordExpired(oleDeliverRequestBo);
2122 if (message != null)
2123 return message;
2124 boolean requestRaised = this.isRequestAlreadyRaisedByPatron(oleDeliverRequestBo);
2125 if (requestRaised)
2126 return "Request Already Raised For This Item By The Patron ";
2127 boolean itemEligible = this.isItemEligible(oleDeliverRequestBo);
2128 if (!itemEligible)
2129 return "Item is not eligible for circulation";
2130 boolean alreadyLoaned = this.isAlreadyLoaned(oleDeliverRequestBo);
2131 if (alreadyLoaned)
2132 return "Item is currently in loan with the requested borrower";
2133
2134 boolean valid = false;
2135 EngineResults engineResult = this.executeEngineResults(oleDeliverRequestBo);
2136 if (engineResult != null) {
2137 List<ResultEvent> allResults = engineResult.getAllResults();
2138 if (allResults.size() > 0) {
2139 for (Iterator<ResultEvent> resultEventIterator = allResults.iterator(); resultEventIterator.hasNext(); ) {
2140 ResultEvent resultEvent = resultEventIterator.next();
2141 if (resultEvent.getType().equals(RULE_EVALUATED))
2142 valid |= resultEvent.getResult();
2143 }
2144 if ((oleDeliverRequestBo.getMessage() != null && !oleDeliverRequestBo.getMessage().isEmpty()))
2145 return oleDeliverRequestBo.getMessage();
2146 }
2147 }
2148 OleDeliverRequestBo oleDeliverRequestBo1 = oleDeliverRequestBo;
2149 if (oleDeliverRequestBo.getRequestTypeId().equals("1") || oleDeliverRequestBo.getRequestTypeId().equals("2") || oleDeliverRequestBo.getRequestTypeId().equals("3") || oleDeliverRequestBo.getRequestTypeId().equals("4")) {
2150 if (oleDeliverRequestBo.getRequestTypeId().equals("1") || oleDeliverRequestBo.getRequestTypeId().equals("2"))
2151 oleDeliverRequestBo1 = this.updateLoanDocument(oleDeliverRequestBo);
2152 if (isItemAvailable(oleDeliverRequestBo1)) {
2153 return "Recall / Hold type of request can be raised only for the item which is currently in circulation";
2154 }
2155 }
2156 oleDeliverRequestBo.setOleItem(null);
2157 this.reOrderQueuePosition(oleDeliverRequestBo1);
2158 getBusinessObjectService().save(oleDeliverRequestBo1);
2159 Map<String, String> requestMap = new HashMap<String, String>();
2160 requestMap.put("borrowerId", patronId);
2161 requestMap.put("itemId", itemBarcode);
2162 List<OleDeliverRequestBo> oleDeliverRequestBoList = (List<OleDeliverRequestBo>) businessObjectService.findMatching(OleDeliverRequestBo.class, requestMap);
2163 String requestId = "";
2164 if (oleDeliverRequestBoList.size() > 0) {
2165 requestId = ":Request Id :" + oleDeliverRequestBoList.get(0).getRequestId();
2166 }
2167 LOG.info("Request Raised Succesfully" + requestId);
2168 String fromAddress = getLoanProcessor().getParameter(OLEParameterConstants.NOTICE_FROM_MAIL);
2169 if (fromAddress != null && (fromAddress.equals("") || fromAddress.trim().isEmpty())) {
2170 fromAddress = OLEConstants.KUALI_MAIL;
2171 }
2172 oleNoticeBo.setNoticeName(OLEConstants.PICKUP_NOTICE);
2173 Date pickupDate = addDate(new java.sql.Date(System.currentTimeMillis()), new Integer(oleDeliverRequestBo.getOlePickUpLocation().getOnHoldDays()));
2174 oleNoticeBo.setNoticeSpecificContent(OLEConstants.PICKUP_NOTICE_START_CONTENT + oleDeliverRequestBo.getOlePickUpLocation().getCirculationDeskPublicName() + OLEConstants.PICKUP_NOTICE_MIDDLE_CONTENT + pickupDate + OLEConstants.PICKUP_NOTICE_FINAL_CONTENT);
2175 oleNoticeBo.setAuthor(oleDeliverRequestBo.getAuthor() != null ? oleDeliverRequestBo.getAuthor() : "");
2176 oleNoticeBo.setItemCallNumber(oleDeliverRequestBo.getCallNumber() != null ? oleDeliverRequestBo.getCallNumber() : "");
2177 oleNoticeBo.setItemId(oleDeliverRequestBo.getItemId() != null ? oleDeliverRequestBo.getItemId() : "");
2178 oleNoticeBo.setTitle(oleDeliverRequestBo.getTitle() != null ? oleDeliverRequestBo.getTitle() : "");
2179 OleDeliverBatchServiceImpl oleDeliverBatchService = new OleDeliverBatchServiceImpl();
2180 String content = oleDeliverBatchService.getEmailPickUpNotice(oleNoticeBo);
2181 try {
2182 if (!content.trim().equals("")) {
2183 OleMailer oleMailer = GlobalResourceLoader.getService("oleMailer");
2184 oleMailer.sendEmail(new EmailFrom(fromAddress), new EmailTo(oleNoticeBo.getPatronEmailAddress()), new EmailSubject(OLEConstants.NOTICE_MAIL), new EmailBody(content), true);
2185 LOG.info("Mail send Successfully to " + oleNoticeBo.getPatronEmailAddress());
2186 oleDeliverBatchService.getPdfPickUpNotice(oleNoticeBo);
2187 } else {
2188 LOG.info("Notice Type :" + oleNoticeBo.getNoticeName() + " " + "Item Barcode : " + oleNoticeBo.getItemId() + " " + "Patron Name :" + oleNoticeBo.getPatronName());
2189 }
2190 } catch (Exception e) {
2191 LOG.error(e, e);
2192 return "Request Raised Succesfully" + requestId + ".Problem occured while sending notice.";
2193 }
2194 return "Request Raised Succesfully" + requestId;
2195 }
2196 } catch (Exception e) {
2197 LOG.error(e, e);
2198 if (e.getMessage().equalsIgnoreCase("Item barcode does not exist.")) {
2199 return "Item barcode does not exist.";
2200 }
2201 return "Request failed";
2202 }
2203 }
2204
2205 private java.sql.Date addDate(java.sql.Date in, int daysToAdd) {
2206 if (in == null) {
2207 return null;
2208 }
2209 GregorianCalendar cal = new GregorianCalendar();
2210 cal.setTime(in);
2211 cal.add(Calendar.DAY_OF_MONTH, daysToAdd);
2212 return new java.sql.Date(cal.getTime().getTime());
2213 }
2214
2215 public EngineResults executeEngineResults(OleDeliverRequestBo oleDeliverRequestBo) {
2216 List<OleDeliverRequestBo> recallList = new ArrayList<OleDeliverRequestBo>();
2217 List<OleDeliverRequestBo> holdList = new ArrayList<OleDeliverRequestBo>();
2218 List<OleDeliverRequestBo> pageList = new ArrayList<OleDeliverRequestBo>();
2219 List<OleDeliverRequestBo> requestsByBorrower = new ArrayList<OleDeliverRequestBo>();
2220 Engine engine = KrmsApiServiceLocator.getEngine();
2221 EngineResults engineResult = null;
2222 HashMap<String, Object> agendaValue = new HashMap<String, Object>();
2223 agendaValue.put(OLEConstants.NAME_NM, OLEConstants.REQUEST_AGENDA_NM);
2224 List<AgendaBo> agendaBos = (List<AgendaBo>) KRADServiceLocator.getBusinessObjectService().findMatching(AgendaBo.class, agendaValue);
2225 if (agendaBos != null && agendaBos.size() > 0) {
2226 AgendaBo agendaBo = agendaBos.get(0);
2227 HashMap<String, String> map = new HashMap<String, String>();
2228 map.put(OLEConstants.AGENDA_NAME, agendaBo.getName());
2229 List<MatchBo> matchBos = (List<MatchBo>) KRADServiceLocator.getBusinessObjectService().findMatching(MatchBo.class, map);
2230
2231 SelectionCriteria selectionCriteria =
2232 SelectionCriteria.createCriteria(null, getSelectionContext(agendaBo.getContext().getName()),
2233 getAgendaContext(OLEConstants.REQUEST_AGENDA_NM));
2234
2235 ExecutionOptions executionOptions = new ExecutionOptions();
2236 executionOptions.setFlag(ExecutionFlag.LOG_EXECUTION, true);
2237
2238 Facts.Builder factBuilder = Facts.Builder.create();
2239
2240 String borrowerType = "";
2241 if (oleDeliverRequestBo.getOlePatron() != null && oleDeliverRequestBo.getOlePatron().getOleBorrowerType() != null) {
2242 borrowerType = oleDeliverRequestBo.getOlePatron().getOleBorrowerType().getBorrowerTypeCode();
2243 }
2244 String itemType = oleDeliverRequestBo.getItemType();
2245
2246 String requestTypeId = oleDeliverRequestBo.getRequestTypeId();
2247
2248 String requestType = oleDeliverRequestBo.getRequestTypeCode();
2249
2250 String location = oleDeliverRequestBo.getShelvingLocation();
2251 LoanProcessor loanProcessor = getLoanProcessor();
2252 OleLoanDocument oleLoanDocument = loanProcessor.getOleLoanDocumentUsingItemUUID(oleDeliverRequestBo.getItemUuid());
2253 DataCarrierService dataCarrierService = GlobalResourceLoader.getService(OLEConstants.DATA_CARRIER_SERVICE);
2254 dataCarrierService.addData(OLEConstants.LOANED_DATE, oleLoanDocument != null ? oleLoanDocument.getCreateDate() : null);
2255 dataCarrierService.addData(OLEConstants.CIRC_POLICY_FOUND, null);
2256 String borrowerId = oleDeliverRequestBo.getBorrowerId();
2257 Map<String, String> requestMap = new HashMap<String, String>();
2258 requestMap.put(OLEConstants.ITEM_UUID, oleDeliverRequestBo.getItemUuid());
2259 if (requestTypeId != null && (requestTypeId.equals("1") || requestTypeId.equals("2"))) {
2260 requestMap.put(OLEConstants.OleDeliverRequest.REQUEST_TYPE_ID, "1");
2261 recallList = (List<OleDeliverRequestBo>) getBusinessObjectService().findMatching(OleDeliverRequestBo.class, requestMap);
2262 requestMap.put(OLEConstants.OleDeliverRequest.REQUEST_TYPE_ID, "2");
2263 recallList.addAll((List<OleDeliverRequestBo>) getBusinessObjectService().findMatching(OleDeliverRequestBo.class, requestMap));
2264 } else if (requestTypeId != null && (requestTypeId.equals("3") || requestTypeId.equals("4"))) {
2265
2266 requestMap.put(OLEConstants.OleDeliverRequest.REQUEST_TYPE_ID, "3");
2267 holdList = (List<OleDeliverRequestBo>) getBusinessObjectService().findMatching(OleDeliverRequestBo.class, requestMap);
2268 requestMap.put(OLEConstants.OleDeliverRequest.REQUEST_TYPE_ID, "4");
2269 holdList.addAll((List<OleDeliverRequestBo>) getBusinessObjectService().findMatching(OleDeliverRequestBo.class, requestMap));
2270 } else if (requestTypeId != null && (requestTypeId.equals("5") || requestTypeId.equals("6"))) {
2271
2272 requestMap.put(OLEConstants.OleDeliverRequest.REQUEST_TYPE_ID, "5");
2273 pageList = (List<OleDeliverRequestBo>) getBusinessObjectService().findMatching(OleDeliverRequestBo.class, requestMap);
2274 requestMap.put(OLEConstants.OleDeliverRequest.REQUEST_TYPE_ID, "6");
2275 pageList.addAll((List<OleDeliverRequestBo>) getBusinessObjectService().findMatching(OleDeliverRequestBo.class, requestMap));
2276 }
2277 Map<String, String> requestByBorrower = new HashMap<String, String>();
2278 requestByBorrower.put(OLEConstants.OleDeliverRequest.BORROWER_ID, borrowerId);
2279 requestsByBorrower = (List<OleDeliverRequestBo>) getBusinessObjectService().findMatching(OleDeliverRequestBo.class, requestByBorrower);
2280 HashMap<String, Object> termValues = new HashMap<String, Object>();
2281 termValues.put(OLEConstants.BORROWER_TYPE, borrowerType);
2282 termValues.put(OLEConstants.ITEM_TYPE, itemType);
2283 termValues.put(OLEConstants.LOCATION, location);
2284 termValues.put(OLEConstants.ITEM_SHELVING, oleDeliverRequestBo.getShelvingLocation());
2285 termValues.put(OLEConstants.ITEM_COLLECTION, oleDeliverRequestBo.getItemCollection());
2286 termValues.put(OLEConstants.ITEM_LIBRARY, oleDeliverRequestBo.getItemLibrary());
2287 termValues.put(OLEConstants.ITEM_CAMPUS, oleDeliverRequestBo.getItemCampus());
2288 termValues.put(OLEConstants.ITEM_INSTITUTION, oleDeliverRequestBo.getItemInstitution());
2289 termValues.put(OLEConstants.MAX_NO_OF_RECALL_REQUEST, new Integer(recallList.size()) + 1);
2290 termValues.put(OLEConstants.MAX_NO_OF_HOLD_REQUEST, new Integer(holdList.size()) + 1);
2291 termValues.put(OLEConstants.MAX_NO_OF_PAGE_REQUEST, new Integer(pageList.size()) + 1);
2292
2293 termValues.put(OLEConstants.OleDeliverRequest.REQUEST_TYPE_ID, requestTypeId);
2294 termValues.put(OLEConstants.REQUEST_TYPE, requestType);
2295
2296
2297 for (Iterator<MatchBo> matchBoIterator = matchBos.iterator(); matchBoIterator.hasNext(); ) {
2298 MatchBo matchBo = matchBoIterator.next();
2299 factBuilder.addFact(matchBo.getTermName(), termValues.get((matchBo.getTermName())));
2300 }
2301 LOG.info("termValues.toString()" + termValues.toString());
2302 engineResult = engine.execute(selectionCriteria, factBuilder.build(), executionOptions);
2303 List<String> errorMessage = (List<String>) engineResult.getAttribute(OLEConstants.ERROR_ACTION);
2304 java.sql.Date d = (java.sql.Date) engineResult.getAttribute(OLEConstants.REQ_EXPIRATION_DATE);
2305 Timestamp recallDueDate = (Timestamp) engineResult.getAttribute(OLEConstants.RECALL_DUE_DATE);
2306 String notice = (String) engineResult.getAttribute(OLEConstants.NOTICE);
2307 oleDeliverRequestBo.setNoticeType(notice);
2308 if (recallDueDate != null && oleLoanDocument.getLoanDueDate()!=null) {
2309 oleLoanDocument.setLoanDueDate(recallDueDate);
2310 oleDeliverRequestBo.setRecallDueDate(recallDueDate);
2311 getBusinessObjectService().save(oleLoanDocument);
2312 }
2313 oleDeliverRequestBo.setRequestExpiryDate(d);
2314 StringBuffer failures = new StringBuffer();
2315 if (errorMessage != null && errorMessage.size() > 0) {
2316 int i = 1;
2317 for (String errMsg : errorMessage) {
2318 failures.append(i++ + ". " + errMsg + OLEConstants.BREAK);
2319 }
2320 }
2321 if (!failures.toString().isEmpty()) {
2322 oleDeliverRequestBo.setMessage(failures.toString());
2323 }
2324 dataCarrierService.addData(OLEConstants.ERROR_ACTION, null);
2325 }
2326 return engineResult;
2327 }
2328
2329
2330
2331
2332
2333
2334
2335 protected Map<String, String> getSelectionContext(String contextName) {
2336 Map<String, String> selector = new HashMap<String, String>();
2337 selector.put(NAMESPACE_CODE_SELECTOR, OLEConstants.OLE_NAMESPACE);
2338 selector.put(NAME_SELECTOR, contextName);
2339 return selector;
2340 }
2341
2342
2343
2344
2345
2346
2347
2348 protected Map<String, String> getAgendaContext(String agendaName) {
2349 Map<String, String> selector = new HashMap<String, String>();
2350 selector.put(NAME_SELECTOR, agendaName);
2351 return selector;
2352 }
2353
2354 private OleCirculationDesk getOleCirculationDesk(String circulationDeskId) {
2355 Map<String, String> circulationDeskMap = new HashMap<String, String>();
2356 circulationDeskMap.put("circulationDeskId", circulationDeskId);
2357 List<OleCirculationDesk> oleCirculationDeskList = (List<OleCirculationDesk>) businessObjectService.findMatching(OleCirculationDesk.class, circulationDeskMap);
2358 if (oleCirculationDeskList != null && oleCirculationDeskList.size() > 0) {
2359 return oleCirculationDeskList.get(0);
2360 } else
2361 return null;
2362 }
2363
2364 private RoleService getRoleService() {
2365 RoleService service = KimApiServiceLocator.getRoleService();
2366 return service;
2367 }
2368
2369
2370 }
2371
2372
2373
2374
2375
2376