1 package org.kuali.ole.service;
2
3 import org.kuali.ole.OLEConstants;
4 import org.kuali.ole.deliver.OleLoanDocumentsFromSolrBuilder;
5 import org.kuali.ole.deliver.processor.LoanProcessor;
6 import org.kuali.ole.deliver.bo.OleLoanDocument;
7 import org.kuali.ole.deliver.bo.OleTemporaryCirculationHistory;
8 import org.kuali.ole.deliver.api.OleDeliverRequestDefinition;
9 import org.kuali.ole.deliver.bo.OleDeliverRequestBo;
10 import org.kuali.ole.ingest.pojo.OlePatron;
11 import org.kuali.ole.deliver.bo.OlePatronLoanDocument;
12 import org.kuali.ole.deliver.bo.OlePatronLoanDocuments;
13 import org.kuali.ole.deliver.bo.OleRenewalLoanDocument;
14 import org.kuali.ole.deliver.api.*;
15 import org.kuali.ole.deliver.bo.PatronBillPayment;
16 import org.kuali.ole.deliver.bo.*;
17 import org.kuali.ole.sys.context.SpringContext;
18 import org.kuali.rice.core.api.criteria.CriteriaLookupService;
19 import org.kuali.rice.core.api.criteria.GenericQueryResults;
20 import org.kuali.rice.core.api.criteria.QueryByCriteria;
21 import org.kuali.rice.core.api.resourceloader.GlobalResourceLoader;
22 import org.kuali.rice.kim.api.identity.IdentityService;
23 import org.kuali.rice.kim.api.identity.address.EntityAddress;
24 import org.kuali.rice.kim.api.identity.email.EntityEmail;
25 import org.kuali.rice.kim.api.identity.entity.Entity;
26 import org.kuali.rice.kim.api.identity.name.EntityName;
27 import org.kuali.rice.kim.api.identity.phone.EntityPhone;
28 import org.kuali.rice.kim.api.identity.type.EntityTypeContactInfo;
29 import org.kuali.rice.kim.api.services.KimApiServiceLocator;
30 import org.kuali.rice.kim.impl.identity.address.EntityAddressBo;
31 import org.kuali.rice.kim.impl.identity.affiliation.EntityAffiliationBo;
32 import org.kuali.rice.kim.impl.identity.email.EntityEmailBo;
33 import org.kuali.rice.kim.impl.identity.employment.EntityEmploymentBo;
34 import org.kuali.rice.kim.impl.identity.entity.EntityBo;
35 import org.kuali.rice.kim.impl.identity.name.EntityNameBo;
36 import org.kuali.rice.kim.impl.identity.phone.EntityPhoneBo;
37 import org.kuali.rice.kim.impl.identity.type.EntityTypeContactInfoBo;
38 import org.kuali.rice.krad.service.BusinessObjectService;
39 import org.kuali.rice.krad.service.KRADServiceLocator;
40 import org.kuali.rice.krad.util.ObjectUtils;
41
42 import java.io.Serializable;
43 import java.text.SimpleDateFormat;
44 import java.util.*;
45
46
47
48
49 public class OlePatronServiceImpl implements OlePatronService {
50 private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(OlePatronServiceImpl.class);
51 private BusinessObjectService businessObjectService;
52 private IdentityService identityService;
53 private CriteriaLookupService criteriaLookupService;
54 private LoanProcessor loanProcessor;
55 private OlePatronHelperService olePatronHelperService;
56 private OleLoanDocumentsFromSolrBuilder oleLoanDocumentsFromSolrBuilder;
57
58 protected OlePatronHelperService getOlePatronHelperService(){
59 if(olePatronHelperService==null)
60 olePatronHelperService=new OlePatronHelperServiceImpl();
61 return olePatronHelperService;
62 }
63
64
65
66
67
68 protected LoanProcessor getLoanProcessor() {
69 if(loanProcessor==null)
70 loanProcessor=new LoanProcessor();
71 return loanProcessor;
72 }
73
74
75
76
77
78 protected BusinessObjectService getBusinessObjectService() {
79 if (businessObjectService == null) {
80 businessObjectService = KRADServiceLocator.getBusinessObjectService();
81 }
82 return businessObjectService;
83 }
84
85
86
87
88 protected IdentityService getIdentityService() {
89 if (identityService == null) {
90 identityService = (IdentityService) SpringContext.getBean("kimIdentityDelegateService");
91 }
92 return identityService;
93 }
94
95
96
97
98
99 protected CriteriaLookupService getCriteriaLookupService() {
100 if(criteriaLookupService == null) {
101 criteriaLookupService = GlobalResourceLoader.getService(OLEConstants.OlePatron.CRITERIA_LOOKUP_SERVICE);
102 }
103 return criteriaLookupService;
104 }
105
106
107
108
109
110 @Override
111 public OlePatronDefinition getPatron(String patronId) {
112 LOG.debug("Inside the getPatron method");
113 Map<String, Object> criteria = new HashMap<String, Object>(4);
114 criteria.put(OLEConstants.OlePatron.PATRON_ID, patronId);
115 return OlePatronDocument.to(getBusinessObjectService().findByPrimaryKey(OlePatronDocument.class, criteria));
116 }
117
118
119
120
121
122 @Override
123 public OlePatronDefinition createPatron(OlePatronDefinition olePatron) {
124 LOG.debug(" Inside create patron ");
125 OlePatronDefinition savedOlePatronDefinition = new OlePatronDefinition();
126 try{
127 BusinessObjectService businessObjectService = KRADServiceLocator.getBusinessObjectService();
128 OlePatronDocument olePatronDocument = OlePatronDocument.from(olePatron);
129 EntityBo kimEntity = olePatronDocument.getEntity();
130 EntityBo entity2 = getBusinessObjectService().save(kimEntity);
131 List<OleAddressBo> oleAddressBoList = getOlePatronHelperService().retrieveOleAddressBo(entity2,olePatronDocument);
132 olePatronDocument.setOleAddresses(oleAddressBoList);
133 olePatronDocument.setOlePatronId(entity2.getId());
134 olePatronDocument.setEntity(kimEntity);
135 OlePatronDocument savedPatronDocument = businessObjectService.save(olePatronDocument);
136 savedOlePatronDefinition = OlePatronDocument.to(savedPatronDocument);
137 }catch(Exception e){
138 e.printStackTrace();
139 }
140
141 return savedOlePatronDefinition;
142 }
143
144
145
146
147
148
149 @Override
150 public OlePatronDefinition updatePatron(OlePatronDefinition olePatronDefinition) {
151 LOG.debug("Inside the updatePatron method");
152 boolean doc = false;
153 String documentNumber = "";
154 OlePatronDocument updatedPatronDocument = null;
155
156 try {
157 if (olePatronDefinition.getOlePatronId() != null) {
158 OlePatronDocument newPatronBo = OlePatronDocument.from(olePatronDefinition);
159 Map<String, Object> criteria = new HashMap<String, Object>(4);
160 criteria.put(OLEConstants.OlePatron.PATRON_ID,olePatronDefinition.getOlePatronId());
161 OlePatronDocument olePatronBo = getBusinessObjectService().findByPrimaryKey(OlePatronDocument.class, criteria);
162 if (olePatronBo != null) {
163 HashMap<String, String> map = new HashMap<String, String>();
164 map.put(OLEConstants.BORROWER_TYPE_ID, newPatronBo.getBorrowerType());
165 List<OleBorrowerType> borrowerTypes = (List<OleBorrowerType>) getBusinessObjectService().findMatching(OleBorrowerType.class, map);
166 if (borrowerTypes.size() > 0) {
167 newPatronBo.setOleBorrowerType(borrowerTypes.get(0));
168 }
169 EntityBo kimEntity = (EntityBo)ObjectUtils.deepCopy((Serializable)olePatronBo.getEntity());
170 newPatronBo.getEntity().setId(kimEntity.getId());
171 List<EntityTypeContactInfoBo> entityTypeContactInfoBoList = (List<EntityTypeContactInfoBo>)ObjectUtils.deepCopy((Serializable) kimEntity.getEntityTypeContactInfos());
172 newPatronBo.getEntity().getNames().get(0).setId(kimEntity.getNames().get(0).getId());
173 kimEntity.getNames().get(0).setFirstName(newPatronBo.getEntity().getNames().get(0).getFirstName());
174 kimEntity.getNames().get(0).setLastName(newPatronBo.getEntity().getNames().get(0).getLastName());
175 kimEntity.getNames().get(0).setNamePrefix(newPatronBo.getEntity().getNames().get(0).getNamePrefix());
176 kimEntity.getNames().get(0).setNameSuffix(newPatronBo.getEntity().getNames().get(0).getNameSuffix());
177 entityTypeContactInfoBoList.get(0).setAddresses((List<EntityAddressBo>)
178 ObjectUtils.deepCopy((Serializable)newPatronBo.getEntity().getEntityTypeContactInfos().get(0).getAddresses()));
179 entityTypeContactInfoBoList.get(0).setEmailAddresses((List<EntityEmailBo>)
180 ObjectUtils.deepCopy((Serializable) newPatronBo.getEntity().getEntityTypeContactInfos().get(0).getEmailAddresses()));
181 entityTypeContactInfoBoList.get(0).setPhoneNumbers((List<EntityPhoneBo>)
182 ObjectUtils.deepCopy((Serializable) newPatronBo.getEntity().getEntityTypeContactInfos().get(0).getPhoneNumbers()));
183 kimEntity.setEntityTypeContactInfos(entityTypeContactInfoBoList);
184 newPatronBo.setEntity(kimEntity);
185 List<EntityAddressBo> addressBoList = olePatronBo.getEntity().getEntityTypeContactInfos().get(0).getAddresses();
186 if(addressBoList.size() > 0) {
187 for(int i=0;i<addressBoList.size();i++){
188 EntityAddressBo entityAddressBo = addressBoList.get(i);
189 Map<String, Object> addressMap = new HashMap<String, Object>();
190 addressMap.put(OLEConstants.OlePatron.ENTITY_BO_ID,entityAddressBo.getId());
191
192 OleAddressBo oleAddressBo = KRADServiceLocator.getBusinessObjectService().findByPrimaryKey(OleAddressBo.class,addressMap);
193 if(entityAddressBo != null) {
194 KRADServiceLocator.getBusinessObjectService().delete(oleAddressBo);
195
196 }
197 }
198 }
199
200 List<EntityPhoneBo> phoneBoList = olePatronBo.getEntity().getEntityTypeContactInfos().get(0).getPhoneNumbers();
201 if(phoneBoList.size() > 0) {
202 KRADServiceLocator.getBusinessObjectService().delete(phoneBoList);
203 }
204 List<EntityEmailBo> emailBoList = olePatronBo.getEntity().getEntityTypeContactInfos().get(0).getEmailAddresses();
205 if(emailBoList.size() > 0) {
206 KRADServiceLocator.getBusinessObjectService().delete(emailBoList);
207 }
208 List<OlePatronNotes> patronNotesList = olePatronBo.getNotes();
209 if(patronNotesList.size() > 0) {
210 KRADServiceLocator.getBusinessObjectService().delete(patronNotesList);
211 }
212 List<OlePatronLostBarcode> lostBarcodeList = olePatronBo.getLostBarcodes();
213 if(lostBarcodeList.size() > 0) {
214 KRADServiceLocator.getBusinessObjectService().delete(lostBarcodeList);
215 }
216 List<EntityEmploymentBo> employmentBoList = olePatronBo.getEntity().getEmploymentInformation();
217 if(employmentBoList.size() > 0) {
218 KRADServiceLocator.getBusinessObjectService().delete(employmentBoList);
219 }
220 List<EntityAffiliationBo> affiliationBoList = olePatronBo.getEntity().getAffiliations();
221 if(affiliationBoList.size() > 0) {
222 KRADServiceLocator.getBusinessObjectService().delete(affiliationBoList);
223 }
224 List<OleProxyPatronDocument> proxyPatronDocuments = olePatronBo.getOleProxyPatronDocuments();
225 if(proxyPatronDocuments.size() > 0) {
226 KRADServiceLocator.getBusinessObjectService().delete(proxyPatronDocuments);
227 }
228 List<OlePatronLocalIdentificationBo> patronLocalIdentificationBos = olePatronBo.getOlePatronLocalIds();
229 if(patronLocalIdentificationBos.size() > 0) {
230 KRADServiceLocator.getBusinessObjectService().delete(patronLocalIdentificationBos);
231 }
232
233
234 newPatronBo.setEntity(kimEntity);
235 List<OleAddressBo> oleAddressBos = new ArrayList<OleAddressBo>();
236 List<OleEntityAddressBo> oleEntityAddressBos = newPatronBo.getOleEntityAddressBo();
237 newPatronBo.setEntity(kimEntity);
238 List<EntityAddressBo> entityAddresses = kimEntity.getEntityTypeContactInfos().get(0).getAddresses();
239 for(int i=0;i<entityAddresses.size();i++){
240 if (i < oleEntityAddressBos.size()) {
241 oleEntityAddressBos.get(i).setEntityAddressBo(entityAddresses.get(i));
242 }
243 }
244 if(oleEntityAddressBos.size() > 0) {
245 for(int i=0;i<oleEntityAddressBos.size();i++){
246 OleAddressBo addressBo = oleEntityAddressBos.get(i).getOleAddressBo();
247 EntityAddressBo entityAddressBo = oleEntityAddressBos.get(i).getEntityAddressBo();
248 Map<String, Object> addMap = new HashMap<String, Object>();
249 addMap.put(OLEConstants.OlePatron.ENTITY_BO_ID,entityAddressBo.getId());
250 OleAddressBo oleAddressBo = KRADServiceLocator.getBusinessObjectService().findByPrimaryKey(OleAddressBo.class,addMap);
251 if(oleAddressBo==null){
252 oleAddressBo = new OleAddressBo();
253 }
254 oleAddressBo.setId(entityAddressBo.getId());
255 oleAddressBo.setOlePatronId(kimEntity.getId());
256 oleAddressBo.setOleAddressId(KRADServiceLocator.getSequenceAccessorService().getNextAvailableSequenceNumber("OLE_DLVR_ADD_S").toString());
257 oleAddressBo.setAddressValidFrom(addressBo.getAddressValidFrom());
258 oleAddressBo.setAddressValidTo(addressBo.getAddressValidTo());
259 oleAddressBo.setAddressVerified(addressBo.isAddressVerified());
260 oleAddressBo.setAddressSource(addressBo.getAddressSource());
261 oleAddressBos.add(oleAddressBo);
262
263 }
264 newPatronBo.setOleAddresses(oleAddressBos);
265 }
266 updatedPatronDocument = getBusinessObjectService().save(newPatronBo);
267 }
268 }
269 } catch (Exception ex) {
270 LOG.error(ex.getMessage());
271 }
272 LOG.debug("Leaving the updatePatron method");
273 return OlePatronDocument.to(updatedPatronDocument);
274 }
275
276
277
278
279
280
281 private void addName(EntityNameBo name, EntityBo entity) {
282 LOG.debug("Inside the addName method");
283 List<EntityNameBo> entityName = entity.getNames();
284 if (name != null) {
285
286 entityName.add(name);
287 entity.setNames(entityName);
288 }
289 }
290
291
292
293
294
295
296 @Override
297 public void addNameToEntity(EntityName name, Entity entity) {
298 LOG.debug("Inside the addNameToEntity method");
299 EntityBo entityBo = EntityBo.from(entity);
300 EntityNameBo nameBo = EntityNameBo.from(name);
301 addName(nameBo, entityBo);
302 }
303
304
305
306
307
308 @Override
309 public void addEmailToEntity(List<EntityEmail> emails, EntityTypeContactInfo entityTypeContactInfo) {
310 LOG.debug("Inside the addEmailToEntity method");
311 List<EntityEmailBo> emailBos = new ArrayList<EntityEmailBo>();
312 for (EntityEmail email : emails) {
313 emailBos.add(EntityEmailBo.from(email));
314 }
315 addEmail(emailBos, EntityTypeContactInfoBo.from(entityTypeContactInfo));
316 }
317
318
319
320
321
322
323 private void addEmail(List<EntityEmailBo> emails, EntityTypeContactInfoBo entityTypeContactInfoBo) {
324 LOG.debug("Inside the addEmail method");
325 if (emails != null) {
326 entityTypeContactInfoBo.setEmailAddresses(emails);
327 }
328 }
329
330
331
332
333
334 private void addAddress(List<EntityAddressBo> entityAddress, EntityTypeContactInfoBo entityTypeContactInfoBo) {
335 LOG.debug("Inside the addAddress method");
336 if (entityAddress != null) {
337 entityTypeContactInfoBo.setAddresses(entityAddress);
338 }
339 }
340
341
342
343
344
345 @Override
346 public void addAddressToEntity(List<OleEntityAddressDefinition> oleEntityAddress, EntityTypeContactInfo entityTypeContactInfo) {
347 List<EntityAddressBo> addrBos = new ArrayList<EntityAddressBo>();
348 List<OleEntityAddressBo> oleAddrBos = new ArrayList<OleEntityAddressBo>();
349 for (OleEntityAddressDefinition oleAddr : oleEntityAddress) {
350 EntityAddressBo address = EntityAddressBo.from(oleAddr.getEntityAddressBo());
351 OleAddressBo oleAddress = OleAddressBo.from(oleAddr.getOleAddressBo());
352
353 oleAddrBos.add(OleEntityAddressBo.from(oleAddr));
354 addrBos.add(address);
355 }
356 addAddress(addrBos, EntityTypeContactInfoBo.from(entityTypeContactInfo));
357 }
358
359
360
361
362
363 public void addPhone(List<EntityPhoneBo> entityPhone, EntityTypeContactInfoBo entityTypeContactInfoBo) {
364 LOG.debug("Inside the addPhoneToEntity method");
365 if (entityPhone != null) {
366 entityTypeContactInfoBo.setPhoneNumbers(entityPhone);
367 }
368 }
369
370
371
372
373
374 @Override
375 public void addPhoneToEntity(List<EntityPhone> entityPhone, EntityTypeContactInfo entityTypeContactInfo) {
376 LOG.debug("Inside the addPhoneToEntity method");
377 List<EntityPhoneBo> phoneBos = new ArrayList<EntityPhoneBo>();
378 for (EntityPhone phone : entityPhone) {
379 phoneBos.add(EntityPhoneBo.from(phone));
380 }
381 addPhone(phoneBos, EntityTypeContactInfoBo.from(entityTypeContactInfo));
382 }
383
384
385
386
387
388
389 private EntityBo getEntityBo(String entityId) {
390 LOG.debug("Inside the getEntityBo method");
391 EntityBo entityImpl = getBusinessObjectService().findBySinglePrimaryKey(EntityBo.class, entityId);
392 if (entityImpl != null && entityImpl.getEntityTypeContactInfos() != null) {
393 for (EntityTypeContactInfoBo et : entityImpl.getEntityTypeContactInfos()) {
394 et.refresh();
395 }
396 }
397 return entityImpl;
398 }
399
400
401
402
403
404
405 @Override
406 public OlePatronDefinition inactivatePatron(String patronId) {
407 LOG.debug("Inside the inactivatePatron method");
408 OlePatronDocument patronDocument = OlePatronDocument.from(getPatron(patronId));
409 patronDocument.setActiveIndicator(false);
410 return (OlePatronDocument.to(patronDocument));
411 }
412
413
414
415
416
417
418 @Override
419 public EntityName updateName(EntityName name) {
420 LOG.debug("Inside the updateName method");
421 EntityNameBo entityName = EntityNameBo.from(getIdentityService().updateName(name));
422 return EntityNameBo.to(entityName);
423 }
424
425
426
427
428
429 @Override
430 public boolean inactivateName(String nameId) {
431 LOG.debug("Inside the inactivateName method");
432 EntityNameBo entityName = EntityNameBo.from(getIdentityService().inactivateName(nameId));
433 if (entityName != null) {
434 return true;
435 }
436 return false;
437 }
438
439
440
441
442
443
444 @Override
445 public boolean updateEmail(EntityEmail entityEmail) {
446 LOG.debug("Inside the updateEmail method");
447 EntityEmailBo email = EntityEmailBo.from(getIdentityService().updateEmail(entityEmail));
448 if (email != null) {
449 return true;
450 }
451 return false;
452 }
453
454
455
456
457
458 @Override
459 public boolean inactivateEmail(String emailId) {
460 LOG.debug("Inside the inactivateEmail method");
461 EntityEmailBo entityEmail = EntityEmailBo.from(getIdentityService().inactivateEmail(emailId));
462 if (entityEmail != null) {
463 return true;
464 }
465 return false;
466 }
467
468
469
470
471
472 @Override
473 public boolean updateAddress(EntityAddress entityAddress) {
474 LOG.debug("Inside the updateAddress method");
475 EntityAddressBo address = EntityAddressBo.from(getIdentityService().updateAddress(entityAddress));
476 if (address != null) {
477 return true;
478 }
479 return false;
480 }
481
482
483
484
485
486 @Override
487 public boolean inactivateAddress(String addressId) {
488 LOG.debug("Inside the inactivateAddress method");
489 EntityAddressBo entityAddress = EntityAddressBo.from(getIdentityService().inactivateAddress(addressId));
490 if (entityAddress != null) {
491 return true;
492 }
493 return false;
494 }
495
496
497
498
499
500
501 @Override
502 public boolean updatePhone(EntityPhone entityPhone) {
503 LOG.debug("Inside the updatePhone method");
504 EntityPhoneBo phone = EntityPhoneBo.from(getIdentityService().updatePhone(entityPhone));
505 if (phone != null) {
506 return true;
507 }
508 return false;
509 }
510
511
512
513
514
515
516 @Override
517 public boolean inactivatePhone(String phoneId) {
518 LOG.debug("Inside the inactivatePhone method");
519 EntityPhoneBo entityPhone = EntityPhoneBo.from(getIdentityService().inactivatePhone(phoneId));
520 if (entityPhone != null) {
521 return true;
522 }
523 return false;
524 }
525
526
527
528
529
530 @Override
531 public boolean addNoteToPatron(OlePatronNotesDefinition patronNote) {
532 LOG.debug("Inside the addNoteToPatron method");
533 OlePatronNotes patronNoteBo = OlePatronNotes.from(patronNote);
534 if (patronNoteBo.getOlePatronId() != null && patronNoteBo.getOlePatronNoteType() != null) {
535 getBusinessObjectService().save(patronNoteBo);
536 return true;
537 }
538 return false;
539 }
540
541
542
543
544
545 @Override
546 public boolean updateNote(OlePatronNotesDefinition patronNote) {
547 LOG.debug("Inside the updateNote method");
548 OlePatronNotes patronNoteBo = OlePatronNotes.from(patronNote);
549 if (patronNoteBo.getOlePatronId() != null && patronNoteBo.getPatronNoteId() != null) {
550 Map<String, Object> criteria = new HashMap<String, Object>();
551 criteria.put(OLEConstants.OlePatron.PATRON_NOTE_ID, patronNote.getPatronNoteId());
552 if (getBusinessObjectService().findByPrimaryKey(OlePatronNotes.class, criteria) != null) {
553 getBusinessObjectService().save(patronNoteBo);
554 return true;
555 }
556 }
557 return false;
558 }
559
560
561
562
563
564
565 @Override
566 public boolean inactivateNote(String patronNoteId) {
567 LOG.debug("Inside the inactivateNote method");
568 if (patronNoteId != null) {
569 Map<String, Object> criteria = new HashMap<String, Object>();
570 criteria.put(OLEConstants.OlePatron.PATRON_NOTE_ID, patronNoteId);
571 OlePatronNotes patronNotes = getBusinessObjectService().findByPrimaryKey(OlePatronNotes.class, criteria);
572 patronNotes.setActive(false);
573 getBusinessObjectService().save(patronNotes);
574 return true;
575 }
576 return false;
577 }
578
579
580
581
582
583 @Override
584 public OlePatronQueryResults getPatrons() {
585 LOG.debug("Inside the findPatron method");
586 GenericQueryResults<OlePatronDocument> results = getCriteriaLookupService().lookup(OlePatronDocument.class, QueryByCriteria.Builder.create().build());
587 OlePatronQueryResults.Builder builder = OlePatronQueryResults.Builder.create();
588 builder.setMoreResultsAvailable(results.isMoreResultsAvailable());
589 builder.setTotalRowCount(results.getTotalRowCount());
590
591 final List<OlePatronDefinition.Builder> ims = new ArrayList<OlePatronDefinition.Builder>();
592 for (OlePatronDocument bo : results.getResults()) {
593 ims.add(OlePatronDefinition.Builder.create(bo));
594 }
595
596 builder.setResults(ims);
597 return builder.build();
598
599 }
600
601
602
603
604
605 @Override
606 public OlePatronQueryResults findPatron(QueryByCriteria queryCriteria) {
607 LOG.debug("Inside the findPatron method");
608 GenericQueryResults<OlePatronDocument> results = getCriteriaLookupService().lookup(OlePatronDocument.class, QueryByCriteria.Builder.create().build());
609 OlePatronQueryResults.Builder builder = OlePatronQueryResults.Builder.create();
610 builder.setMoreResultsAvailable(results.isMoreResultsAvailable());
611 builder.setTotalRowCount(results.getTotalRowCount());
612
613 final List<OlePatronDefinition.Builder> ims = new ArrayList<OlePatronDefinition.Builder>();
614 for (OlePatronDocument bo : results.getResults()) {
615 ims.add(OlePatronDefinition.Builder.create(bo));
616 }
617
618 builder.setResults(ims);
619 return builder.build();
620 }
621
622
623
624
625
626
627 @Override
628 public OlePatronLoanDocuments getPatronLoanedItems(String patronBarcode) {
629
630
631 List<OleLoanDocument> oleLoanDocumentList=new ArrayList<OleLoanDocument>();
632 List<OlePatronLoanDocument> olePatronLoanItemList=new ArrayList<OlePatronLoanDocument>();
633 try{
634 oleLoanDocumentList= getOleLoanDocumentsFromSolrBuilder().getPatronLoanedItemBySolr(patronBarcode, null);
635 OlePatronLoanDocuments olePatronLoanDocuments=convertPatronLoanDocuments(oleLoanDocumentList);
636 return olePatronLoanDocuments;
637 }
638 catch(Exception e){
639 LOG.error("Exception while getting patron loaned items-----> "+e);
640 }
641
642 return null;
643 }
644
645 private OleLoanDocumentsFromSolrBuilder getOleLoanDocumentsFromSolrBuilder() {
646 if (null == oleLoanDocumentsFromSolrBuilder) {
647 oleLoanDocumentsFromSolrBuilder = new OleLoanDocumentsFromSolrBuilder();
648 }
649 return oleLoanDocumentsFromSolrBuilder;
650 }
651
652 public void setOleLoanDocumentsFromSolrBuilder(OleLoanDocumentsFromSolrBuilder oleLoanDocumentsFromSolrBuilder) {
653 this.oleLoanDocumentsFromSolrBuilder = oleLoanDocumentsFromSolrBuilder;
654 }
655
656 public List<OleDeliverRequestDefinition> getPatronRequestItems(String patronId) {
657
658
659 List<OleDeliverRequestBo> oleDeliverRequestBos =new ArrayList<OleDeliverRequestBo>();
660 List<OleDeliverRequestDefinition> oleDeliverRequestDefinitions =new ArrayList<OleDeliverRequestDefinition>();
661 try{
662 oleDeliverRequestBos = getLoanProcessor().getPatronRequestRecords(patronId);
663 OleDeliverRequestDefinition oleDeliverRequestDefinition = new OleDeliverRequestDefinition();
664 for(OleDeliverRequestBo oleDeliverRequestBo : oleDeliverRequestBos) {
665 oleDeliverRequestDefinition = OleDeliverRequestBo.to(oleDeliverRequestBo);
666 oleDeliverRequestDefinitions.add(oleDeliverRequestDefinition);
667 }
668 return oleDeliverRequestDefinitions;
669 }
670 catch(Exception e){
671 LOG.error("Exception while getting patron requested items-----> "+e);
672 }
673
674 return null;
675 }
676
677
678
679 public OlePatronLoanDocuments performRenewalItems(OlePatronLoanDocuments olePatronLoanDocuments){
680
681 List<OleLoanDocument> oleLoanDocumentList=new ArrayList<OleLoanDocument>(0);
682 List<OleRenewalLoanDocument> oleRenewalLoanDocumentList=convertRenewalLoanDocuments(olePatronLoanDocuments);
683 try{
684
685 for(int i=0;i<oleRenewalLoanDocumentList.size();i++){
686 OleRenewalLoanDocument oleRenewalLoanDocument=oleRenewalLoanDocumentList.get(i);
687 OleLoanDocument oleLoanDocument=getLoanProcessor().getPatronRenewalItem(oleRenewalLoanDocument.getItemBarcode());
688 if(!getLoanProcessor().checkPendingRequestforItem(oleLoanDocument.getItemId())){
689 oleLoanDocument.setRenewalItemFlag(true);
690 oleLoanDocument = getLoanProcessor().addLoan(oleLoanDocument.getPatronBarcode(),oleLoanDocument.getItemId(),oleLoanDocument,null);
691 }
692 else
693 oleLoanDocument.setErrorMessage(OLEConstants.PENDING_RQST_RENEWAL_ITM_INFO+"( Title: "+oleLoanDocument.getTitle()+" , Author: "+oleLoanDocument.getAuthor()+" , Item : "+oleLoanDocument.getItemId()+" )");
694 oleLoanDocumentList.add(oleLoanDocument);
695 }
696 olePatronLoanDocuments=convertPatronLoanDocuments(oleLoanDocumentList);
697 return olePatronLoanDocuments;
698 }
699 catch(Exception e){
700 LOG.error("Exception while performing renewal---> "+e);
701 }
702 return null;
703 }
704
705
706 private OlePatronLoanDocuments convertPatronLoanDocuments(List<OleLoanDocument> oleLoanDocumentList) {
707
708
709 List<OlePatronLoanDocument> olePatronLoanItemList=new ArrayList<OlePatronLoanDocument>();
710
711 for(int i=0;i<oleLoanDocumentList.size();i++) {
712 OleLoanDocument oleLoanDocument=oleLoanDocumentList.get(i);
713 OleRenewalLoanDocument oleRenewalLoanDocument=new OleRenewalLoanDocument();
714 oleRenewalLoanDocument.setAuthor(oleLoanDocument.getAuthor());
715 oleRenewalLoanDocument.setTitle(oleLoanDocument.getTitle());
716 oleRenewalLoanDocument.setCallNumber(oleLoanDocument.getItemCallNumber());
717 oleRenewalLoanDocument.setDueDate(oleLoanDocument.getLoanDueDate());
718 oleRenewalLoanDocument.setItemBarcode(oleLoanDocument.getItemId());
719 oleRenewalLoanDocument.setLocation(oleLoanDocument.getLocation());
720
721 if(oleLoanDocument.getErrorMessage() == null){
722 oleRenewalLoanDocument.setMessageInfo(OLEConstants.RENEWAL_ITM_SUCCESS_INFO);
723 }else
724 {
725 String errMsg="";
726 if(oleLoanDocument.getErrorMessage().contains("(OR)"))
727 errMsg=oleLoanDocument.getErrorMessage().substring(0,oleLoanDocument.getErrorMessage().lastIndexOf("(OR)"));
728 else
729 errMsg= oleLoanDocument.getErrorMessage();
730 oleRenewalLoanDocument.setMessageInfo(errMsg);
731 }
732 OlePatronLoanDocument olePatronLoanDocument=OlePatronLoanDocuments.to(oleRenewalLoanDocument);
733 olePatronLoanItemList.add(olePatronLoanDocument);
734 }
735 OlePatronLoanDocuments olePatronLoanDocuments=getOlePatronLoanDocuments(olePatronLoanItemList);
736 return olePatronLoanDocuments;
737
738 }
739
740
741 private List<OleRenewalLoanDocument> convertRenewalLoanDocuments(OlePatronLoanDocuments olePatronLoanDocuments){
742
743 List<OleRenewalLoanDocument> oleRenewalLoanDocumentList=new ArrayList<OleRenewalLoanDocument>();
744 for(int i=0;i<olePatronLoanDocuments.getOlePatronLoanDocuments().size();i++){
745 OlePatronLoanDocument olePatronLoanDocument=(OlePatronLoanDocument)olePatronLoanDocuments.getOlePatronLoanDocuments().get(i);
746 OleRenewalLoanDocument oleRenewalLoanDocument=new OleRenewalLoanDocument();
747 oleRenewalLoanDocument.setItemBarcode(olePatronLoanDocument.getItemBarcode());
748 oleRenewalLoanDocument.setCallNumber(olePatronLoanDocument.getCallNumber());
749 oleRenewalLoanDocument.setDueDate(olePatronLoanDocument.getDueDate());
750 oleRenewalLoanDocument.setLocation(olePatronLoanDocument.getLocation());
751 oleRenewalLoanDocument.setTitle(olePatronLoanDocument.getTitle());
752 oleRenewalLoanDocument.setAuthor(olePatronLoanDocument.getAuthor());
753 oleRenewalLoanDocumentList.add(oleRenewalLoanDocument);
754 }
755 return oleRenewalLoanDocumentList;
756 }
757
758 private OlePatronLoanDocuments convertOlePatronLoanDocuments(List<OleRenewalLoanDocument> oleRenewalLoanDocumentList){
759 List<OlePatronLoanDocument> olePatronLoanItemList=new ArrayList<OlePatronLoanDocument>();
760 for(int i=0;i<oleRenewalLoanDocumentList.size();i++){
761 OleRenewalLoanDocument oleRenewalLoanDocument= oleRenewalLoanDocumentList.get(i);
762 OlePatronLoanDocument olePatronLoanDocument=OlePatronLoanDocuments.to(oleRenewalLoanDocument);
763 olePatronLoanItemList.add(olePatronLoanDocument);
764 }
765 OlePatronLoanDocuments olePatronLoanDocuments=getOlePatronLoanDocuments(olePatronLoanItemList);
766 return olePatronLoanDocuments;
767 }
768
769 private OlePatronLoanDocuments getOlePatronLoanDocuments(List<OlePatronLoanDocument> olePatronLoanItemList) {
770 OleRenewalLoanDocument oleRenewalLoanDocument=new OleRenewalLoanDocument();
771 if(olePatronLoanItemList.size()!=0) {
772 oleRenewalLoanDocument.setOlePatronLoanDocuments(olePatronLoanItemList);
773 OlePatronLoanDocuments olePatronLoanDocuments=OlePatronLoanDocuments.Builder.create(oleRenewalLoanDocument).build();
774 return olePatronLoanDocuments;
775 }
776
777 return null;
778
779 }
780
781
782
783 public void deletePatronBatchProgram() {
784 LOG.debug("Inside deletePatronDocument (Batch Delete Program)");
785 OlePatronDocument olePatronDocument = new OlePatronDocument();
786 SimpleDateFormat fmt = new SimpleDateFormat(OLEConstants.OlePatron.PATRON_MAINTENANCE_DATE_FORMAT);
787 OlePatron olePatron;
788 List<OlePatronDocument> patronImpls = (List<OlePatronDocument>) getBusinessObjectService().findAll(OlePatronDocument.class);
789 for (Iterator<OlePatronDocument> patronIterator = patronImpls.iterator(); patronIterator.hasNext(); ) {
790 olePatronDocument = patronIterator.next();
791 if ((olePatronDocument.getExpirationDate() != null && fmt.format(new Date(System.currentTimeMillis())).compareTo(fmt.format(olePatronDocument.getExpirationDate())) > 0) || (olePatronDocument.getExpirationDate() == null)) {
792 List<OleLoanDocument> oleLoanDocuments = olePatronDocument.getOleLoanDocuments();
793 List<OleTemporaryCirculationHistory> oleTemporaryCirculationHistories = olePatronDocument.getOleTemporaryCirculationHistoryRecords();
794 List<OleDeliverRequestBo> oleDeliverRequestBos = olePatronDocument.getOleDeliverRequestBos();
795 Map billMap = new HashMap();
796 billMap.put(OLEConstants.OlePatron.PAY_BILL_PATRON_ID, olePatronDocument.getOlePatronId());
797 List<PatronBillPayment> patronBillPayments = (List<PatronBillPayment>) KRADServiceLocator.getBusinessObjectService().findMatching(PatronBillPayment.class, billMap);
798 if ((oleLoanDocuments.size() == 0 && oleTemporaryCirculationHistories.size() == 0 && oleDeliverRequestBos.size() == 0 && patronBillPayments.size() == 0)) {
799 olePatronDocument.setActiveIndicator(false);
800 KRADServiceLocator.getBusinessObjectService().save(olePatronDocument);
801 }
802 }
803 }
804 }
805
806 }