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