View Javadoc
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   * OlePatronServiceImpl performs patron operation(create,update).
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       * This method initiate LoanProcessor.
66       * @return LoanProcessor
67       */
68      protected LoanProcessor getLoanProcessor() {
69          if(loanProcessor==null)
70              loanProcessor=new LoanProcessor();
71          return loanProcessor;
72      }
73  
74      /**
75       * Gets the instance of BusinessObjectService
76       * @return businessObjectService(BusinessObjectService)
77       */
78      protected BusinessObjectService getBusinessObjectService() {
79          if (businessObjectService == null) {
80              businessObjectService = KRADServiceLocator.getBusinessObjectService();
81          }
82          return businessObjectService;
83      }
84      /**
85       * Gets the instance of IdentityService
86       * @return identityService(IdentityService)
87       */
88      protected IdentityService getIdentityService() {
89          if (identityService == null) {
90              identityService = (IdentityService) SpringContext.getBean("kimIdentityDelegateService");
91          }
92          return identityService;
93      }
94  
95      /**
96       * Gets the instance of CriteriaLookupService
97       * @return criteriaLookupService(CriteriaLookupService)
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      * Based on patron Id it will return the patron object
107      * @param patronId
108      * @return OlePatronDefinition
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      * This method will create and persist the patron document
119      * @param olePatron
120      * @return savedOlePatronDefinition(OlePatronDefinition)
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      * This method will update the patron object which is already persist
146      * @param olePatronDefinition
147      * @return OlePatronDefinition
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                             //List<OleAddressBo> oleAddressBo = (List<OleAddressBo>) KRADServiceLocator.getBusinessObjectService().findMatching(OleAddressBo.class,criteria);
192                             OleAddressBo oleAddressBo =  KRADServiceLocator.getBusinessObjectService().findByPrimaryKey(OleAddressBo.class,addressMap);
193                             if(entityAddressBo != null) {
194                                 KRADServiceLocator.getBusinessObjectService().delete(oleAddressBo);
195                                 //KRADServiceLocator.getBusinessObjectService().delete(entityAddressBo);
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                     //EntityBo entity = getBusinessObjectService().save(kimEntity);
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      * If the EntityNameBo is not null,it will add to the EntityBo object
278      * @param name
279      * @param entity
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             //name.setEntityId(entity.getId());
286             entityName.add(name);
287             entity.setNames(entityName);
288         }
289     }
290 
291     /**
292      * Add the EntityName object to the Entity object
293      * @param name
294      * @param entity
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      * Add the EntityEmail object to the EntityTypeContactInfo object
305      * @param emails
306      * @param entityTypeContactInfo
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      * If the EntityEmailBo is not null,it will add to the EntityTypeContactInfoBo object
320      * @param emails
321      * @param entityTypeContactInfoBo
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      * If the EntityAddressBo is not null,it will add to the EntityTypeContactInfoBo object
331      * @param entityAddress
332      * @param entityTypeContactInfoBo
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      * Add the EntityAddress object to the EntityTypeContactInfo object
342      * @param oleEntityAddress
343      * @param entityTypeContactInfo
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      * If the EntityPhoneBo is not null,it will add to the EntityTypeContactInfoBo object
360      * @param entityPhone
361      * @param entityTypeContactInfoBo
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      * Add the EntityPhone object to the EntityTypeContactInfo object
371      * @param entityPhone
372      * @param entityTypeContactInfo
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      * Returns EntityBo based on entityId
386      * @param entityId
387      * @return entityImpl(EntityBo)
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      * This method will set the active indicator of the patron object as false
402      * @param patronId
403      * @return OlePatronDefinition
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      * This method will update the EntityName object
415      * @param name
416      * @return EntityName
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      * This method will set the active indicator of the EntityNameBo object as false
426      * @param nameId
427      * @return
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      * This method will update the EntityEmail object
441      * @param entityEmail
442      * @return
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      * This method will set the active indicator of the EntityEmailBo object as false
455      * @param emailId
456      * @return
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      * This method will update the EntityAddress object
469      * @param entityAddress
470      * @return boolean
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      * This method will set the active indicator of the EntityAddressBo object as false
483      * @param addressId
484      * @return true,if entityAddress is not equal to null otherwise returns false
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      * This method will update the EntityPhone object
498      * @param entityPhone
499      * @return true,if phone is not equal to null otherwise returns false
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      * This method will set the active indicator of the EntityPhoneBo object as false
513      * @param phoneId
514      * @return true,if entityPhone is not equal to null otherwise returns false
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      * This method will Persist the OlePatronNotes object
527      * @param patronNote
528      * @return boolean
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      * This method will Update the OlePatronNotes object
542      * @param patronNote
543      * @return boolean
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      * Set the active indicator of the OlePatronNotes object as false
562      * @param patronNoteId
563      * @return boolean
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      * This method will return all the patron documents
581      * @return OlePatronQueryResults
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      * This method will return patron objects based on search criteria
602      * @param queryCriteria
603      * @return OlePatronQueryResults
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      * This method will return Patron loan items list  information
624      * @param patronBarcode
625      * @return OleLoanDocument
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 }