1 package org.kuali.asr.service;
2
3 import org.apache.log4j.Logger;
4 import org.jfree.util.Log;
5 import org.kuali.asr.ASRConstants;
6 import org.kuali.asr.bo.*;
7 import org.kuali.asr.bo.ASRItem;
8 import org.kuali.ole.OLEConstants;
9 import org.kuali.ole.deliver.batch.OleNoticeBo;
10 import org.kuali.ole.deliver.bo.*;
11 import org.kuali.ole.deliver.service.OleDeliverRequestDocumentHelperServiceImpl;
12 import org.kuali.ole.docstore.common.client.DocstoreClientLocator;
13 import org.kuali.ole.docstore.common.document.content.instance.Item;
14 import org.kuali.ole.docstore.common.document.content.instance.ItemStatus;
15 import org.kuali.ole.docstore.common.document.content.instance.xstream.ItemOlemlRecordProcessor;
16 import org.kuali.ole.docstore.common.search.*;
17 import org.kuali.ole.docstore.model.bo.WorkItemDocument;
18 import org.kuali.ole.docstore.model.enums.DocType;
19 import org.kuali.ole.sys.context.SpringContext;
20 import org.kuali.rice.core.api.criteria.QueryByCriteria;
21 import org.kuali.rice.coreservice.impl.parameter.ParameterBo;
22 import org.kuali.rice.kim.api.role.RoleService;
23 import org.kuali.rice.kim.api.services.KimApiServiceLocator;
24 import org.kuali.rice.kns.service.KNSServiceLocator;
25 import org.kuali.rice.krad.bo.DataObjectBase;
26 import org.kuali.rice.krad.data.DataObjectService;
27 import org.kuali.rice.krad.service.BusinessObjectService;
28 import org.kuali.rice.krad.service.KRADServiceLocator;
29
30 import java.text.SimpleDateFormat;
31 import java.util.*;
32
33
34
35
36
37
38
39
40
41 public class ASRHelperServiceImpl {
42 private static final Logger LOG = Logger.getLogger(ASRHelperServiceImpl.class);
43 private DataObjectService dataObjectService=getDataObjectService();
44 private DocstoreClientLocator docstoreClientLocator=getDocstoreClientLocator();
45
46 public DocstoreClientLocator getDocstoreClientLocator() {
47 if (null == docstoreClientLocator) {
48 return SpringContext.getBean(DocstoreClientLocator.class);
49 }
50 return docstoreClientLocator;
51 }
52
53 public DataObjectService getDataObjectService(){
54 if(dataObjectService == null){
55 dataObjectService = KRADServiceLocator.getDataObjectService();
56 }
57 return dataObjectService;
58 }
59
60
61
62
63 public boolean isAuthorized(String principalId) {
64
65
66 return processOperator(principalId);
67 }
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123 public boolean validatePatron(String patronId){
124 Map<String, String> patronMap = new HashMap<String, String>();
125 patronMap.put("olePatronId", patronId);
126 OleNoticeBo oleNoticeBo = new OleNoticeBo();
127 List<OlePatronDocument> olePatronDocumentList = (List<OlePatronDocument>) dataObjectService.findMatching(OlePatronDocument.class, QueryByCriteria.Builder.andAttributes(patronMap).build()).getResults();
128 return (olePatronDocumentList!=null && olePatronDocumentList.size()>0);
129 }
130
131 public boolean validatePickupLocation(String pickupLocation){
132 Map<String,String> circulationDeskMap = new HashMap<String,String>();
133 circulationDeskMap.put("circulationDeskCode",pickupLocation);
134 circulationDeskMap.put("asrPickupLocation","true");
135 List<OleCirculationDesk> oleCirculationDeskList = (List<OleCirculationDesk>)dataObjectService.findMatching(OleCirculationDesk.class,QueryByCriteria.Builder.andAttributes(circulationDeskMap).build()).getResults();
136 return (oleCirculationDeskList!=null && oleCirculationDeskList.size()>0);
137 }
138
139 public SearchParams buildSearchParams(Map<String, String> queryParams) {
140 SearchParams searchParams = new SearchParams();
141 List<SearchCondition> searchConditionList = new ArrayList<SearchCondition>();
142 List<SearchCondition> searchConditions = new ArrayList<>();
143 if (null != queryParams) {
144 for (Iterator<String> keys = queryParams.keySet().iterator(); keys.hasNext(); ) {
145 String key = keys.next();
146 String value = queryParams.get(key);
147 if(org.apache.commons.lang.StringUtils.isNotEmpty(value)) {
148
149 searchParams.getSearchConditions().add(searchParams.buildSearchCondition("AND", searchParams.buildSearchField("item", key, value), "AND"));
150 }
151 }
152 }
153 return searchParams;
154 }
155
156 public ASRResponseBo generateResponse(String code, String message, int statusCode){
157 ASRResponseBo asrResponseBo=new ASRResponseBo();
158 asrResponseBo.setCode(code);
159 asrResponseBo.setMessage(message);
160 asrResponseBo.setStatusCode(statusCode);
161 return asrResponseBo;
162 }
163
164 public ASRItems generateASRItems(List<WorkItemDocument> workItemDocumentList){
165 ASRItems asrItems=new ASRItems();
166 List<ASRItem> asrItemList=new ArrayList<>();
167 ASRItem asrItem=null;
168 for(WorkItemDocument workItemDocument:workItemDocumentList){
169 asrItem=new ASRItem();
170 asrItem.setAuthor(workItemDocument.getItemStatus());
171 asrItem.setCallNumber(workItemDocument.getCallNumber());
172 asrItem.setItemBarcode(workItemDocument.getBarcode());
173 asrItem.setTitle(workItemDocument.getBibTitle());
174 asrItemList.add(asrItem);
175 }
176 asrItems.setAsrItems(asrItemList);
177 return asrItems;
178 }
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193 public boolean updateItemStatus(Item oleItem, String itemStatus) throws Exception {
194 LOG.debug("Inside the updateItemStatus method");
195 if(oleItem==null){
196 return false;
197 }
198 try {
199 String itemUuid = oleItem.getItemIdentifier();
200 String itemXmlContent = buildItemContentWithItemStatus(oleItem, itemStatus);
201 LOG.info("itemXmlContent" + itemXmlContent);
202 String itemRecordUpdateResponse = "";
203
204 LOG.info(itemRecordUpdateResponse);
205 return true;
206
207 } catch (Exception e) {
208 LOG.error(OLEConstants.ITM_STS_TO_DOC_FAIL + e, e);
209 return false;
210
211 }
212 }
213
214 public String buildItemContentWithItemStatus(Item oleItem, String itemStatus) throws Exception {
215 LOG.debug("Inside the buildItemContentWithItemStatus method");
216 ItemStatus itemStatus1 = new ItemStatus();
217 itemStatus1.setCodeValue(itemStatus);
218 itemStatus1.setFullValue(itemStatus);
219 oleItem.setItemStatus(itemStatus1);
220 oleItem.setItemStatusEffectiveDate(String.valueOf(new SimpleDateFormat(OLEConstants.DAT_FORMAT_EFFECTIVE).format(new Date())));
221 String itemContent = new ItemOlemlRecordProcessor().toXML(oleItem);
222 return itemContent;
223 }
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243 public Object cancelRequest(String operatorId,String requestId){
244 if(!isAuthorized(operatorId)){
245 return generateResponse(ASRConstants.OPERATOR_NOT_FOUND_CODE, ASRConstants.OPERATOR_NOT_FOUND,ASRConstants.OPERATOR_NOT_FOUND_STATUS);
246 }
247 Map<String,String> requestMap = new HashMap<String,String>();
248 requestMap.put("requestId",requestId);
249 List<OleDeliverRequestBo> oleDeliverRequestBoList = (List<OleDeliverRequestBo>)dataObjectService.findMatching(OleDeliverRequestBo.class,QueryByCriteria.Builder.andAttributes(requestMap).build()).getResults();
250 if(oleDeliverRequestBoList!=null && oleDeliverRequestBoList.size()>0){
251 OleDeliverRequestBo oleDeliverRequestBo = oleDeliverRequestBoList.get(0);
252 oleDeliverRequestBo.setOperatorCreateId(operatorId);
253 if(!true){
254 return generateResponse(ASRConstants.REQUEST_NOT_FOUND_CODE,ASRConstants.REQUEST_NOT_FOUND,ASRConstants.REQUEST_NOT_FOUND_STATUS);
255 }
256
257 return generateResponse(ASRConstants.REQUEST_CANCELED_CODE,ASRConstants.REQUEST_CANCELED,ASRConstants.REQUEST_CANCELED_STATUS);
258 } else{
259 return generateResponse(ASRConstants.REQUEST_NOT_FOUND_CODE,ASRConstants.REQUEST_NOT_FOUND,ASRConstants.REQUEST_NOT_FOUND_STATUS);
260 }
261 }
262
263 public String getParameter(String name) {
264 String parameter = "";
265 try {
266 Map<String, String> criteriaMap = new HashMap<String, String>();
267 criteriaMap.put("namespaceCode", OLEConstants.DLVR_NMSPC);
268 criteriaMap.put("componentCode", OLEConstants.DLVR_CMPNT);
269 criteriaMap.put("name", name);
270 List<ParameterBo> parametersList = (List<ParameterBo>) dataObjectService.findMatching(ParameterBo.class, QueryByCriteria.Builder.andAttributes(criteriaMap).build()).getResults();
271 for (ParameterBo parameterBo : parametersList) {
272 parameter = parameterBo.getValue();
273 }
274 } catch (Exception e) {
275 LOG.error(e, e);
276 }
277 return parameter;
278 }
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304 public ASRItems getNewASRItems(){
305 ASRItems asrItems = new ASRItems();
306 List<ASRItem> asrItemList = new ArrayList<ASRItem>();
307 List<org.kuali.ole.deliver.bo.ASRItem> asrItemsList = (List<org.kuali.ole.deliver.bo.ASRItem>)dataObjectService.findMatching(org.kuali.ole.deliver.bo.ASRItem.class, QueryByCriteria.Builder.create().build()).getResults();
308 ASRItem asrItem;
309 if(asrItemsList.size()>0){
310 for(org.kuali.ole.deliver.bo.ASRItem asrItemBo : asrItemsList){
311 asrItem = new ASRItem();
312 asrItem.setItemBarcode(asrItemBo.getItemBarcode());
313 asrItem.setTitle(asrItemBo.getTitle());
314 asrItem.setAuthor(asrItemBo.getAuthor());
315 asrItem.setCallNumber(asrItemBo.getCallNumber());
316 asrItemList.add(asrItem);
317 }
318 }
319 asrItems.setAsrItems(asrItemList);
320 if(asrItemList!=null && asrItemList.size()>0){
321 dataObjectService.delete(asrItemsList);
322 }
323 return asrItems;
324 }
325
326
327 public Map<String, String> getItemFieldValue(String searchField, String searchFieldValue, List<String> resultFields) {
328 Map<String, String> resultMap = new HashMap<>();
329 Map<String,String> searchParamsMap = new HashMap<String,String>();
330 searchParamsMap.put(searchField,searchFieldValue);
331 SearchParams searchParams = buildSearchParams(searchParamsMap);
332 for(String resultField :resultFields) {
333 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField("item", resultField));
334 }
335 try {
336
337 SearchResponse searchResponse = getDocstoreClientLocator().getDocstoreClient().search(searchParams);
338 for(SearchResult searchResult : searchResponse.getSearchResults()){
339 for(SearchResultField searchResultField : searchResult.getSearchResultFields()) {
340 if(searchResultField.getDocType().equalsIgnoreCase(DocType.ITEM.getCode())) {
341 for(String resultField : resultFields) {
342 if(searchResultField.getFieldName().equalsIgnoreCase(resultField)) {
343 resultMap.put(resultField, searchResultField.getFieldValue());
344 }
345 }
346 }
347 }
348 }
349 }catch(Exception e){
350 Log.error(e,e);
351 }
352 return resultMap;
353 }
354
355 public Map<String, String> getHoldingFieldValue(String searchField, String searchFieldValue, List<String> resultFields) {
356 Map<String, String> resultMap = new HashMap<>();
357 Map<String,String> searchParamsMap = new HashMap<String,String>();
358 searchParamsMap.put(searchField,searchFieldValue);
359 SearchParams searchParams = buildSearchParamsForHoldings(searchParamsMap);
360 for(String resultField :resultFields) {
361 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField("holdings", resultField));
362 }
363 try {
364
365 SearchResponse searchResponse = getDocstoreClientLocator().getDocstoreClient().search(searchParams);
366 for(SearchResult searchResult : searchResponse.getSearchResults()){
367 for(SearchResultField searchResultField : searchResult.getSearchResultFields()) {
368 if(searchResultField.getDocType().equalsIgnoreCase(DocType.HOLDINGS.getCode())) {
369 for(String resultField : resultFields) {
370 if(searchResultField.getFieldName().equalsIgnoreCase(resultField)) {
371 resultMap.put(resultField, searchResultField.getFieldValue());
372 }
373 }
374 }
375 }
376 }
377 }catch(Exception e){
378 Log.error(e,e);
379 }
380 return resultMap;
381 }
382
383
384 public org.kuali.ole.docstore.common.document.Item getItem(String itemUUID){
385 org.kuali.ole.docstore.common.document.Item item = null;
386 try {
387 item = getDocstoreClientLocator().getDocstoreClient().retrieveItem(itemUUID);
388 } catch (Exception e) {
389 e.printStackTrace();
390 }
391 return item;
392 }
393
394 public org.kuali.ole.docstore.common.document.Item getItemUsingBarcode(String barcode){
395 org.kuali.ole.docstore.common.document.Item item = null;
396 List<String> searchList = new ArrayList<String>();
397 searchList.add("id");
398 Map<String,String> resultMap = getItemFieldValue("ItemBarcode_display", barcode, searchList);
399 String itemUUID = resultMap.get("id");
400 if(itemUUID!=null){
401 item = getItem(itemUUID);
402 }
403 return item;
404 }
405
406 public boolean isAnASRItem(String itemLocation) {
407 boolean asrItem = false;
408 String[] libraryArray = getParameter("ASR_LOCATIONS").split("[';']");
409 for (String library : libraryArray) {
410 if (itemLocation != null) {
411 for (String location : itemLocation.split("['/']")) {
412 if (location.equals(library)) {
413 asrItem = true;
414 break;
415 }
416 }
417 }
418 }
419 return asrItem;
420
421 }
422
423
424 public List<ASRTypeRequest> getASRRequest(String searchParameter,String value){
425 Map<String,String> requestMap = new HashMap<String,String>();
426 requestMap.put(searchParameter,value);
427 List<ASRTypeRequest> asrTypeRequests = (List<ASRTypeRequest>)dataObjectService.findMatching(ASRTypeRequest.class,QueryByCriteria.Builder.andAttributes(requestMap).build()).getResults();
428 if(asrTypeRequests.size()>0){
429 return asrTypeRequests;
430 }
431 return null;
432 }
433
434 public boolean updateRequestStatus(ASRTypeRequest asrTypeRequest,String holdId,String requestStatus){
435 boolean updated = false;
436 Map<String,String> parameterMap = new HashMap<>();
437 parameterMap.put("requestId",holdId);
438 List<OleDeliverRequestBo> oleDeliverRequestBoList = (List<OleDeliverRequestBo>)dataObjectService.findMatching(OleDeliverRequestBo.class,QueryByCriteria.Builder.andAttributes(parameterMap).build()).getResults();
439 if(oleDeliverRequestBoList!=null && oleDeliverRequestBoList.size()>0){
440 OleDeliverRequestBo oleDeliverRequestBo = oleDeliverRequestBoList.get(0);
441 oleDeliverRequestBo.setRequestStatus(requestStatus);
442 dataObjectService.save(oleDeliverRequestBo);
443 List<ASRTypeRequest> asrTypeRequests;
444 if(asrTypeRequest == null){
445 asrTypeRequests = getASRRequest("requestId", holdId);
446 if(asrTypeRequests!=null && asrTypeRequests.size()>0){
447 asrTypeRequest = asrTypeRequests.get(0);
448
449 } else{
450 return false;
451 }
452 }
453 asrTypeRequest.setRequestStatus(requestStatus);
454 ASRTypeRequest asrTypeRequest1=dataObjectService.save(asrTypeRequest);
455 if(asrTypeRequest1!=null){
456 updated = true;
457 }
458 }
459 return updated;
460 }
461
462 public boolean updateItemStatus(String itemBarcode,String status){
463 boolean updated = false;
464 Item items = null;
465 org.kuali.ole.docstore.common.document.Item item = getItemUsingBarcode(itemBarcode);
466 if(item!=null){
467 String itemContent = item.getContent();
468 if(itemContent!=null){
469 ItemOlemlRecordProcessor itemOlemlRecordProcessor = new ItemOlemlRecordProcessor();
470 items=itemOlemlRecordProcessor.fromXML(itemContent);
471 if(items!=null && items.getItemStatus()!=null){
472 ItemStatus itemStatus = new ItemStatus();
473 itemStatus.setCodeValue(status);
474 items.setItemStatus(itemStatus);
475 item.setContent(itemOlemlRecordProcessor.toXML(items));
476 try{
477 getDocstoreClientLocator().getDocstoreClient().updateItem(item);
478 updated=true;
479 } catch(Exception e){
480 Log.error(e,e);
481 }
482 }
483 }
484 }
485
486 return updated;
487 }
488
489 public boolean updateItemStatusForInTransit(String itemBarcode,String status){
490 boolean updated = false;
491 Item items = null;
492 org.kuali.ole.docstore.common.document.Item item = getItemUsingBarcode(itemBarcode);
493 if(item!=null){
494 String itemContent = item.getContent();
495 if(itemContent!=null){
496 ItemOlemlRecordProcessor itemOlemlRecordProcessor = new ItemOlemlRecordProcessor();
497 items=itemOlemlRecordProcessor.fromXML(itemContent);
498 if(items!=null && items.getItemStatus()!=null && items.getItemStatus().getCodeValue().equals(ASRConstants.IN_TRANSIT)){
499 ItemStatus itemStatus = new ItemStatus();
500 itemStatus.setCodeValue(status);
501 items.setItemStatus(itemStatus);
502 item.setContent(itemOlemlRecordProcessor.toXML(items));
503 try{
504 getDocstoreClientLocator().getDocstoreClient().updateItem(item);
505 updated=true;
506 } catch(Exception e){
507 Log.error(e,e);
508 }
509 }
510 }
511 }
512
513 return updated;
514 }
515
516 public ASRRequests getASRRequest(List<ASRTypeRequest> asrRequestTypeList){
517 ASRRequests asrRequests=new ASRRequests();
518 List<ASRRequest> asrRequestList=new ArrayList<>();
519 ASRRequest asrRequest=null;
520 for(ASRTypeRequest asrTypeRequest:asrRequestTypeList){
521 asrRequest=new ASRRequest();
522 asrRequest.setHoldId(asrTypeRequest.getRequestId());
523 asrRequest.setItemBarcode(asrTypeRequest.getItemId());
524 asrRequestList.add(asrRequest);
525 }
526 asrRequests.setAsrRequests(asrRequestList);
527
528 return asrRequests;
529 }
530
531
532 public ASRRequests getASRTypeRequest(String status){
533 ASRRequests asrRequests = new ASRRequests();
534 Map<String,String> requestMap = new HashMap<String,String>();
535 requestMap.put("requestStatus",status);
536 List<ASRTypeRequest> requestsList = (List<ASRTypeRequest>)dataObjectService.findMatching(ASRTypeRequest.class,QueryByCriteria.Builder.andAttributes(requestMap).build()).getResults();
537 if(requestsList.size()>0){
538 asrRequests = getASRRequest(requestsList);
539 }
540 return asrRequests;
541
542 }
543
544
545 public void deleteASRRequest(String itemBarcode){
546 OleDeliverRequestDocumentHelperServiceImpl oleDeliverRequestDocumentHelperService = new OleDeliverRequestDocumentHelperServiceImpl();
547 Map<String,String> requestMap = new HashMap<String,String>();
548 requestMap.put("itemId",itemBarcode);
549 List<OleDeliverRequestBo> oleDeliverRequestBos = (List<OleDeliverRequestBo>)dataObjectService.findMatching(OleDeliverRequestBo.class,QueryByCriteria.Builder.andAttributes(requestMap).build()).getResults();
550 if(oleDeliverRequestBos.size()>0){
551 for(OleDeliverRequestBo oleDeliverRequestBo : oleDeliverRequestBos){
552 oleDeliverRequestDocumentHelperService.cancelDocument(oleDeliverRequestBo);
553 }
554 }
555 List<ASRTypeRequest> asrTypeRequests = (List<ASRTypeRequest>)dataObjectService.findMatching(ASRTypeRequest.class,QueryByCriteria.Builder.andAttributes(requestMap).build()).getResults();
556 dataObjectService.delete(asrTypeRequests);
557
558 }
559
560
561 public ASRRequestDetailBo generateASRDetailBo(OleDeliverRequestBo oleDeliverRequestBo){
562 ASRRequestDetailBo asrRequestDetailBo = new ASRRequestDetailBo();
563 asrRequestDetailBo.setRequestId(oleDeliverRequestBo.getRequestId());
564 asrRequestDetailBo.setAvailable(false);
565 asrRequestDetailBo.setDateAvailable("");
566 asrRequestDetailBo.setDateAvailableExpires("");
567 asrRequestDetailBo.setDateExpires(oleDeliverRequestBo.getRequestExpiryDate().toString());
568 if(oleDeliverRequestBo.getRecallDueDate()!=null)
569 asrRequestDetailBo.setDateRecalled(oleDeliverRequestBo.getRecallDueDate().toString());
570 asrRequestDetailBo.setPatronId(oleDeliverRequestBo.getBorrowerBarcode());
571 asrRequestDetailBo.setPickupLocation(oleDeliverRequestBo.getPickUpLocationCode());
572
573 if(oleDeliverRequestBo.getBorrowerQueuePosition()!=null)
574 asrRequestDetailBo.setPriority(oleDeliverRequestBo.getBorrowerQueuePosition().toString());
575 asrRequestDetailBo.setRequestType(oleDeliverRequestBo.getRequestTypeCode());
576 asrRequestDetailBo.setRequestStatus(oleDeliverRequestBo.getRequestStatus());
577 return asrRequestDetailBo;
578 }
579
580
581 public ASRRequestDetailsBo generateASRequestDetailsBo(List<OleDeliverRequestBo> oleDeliverRequestBos){
582 ASRRequestDetailsBo asrRequestDetailsBo = new ASRRequestDetailsBo();
583 List<ASRRequestDetailBo> asrRequestDetailBoList;
584 if(oleDeliverRequestBos.size()>0){
585 asrRequestDetailBoList = new ArrayList<ASRRequestDetailBo>();
586 for(OleDeliverRequestBo oleDeliverRequestBo : oleDeliverRequestBos){
587 asrRequestDetailBoList.add(generateASRDetailBo(oleDeliverRequestBo));
588 }
589 asrRequestDetailsBo.setAsrRequestDetailBos(asrRequestDetailBoList);
590 return asrRequestDetailsBo;
591 }
592 return null;
593 }
594
595 public ASRRequestDetailsBo getRequests(String itemBarcode){
596 List<OleDeliverRequestBo> oleDeliverRequestBos =null;
597 Map<String,String> requestMap = new HashMap<String,String>();
598 requestMap.put("itemId",itemBarcode);
599 List<ASRTypeRequest> asrTypeRequests = (List<ASRTypeRequest>)dataObjectService.findMatching(ASRTypeRequest.class,QueryByCriteria.Builder.andAttributes(requestMap).build()).getResults();
600 if(asrTypeRequests.size()>0){
601 oleDeliverRequestBos = new ArrayList<OleDeliverRequestBo>();
602 for(ASRTypeRequest asrTypeRequest : asrTypeRequests){
603 requestMap.put("itemId",asrTypeRequest.getItemId());
604 List<OleDeliverRequestBo> oleDeliverRequestBos1 = (List<OleDeliverRequestBo>)dataObjectService.findMatching(OleDeliverRequestBo.class,QueryByCriteria.Builder.andAttributes(requestMap).build()).getResults();
605 if(oleDeliverRequestBos1.size()>0){
606 oleDeliverRequestBos.addAll(oleDeliverRequestBos1);
607 break;
608 }
609 }
610 }
611 if(oleDeliverRequestBos!=null && oleDeliverRequestBos.size()>0){
612 ASRRequestDetailsBo asrRequestDetailsBo = generateASRequestDetailsBo(oleDeliverRequestBos);
613 if(asrRequestDetailsBo !=null){
614 return asrRequestDetailsBo;
615 }
616 }
617 return null;
618 }
619
620 public OleDeliverRequestBo getPrioritizedRequest(String itemBarcode){
621 OleDeliverRequestBo oleDeliverRequestBo = null;
622 Map<String,String> requestMap = new HashMap<String,String>();
623 requestMap.put("itemId",itemBarcode);
624 requestMap.put("borrowerQueuePosition","1");
625 List<OleDeliverRequestBo> oleDeliverRequestBos = (List<OleDeliverRequestBo>)dataObjectService.findMatching(OleDeliverRequestBo.class,QueryByCriteria.Builder.andAttributes(requestMap).build()).getResults();
626 if(oleDeliverRequestBos.size()>0){
627 oleDeliverRequestBo = oleDeliverRequestBos.get(0);
628 }
629 return oleDeliverRequestBo;
630 }
631
632
633 public boolean validateLocation(String operatorId,String itemLocation){
634 boolean valid=false;
635 Map<String,String> circulationDeskDetailMap = new HashMap<String,String>();
636 Map<String,String> circulationLocationMap = new HashMap<String,String>();
637 circulationDeskDetailMap.put("operatorId",operatorId);
638 circulationDeskDetailMap.put("defaultLocation","true");
639 List<OleCirculationDeskDetail> oleCirculationDeskDetails = (List<OleCirculationDeskDetail>)dataObjectService.findMatching(OleCirculationDeskDetail.class,QueryByCriteria.Builder.andAttributes(circulationDeskDetailMap).build()).getResults();
640 if(oleCirculationDeskDetails.size()>0){
641 circulationLocationMap.put("circulationDeskId",oleCirculationDeskDetails.get(0).getCirculationDeskId());
642 List<OleCirculationDeskLocation> oleCirculationDeskLocations = (List<OleCirculationDeskLocation>)dataObjectService.findMatching(OleCirculationDeskLocation.class,QueryByCriteria.Builder.andAttributes(circulationLocationMap).build()).getResults();
643 if(oleCirculationDeskLocations.size()>0){
644 for(OleCirculationDeskLocation oleCirculationDeskLocation : oleCirculationDeskLocations){
645
646 if(oleCirculationDeskLocation.getLocation().getFullLocationPath().equals(itemLocation)){
647 valid = true;
648 break;
649 }
650
651
652
653
654 }
655 }
656 }
657 return valid;
658 }
659
660
661
662 public boolean validPatron(String patronId){
663 boolean valid=false;
664 Map<String,String> patronMap = new HashMap<String,String>();
665 patronMap.put("olePatronId",patronId);
666 List<OlePatronDocument> olePatronDocuments = (List<OlePatronDocument>)dataObjectService.findMatching(OlePatronDocument.class,QueryByCriteria.Builder.andAttributes(patronMap).build()).getResults();
667 if(olePatronDocuments!=null && olePatronDocuments.size()>0){
668 valid=true;
669 }
670 return valid;
671 }
672
673
674
675 public boolean saveASRRequest(ASRRequestBo asrRequestBo){
676 boolean saved = false;
677 ASRTypeRequest asrTypeRequest = new ASRTypeRequest();
678 asrTypeRequest.setItemId(asrRequestBo.getItemBarcode());
679 asrTypeRequest.setPatronId(asrRequestBo.getPatronBarcode());
680 asrTypeRequest.setPickUpLocation(asrRequestBo.getPickupLocation());
681 asrTypeRequest.setPatronName(asrRequestBo.getPatronName());
682 ASRTypeRequest asrTypeRequest1 = dataObjectService.save(asrTypeRequest);
683 if(asrTypeRequest1!=null){
684 saved =true;
685 }
686 return saved;
687 }
688
689
690 public boolean saveASRItem(ASRItem asrItem){
691 boolean saved = false;
692 org.kuali.ole.deliver.bo.ASRItem asrItems = new org.kuali.ole.deliver.bo.ASRItem();
693 asrItems.setItemBarcode(asrItem.getItemBarcode());
694 asrItems.setCallNumber(asrItem.getCallNumber());
695 asrItems.setAuthor(asrItem.getAuthor());
696 asrItems.setTitle(asrItem.getTitle());
697
698 org.kuali.ole.deliver.bo.ASRItem asrItem1 = dataObjectService.save(asrItems);
699 if(asrItem1!=null){
700 saved = true;
701 }
702 return saved;
703 }
704
705 public List<OleDeliverRequestBo> getDeliverRequest(Map<String,String> requestMap){
706 List<OleDeliverRequestBo> oleDeliverRequestBos = (List<OleDeliverRequestBo>)dataObjectService.findMatching(OleDeliverRequestBo.class,QueryByCriteria.Builder.andAttributes(requestMap).build()).getResults();
707 if(oleDeliverRequestBos.size()>0){
708 return oleDeliverRequestBos;
709 }
710 return null;
711 }
712
713
714 public void deleteASRTypeRequest(String requestId){
715 Map<String,String> asrTypeMap = new HashMap<String,String>();
716 asrTypeMap.put("requestId",requestId);
717 dataObjectService.deleteMatching(ASRTypeRequest.class,QueryByCriteria.Builder.andAttributes(asrTypeMap).build());
718 }
719
720 public boolean isCirculationDesksLocation(String itemLocation,String circulationDeskId){
721 boolean valid=false;
722 Map<String,String> circulationLocationMap = new HashMap<String,String>();
723 circulationLocationMap.put("circulationDeskId",circulationDeskId);
724 List<OleCirculationDeskLocation> oleCirculationDeskLocations = (List<OleCirculationDeskLocation>)dataObjectService.findMatching(OleCirculationDeskLocation.class,QueryByCriteria.Builder.andAttributes(circulationLocationMap).build()).getResults();
725 if(oleCirculationDeskLocations.size()>0){
726 for(OleCirculationDeskLocation oleCirculationDeskLocation : oleCirculationDeskLocations){
727
728 if(oleCirculationDeskLocation.getLocation().getFullLocationPath().equals(itemLocation)){
729 valid = true;
730 break;
731 }
732
733
734
735
736 }
737 }
738 return valid;
739 }
740
741 public String getLocation(String itemBarcode){
742 List<String> resultList = new ArrayList<String>();
743 resultList.add(ASRConstants.LOCATION_LEVEL_DISPLAY);
744 resultList.add("holdingsIdentifier");
745 Map<String,String> resultMap = getItemFieldValue(ASRConstants.ITEM_BARCODE_DISPLAY,itemBarcode,resultList);
746 String location = resultMap.get(ASRConstants.LOCATION_LEVEL_DISPLAY);
747 if(location == null){
748 String holdingsId = resultMap.get("holdingsIdentifier");
749 resultList.clear();
750 resultList.add(ASRConstants.LOCATION_LEVEL_DISPLAY);
751 Map<String,String> resultMap1 = getHoldingFieldValue("id",holdingsId, resultList);
752 location = resultMap1.get(ASRConstants.LOCATION_LEVEL_DISPLAY);
753 }
754 return location;
755
756 }
757
758 public SearchParams buildSearchParamsForHoldings(Map<String, String> queryParams) {
759 SearchParams searchParams = new SearchParams();
760 List<SearchCondition> searchConditionList = new ArrayList<SearchCondition>();
761 List<SearchCondition> searchConditions = new ArrayList<>();
762 if (null != queryParams) {
763 for (Iterator<String> keys = queryParams.keySet().iterator(); keys.hasNext(); ) {
764 String key = keys.next();
765 String value = queryParams.get(key);
766 if(org.apache.commons.lang.StringUtils.isNotEmpty(value)) {
767
768 searchParams.getSearchConditions().add(searchParams.buildSearchCondition("AND", searchParams.buildSearchField("holdings", key, value), "AND"));
769 }
770 }
771 }
772 return searchParams;
773 }
774
775 public ASRRequests getASRRequestBasedOnLocation(ASRRequests asrRequests,String location){
776 List<ASRRequest> requestList = new ArrayList<ASRRequest>();
777 if(asrRequests.getAsrRequests()!=null){
778 for(ASRRequest asrRequest:asrRequests.getAsrRequests()){
779 String itemBarcode = asrRequest.getItemBarcode();
780 String itemLocation = getLocation(itemBarcode);
781 if(isLocationMatch(itemLocation,location)){
782 requestList.add(asrRequest);
783 }
784 }
785 }
786 asrRequests.setAsrRequests(requestList);
787 return asrRequests;
788
789
790 }
791
792 public boolean isLocationMatch(String itemLocation,String asrLocation) {
793 boolean asrItem = false;
794 if(itemLocation!=null){
795 String[] libraryArray = itemLocation.split("['/']");
796 for (String library : libraryArray) {
797 if (asrLocation.equals(library)) {
798 asrItem = true;
799 }
800 }
801 }
802
803
804 return asrItem;
805
806 }
807
808 public boolean deleteAllASRItems(ASRItems asrItems){
809 boolean isAllDeleted = false;
810 List<org.kuali.ole.deliver.bo.ASRItem> deleteList = new ArrayList<>();
811 List<org.kuali.ole.deliver.bo.ASRItem> asrItemList = new ArrayList<>();
812 asrItemList=(List<org.kuali.ole.deliver.bo.ASRItem>)getDataObjectService().findMatching(org.kuali.ole.deliver.bo.ASRItem.class, QueryByCriteria.Builder.create().build()).getResults();
813 for(ASRItem asrItem:asrItems.getAsrItems()){
814 for(org.kuali.ole.deliver.bo.ASRItem dlvrASRItem:asrItemList){
815 if(dlvrASRItem.getItemBarcode() !=null && dlvrASRItem.getItemBarcode().equals(asrItem.getItemBarcode())){
816 deleteList.add(dlvrASRItem);
817 break;
818 }
819 }
820 }
821 getDataObjectService().delete(deleteList);
822 isAllDeleted=true;
823 return isAllDeleted;
824 }
825
826 public boolean processOperator(String principalId) {
827
828
829
830
831 boolean isOperator = true;
832 Collection<String> roles = getRoleService().getRoleMemberPrincipalIds(OLEConstants.OlePatron.PATRON_NAMESPACE, OLEConstants.OleDeliverRequest.REQUESTER_OPERATOR, null);
833 if (roles != null) {
834 isOperator = roles.contains(principalId);
835 }
836 return isOperator;
837 }
838
839 private RoleService getRoleService() {
840 RoleService service = KimApiServiceLocator.getRoleService();
841 return service;
842 }
843
844
845 }