1 package org.kuali.ole.ncip.service.impl;
2
3 import org.apache.commons.collections.CollectionUtils;
4 import org.apache.log4j.Logger;
5 import org.kuali.ole.OLEConstants;
6 import org.kuali.ole.bo.*;
7 import org.kuali.ole.deliver.bo.*;
8 import org.kuali.ole.deliver.service.OleDeliverRequestDocumentHelperServiceImpl;
9 import org.kuali.ole.deliver.util.DroolsResponse;
10 import org.kuali.ole.deliver.util.ItemInfoUtil;
11 import org.kuali.ole.deliver.util.NoticeInfo;
12 import org.kuali.ole.deliver.util.OleItemRecordForCirc;
13 import org.kuali.ole.docstore.common.document.Bib;
14 import org.kuali.ole.docstore.common.document.content.instance.Item;
15 import org.kuali.ole.docstore.common.document.content.instance.OleHoldings;
16 import org.kuali.ole.docstore.engine.service.storage.rdbms.pojo.ItemRecord;
17 import org.kuali.ole.ncip.service.LookupUserService;
18 import org.kuali.ole.ncip.util.OLENCIPUtil;
19 import org.kuali.ole.utility.OleStopWatch;
20 import org.kuali.rice.kim.impl.identity.address.EntityAddressBo;
21 import org.kuali.rice.kim.impl.identity.email.EntityEmailBo;
22 import org.kuali.rice.kim.impl.identity.entity.EntityBo;
23 import org.kuali.rice.kim.impl.identity.name.EntityNameBo;
24 import org.kuali.rice.kim.impl.identity.phone.EntityPhoneBo;
25 import org.kuali.rice.krad.service.KRADServiceLocator;
26
27 import java.sql.Timestamp;
28 import java.text.SimpleDateFormat;
29 import java.util.*;
30
31
32
33
34 public abstract class LookupUserServiceImpl extends LookupUserServiceUtil implements LookupUserService {
35
36 private static final Logger LOG = Logger.getLogger(LookupUserServiceImpl.class);
37
38 protected String responseFormatType;
39 protected String response;
40 private OLELookupUser oleLookupUser;
41 private OlePatronDocument olePatronDocument;
42
43 public OLELookupUser getOleLookupUser() {
44 return oleLookupUser;
45 }
46
47 public void setOleLookupUser(OLELookupUser oleLookupUser) {
48 this.oleLookupUser = oleLookupUser;
49 }
50
51 public OlePatronDocument getOlePatronDocument() {
52 return olePatronDocument;
53 }
54
55 public void setOlePatronDocument(OlePatronDocument olePatronDocument) {
56 this.olePatronDocument = olePatronDocument;
57 }
58
59
60
61
62
63
64
65 public String lookupUser(Map lookupUserParameters) {
66 setResponseFormatType(lookupUserParameters);
67 setOleLookupUser(new OLELookupUser());
68 setOlePatronDocument(null);
69
70 boolean isValid = validate(lookupUserParameters);
71 if (!isValid) {
72 return prepareResponse();
73 }
74 preProcess(lookupUserParameters);
75 process();
76
77 return prepareResponse();
78 }
79
80 private void setResponseFormatType(Map lookupUserParameters) {
81 responseFormatType = (String) lookupUserParameters.get("responseFormatType");
82 if (responseFormatType == null) {
83 responseFormatType = "xml";
84 }
85 responseFormatType = responseFormatType.toUpperCase();
86 }
87
88 private boolean validate(Map lookupUserParameters) {
89 String operatorId = getOperatorId((String) lookupUserParameters.get("operatorId"));
90 String patronBarcode = (String) lookupUserParameters.get("patronBarcode");
91
92 OleCirculationDesk oleCirculationDesk = getCircDeskLocationResolver().getCircDeskForOpertorId(operatorId);
93 if (null == oleCirculationDesk) {
94 processErrorResponseForOperator();
95 return false;
96 }
97 try {
98 OlePatronDocument patronDocument = getOlePatronRecordUtil().getPatronRecordByBarcode(patronBarcode);
99 setOlePatronDocument(patronDocument);
100 getOleLookupUser().setPatronId(getOlePatronDocument().getBarcode());
101 } catch (Exception e) {
102 LOG.error("Exception " + e);
103 }
104 if (null == getOlePatronDocument()) {
105 processErrorResponseForPatron();
106 return false;
107 }
108 return true;
109 }
110
111 private void process() {
112 if (userAddressInformationDesired()) {
113 processUserAddressInformation();
114 }
115 if (userPrivilegeDesired()) {
116 processUserPriv();
117 }
118 if (nameInformationDesired()) {
119 processNameInformation();
120 }
121 validatePatron();
122 if (loanedItemsDesired()) {
123 processLoanedItems();
124 }
125 if (requestedItemsDesired()) {
126 processRequestedItems();
127 }
128 if (userFiscalAccountDesired()) {
129 processFines();
130 }
131 processSuccessResponseForLookupUser();
132 }
133
134 private void processUserAddressInformation() {
135 OlePatronEmailBo olePatronEmailBo = getDefaultEmailBo(getOlePatronDocument().getOlePatronId());
136 if (olePatronEmailBo != null) {
137 getOleLookupUser().setPatronEmail(olePatronEmailBo);
138 }
139 OlePatronAddressBo olePatronAddressBo = getDefaultAddressBo(getOlePatronDocument().getOlePatronId());
140 if (olePatronAddressBo != null) {
141 getOleLookupUser().setPatronAddress(olePatronAddressBo);
142 }
143 OlePatronPhoneBo olePatronPhoneBo = getDefaultPhoneBo(getOlePatronDocument().getOlePatronId());
144 if (olePatronPhoneBo != null) {
145 getOleLookupUser().setPatronPhone(olePatronPhoneBo);
146 }
147 }
148
149 private OlePatronEmailBo getDefaultEmailBo(String entityId) {
150 LOG.info("Inside getDefaultEmailBo : Entity Id : " + entityId);
151 EntityBo entityBo = getEntity(entityId);
152 OlePatronEmailBo olePatronEmailBo = null;
153 if (entityBo != null) {
154 if (entityBo.getEntityTypeContactInfos() != null && entityBo.getEntityTypeContactInfos().size() > 0)
155 if (entityBo.getEntityTypeContactInfos().get(0).getEmailAddresses() != null && entityBo.getEntityTypeContactInfos().get(0).getEmailAddresses().size() > 0) {
156 for (EntityEmailBo entityEmailBo : entityBo.getEntityTypeContactInfos().get(0).getEmailAddresses()) {
157 if (entityEmailBo.getDefaultValue()) {
158 olePatronEmailBo = new OlePatronEmailBo();
159 olePatronEmailBo.setEmailTypeCode(entityEmailBo.getEmailTypeCode());
160 olePatronEmailBo.setEmailAddress(entityEmailBo.getEmailAddress());
161 return olePatronEmailBo;
162 }
163 }
164 }
165 }
166 return null;
167 }
168
169 private OlePatronAddressBo getDefaultAddressBo(String entityId) {
170 LOG.info("Inside getDefaultAddressBo : Entity Id : " + entityId);
171 EntityBo entityBo = getEntity(entityId);
172 EntityAddressBo entityAddressBo = null;
173 OlePatronAddressBo olePatronAddressBo = null;
174 if (entityBo != null) {
175 if (entityBo.getEntityTypeContactInfos() != null && entityBo.getEntityTypeContactInfos().size() > 0)
176 if (entityBo.getEntityTypeContactInfos().get(0).getDefaultAddress() != null) {
177 entityAddressBo = entityBo.getEntityTypeContactInfos().get(0).getDefaultAddress();
178 olePatronAddressBo = new OlePatronAddressBo();
179 olePatronAddressBo.setAddressTypeCode(entityAddressBo.getAddressTypeCode());
180 olePatronAddressBo.setCity(entityAddressBo.getCity());
181 olePatronAddressBo.setCountryCode(entityAddressBo.getCountryCode());
182 olePatronAddressBo.setLine1(entityAddressBo.getLine1());
183 olePatronAddressBo.setLine2(entityAddressBo.getLine2());
184 olePatronAddressBo.setLine3(entityAddressBo.getLine3());
185 olePatronAddressBo.setPostalCode(entityAddressBo.getPostalCode());
186 olePatronAddressBo.setStateProvinceCode(entityAddressBo.getStateProvinceCode());
187 return olePatronAddressBo;
188 }
189 }
190 return null;
191 }
192
193 private void processUserPriv() {
194 List<OLEUserPrivilege> userPrivilegeList = getPatronPrivileges();
195 if (CollectionUtils.isNotEmpty(userPrivilegeList)) {
196 getOleLookupUser().setOleUserPrivileges(userPrivilegeList);
197 }
198 }
199
200 private void processNameInformation() {
201 OlePatronNameBo olePatronNameBo = getEntityNameBo(getOlePatronDocument().getOlePatronId());
202 if (olePatronNameBo != null) {
203 getOleLookupUser().setPatronName(olePatronNameBo);
204 }
205 }
206
207 private OlePatronNameBo getEntityNameBo(String entityId) {
208 LOG.info("Inside getEntityNameBo : Entity Id : " + entityId);
209 EntityBo entityBo = getEntity(entityId);
210 EntityNameBo entityNameBo = null;
211 OlePatronNameBo olePatronNameBo = null;
212 if (entityBo != null) {
213 if (entityBo.getNames() != null && entityBo.getNames().size() > 0) {
214 entityNameBo = entityBo.getNames().get(0);
215 olePatronNameBo = new OlePatronNameBo();
216 olePatronNameBo.setFirstName(entityNameBo.getFirstName());
217 olePatronNameBo.setMiddleName(entityNameBo.getMiddleName());
218 olePatronNameBo.setLastName(entityNameBo.getLastName());
219 return olePatronNameBo;
220 }
221 }
222 return null;
223 }
224
225 private void processLoanedItems() {
226 OLECheckedOutItems oleCheckedOutItems = getCheckedOutItems();
227 getOleLookupUser().setOleCheckedOutItems(oleCheckedOutItems);
228 }
229
230 private void processRequestedItems() {
231 List<OleDeliverRequestBo> oleDeliverRequestBoList = getOlePatronDocument().getOleDeliverRequestBos();
232 OLEHolds oleHolds = getHoldsList(oleDeliverRequestBoList);
233 getOleLookupUser().setOleHolds(oleHolds);
234 }
235
236 private void processFines() {
237 OLEItemFines oleItemFines = getFines(getOlePatronDocument().getOlePatronId());
238 getOleLookupUser().setOleItemFines(oleItemFines);
239 }
240
241 private OlePatronPhoneBo getDefaultPhoneBo(String entityId) {
242 LOG.info("Inside getDefaultPhoneBo : Entity Id : " + entityId);
243 EntityBo entityBo = getEntity(entityId);
244 EntityPhoneBo entityPhoneBo = null;
245 OlePatronPhoneBo olePatronPhoneBo = null;
246 if (entityBo != null) {
247 if (entityBo.getEntityTypeContactInfos().get(0) != null && entityBo.getEntityTypeContactInfos().size() > 0) {
248 if (entityBo.getEntityTypeContactInfos().get(0).getDefaultPhoneNumber() != null) {
249 entityPhoneBo = entityBo.getEntityTypeContactInfos().get(0).getDefaultPhoneNumber();
250 olePatronPhoneBo = new OlePatronPhoneBo();
251 olePatronPhoneBo.setPhoneTypeCode(entityPhoneBo.getPhoneTypeCode());
252 olePatronPhoneBo.setPhoneNumber(entityPhoneBo.getPhoneNumber());
253 return olePatronPhoneBo;
254 }
255 }
256 }
257 return null;
258 }
259
260 private List<OLEUserPrivilege> getPatronPrivileges() {
261 List<OLEUserPrivilege> userPrivilegeList = new ArrayList<>();
262 try {
263 OLEUserPrivilege courtesyNoticePriv = getPrivilege(String.valueOf(getOlePatronDocument().isCourtesyNotice()), OLEConstants.COURTESY_NOTICE, OLEConstants.COURTESY_DESCRIPTION);
264 userPrivilegeList.add(courtesyNoticePriv);
265
266 OLEUserPrivilege deliveryPriv = getPrivilege(String.valueOf(getOlePatronDocument().isDeliveryPrivilege()), OLEConstants.DELIVERY, OLEConstants.DELIVERY_DESCRIPTION);
267 userPrivilegeList.add(deliveryPriv);
268
269 OLEUserPrivilege pagingPriv = getPrivilege(String.valueOf(getOlePatronDocument().isPagingPrivilege()), OLEConstants.PAGING, OLEConstants.PAGING_DESCRIPTION);
270 userPrivilegeList.add(pagingPriv);
271
272 OLEUserPrivilege profilePriv = getPrivilege(getOlePatronDocument().getBorrowerTypeName(), OLEConstants.PROFILE, OLEConstants.PROFILE_DESCRIPTION);
273 userPrivilegeList.add(profilePriv);
274
275 OLEUserPrivilege statusPriv = getStatusPrivilege();
276 if (statusPriv != null) {
277 userPrivilegeList.add(statusPriv);
278 }
279 } catch (Exception e) {
280 LOG.error("Exception while getting user privilages " + e);
281 }
282 return userPrivilegeList;
283 }
284
285 protected OLEUserPrivilege getPrivilege(String userPrivilegeStatus, String userPrivilegeType, String userPrivilegeDescription) {
286 OLEUserPrivilege oleUserPrivilege = new OLEUserPrivilege();
287 oleUserPrivilege.setUserPrivilegeType(userPrivilegeType);
288 oleUserPrivilege.setUserPrivilegeDescription(userPrivilegeDescription);
289 oleUserPrivilege.setUserPrivilegeStatus(userPrivilegeStatus);
290 return oleUserPrivilege;
291 }
292
293 private EntityBo getEntity(String entityId) {
294 LOG.info("Inside getEntity : Entity Id : " + entityId);
295 Map<String, String> entityMap = new HashMap<>();
296 entityMap.put(OLEConstants.ID, entityId);
297 List<EntityBo> entityBoList = (List<EntityBo>) getBusinessObjectService().findMatching(EntityBo.class, entityMap);
298 if (entityBoList.size() > 0)
299 return entityBoList.get(0);
300 return null;
301 }
302
303 private OLECheckedOutItems getCheckedOutItems() {
304 OleStopWatch oleStopWatch = new OleStopWatch();
305 oleStopWatch.start();
306 List<OLECheckedOutItem> oleCheckedOutItemList = new ArrayList<>();
307 List<OleLoanDocument> oleLoanDocumentList = new ArrayList<>();
308 try {
309 oleLoanDocumentList = getOleLoanDocumentsFromSolrBuilder().getPatronLoanedItemBySolr(getOlePatronDocument().getOlePatronId(), null);
310 } catch (Exception e) {
311 LOG.error("Exception while getting loaned items " + e);
312 }
313 if (CollectionUtils.isNotEmpty(oleLoanDocumentList)) {
314 SimpleDateFormat fmt = new SimpleDateFormat(OLEConstants.OleDeliverRequest.DATE_FORMAT);
315 boolean renewInfoNeeded = isRenewalInfoNeeded();
316 for (OleLoanDocument oleLoanDocument : oleLoanDocumentList) {
317 OLECheckedOutItem oleCheckedOutItem = new OLECheckedOutItem();
318 oleCheckedOutItem.setCopyNumber(oleLoanDocument.getItemCopyNumber());
319 oleCheckedOutItem.setVolumeNumber(oleLoanDocument.getEnumeration());
320 oleCheckedOutItem.setAcquiredFine("");
321 oleCheckedOutItem.setDateRecalled("");
322 oleCheckedOutItem.setTitle(oleLoanDocument.getTitle());
323 oleCheckedOutItem.setAuthor(oleLoanDocument.getAuthor());
324 oleCheckedOutItem.setCallNumber(oleLoanDocument.getItemCallNumber());
325 oleCheckedOutItem.setCatalogueId(oleLoanDocument.getBibUuid());
326 if (oleLoanDocument.getLoanDueDate() != null) {
327 oleCheckedOutItem.setDueDate(oleLoanDocument.getLoanDueDate().toString());
328 if ((fmt.format(oleLoanDocument.getLoanDueDate())).compareTo(fmt.format(new Date(System.currentTimeMillis()))) > 0) {
329 oleCheckedOutItem.setOverDue(false);
330 } else {
331 oleCheckedOutItem.setOverDue(true);
332 }
333 } else {
334 oleCheckedOutItem.setDueDate((new Timestamp(new Date(2025, 1, 1).getTime()).toString()));
335 }
336 if (oleLoanDocument.getRenewalLoanDueDate() != null) {
337 oleCheckedOutItem.setDateRenewed(oleLoanDocument.getRenewalLoanDueDate().toString());
338 } else {
339 oleCheckedOutItem.setDateRenewed("");
340 }
341 oleCheckedOutItem.setItemType(oleLoanDocument.getItemType());
342 if (null != oleLoanDocument.getCreateDate()) {
343 oleCheckedOutItem.setLoanDate(new Timestamp(oleLoanDocument.getCreateDate().getTime()).toString());
344 }
345 oleCheckedOutItem.setItemId(oleLoanDocument.getItemId());
346 if (oleLoanDocument.getNoOfOverdueNoticesSentForBorrower() != null) {
347 oleCheckedOutItem.setNumberOfOverdueSent(oleLoanDocument.getNoOfOverdueNoticesSentForBorrower());
348 } else {
349 oleCheckedOutItem.setNumberOfOverdueSent("1");
350 }
351
352 if (renewInfoNeeded) {
353 oleCheckedOutItem.setNumberOfRenewals(oleLoanDocument.getNumberOfRenewals());
354 }
355 oleCheckedOutItemList.add(oleCheckedOutItem);
356 }
357 }
358 if (CollectionUtils.isNotEmpty(oleCheckedOutItemList)) {
359 OLECheckedOutItems oleCheckedOutItems = new OLECheckedOutItems();
360 oleCheckedOutItems.setCheckedOutItems(oleCheckedOutItemList);
361 return oleCheckedOutItems;
362 }
363 oleStopWatch.end();
364 LOG.info("Time taken to get " + oleCheckedOutItemList.size() + " checked out items : " + oleStopWatch.getTotalTime());
365 return null;
366 }
367
368 private OLEHolds getHoldsList(List<OleDeliverRequestBo> oleDeliverRequestBoList) {
369 OleStopWatch oleStopWatch = new OleStopWatch();
370 oleStopWatch.start();
371 List<OLEHold> oleHoldList = new ArrayList<>();
372 try {
373 if (CollectionUtils.isNotEmpty(oleDeliverRequestBoList)) {
374 Map<String, OleCirculationDesk> oleCirculationDeskMap = getOleCirculationService().getAvailableCirculationDesks();
375 for (OleDeliverRequestBo oleDeliverRequestBo : oleDeliverRequestBoList) {
376 OLEHold oleHold = new OLEHold();
377 oleHold.setItemId(oleDeliverRequestBo.getItemId());
378 Map<String, Object> detailMap = new OleDeliverRequestDocumentHelperServiceImpl().retrieveBIbItemHoldingData(oleDeliverRequestBo.getItemUuid());
379 Bib bib = (Bib) detailMap.get(OLEConstants.BIB);
380 Item item = (Item) detailMap.get(OLEConstants.ITEM);
381 OleHoldings oleHoldings = (OleHoldings) detailMap.get(OLEConstants.HOLDING);
382 oleHold.setCatalogueId(bib.getId());
383 oleHold.setRequestId(oleDeliverRequestBo.getRequestId());
384 if (item.getItemStatus() != null) {
385 oleHold.setAvailableStatus(item.getItemStatus().getCodeValue());
386 }
387 String copyNumber = "";
388 if (item.getCopyNumber() != null && !item.getCopyNumber().isEmpty()) {
389 copyNumber = item.getCopyNumber();
390 } else {
391 copyNumber = oleHoldings.getCopyNumber() != null ? oleHoldings.getCopyNumber() : "";
392 }
393 oleHold.setCopyNumber(copyNumber);
394 oleHold.setTitle(bib.getTitle());
395 oleHold.setAuthor(bib.getAuthor());
396 oleHold.setVolumeNumber(item.getEnumeration() != null ? item.getEnumeration() : "");
397 try {
398 oleHold.setCallNumber(getOleLoanDocumentsFromSolrBuilder().getItemCallNumber(item.getCallNumber(), oleHoldings.getCallNumber()));
399 } catch (Exception e) {
400 LOG.error("Exception while getting call number " + e);
401 }
402 if (item.getItemType() != null)
403 oleHold.setItemType(item.getItemType().getCodeValue());
404 if (oleDeliverRequestBo.getRequestTypeId() != null && !oleDeliverRequestBo.getRequestTypeId().isEmpty()) {
405 if (oleDeliverRequestBo.getRequestTypeId().equals("1") || oleDeliverRequestBo.getRequestTypeId().equals("2")) {
406 oleHold.setRecallStatus(OLEConstants.YES);
407 } else {
408 oleHold.setRecallStatus(OLEConstants.NO);
409 }
410 }
411 if (oleDeliverRequestBo.getRequestExpiryDate() != null) {
412 oleHold.setExpiryDate(oleDeliverRequestBo.getRequestExpiryDate().toString());
413 }
414 if (oleDeliverRequestBo.getCreateDate() != null) {
415 oleHold.setCreateDate(oleDeliverRequestBo.getCreateDate().toString());
416 }
417 if (oleDeliverRequestBo.getBorrowerQueuePosition() != null) {
418 oleHold.setPriority(oleDeliverRequestBo.getBorrowerQueuePosition().toString());
419 }
420 if (oleDeliverRequestBo.getPickUpLocationId() != null) {
421 oleHold.setPickupLocation(oleCirculationDeskMap.get(oleDeliverRequestBo.getPickUpLocationId()).getCirculationDeskCode());
422 }
423 if (oleDeliverRequestBo.getRecallDueDate() != null) {
424 oleHold.setDateRecalled(oleDeliverRequestBo.getRecallDueDate().toString());
425 }
426 if (oleDeliverRequestBo.getRecallDueDate() != null) {
427 oleHold.setDateRecalled(oleDeliverRequestBo.getRecallDueDate().toString());
428 }
429 oleHold.setRequestType(oleDeliverRequestBo.getRequestTypeCode());
430 Map<String, String> loanMap = new HashMap<>();
431 loanMap.put(OLEConstants.OleDeliverRequest.ITEM_ID, oleDeliverRequestBo.getItemId());
432 List<OleLoanDocument> oleLoanDocumentList = (List<OleLoanDocument>) KRADServiceLocator.getBusinessObjectService().findMatching(OleLoanDocument.class, loanMap);
433 if (CollectionUtils.isNotEmpty(oleLoanDocumentList)) {
434 OleLoanDocument oleLoanDocument = oleLoanDocumentList.get(0);
435 if (oleLoanDocument.getLoanDueDate() != null) {
436 String[] availableDates = oleLoanDocument.getLoanDueDate().toString().split(" ");
437 if (availableDates != null && availableDates.length > 0) {
438 oleHold.setAvailableDate(availableDates[0]);
439 } else {
440 oleHold.setAvailableDate(oleLoanDocument.getLoanDueDate().toString());
441 }
442 if (oleDeliverRequestBo.getPickUpLocationId() != null) {
443 if (oleCirculationDeskMap.size() > 0 && oleCirculationDeskMap.get(oleDeliverRequestBo.getPickUpLocationId()) != null) {
444 oleHold.setDateAvailableExpires(addDate(new java.sql.Date(oleLoanDocument.getLoanDueDate().getTime()), Integer.parseInt(oleCirculationDeskMap.get(oleDeliverRequestBo.getPickUpLocationId()).getOnHoldDays())).toString());
445 }
446 }
447 } else {
448 oleHold.setAvailableDate(OLEConstants.INDEFINITE);
449 oleHold.setDateAvailableExpires(OLEConstants.INDEFINITE);
450 }
451 }
452 if (oleDeliverRequestBo.getRequestTypeId().equals("2") || oleDeliverRequestBo.getRequestTypeId().equals("4") || oleDeliverRequestBo.getRequestTypeId().equals("6")) {
453 oleHold.setReserve(true);
454 } else {
455 oleHold.setReserve(false);
456 }
457 oleHoldList.add(oleHold);
458 }
459 if (CollectionUtils.isNotEmpty(oleHoldList)) {
460 OLEHolds oleHolds = new OLEHolds();
461 oleHolds.setOleHoldList(oleHoldList);
462 return oleHolds;
463 }
464 }
465 } catch (Exception e) {
466 LOG.error("Exception while processing requested records" + e);
467 }
468 oleStopWatch.end();
469 LOG.info("For " + oleHoldList.size() + " hold items, time taken : " + oleStopWatch.getTotalTime());
470 return null;
471 }
472
473 private java.sql.Date addDate(java.sql.Date in, int daysToAdd) {
474 if (in == null) {
475 return null;
476 }
477 GregorianCalendar cal = new GregorianCalendar();
478 cal.setTime(in);
479 cal.add(Calendar.DAY_OF_MONTH, daysToAdd);
480 return new java.sql.Date(cal.getTime().getTime());
481 }
482
483 private OLEItemFines getFines(String olePatronId) {
484 List<OLEItemFine> oleItemFineList = new ArrayList<>();
485 OLEItemFines oleItemFines = new OLEItemFines();
486 try {
487 Map map = new HashMap();
488 map.put(OLEConstants.PATRON_ID, olePatronId);
489 List<PatronBillPayment> patronBillPaymentList = (List<PatronBillPayment>) getBusinessObjectService().findMatching(PatronBillPayment.class, map);
490 if (CollectionUtils.isNotEmpty(patronBillPaymentList)) {
491 for (PatronBillPayment olePatronBillPayment : patronBillPaymentList) {
492 List<FeeType> feeTypeList = olePatronBillPayment.getFeeType();
493 for (FeeType feeType : feeTypeList) {
494 OLEItemFine oleItemFine = new OLEItemFine();
495 if (feeType.getItemBarcode() != null) {
496 OleItemSearch oleItemSearch = new OLENCIPUtil().getOleItemSearch(feeType.getItemBarcode());
497 oleItemFine.setItemId(feeType.getItemBarcode());
498 oleItemFine.setCatalogueId(oleItemSearch.getBibUUID());
499 oleItemFine.setTitle(oleItemSearch.getTitle());
500 oleItemFine.setAuthor(oleItemSearch.getAuthor());
501 }
502 oleItemFine.setPatronBillId(olePatronBillPayment.getBillNumber());
503 oleItemFine.setAmount((feeType.getFeeAmount() != null ? feeType.getFeeAmount().bigDecimalValue() : OLEConstants.BIGDECIMAL_DEF_VALUE));
504 oleItemFine.setBalance((feeType.getBalFeeAmount() != null ? feeType.getBalFeeAmount().bigDecimalValue() : OLEConstants.BIGDECIMAL_DEF_VALUE));
505 oleItemFine.setBillDate(feeType.getBillDate().toString());
506 int noOfPayment = feeType.getItemLevelBillPaymentList().size();
507 oleItemFine.setNoOfPayments(new Integer(noOfPayment).toString());
508 if (feeType.getOleFeeType() != null) {
509 oleItemFine.setReason(feeType.getOleFeeType().getFeeTypeName());
510 oleItemFine.setFeeType(feeType.getOleFeeType().getFeeTypeCode());
511 } else {
512 oleItemFine.setReason(feeType.getFeeType());
513 oleItemFine.setFeeType(feeType.getFeeType());
514 }
515 oleItemFine.setDateCharged(feeType.getBillDate().toString());
516 oleItemFineList.add(oleItemFine);
517 }
518 }
519 oleItemFines.setOleItemFineList(oleItemFineList);
520 processSuccessResponseForItemFine(oleItemFines);
521 } else {
522 processInfoForItemFine(oleItemFines);
523 }
524 } catch (Exception e) {
525 LOG.error("Exception while proceesing fines" + e);
526 }
527 return oleItemFines;
528 }
529
530 protected abstract String prepareResponse();
531
532 protected abstract String getOperatorId(String operatorId);
533
534 protected abstract void validatePatron();
535
536 protected abstract boolean isRenewalInfoNeeded();
537
538 protected abstract OLEUserPrivilege getStatusPrivilege();
539
540 protected abstract void processErrorResponseForOperator();
541
542 protected abstract void processErrorResponseForPatron();
543
544 protected abstract void processSuccessResponseForLookupUser();
545
546 protected abstract void processSuccessResponseForItemFine(OLEItemFines oleItemFines);
547
548 protected abstract void processInfoForItemFine(OLEItemFines oleItemFines);
549
550 protected abstract boolean nameInformationDesired();
551
552 protected abstract boolean userAddressInformationDesired();
553
554 protected abstract boolean userPrivilegeDesired();
555
556 protected abstract boolean loanedItemsDesired();
557
558 protected abstract boolean requestedItemsDesired();
559
560 protected abstract boolean userFiscalAccountDesired();
561
562 protected abstract void preProcess(Map lookupUserParameters);
563
564 }