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