001package org.kuali.ole.deliver.maintenance; 002 003import org.apache.ojb.broker.metadata.ClassNotPersistenceCapableException; 004import org.kuali.ole.OLEConstants; 005import org.kuali.ole.deliver.bo.*; 006import org.kuali.ole.deliver.form.OlePatronMaintenanceDocumentForm; 007import org.kuali.ole.deliver.processor.LoanProcessor; 008import org.kuali.ole.deliver.service.OleDeliverRequestDocumentHelperServiceImpl; 009import org.kuali.ole.krad.OleComponentUtils; 010import org.kuali.ole.service.OlePatronService; 011import org.kuali.ole.service.OlePatronServiceImpl; 012import org.kuali.rice.kim.api.KimConstants; 013import org.kuali.rice.kim.impl.identity.address.EntityAddressBo; 014import org.kuali.rice.kim.impl.identity.affiliation.EntityAffiliationBo; 015import org.kuali.rice.kim.impl.identity.employment.EntityEmploymentBo; 016import org.kuali.rice.kim.impl.identity.entity.EntityBo; 017import org.kuali.rice.kim.impl.identity.name.EntityNameBo; 018import org.kuali.rice.kim.impl.identity.name.EntityNameTypeBo; 019import org.kuali.rice.kim.impl.identity.type.EntityTypeContactInfoBo; 020import org.kuali.rice.krad.maintenance.MaintainableImpl; 021import org.kuali.rice.krad.maintenance.MaintenanceDocument; 022import org.kuali.rice.krad.service.KRADServiceLocator; 023import org.kuali.rice.krad.uif.util.ProcessLogger; 024 025import java.util.*; 026 027/** 028 * OlePatronMaintenanceImpl performs save ,edit,copy and create new operation for OlePatron. 029 */ 030public class OlePatronMaintenanceImpl extends MaintainableImpl { 031 private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(OlePatronMaintenanceImpl.class); 032 OlePatronService olePatronService = new OlePatronServiceImpl(); 033 034 035 /** 036 * This method populate the patron object used for edit and copy 037 * 038 * @param document 039 * @param dataObjectKeys 040 * @return olePatron(Object) 041 */ 042 @Override 043 public Object retrieveObjectForEditOrCopy(MaintenanceDocument document, Map<String, String> dataObjectKeys) { 044 LOG.debug("Inside retrieveObjectForEditOrCopy()"); 045 Object dataObject = null; 046 OlePatronDocument olePatron = new OlePatronDocument(); 047 OleEntityAddressBo entityAddressBo = null; 048 OleAddressBo oleAddressBo = new OleAddressBo(); 049 List<OleEntityAddressBo> oleEntityAddressList = new ArrayList<OleEntityAddressBo>(); 050 try { 051 dataObject = getLookupService().findObjectBySearch(getDataObjectClass(), dataObjectKeys); 052 olePatron = (OlePatronDocument) dataObject; 053 EntityBo entity = olePatron.getEntity(); 054 if (entity.getNames().size() > 0) { 055 EntityNameBo name = entity.getNames().get(0); 056 olePatron.setName(name); 057 } 058 if (!entity.getEntityTypeContactInfos().isEmpty()) { 059 List<EntityAddressBo> entityAddressList = entity.getEntityTypeContactInfos().get(0).getAddresses(); 060 for (EntityAddressBo entityAdd : entityAddressList) { 061 entityAddressBo = new OleEntityAddressBo(); 062 Map addMap = new HashMap(); 063 addMap.put(OLEConstants.OlePatron.ENTITY_BO_ID, entityAdd.getId()); 064 oleAddressBo = getBusinessObjectService().findByPrimaryKey(OleAddressBo.class, addMap); 065 entityAddressBo.setOleAddressBo(oleAddressBo); 066 entityAddressBo.setEntityAddressBo(entityAdd); 067 oleEntityAddressList.add(entityAddressBo); 068 } 069 olePatron.setOleEntityAddressBo(oleEntityAddressList); 070 olePatron.setPhones(entity.getEntityTypeContactInfos().get(0).getPhoneNumbers()); 071 olePatron.setEmails(entity.getEntityTypeContactInfos().get(0).getEmailAddresses()); 072 } 073 074 olePatron.setEmployments(entity.getEmploymentInformation()); 075 List<OlePatronAffiliation> patronAffiliations = new ArrayList<OlePatronAffiliation>(); 076 olePatron.setPatronAffiliations(getPatronAffiliationFromEntity(entity.getAffiliations(), entity.getEmploymentInformation())); 077 078 if (olePatron.getOlePatronId() != null) { 079 LoanProcessor loanProcessor = new LoanProcessor(); 080 /* OleDeliverRequestDocumentHelperServiceImpl requestService = new OleDeliverRequestDocumentHelperServiceImpl(); 081 List<OleDeliverRequestBo> oleDeliverRequestBoList = olePatron.getOleDeliverRequestBos(); 082 if (oleDeliverRequestBoList.size() > 0) { 083 for (int i = 0; i < oleDeliverRequestBoList.size(); i++) { 084 OleItemSearch oleItemSearch = requestService.getItemDetailsForPatron(oleDeliverRequestBoList.get(i).getItemUuid()); 085 if (oleItemSearch != null && oleItemSearch.getItemBarCode() != null) { 086 oleDeliverRequestBoList.get(i).setTitle(oleItemSearch.getTitle()); 087 oleDeliverRequestBoList.get(i).setCallNumber(oleItemSearch.getCallNumber()); 088 } 089 } 090 } 091 try { 092 olePatron.setOleLoanDocuments(loanProcessor.getPatronLoanedItemBySolr(olePatron.getOlePatronId())); 093 olePatron.setOleTemporaryCirculationHistoryRecords(loanProcessor.getPatronTemporaryCirculationHistoryRecords(olePatron.getOlePatronId())); 094 olePatron.setOleDeliverRequestBos(loanProcessor.getPatronRequestRecords(olePatron.getOlePatronId())); 095 } catch (Exception e) { 096 LOG.error("Exception", e); 097 }*/ 098 if (olePatron.getOleLoanDocuments().size() > 0) { 099 olePatron.setLoanFlag(true); 100 } 101 if (olePatron.getOleTemporaryCirculationHistoryRecords().size() > 0) { 102 olePatron.setTempCircHistoryFlag(true); 103 } 104 if (olePatron.getOleDeliverRequestBos().size() > 0) { 105 olePatron.setRequestFlag(true); 106 } 107 OlePatronDocument olePatronDocument; 108 OleProxyPatronDocument proxyPatronDocument = null; 109 List<OleProxyPatronDocument> proxyPatronDocuments = new ArrayList<OleProxyPatronDocument>(); 110 Map proxyMap = new HashMap(); 111 proxyMap.put(OLEConstants.OlePatron.PROXY_PATRON_ID, olePatron.getOlePatronId()); 112 List<OleProxyPatronDocument> oleProxyPatronDocumentList = (List<OleProxyPatronDocument>) getBusinessObjectService().findMatching(OleProxyPatronDocument.class, proxyMap); 113 if (oleProxyPatronDocumentList.size() > 0) { 114 for (OleProxyPatronDocument oleProxyPatronDocument : oleProxyPatronDocumentList) { 115 proxyMap.remove(OLEConstants.OlePatron.PROXY_PATRON_ID); 116 proxyMap.put(OLEConstants.OlePatron.PATRON_ID, oleProxyPatronDocument.getOlePatronId()); 117 List<OlePatronDocument> olePatronDocumentList = (List<OlePatronDocument>) getBusinessObjectService().findMatching(OlePatronDocument.class, proxyMap); 118 if (olePatronDocumentList.size() > 0) { 119 olePatronDocument = olePatronDocumentList.get(0); 120 proxyPatronDocument = new OleProxyPatronDocument(); 121 if (olePatronDocument.isActiveIndicator()) { 122 proxyPatronDocument.setOlePatronId(olePatronDocument.getOlePatronId()); 123 proxyPatronDocument.setProxyForPatronFirstName(olePatronDocument.getEntity().getNames().get(0).getFirstName()); 124 proxyPatronDocument.setProxyForPatronLastName(olePatronDocument.getEntity().getNames().get(0).getLastName()); 125 proxyPatronDocument.setProxyPatronActivationDate(oleProxyPatronDocument.getProxyPatronActivationDate()); 126 proxyPatronDocument.setProxyPatronExpirationDate(oleProxyPatronDocument.getProxyPatronExpirationDate()); 127 128 } 129 proxyPatronDocuments.add(proxyPatronDocument); 130 } 131 } 132 olePatron.setOleProxyPatronDocumentList(proxyPatronDocuments); 133 } 134 } 135 } catch (ClassNotPersistenceCapableException ex) { 136 if (!document.getOldMaintainableObject().isExternalBusinessObject()) { 137 LOG.error("Data Object Class: " 138 + getDataObjectClass() 139 + " is not persistable and is not externalizable - configuration error", ex); 140 throw new RuntimeException("Data Object Class: " 141 + getDataObjectClass() 142 + " is not persistable and is not externalizable - configuration error"); 143 } 144 } 145 146 return olePatron; 147 } 148 149 /** 150 * This method will set the default value for the name object and also set the description when a new patron document is created 151 * 152 * @param document 153 * @param requestParameters 154 */ 155 @Override 156 public void processAfterNew(MaintenanceDocument document, 157 Map<String, String[]> requestParameters) { 158 LOG.debug("Inside processAfterNew()"); 159 EntityNameTypeBo nameTypeBo = (EntityNameTypeBo) KRADServiceLocator.getBusinessObjectService().findBySinglePrimaryKey(EntityNameTypeBo.class, OLEConstants.OlePatron.ENTITY_NM_TYP_CD); 160 OlePatronDocument patronDocument = (OlePatronDocument) document.getNewMaintainableObject().getDataObject(); 161 patronDocument.setActiveIndicator(true); 162 patronDocument.getName().setNameCode(OLEConstants.OlePatron.ENTITY_NM_TYP_CD); 163 patronDocument.getName().setActive(true); 164 patronDocument.getName().setDefaultValue(true); 165 patronDocument.getName().setNameType(nameTypeBo); 166 document.getNewMaintainableObject().setDataObject(patronDocument); 167 super.processAfterNew(document, requestParameters); 168 document.getDocumentHeader().setDocumentDescription("New Patron Document"); 169 170 } 171 172 /** 173 * This method will set the description when copy is selected 174 * 175 * @param document 176 * @param requestParameters 177 */ 178 @Override 179 public void processAfterCopy(MaintenanceDocument document, Map<String, String[]> requestParameters) { 180 LOG.debug("Inside processAfterCopy()"); 181 super.processAfterCopy(document, requestParameters); 182 document.getDocumentHeader().setDocumentDescription("Copied Patron Document"); 183 } 184 185 /** 186 * This method will set the description for edit operation 187 * 188 * @param document 189 * @param requestParameters 190 */ 191 @Override 192 public void processAfterEdit(MaintenanceDocument document, Map<String, String[]> requestParameters) { 193 LOG.debug("Inside processAfterEdit()"); 194 super.processAfterEdit(document, requestParameters); 195 document.getDocumentHeader().setDocumentDescription("Edited Patron Document"); 196 } 197 198 private List<OlePatronAffiliation> getPatronAffiliationFromEntity(List<EntityAffiliationBo> affiliations, 199 List<EntityEmploymentBo> employeeDetails) { 200 List<OlePatronAffiliation> patronAffiliations = new ArrayList<OlePatronAffiliation>(); 201 for (EntityAffiliationBo entityAffiliationBo : affiliations) { 202 OlePatronAffiliation patronAffiliation = new OlePatronAffiliation(entityAffiliationBo); 203 List<EntityEmploymentBo> employmentBos = new ArrayList<EntityEmploymentBo>(); 204 for (EntityEmploymentBo entityEmploymentBo : employeeDetails) { 205 if (patronAffiliation.getEntityAffiliationId().equalsIgnoreCase(entityEmploymentBo.getEntityAffiliationId())) { 206 employmentBos.add(entityEmploymentBo); 207 } 208 patronAffiliation.setEmployments(employmentBos); 209 } 210 patronAffiliations.add(patronAffiliation); 211 } 212 return patronAffiliations; 213 } 214 215 public String getTempCircRecords(String olePatronId) { 216 String url = "temporaryCirculationRecord?viewId=OleTemporaryCirculationHistoryRecordView&methodToCall=viewTempCircRecords&patronId=" + olePatronId; 217 return url; 218 } 219 220 public String getLoanedRecords(String olePatronId) { 221 String url = "patronLoanedRecord?viewId=OlePatronLoanedRecordView&methodToCall=viewLoanedRecords&patronId=" + olePatronId; 222 return url; 223 } 224 225 public String getRequestedRecords(String olePatronId) { 226 String url = "patronRequestedRecord?viewId=OlePatronRequestedRecordView&methodToCall=viewRequestedRecords&patronId=" + olePatronId; 227 return url; 228 } 229 230 public String getCountOfPendingRequests(String itemId) { 231 Map itemMap = new HashMap(); 232 itemMap.put(OLEConstants.OleDeliverRequest.ITEM_ID, itemId); 233 List<OleDeliverRequestBo> oleDeliverRequestBoList = (List<OleDeliverRequestBo>) getBusinessObjectService().findMatching(OleDeliverRequestBo.class, itemMap); 234 if (oleDeliverRequestBoList != null && oleDeliverRequestBoList.size() > 0) { 235 236 return "View all requests"; 237 } else 238 return " "; 239 } 240}