View Javadoc
1   package org.kuali.ole.deliver.controller;
2   
3   import java.awt.Graphics2D;
4   import java.awt.image.BufferedImage;
5   import java.io.ByteArrayInputStream;
6   import java.io.ByteArrayOutputStream;
7   import java.sql.Timestamp;
8   import java.text.DateFormat;
9   import java.text.ParseException;
10  import java.text.SimpleDateFormat;
11  import java.util.*;
12  
13  import javax.imageio.ImageIO;
14  import javax.servlet.http.HttpServletRequest;
15  import javax.servlet.http.HttpServletResponse;
16  
17  import org.apache.commons.collections.CollectionUtils;
18  import org.apache.commons.lang.StringUtils;
19  import org.apache.log4j.Logger;
20  import org.kuali.ole.DocumentUniqueIDPrefix;
21  import org.kuali.ole.OLEConstants;
22  import org.kuali.ole.deliver.OleLoanDocumentsFromSolrBuilder;
23  import org.kuali.ole.deliver.bo.*;
24  import org.kuali.ole.deliver.form.OlePatronMaintenanceDocumentForm;
25  import org.kuali.ole.deliver.processor.LoanProcessor;
26  import org.kuali.ole.deliver.service.OLEDeliverService;
27  import org.kuali.ole.deliver.service.OleDeliverRequestDocumentHelperServiceImpl;
28  import org.kuali.ole.docstore.common.client.DocstoreClientLocator;
29  import org.kuali.ole.docstore.common.document.ItemOleml;
30  import org.kuali.ole.docstore.common.document.content.enums.DocType;
31  import org.kuali.ole.docstore.common.document.content.instance.Item;
32  import org.kuali.ole.docstore.common.document.content.instance.xstream.ItemOlemlRecordProcessor;
33  import org.kuali.ole.docstore.common.document.content.instance.MissingPieceItemRecord;
34  import org.kuali.ole.service.OlePatronHelperService;
35  import org.kuali.ole.service.OlePatronHelperServiceImpl;
36  import org.kuali.ole.service.OlePatronMaintenanceDocumentServiceImpl;
37  import org.kuali.ole.service.OlePatronService;
38  import org.kuali.ole.sys.context.SpringContext;
39  import org.kuali.rice.core.api.datetime.DateTimeService;
40  import org.kuali.rice.core.api.resourceloader.GlobalResourceLoader;
41  import org.kuali.rice.kim.impl.identity.address.EntityAddressBo;
42  import org.kuali.rice.kim.impl.identity.affiliation.EntityAffiliationBo;
43  import org.kuali.rice.kim.impl.identity.email.EntityEmailBo;
44  import org.kuali.rice.kim.impl.identity.employment.EntityEmploymentBo;
45  import org.kuali.rice.kim.impl.identity.name.EntityNameBo;
46  import org.kuali.rice.kim.impl.identity.phone.EntityPhoneBo;
47  import org.kuali.rice.kim.impl.identity.type.EntityTypeContactInfoBo;
48  import org.kuali.rice.krad.maintenance.MaintenanceDocument;
49  import org.kuali.rice.krad.maintenance.MaintenanceUtils;
50  import org.kuali.rice.krad.service.KRADServiceLocator;
51  import org.kuali.rice.krad.service.MaintenanceDocumentService;
52  import org.kuali.rice.krad.uif.UifParameters;
53  import org.kuali.rice.krad.uif.container.CollectionGroup;
54  import org.kuali.rice.krad.uif.util.ObjectPropertyUtils;
55  import org.kuali.rice.krad.uif.util.ProcessLogger;
56  import org.kuali.rice.krad.util.GlobalVariables;
57  import org.kuali.rice.krad.util.KRADConstants;
58  import org.kuali.rice.krad.util.ObjectUtils;
59  import org.kuali.rice.krad.web.controller.MaintenanceDocumentController;
60  import org.kuali.rice.krad.web.form.DocumentFormBase;
61  import org.kuali.rice.krad.web.form.MaintenanceDocumentForm;
62  import org.kuali.rice.krad.web.form.UifFormBase;
63  import org.springframework.stereotype.Controller;
64  import org.springframework.validation.BindingResult;
65  import org.springframework.web.bind.annotation.ModelAttribute;
66  import org.springframework.web.bind.annotation.RequestMapping;
67  import org.springframework.web.bind.annotation.RequestMethod;
68  import org.springframework.web.multipart.MultipartFile;
69  import org.springframework.web.servlet.ModelAndView;
70  
71  /**
72   * .OlePatronMaintenanceDocumentController invokes MaintenanceDocumentController and returns instance of MaintenanceDocumentService.
73   */
74  @Controller
75  @RequestMapping(value = "/patronMaintenance")
76  public class OlePatronMaintenanceDocumentController extends MaintenanceDocumentController {
77  
78      private static final Logger LOG = Logger.getLogger(OlePatronMaintenanceDocumentController.class);
79      private OlePatronService olePatronService;
80      private OlePatronHelperService olePatronHelperService = new OlePatronHelperServiceImpl();
81      private byte[] imageInByte;
82      private OleDeliverRequestDocumentHelperServiceImpl oleDeliverRequestDocumentHelperService;
83      private DateTimeService dateTimeService;
84      private OleLoanDocumentsFromSolrBuilder oleLoanDocumentsFromSolrBuilder;
85  
86      @Override
87  	protected MaintenanceDocumentForm createInitialForm(
88  			HttpServletRequest request) {
89  		return new OlePatronMaintenanceDocumentForm();
90  	}
91  
92  	public DateTimeService getDateTimeService() {
93          return (DateTimeService)SpringContext.getService("dateTimeService");
94      }
95  
96      public void setDateTimeService(DateTimeService dateTimeService) {
97          this.dateTimeService = dateTimeService;
98      }
99  
100     public OlePatronService getOlePatronService() {
101         if (olePatronService != null) {
102             olePatronService = GlobalResourceLoader.getService(OLEConstants.OlePatron.OLE_PATRON_SERVICE);
103         }
104         return olePatronService;
105     }
106 
107     private LoanProcessor loanProcessor;
108 
109     private OleDeliverRequestDocumentHelperServiceImpl getOleDeliverRequestDocumentHelperService() {
110         if (oleDeliverRequestDocumentHelperService == null) {
111             oleDeliverRequestDocumentHelperService = new OleDeliverRequestDocumentHelperServiceImpl();
112         }
113         return oleDeliverRequestDocumentHelperService;
114     }
115 
116     private DocstoreClientLocator docstoreClientLocator;
117 
118     public DocstoreClientLocator getDocstoreClientLocator() {
119 
120         if (docstoreClientLocator == null) {
121             docstoreClientLocator = SpringContext.getBean(DocstoreClientLocator.class);
122 
123         }
124         return docstoreClientLocator;
125     }
126 
127     /**
128      * This method returns the instance of olePatronMaintenanceDocumentService
129      *
130      * @return olePatronMaintenanceDocumentService(MaintenanceDocumentService)
131      */
132     @Override
133     protected MaintenanceDocumentService getMaintenanceDocumentService() {
134         return GlobalResourceLoader.getService(OLEConstants.OlePatron.OLE_PATRON_MAINTENANCE_DOC_SERVICE);
135     }
136 
137 
138     @Override
139     @RequestMapping(params = "methodToCall=maintenanceEdit")
140     public ModelAndView maintenanceEdit(@ModelAttribute("KualiForm") MaintenanceDocumentForm form, BindingResult result,
141                                         HttpServletRequest request, HttpServletResponse response) throws Exception {
142 
143         MaintenanceDocumentForm maintenanceForm = (MaintenanceDocumentForm) form;
144         setupMaintenance(form, request, KRADConstants.MAINTENANCE_EDIT_ACTION);
145         MaintenanceDocument document = (MaintenanceDocument) maintenanceForm.getDocument();
146         super.maintenanceEdit(form, result, request, response);
147         OlePatronDocument olePatronDocument = (OlePatronDocument) document.getOldMaintainableObject().getDataObject();
148         olePatronDocument.getAddresses().clear();
149         SimpleDateFormat fmt = new SimpleDateFormat(OLEConstants.OlePatron.PATRON_MAINTENANCE_DATE_FORMAT);
150         if (olePatronDocument.getActivationDate() == null)
151             olePatronDocument.setActivationDate(getDateTimeService().getCurrentDate());
152         OlePatronDocument patronDocument = (OlePatronDocument)document.getNewMaintainableObject().getDataObject();
153         patronDocument.setBarcodeEditable(false);
154         if((patronDocument.getExpirationDate() != null && patronDocument.getActivationDate() != null && fmt.format(patronDocument.getActivationDate()).compareTo(fmt.format(patronDocument.getExpirationDate())) >= 0) || (patronDocument.getExpirationDate() != null && fmt.format(new Date(System.currentTimeMillis())).compareTo(fmt.format(patronDocument.getExpirationDate())) > 0)){
155 
156             patronDocument.setExpirationFlag(false);
157         }
158         olePatronDocument.setShowLoanedRecords(false);
159         olePatronDocument.setShowRequestedItems(false);
160         olePatronDocument.setShowTemporaryCirculationHistoryRecords(false);
161         return getUIFModelAndView(form);
162     }
163 
164     @Override
165     @RequestMapping(params = "methodToCall=maintenanceCopy")
166     public ModelAndView maintenanceCopy(@ModelAttribute("KualiForm") MaintenanceDocumentForm form, BindingResult result, HttpServletRequest request, HttpServletResponse response) throws Exception {
167         MaintenanceDocumentForm maintenanceForm = (MaintenanceDocumentForm) form;
168         setupMaintenance(form, request, KRADConstants.MAINTENANCE_COPY_ACTION);
169         super.maintenanceCopy(form, result, request, response);
170         MaintenanceDocument document = (MaintenanceDocument) maintenanceForm.getDocument();
171         OlePatronDocument patronDocument=(OlePatronDocument)document.getNewMaintainableObject().getDataObject();
172         if(patronDocument.getOlePatronLocalIds()!=null && patronDocument.getOlePatronLocalIds().size()>0){
173            for(OlePatronLocalIdentificationBo  olePatronLocalIdentificationBo:patronDocument.getOlePatronLocalIds()){
174                 olePatronLocalIdentificationBo.setPatronLocalSeqId(null);
175                 olePatronLocalIdentificationBo.setOlePatronId(null);
176                 olePatronLocalIdentificationBo.setOlePatronDocument(null);
177            }
178         }
179         patronDocument.setShowLoanedRecords(false);
180         patronDocument.setShowRequestedItems(false);
181         patronDocument.setShowTemporaryCirculationHistoryRecords(false);
182         return getUIFModelAndView(form);
183     }
184 
185     /**
186      * Use to create a link delete in the lookup result action field which will use to delete patron record..
187      *
188      * @param form
189      * @param result
190      * @param request
191      * @param response
192      * @return ModelAndView
193      * @throws Exception
194      */
195     @RequestMapping(params = "methodToCall=" + "maintenanceDelete")
196     public ModelAndView maintenanceDelete(@ModelAttribute("KualiForm") MaintenanceDocumentForm form, BindingResult result,
197                                           HttpServletRequest request, HttpServletResponse response) throws Exception {
198         LOG.debug(" Inside maintenanceDelete ");
199         setupMaintenanceForDelete(form, request, OLEConstants.OlePatron.OLE_PATRON_DELETE);
200         MaintenanceDocumentForm maintenanceForm = (MaintenanceDocumentForm) form;
201         MaintenanceDocument document = (MaintenanceDocument) maintenanceForm.getDocument();
202         OlePatronDocument olePatronDocument = (OlePatronDocument) document.getOldMaintainableObject().getDataObject();
203         OlePatronDocument patronDocument = (OlePatronDocument) document.getNewMaintainableObject().getDataObject();
204         olePatronDocument.setBarcodeEditable(false);
205         patronDocument.setBarcodeEditable(false);
206         olePatronDocument.setShowLoanedRecords(false);
207         olePatronDocument.setShowRequestedItems(false);
208         olePatronDocument.setShowTemporaryCirculationHistoryRecords(false);
209         return getUIFModelAndView(form);
210     }
211 
212     /**
213      * To delete the whole patron document.
214      *
215      * @param form
216      * @param result
217      * @param request
218      * @param response
219      * @return Close the document
220      * @throws Exception
221      */
222     @RequestMapping(params = "methodToCall=" + "deleteDocument")
223     public ModelAndView deleteDocument(@ModelAttribute("KualiForm") MaintenanceDocumentForm form, BindingResult result,
224                                        HttpServletRequest request, HttpServletResponse response) throws Exception {
225 
226         LOG.debug(" Inside deleteDocument ");
227         MaintenanceDocument document = form.getDocument();
228         OlePatronDocument olePatronDocument = new OlePatronDocument();
229         try {
230             if (document.getDocumentDataObject() != null) {
231                 olePatronDocument = (OlePatronDocument) document.getDocumentDataObject();
232                 if (olePatronDocument != null && olePatronDocument.getOlePatronId() != null) {
233                     boolean deletePatronDetail = olePatronHelperService.deletePatron(olePatronDocument);
234                     if (deletePatronDetail) {
235                         return back(form, result, request, response);
236                     } else {
237                         GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_MESSAGES, OLEConstants.OlePatron.ERROR_PATRON_HAS_LOAN);
238                         return getUIFModelAndView(form);
239                     }
240                 } else {
241                     GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_MESSAGES, OLEConstants.OlePatron.ERROR_PATRON_NOT_FOUND);
242                     return getUIFModelAndView(form);
243                 }
244             }
245         } catch (Exception ex) {
246             LOG.error("Exception while delete document", ex);
247         }
248         return back(form, result, request, response);
249     }
250 
251 
252     /**
253      * This method populates confirmation to delete the document.
254      *
255      * @param form
256      * @param request
257      * @param maintenanceAction
258      */
259     protected void setupMaintenanceForDelete(MaintenanceDocumentForm form, HttpServletRequest request, String maintenanceAction) {
260         LOG.debug(" Inside setupMaintenanceForDelete ");
261         MaintenanceDocument document = form.getDocument();
262         if (document == null) {
263             document = getMaintenanceDocumentService()
264                     .setupNewMaintenanceDocument(form.getDataObjectClassName(), form.getDocTypeName(),
265                             maintenanceAction);
266 
267             form.setDocument(document);
268             form.setDocTypeName(document.getDocumentHeader().getWorkflowDocument().getDocumentTypeName());
269         }
270 
271         form.setMaintenanceAction(maintenanceAction);
272         OlePatronMaintenanceDocumentServiceImpl olePatronMaintenanceDocumentServicec = (OlePatronMaintenanceDocumentServiceImpl) getMaintenanceDocumentService();
273         olePatronMaintenanceDocumentServicec.setupMaintenanceObjectForDelete(document, maintenanceAction, request.getParameterMap());
274         MaintenanceUtils.checkForLockingDocument(document, false);
275     }
276 
277 
278     @RequestMapping(method = RequestMethod.POST, params = "methodToCall=searchAddLine")
279     public ModelAndView searchAddLine(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
280                                       HttpServletRequest request, HttpServletResponse response) {
281         MaintenanceDocumentForm maintenanceForm = (MaintenanceDocumentForm) form;
282         MaintenanceDocument maintenanceDocument = (MaintenanceDocument) maintenanceForm.getDocument();
283         OlePatronDocument olePatronDocument = (OlePatronDocument) maintenanceDocument.getNewMaintainableObject().getDataObject();
284         String selectedCollectionPath = maintenanceForm.getActionParamaterValue(UifParameters.SELLECTED_COLLECTION_PATH);
285         CollectionGroup collectionGroup = maintenanceForm.getPostedView().getViewIndex().getCollectionGroupByPath(
286                 selectedCollectionPath);
287         String addLinePath = collectionGroup.getAddLineBindingInfo().getBindingPath();
288         Object eventObject = ObjectPropertyUtils.getPropertyValue(maintenanceForm, addLinePath);
289         OleProxyPatronDocument oleProxyPatronDocument = (OleProxyPatronDocument) eventObject;
290         Map<String, String> proxyMap = new HashMap<String, String>();
291         proxyMap.put(OLEConstants.OlePatron.BARCODE, oleProxyPatronDocument.getProxyPatronBarcode());
292         OlePatronDocument tempDocument = (OlePatronDocument) KRADServiceLocator.getBusinessObjectService().findByPrimaryKey(OlePatronDocument.class, proxyMap);
293         if (tempDocument != null) {
294             oleProxyPatronDocument.setProxyPatronId(tempDocument.getOlePatronId());
295             oleProxyPatronDocument.setProxyPatronBarcode(tempDocument.getBarcode());
296             oleProxyPatronDocument.setProxyPatronFirstName(tempDocument.getEntity().getNames().get(0).getFirstName());
297             oleProxyPatronDocument.setProxyPatronLastName(tempDocument.getEntity().getNames().get(0).getLastName());
298         } else {
299             GlobalVariables.getMessageMap().putError(OLEConstants.OleDeliverRequest.BORROWER_ID, OLEConstants.OleDeliverRequest.INVALID_PATRON);
300         }
301         ModelAndView modelAndView = super.addLine(form, result, request, response);
302         return modelAndView;
303     }
304 
305 
306 
307 
308     @RequestMapping(method = RequestMethod.POST, params = "methodToCall=addPhoneNumber")
309     public ModelAndView addPhoneNumber(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
310                                    HttpServletRequest request, HttpServletResponse response) {
311         MaintenanceDocumentForm maintenanceForm = (MaintenanceDocumentForm) form;
312         MaintenanceDocument maintenanceDocument = (MaintenanceDocument) maintenanceForm.getDocument();
313         OlePatronDocument olePatronDocument = (OlePatronDocument) maintenanceDocument.getNewMaintainableObject().getDataObject();
314         String selectedCollectionPath = maintenanceForm.getActionParamaterValue(UifParameters.SELLECTED_COLLECTION_PATH);
315         CollectionGroup collectionGroup = maintenanceForm.getPostedView().getViewIndex().getCollectionGroupByPath(
316                 selectedCollectionPath);
317         String addLinePath = collectionGroup.getAddLineBindingInfo().getBindingPath();
318         Object eventObject = ObjectPropertyUtils.getPropertyValue(maintenanceForm, addLinePath);
319         EntityPhoneBo entityPhoneBo = (EntityPhoneBo) eventObject;
320         boolean isValidPhoneNumber=false;
321         if (LOG.isDebugEnabled()) {
322             LOG.debug("Validating the Phone Number  Format - ##########, (###)###-#### , ###-###-#### , ### ###-#### , ### ### ####");
323         }
324         if (entityPhoneBo.getPhoneNumber().matches("\\d{10}")) isValidPhoneNumber=true;
325         else if (entityPhoneBo.getPhoneNumber().matches("\\d{3}[-]\\d{3}[-]\\d{4}")) isValidPhoneNumber=true;
326         else if (entityPhoneBo.getPhoneNumber().matches("\\d{3}[\\s]\\d{3}[-]\\d{4}")) isValidPhoneNumber=true;
327         else if (entityPhoneBo.getPhoneNumber().matches("\\d{3}[\\s]\\d{3}[\\s]\\d{4}")) isValidPhoneNumber=true;
328         else if (entityPhoneBo.getPhoneNumber().matches("\\(\\d{3}\\)[\\s]\\d{3}[-]\\d{4}")) isValidPhoneNumber=true;
329         else if (entityPhoneBo.getPhoneNumber().matches("^\\+(?:[0-9].?){6,14}[0-9]$")) isValidPhoneNumber=true;
330         else isValidPhoneNumber=false;
331         if(!isValidPhoneNumber){
332             GlobalVariables.getMessageMap().putErrorForSectionId("OlePatronDocument-Phone", OLEConstants.INVALID_PHONE_NUMBER_FORMAT);
333         }
334         if (isValidPhoneNumber) {
335             ModelAndView modelAndView = super.addLine(form, result, request, response);
336             return modelAndView;
337         } else {
338             return getUIFModelAndView(form);
339         }
340     }
341 
342     @RequestMapping(method = RequestMethod.POST, params = "methodToCall=addEmailAddress")
343     public ModelAndView addEmailAddress(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
344                                    HttpServletRequest request, HttpServletResponse response) {
345         MaintenanceDocumentForm maintenanceForm = (MaintenanceDocumentForm) form;
346         MaintenanceDocument maintenanceDocument = (MaintenanceDocument) maintenanceForm.getDocument();
347         OlePatronDocument olePatronDocument = (OlePatronDocument) maintenanceDocument.getNewMaintainableObject().getDataObject();
348         String selectedCollectionPath = maintenanceForm.getActionParamaterValue(UifParameters.SELLECTED_COLLECTION_PATH);
349         CollectionGroup collectionGroup = maintenanceForm.getPostedView().getViewIndex().getCollectionGroupByPath(
350                 selectedCollectionPath);
351         String addLinePath = collectionGroup.getAddLineBindingInfo().getBindingPath();
352         Object eventObject = ObjectPropertyUtils.getPropertyValue(maintenanceForm, addLinePath);
353         EntityEmailBo  emailBo = (EntityEmailBo) eventObject;
354         return super.addLine(form, result, request, response);
355     }
356 
357     @Override
358     public ModelAndView save(@ModelAttribute("KualiForm") DocumentFormBase form, BindingResult result, HttpServletRequest request, HttpServletResponse response) throws Exception {
359         DateFormat df = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
360         LOG.debug(" Inside route method of patron maintenance controller ");
361         ModelAndView modelAndView;
362         MaintenanceDocumentForm mainForm = (MaintenanceDocumentForm) form;
363         MaintenanceDocument document = (MaintenanceDocument) form.getDocument();
364         String action = mainForm.getMaintenanceAction();
365         SimpleDateFormat fmt = new SimpleDateFormat(OLEConstants.OlePatron.PATRON_MAINTENANCE_DATE_FORMAT);
366         OlePatronDocument newOlePatronDocument = (OlePatronDocument) document.getNewMaintainableObject().getDataObject();
367         List<OleLoanDocument> oleLoanDocumentList = newOlePatronDocument.getOleLoanDocuments();
368         for (OleLoanDocument oleLoanDocument : oleLoanDocumentList) {
369             if (oleLoanDocument.isMissingPieceFlag()) {
370                 if (oleLoanDocument.getMissingPiecesCount() == null || oleLoanDocument.getMissingPiecesCount() != null && oleLoanDocument.getMissingPiecesCount().equalsIgnoreCase("")) {
371                     oleLoanDocument.setNoOfMissingPiecesEditable(true);
372                     GlobalVariables.getMessageMap().putErrorForSectionId(OLEConstants.OlePatron.PATRON_LOANED_ITEM_SECTION, OLEConstants.OlePatron.ERROR_PATRON_MISSING_PIECE_ITEM_INFO);
373                     return getUIFModelAndView(form);
374                 }
375                 if (oleLoanDocument.getMissingPiecesCount() != null && !oleLoanDocument.getMissingPiecesCount().equalsIgnoreCase("")) {
376                     int count = Integer.parseInt(oleLoanDocument.getMissingPiecesCount());
377                     if (count < 1) {
378                         GlobalVariables.getMessageMap().putErrorForSectionId(OLEConstants.OlePatron.PATRON_LOANED_ITEM_SECTION, OLEConstants.OlePatron.ERROR_PATRON_MISSING_PIECE_ITEM_COUNT_GREATER, new String[]{"Missing Piece Count", "1"});
379                         return getUIFModelAndView(form);
380                     }
381                 }
382                 if (oleLoanDocument.getItemNumberOfPieces() == null || oleLoanDocument.getItemNumberOfPieces() != null && oleLoanDocument.getItemNumberOfPieces().toString().equalsIgnoreCase("")) {
383                     GlobalVariables.getMessageMap().putErrorForSectionId(OLEConstants.OlePatron.PATRON_LOANED_ITEM_SECTION, OLEConstants.OlePatron.ERROR_PATRON_ITEM_INFO);
384                     oleLoanDocument.setNoOfPiecesEditable(true);
385                     return getUIFModelAndView(form);
386                 }
387                 if(oleLoanDocument.getItemNumberOfPieces().intValue()<1){
388                     GlobalVariables.getMessageMap().putErrorForSectionId(OLEConstants.OlePatron.PATRON_LOANED_ITEM_SECTION, OLEConstants.OlePatron.ERROR_PATRON_MISSING_PIECE_ITEM_COUNT_GREATER, new String[]{"no of piece", "1"});
389                     return getUIFModelAndView(form);
390                 }
391                 int missingPieceCount=Integer.parseInt(oleLoanDocument.getMissingPiecesCount());
392                 int numberOfPieces=oleLoanDocument.getItemNumberOfPieces();
393                 if(missingPieceCount>numberOfPieces){
394                     GlobalVariables.getMessageMap().putErrorForSectionId(OLEConstants.OlePatron.PATRON_LOANED_ITEM_SECTION, OLEConstants.OlePatron.ERROR_PATRON_MISSING_PIECE_ITEM_COUNT_LESSER, new String[]{"Missing Piece Count", "no of pieces"});
395                     return getUIFModelAndView(form);
396                 }
397             }
398 
399         }
400         for (OleLoanDocument oleLoanDocument : oleLoanDocumentList) {
401             try {
402                 String itemXmlContent = getLoanProcessor().getItemXML(oleLoanDocument.getItemUuid());
403                 Item oleItem = getLoanProcessor().getItemPojo(itemXmlContent);
404                 boolean isMissingPieceFlagEnabled=(oleItem != null && oleItem.isMissingPieceFlag())?true:false;
405                 SimpleDateFormat simpleDateFormat = new SimpleDateFormat(OLEConstants.DAT_FORMAT_EFFECTIVE);
406                 if(oleLoanDocument.isMissingPieceFlag() && !isMissingPieceFlagEnabled){
407                     MissingPieceItemRecord missingPieceItemRecord = new MissingPieceItemRecord();
408                     missingPieceItemRecord.setMissingPieceFlagNote(oleLoanDocument.getMissingPieceNote());
409                     missingPieceItemRecord.setMissingPieceCount(oleLoanDocument.getMissingPiecesCount());
410                     missingPieceItemRecord.setMissingPieceDate(simpleDateFormat.format(getDateTimeService().getCurrentDate()));
411                     missingPieceItemRecord.setOperatorId(GlobalVariables.getUserSession().getPrincipalId());
412                     missingPieceItemRecord.setPatronBarcode(newOlePatronDocument.getBarcode());
413                     missingPieceItemRecord.setPatronId(newOlePatronDocument.getOlePatronId());
414                     missingPieceItemRecord.setItemId(oleLoanDocument.getItemUuid());
415                     if (CollectionUtils.isNotEmpty(oleItem.getMissingPieceItemRecordList())) {
416 
417                         oleItem.getMissingPieceItemRecordList().add(missingPieceItemRecord);
418                     } else {
419                         List<MissingPieceItemRecord> missingPieceItemRecords = new ArrayList<MissingPieceItemRecord>();
420                         missingPieceItemRecords.add(missingPieceItemRecord);
421                         oleItem.setMissingPieceItemRecordList(missingPieceItemRecords);
422 
423                     }
424                 }else{
425                     Map<String, String> map = new HashMap<>();
426                     map.put("itemId", DocumentUniqueIDPrefix.getDocumentId(oleLoanDocument.getItemUuid()));
427                     List<org.kuali.ole.docstore.engine.service.storage.rdbms.pojo.MissingPieceItemRecord> missingPieceItemRecordList1 = (List<org.kuali.ole.docstore.engine.service.storage.rdbms.pojo.MissingPieceItemRecord>) KRADServiceLocator.getBusinessObjectService()
428                             .findMatchingOrderBy(org.kuali.ole.docstore.engine.service.storage.rdbms.pojo.MissingPieceItemRecord.class, map, "missingPieceItemId", true);
429                     List<MissingPieceItemRecord> missingPieceItemRecords = new ArrayList<>();
430                     for (int index = 0; index < missingPieceItemRecordList1.size(); index++) {
431                         MissingPieceItemRecord missingPieceItemRecord1 = new MissingPieceItemRecord();
432                         if (index == missingPieceItemRecordList1.size() - 1) {
433                                 /*if (oleLoanForm.getMissi != null) {
434                                     claimsReturnedRecord.setClaimsReturnedFlagCreateDate(convertToString(loanObject.getClaimsReturnedDate()));
435                 }
436                                 else{
437                                     DateFormat df = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
438                                     claimsReturnedRecord.setClaimsReturnedFlagCreateDate(df.format(getDateTimeService().getCurrentDate()));
439                                 }*/
440                             if(!oleLoanDocument.isMissingPieceFlag()){
441                                 oleLoanDocument.setMissingPieceNote(null);
442                             }
443                             DateFormat dateFormat = new SimpleDateFormat(OLEConstants.DAT_FORMAT_EFFECTIVE);
444                             String missingPieceItemDate = dateFormat.format(getDateTimeService().getCurrentDate());
445                             missingPieceItemRecord1.setMissingPieceDate(missingPieceItemDate);
446                             missingPieceItemRecord1.setPatronBarcode(newOlePatronDocument.getBarcode());
447                             missingPieceItemRecord1.setMissingPieceCount(oleLoanDocument.getMissingPiecesCount());
448                             missingPieceItemRecord1.setPatronId(newOlePatronDocument.getOlePatronId());
449                             missingPieceItemRecord1.setOperatorId(GlobalVariables.getUserSession().getPrincipalId());
450                             missingPieceItemRecord1.setItemId(DocumentUniqueIDPrefix.getDocumentId(oleLoanDocument.getItemUuid()));
451                             missingPieceItemRecord1.setMissingPieceFlagNote(oleLoanDocument.getMissingPieceNote());
452                             missingPieceItemRecords.add(missingPieceItemRecord1);
453 
454                         } else {
455                             if (missingPieceItemRecordList1.get(index).getMissingPieceDate() != null && !missingPieceItemRecordList1.get(index).getMissingPieceDate().toString().isEmpty()) {
456                                 SimpleDateFormat dateToSimpleDateFormat = new SimpleDateFormat(OLEConstants.DAT_FORMAT_EFFECTIVE);
457                                 Date missingPieceItemDate = null;
458                                 if(null != (missingPieceItemRecordList1.get(index).getMissingPieceDate())){
459                                     try {
460                                         missingPieceItemDate = new Date(missingPieceItemRecordList1.get(index).getMissingPieceDate().getTime());
461                                     } catch (org.kuali.ole.sys.exception.ParseException e) {
462                                         LOG.error("format string to Date " + e);
463                                     }
464                                 }
465                                 missingPieceItemRecord1.setMissingPieceDate(dateToSimpleDateFormat.format(missingPieceItemDate).toString());
466                             }
467                             missingPieceItemRecord1.setMissingPieceFlagNote(missingPieceItemRecordList1.get(index).getMissingPieceFlagNote());
468                             missingPieceItemRecord1.setMissingPieceCount(missingPieceItemRecordList1.get(index).getMissingPieceCount());
469                             missingPieceItemRecord1.setOperatorId(missingPieceItemRecordList1.get(index).getOperatorId());
470                             missingPieceItemRecord1.setPatronId(missingPieceItemRecordList1.get(index).getPatronId());
471                             missingPieceItemRecord1.setItemId(missingPieceItemRecordList1.get(index).getItemId());
472                             missingPieceItemRecord1.setPatronBarcode(newOlePatronDocument.getBarcode());
473                             missingPieceItemRecords.add(missingPieceItemRecord1);
474                         }
475                     }
476                     oleItem.setMissingPieceItemRecordList(missingPieceItemRecords);
477 
478                 }
479 
480                 if (oleLoanDocument.isClaimsReturnedIndicator()) {
481                     getLoanProcessor().updateClaimsReturnedHistory(oleItem,oleLoanDocument,newOlePatronDocument.getOlePatronId());
482                     oleItem.setClaimsReturnedFlag(oleLoanDocument.isClaimsReturnedIndicator());
483                     getOleDeliverRequestDocumentHelperService().cancelPendingRequestForClaimsReturnedItem(oleItem.getItemIdentifier());
484                     oleItem.setClaimsReturnedNote(oleLoanDocument.getClaimsReturnNote());
485                     oleItem.setClaimsReturnedFlagCreateDate(df.format(getDateTimeService().getCurrentDate()));
486                 } else {
487                     oleItem.setClaimsReturnedFlag(oleLoanDocument.isClaimsReturnedIndicator());
488                     oleItem.setClaimsReturnedNote(null);
489                     oleItem.setClaimsReturnedFlagCreateDate(null);
490                 }
491                 oleItem.setMissingPieceFlag(oleLoanDocument.isMissingPieceFlag());
492                 oleItem.setMissingPieceFlagNote(oleLoanDocument.getMissingPieceNote());
493                 if(oleLoanDocument.isItemDamagedStatus()){
494                     getLoanProcessor().updateItemDamagedHistory(oleItem,oleLoanDocument,newOlePatronDocument.getOlePatronId());
495                     oleItem.setItemDamagedStatus(oleLoanDocument.isItemDamagedStatus());
496                     oleItem.setDamagedItemNote(oleLoanDocument.getItemDamagedNote());
497                 } else {
498                     oleItem.setItemDamagedStatus(oleLoanDocument.isItemDamagedStatus());
499                     oleItem.setDamagedItemNote(null);
500                 }
501                 oleItem.setMissingPiecesCount(oleLoanDocument.getMissingPiecesCount());
502                 if(oleLoanDocument.getItemNumberOfPieces()!=null&& !oleLoanDocument.getItemNumberOfPieces().toString().equalsIgnoreCase("")){
503                     oleItem.setNumberOfPieces(oleLoanDocument.getItemNumberOfPieces().toString());
504                 }
505                 org.kuali.ole.docstore.common.document.Item itemXML = new ItemOleml();
506                 ItemOlemlRecordProcessor itemOlemlRecordProcessor = new ItemOlemlRecordProcessor();
507                 itemXML.setContent(itemOlemlRecordProcessor.toXML(oleItem));
508                 itemXML.setCategory(OLEConstants.WORK_CATEGORY);
509                 itemXML.setType(DocType.ITEM.getCode());
510                 itemXML.setFormat(OLEConstants.OLEML_FORMAT);
511                 itemXML.setId(oleLoanDocument.getItemUuid());
512                 getDocstoreClientLocator().getDocstoreClient().updateItem(itemXML);
513             } catch (Exception e) {
514                 throw new RuntimeException(e);
515             }
516         }
517         if(!olePatronHelperService.validatePatron(newOlePatronDocument)) {
518             return getUIFModelAndView(form);
519         }
520         if (!KRADConstants.MAINTENANCE_EDIT_ACTION.equals(action)) {
521             if (newOlePatronDocument.getOlePatronId() == null || newOlePatronDocument.getOlePatronId().isEmpty()) {
522                 if (newOlePatronDocument.getActivationDate() != null && fmt.format(new Date(System.currentTimeMillis())).compareTo(fmt.format(newOlePatronDocument.getActivationDate())) > 0) {
523                     GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.OlePatron.ERROR_PATRON_ACTIVATION_DATE);
524 
525                     return getUIFModelAndView(mainForm);
526                 }
527             }
528         } else {
529             Map<String, String> patronMap = new HashMap<String, String>();
530             patronMap.put(OLEConstants.OlePatron.PATRON_ID, newOlePatronDocument.getOlePatronId());
531             OlePatronDocument patronDocument = (OlePatronDocument) KRADServiceLocator.getBusinessObjectService().findByPrimaryKey(OlePatronDocument.class, patronMap);
532             SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");
533             Date todayDate=getDateTimeService().getCurrentDate();
534             String format=simpleDateFormat.format(getDateTimeService().getCurrentDate());
535             try {
536                 todayDate=simpleDateFormat.parse(format);
537             } catch (ParseException e) {
538                 e.printStackTrace();
539             }
540             if(newOlePatronDocument.getActivationDate()!=null && newOlePatronDocument.getActivationDate().compareTo(todayDate)<0 && patronDocument!=null && patronDocument.getActivationDate()!=null && patronDocument.getActivationDate().compareTo(newOlePatronDocument.getActivationDate())>0){
541                 if (!newOlePatronDocument.isPopupDialog()) {
542                     newOlePatronDocument.setPopupDialog(true);
543                     newOlePatronDocument.setUiMessageType("patron-message-info");
544                     newOlePatronDocument.setPatronMessage(OLEConstants.OlePatron.ERROR_PATRON_NEW_PAST_DATE+"<br/>"+OLEConstants.PROCEED_MESSAGE);
545                     return getUIFModelAndView(mainForm);
546                 }
547             }
548         }
549 
550         newOlePatronDocument.setPopupDialog(false);
551         newOlePatronDocument.setOleLoanDocuments(oleLoanDocumentList);
552         List<OleProxyPatronDocument> oleProxyPatronDocumentList = newOlePatronDocument.getOleProxyPatronDocuments();
553         List<OleProxyPatronDocument> proxyPatronDocumentList = new ArrayList<OleProxyPatronDocument>();
554         if (oleProxyPatronDocumentList.size() > 0) {
555             for (OleProxyPatronDocument oleProxyPatronDocument : oleProxyPatronDocumentList) {
556                 Map<String, String> proxyMap = new HashMap<String, String>();
557                 proxyMap.put(OLEConstants.OlePatron.PATRON_ID, oleProxyPatronDocument.getProxyPatronId());
558                 OlePatronDocument tempDocument = (OlePatronDocument) KRADServiceLocator.getBusinessObjectService().findByPrimaryKey(OlePatronDocument.class, proxyMap);
559                 if (tempDocument != null) {
560                     oleProxyPatronDocument.setProxyPatronBarcode(tempDocument.getBarcode());
561                     oleProxyPatronDocument.setProxyPatronFirstName(tempDocument.getEntity().getNames().get(0).getFirstName());
562                     oleProxyPatronDocument.setProxyPatronLastName(tempDocument.getEntity().getNames().get(0).getLastName());
563                     proxyPatronDocumentList.add(oleProxyPatronDocument);
564                 }
565             }
566             newOlePatronDocument.setOleProxyPatronDocuments(proxyPatronDocumentList);
567         }
568         // Lost and reinstate barcode section
569         if (newOlePatronDocument.getOlePatronId() != null && !newOlePatronDocument.getOlePatronId().equalsIgnoreCase("")) {
570             Map<String, String> map = new HashMap<String, String>();
571             map.put(OLEConstants.OlePatron.PATRON_LOST_BARCODE_FLD, newOlePatronDocument.getBarcode());
572             map.put("active", "N");
573             List<OlePatronLostBarcode> olePatronLostBarcodes = (List<OlePatronLostBarcode>) KRADServiceLocator.getBusinessObjectService().findMatching(OlePatronLostBarcode.class, map);
574             if (olePatronLostBarcodes.size() > 0 && (!newOlePatronDocument.isSkipBarcodeValidation())) {
575                 GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.OlePatron.PATRON_DUPLICATE_BARCODE);
576                 return getUIFModelAndView(mainForm);
577             }
578             // LOST Barcode Validation for current lost section
579             boolean isBarcodeContainsInLostSection = false;
580             if(newOlePatronDocument.getLostBarcodes()!=null&& newOlePatronDocument.getBarcode()!=null){
581                 // if barcode contains in lost section submitting the document will reinstate the barcode
582                 for(OlePatronLostBarcode olePatronLostBarcode:olePatronLostBarcodes){
583                     if(olePatronLostBarcode.getInvalidOrLostBarcodeNumber()!=null && olePatronLostBarcode.getInvalidOrLostBarcodeNumber().equalsIgnoreCase(newOlePatronDocument.getBarcode())){
584                         isBarcodeContainsInLostSection=true;
585                     }
586                 }
587             }
588             // if barcode is editable mode and shouldn't be reinstated
589             if (newOlePatronDocument.isBarcodeEditable()&& !newOlePatronDocument.isReinstated()) {
590                 for (OlePatronLostBarcode olePatronLostBarcode : newOlePatronDocument.getLostBarcodes()) {
591                     if (olePatronLostBarcode.getInvalidOrLostBarcodeNumber() != null && olePatronLostBarcode.getInvalidOrLostBarcodeNumber().equalsIgnoreCase(newOlePatronDocument.getBarcode())) {
592                         GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.OlePatron.PATRON_BARCODE_BLOCK_MANUALLY,new String[]{newOlePatronDocument.getBarcode()});
593                         newOlePatronDocument.setBarcode(null);
594                         newOlePatronDocument.setBarcodeEditable(true);
595                         newOlePatronDocument.setReinstated(false);
596                         return getUIFModelAndView(mainForm);
597                     }
598                 }
599             }
600             if (!isBarcodeContainsInLostSection) {
601                 //JIRA OLE-5707
602                 Map<String, String> patronMap = new HashMap<String, String>();
603                 patronMap.put(OLEConstants.OlePatron.PATRON_ID, newOlePatronDocument.getOlePatronId());
604                 OlePatronDocument patronDocument = (OlePatronDocument) KRADServiceLocator.getBusinessObjectService().findByPrimaryKey(OlePatronDocument.class, patronMap);
605                 if (patronDocument != null && patronDocument.getBarcode() != null && !(patronDocument.getBarcode().equalsIgnoreCase(""))) {
606                     if (newOlePatronDocument.getLostBarcodes() == null) {
607                         newOlePatronDocument.setLostBarcodes(new ArrayList<OlePatronLostBarcode>());
608                     }
609                     if (!patronDocument.getBarcode().equalsIgnoreCase(newOlePatronDocument.getBarcode()) && (!newOlePatronDocument.isBarcodeChanged())) {
610                         if (patronDocument != null && patronDocument.getBarcode() != null) {
611                             boolean isNeedToUpdateBarcode=false;
612                             String originalBarcode=patronDocument.getBarcode();
613                             for(OlePatronLostBarcode olePatronLostBarcode:newOlePatronDocument.getLostBarcodes()){
614                                 if(olePatronLostBarcode.getInvalidOrLostBarcodeNumber()!=null && olePatronLostBarcode.getInvalidOrLostBarcodeNumber().equalsIgnoreCase(originalBarcode)){
615                                     isNeedToUpdateBarcode=true;
616                                 }
617                             }
618                             if (!isNeedToUpdateBarcode) {
619                                 OlePatronLostBarcode olePatronLostBarcode = new OlePatronLostBarcode();
620                                 olePatronLostBarcode.setInvalidOrLostBarcodeNumber(patronDocument.getBarcode());
621                                 olePatronLostBarcode.setInvalidOrLostBarcodeEffDate(new java.sql.Timestamp(getDateTimeService().getCurrentDate().getTime()));
622                                 olePatronLostBarcode.setRevertBarcode(true);
623                                 olePatronLostBarcode.setDescription("");
624                                 olePatronLostBarcode.setStatus("Lost");
625                                 newOlePatronDocument.getLostBarcodes().add(olePatronLostBarcode);
626                             }
627                         }
628 
629                     }
630                 }
631             }
632         }
633         // proxy patron
634         List<OleProxyPatronDocument> proxyPatron = newOlePatronDocument.getOleProxyPatronDocuments();
635         String patronId = "";
636         Date proxyActDate = null;
637         Date proxyExpDate = null;
638         if (proxyPatron.size() > 0) {
639             for (OleProxyPatronDocument proxy : proxyPatron) {
640                 patronId = proxy.getProxyPatronId();
641                 proxyActDate = proxy.getProxyPatronActivationDate();
642                 proxyExpDate = proxy.getProxyPatronExpirationDate();
643                 Map<String, String> patronMap = new HashMap<String, String>();
644                 patronMap.put(OLEConstants.OlePatron.PATRON_ID, patronId);
645                 OlePatronDocument patronDocument = (OlePatronDocument) KRADServiceLocator.getBusinessObjectService().findByPrimaryKey(OlePatronDocument.class, patronMap);
646                 if (patronDocument != null) {
647                     Date patronExpDate = patronDocument.getExpirationDate();
648                     Date patronActDate = patronDocument.getActivationDate();
649                     if (proxyActDate != null) {
650                         if (patronActDate != null && fmt.format(patronActDate).compareTo(fmt.format(proxyActDate)) > 0) {
651                             GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.OlePatron.ERROR_REAL_PATRON_ACTIVATION_DATE);
652                             return getUIFModelAndView(mainForm);
653                         }
654                     }
655                     if (proxyExpDate != null) {
656                         if (patronExpDate != null) {
657                             if (fmt.format(proxyExpDate).compareTo(fmt.format(patronExpDate)) > 0) {
658                                 if(newOlePatronDocument.isExpirationFlag()){
659                                     GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.OlePatron.ERROR_REAL_PATRON_EXPIRATION_DATE);
660                                     return getUIFModelAndView(mainForm);
661                                 }
662                             }
663                         }
664                     }
665                 }
666                 boolean isBorrowerTypeActive = olePatronHelperService.isBorrowerTypeActive(newOlePatronDocument);
667                 if (!isBorrowerTypeActive) {
668                     GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.OlePatron.ERROR_PATRON_BORROWER_TYPE_INACTIVE);
669                     return getUIFModelAndView(mainForm);
670                 }
671                 if (patronId != null && newOlePatronDocument.getOlePatronId() != null && newOlePatronDocument.getOlePatronId().equals(patronId)) {
672                     GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.OlePatron.ERROR_PROXY_PATRON_ID);
673                     return getUIFModelAndView(mainForm);
674                 } else {
675                     if (proxyExpDate != null) {
676                         if (proxyActDate != null) {
677                             if ((fmt.format(proxyActDate).compareTo(fmt.format(proxyExpDate)) >= 0)) {
678                                 GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.OlePatron.ERROR_PROXY_PATRON_EXPIRATION_DATE);
679                                 return getUIFModelAndView(mainForm);
680                             }
681                         }
682                     }
683                 }
684             }
685         }
686         return super.save(form, result, request, response);
687     }
688 
689     /**
690      * To submit or route the patron maintenance document
691      *
692      * @param form document form base containing the document instance that will be routed
693      * @return ModelAndView
694      */
695     @Override
696     @RequestMapping(params = "methodToCall=route")
697     public ModelAndView route(@ModelAttribute("KualiForm") DocumentFormBase form, BindingResult result,
698                               HttpServletRequest request, HttpServletResponse response) {
699         DateFormat df = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
700         LOG.debug(" Inside route method of patron maintenance controller ");
701         ModelAndView modelAndView;
702         MaintenanceDocumentForm mainForm = (MaintenanceDocumentForm) form;
703         MaintenanceDocument document = (MaintenanceDocument) form.getDocument();
704         String action = mainForm.getMaintenanceAction();
705         SimpleDateFormat fmt = new SimpleDateFormat(OLEConstants.OlePatron.PATRON_MAINTENANCE_DATE_FORMAT);
706         OlePatronDocument newOlePatronDocument = (OlePatronDocument) document.getNewMaintainableObject().getDataObject();
707         List<OleLoanDocument> oleLoanDocumentList = newOlePatronDocument.getOleLoanDocuments();
708         for (OleLoanDocument oleLoanDocument : oleLoanDocumentList) {
709             if (oleLoanDocument.isLoanModified()) {
710                 if (oleLoanDocument.isMissingPieceFlag()) {
711                     if (oleLoanDocument.getMissingPiecesCount() == null || oleLoanDocument.getMissingPiecesCount() != null && oleLoanDocument.getMissingPiecesCount().equalsIgnoreCase("")) {
712                         oleLoanDocument.setNoOfMissingPiecesEditable(true);
713                         GlobalVariables.getMessageMap().putErrorForSectionId(OLEConstants.OlePatron.PATRON_LOANED_ITEM_SECTION, OLEConstants.OlePatron.ERROR_PATRON_MISSING_PIECE_ITEM_INFO);
714                         return getUIFModelAndView(form);
715                     }
716                     if (oleLoanDocument.getMissingPiecesCount() != null && !oleLoanDocument.getMissingPiecesCount().equalsIgnoreCase("")) {
717                         int count = Integer.parseInt(oleLoanDocument.getMissingPiecesCount());
718                         if (count < 1) {
719                             GlobalVariables.getMessageMap().putErrorForSectionId(OLEConstants.OlePatron.PATRON_LOANED_ITEM_SECTION, OLEConstants.OlePatron.ERROR_PATRON_MISSING_PIECE_ITEM_COUNT_GREATER, new String[]{"Missing Piece Count", "1"});
720                             return getUIFModelAndView(form);
721                         }
722                     }
723                     if (oleLoanDocument.getItemNumberOfPieces() == null || oleLoanDocument.getItemNumberOfPieces() != null && oleLoanDocument.getItemNumberOfPieces().toString().equalsIgnoreCase("")) {
724                         GlobalVariables.getMessageMap().putErrorForSectionId(OLEConstants.OlePatron.PATRON_LOANED_ITEM_SECTION, OLEConstants.OlePatron.ERROR_PATRON_ITEM_INFO);
725                         oleLoanDocument.setNoOfPiecesEditable(true);
726                         return getUIFModelAndView(form);
727                     }
728                     if (oleLoanDocument.getItemNumberOfPieces().intValue() < 1) {
729                         GlobalVariables.getMessageMap().putErrorForSectionId(OLEConstants.OlePatron.PATRON_LOANED_ITEM_SECTION, OLEConstants.OlePatron.ERROR_PATRON_MISSING_PIECE_ITEM_COUNT_GREATER, new String[]{"no of piece", "1"});
730                         oleLoanDocument.setNoOfPiecesEditable(true);
731                         oleLoanDocument.setNoOfMissingPiecesEditable(true);
732                         return getUIFModelAndView(form);
733                     }
734                     int missingPieceCount = Integer.parseInt(oleLoanDocument.getMissingPiecesCount());
735                     int numberOfPieces = oleLoanDocument.getItemNumberOfPieces();
736                     if (missingPieceCount > numberOfPieces) {
737                         GlobalVariables.getMessageMap().putErrorForSectionId(OLEConstants.OlePatron.PATRON_LOANED_ITEM_SECTION, OLEConstants.OlePatron.ERROR_PATRON_MISSING_PIECE_ITEM_COUNT_LESSER, new String[]{"Missing Piece Count", "no of pieces"});
738                         oleLoanDocument.setNoOfPiecesEditable(true);
739                         oleLoanDocument.setNoOfMissingPiecesEditable(true);
740                         return getUIFModelAndView(form);
741                     }
742                 }
743                 try {
744                     String itemXmlContent = getLoanProcessor().getItemXML(oleLoanDocument.getItemUuid());
745                     Item oleItem = getLoanProcessor().getItemPojo(itemXmlContent);
746                     boolean isMissingPieceFlagEnabled=(oleItem != null && oleItem.isMissingPieceFlag())?true:false;
747                     if (oleLoanDocument.isClaimsReturnedIndicator()) {
748                         getLoanProcessor().updateClaimsReturnedHistory(oleItem,oleLoanDocument,newOlePatronDocument.getOlePatronId());
749                         oleItem.setClaimsReturnedFlag(oleLoanDocument.isClaimsReturnedIndicator());
750                         getOleDeliverRequestDocumentHelperService().cancelPendingRequestForClaimsReturnedItem(oleItem.getItemIdentifier());
751                         oleItem.setClaimsReturnedNote(oleLoanDocument.getClaimsReturnNote());
752                         oleItem.setClaimsReturnedFlagCreateDate(df.format(getDateTimeService().getCurrentDate()));
753                     } else {
754                         oleItem.setClaimsReturnedFlag(oleLoanDocument.isClaimsReturnedIndicator());
755                         oleItem.setClaimsReturnedNote(null);
756                         oleItem.setClaimsReturnedFlagCreateDate(null);
757                     }
758                     SimpleDateFormat simpleDateFormat = new SimpleDateFormat(OLEConstants.DAT_FORMAT_EFFECTIVE);
759                     String parsedDate = simpleDateFormat.format((new Date()));
760                     if(oleLoanDocument.isMissingPieceFlag() && !isMissingPieceFlagEnabled){
761                         MissingPieceItemRecord missingPieceItemRecord = new MissingPieceItemRecord();
762                         missingPieceItemRecord.setMissingPieceFlagNote(oleLoanDocument.getMissingPieceNote());
763                         missingPieceItemRecord.setMissingPieceCount(oleLoanDocument.getMissingPiecesCount());
764                         missingPieceItemRecord.setMissingPieceDate(parsedDate);
765                         missingPieceItemRecord.setOperatorId(GlobalVariables.getUserSession().getPrincipalId());
766                         missingPieceItemRecord.setPatronBarcode(newOlePatronDocument.getBarcode());
767                         missingPieceItemRecord.setPatronId(newOlePatronDocument.getOlePatronId());
768                         missingPieceItemRecord.setItemId(oleLoanDocument.getItemUuid());
769                         if (CollectionUtils.isNotEmpty(oleItem.getMissingPieceItemRecordList())) {
770 
771                             oleItem.getMissingPieceItemRecordList().add(missingPieceItemRecord);
772                         } else {
773                             List<MissingPieceItemRecord> missingPieceItemRecords = new ArrayList<MissingPieceItemRecord>();
774                             missingPieceItemRecords.add(missingPieceItemRecord);
775                             oleItem.setMissingPieceItemRecordList(missingPieceItemRecords);
776                         }
777                     }else{
778                         Map<String, String> map = new HashMap<>();
779                         map.put("itemId", DocumentUniqueIDPrefix.getDocumentId(oleLoanDocument.getItemUuid()));
780                         List<org.kuali.ole.docstore.engine.service.storage.rdbms.pojo.MissingPieceItemRecord> missingPieceItemRecordList1 = (List<org.kuali.ole.docstore.engine.service.storage.rdbms.pojo.MissingPieceItemRecord>) KRADServiceLocator.getBusinessObjectService()
781                                 .findMatchingOrderBy(org.kuali.ole.docstore.engine.service.storage.rdbms.pojo.MissingPieceItemRecord.class, map, "missingPieceItemId", true);
782                         List<MissingPieceItemRecord> missingPieceItemRecords = new ArrayList<>();
783                         for (int index = 0; index < missingPieceItemRecordList1.size(); index++) {
784                             MissingPieceItemRecord missingPieceItemRecord1 = new MissingPieceItemRecord();
785                             if (index == missingPieceItemRecordList1.size() - 1) {
786                                 /*if (oleLoanForm.getMissi != null) {
787                                     claimsReturnedRecord.setClaimsReturnedFlagCreateDate(convertToString(loanObject.getClaimsReturnedDate()));
788                                 }
789                                 else{
790                                     DateFormat df = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
791                                     claimsReturnedRecord.setClaimsReturnedFlagCreateDate(df.format(getDateTimeService().getCurrentDate()));
792                                 }*/
793                                 if(!oleLoanDocument.isMissingPieceFlag()){
794                                     oleLoanDocument.setMissingPieceNote(null);
795                                 }
796                                 DateFormat dateFormat = new SimpleDateFormat(OLEConstants.DAT_FORMAT_EFFECTIVE);
797                                 String missingPieceItemDate = dateFormat.format((new Date()));
798                                 missingPieceItemRecord1.setMissingPieceDate(missingPieceItemDate);
799                                 missingPieceItemRecord1.setMissingPieceCount(oleLoanDocument.getMissingPiecesCount());
800                                 missingPieceItemRecord1.setPatronBarcode(newOlePatronDocument.getBarcode());
801                                 missingPieceItemRecord1.setPatronId(newOlePatronDocument.getOlePatronId());
802                                 missingPieceItemRecord1.setOperatorId(GlobalVariables.getUserSession().getPrincipalId());
803                                 missingPieceItemRecord1.setItemId(DocumentUniqueIDPrefix.getDocumentId(oleLoanDocument.getItemUuid()));
804                                 missingPieceItemRecord1.setMissingPieceFlagNote(oleLoanDocument.getMissingPieceNote());
805                                 missingPieceItemRecords.add(missingPieceItemRecord1);
806 
807                             } else {
808                                 if (missingPieceItemRecordList1.get(index).getMissingPieceDate() != null && !missingPieceItemRecordList1.get(index).getMissingPieceDate().toString().isEmpty()) {
809                                     SimpleDateFormat dateToSimpleDateFormat = new SimpleDateFormat(OLEConstants.DAT_FORMAT_EFFECTIVE);
810                                     Date missingPieceItemDate = null;
811                                     if(null != (missingPieceItemRecordList1.get(index).getMissingPieceDate())){
812                                         try {
813                                             missingPieceItemDate = new Date(missingPieceItemRecordList1.get(index).getMissingPieceDate().getTime());
814                                         } catch (org.kuali.ole.sys.exception.ParseException e) {
815                                             LOG.error("format string to Date " + e);
816                                         }
817                                     }
818                                     missingPieceItemRecord1.setMissingPieceDate(dateToSimpleDateFormat.format(missingPieceItemDate).toString());
819                                 }
820                                 missingPieceItemRecord1.setMissingPieceFlagNote(missingPieceItemRecordList1.get(index).getMissingPieceFlagNote());
821                                 missingPieceItemRecord1.setMissingPieceCount(missingPieceItemRecordList1.get(index).getMissingPieceCount());
822                                 missingPieceItemRecord1.setOperatorId(missingPieceItemRecordList1.get(index).getOperatorId());
823                                 missingPieceItemRecord1.setPatronBarcode(newOlePatronDocument.getBarcode());
824                                 missingPieceItemRecord1.setPatronId(missingPieceItemRecordList1.get(index).getPatronId());
825                                 missingPieceItemRecord1.setItemId(missingPieceItemRecordList1.get(index).getItemId());
826                                 missingPieceItemRecords.add(missingPieceItemRecord1);
827                             }
828                         }
829                         oleItem.setMissingPieceItemRecordList(missingPieceItemRecords);
830 
831                     }
832                     oleItem.setMissingPieceFlag(oleLoanDocument.isMissingPieceFlag());
833                     oleItem.setMissingPieceFlagNote(oleLoanDocument.getMissingPieceNote());
834                     if(oleLoanDocument.isItemDamagedStatus()){
835                         getLoanProcessor().updateItemDamagedHistory(oleItem,oleLoanDocument,newOlePatronDocument.getOlePatronId());
836                         oleItem.setItemDamagedStatus(oleLoanDocument.isItemDamagedStatus());
837                         oleItem.setDamagedItemNote(oleLoanDocument.getItemDamagedNote());
838                     } else {
839                         oleItem.setItemDamagedStatus(oleLoanDocument.isItemDamagedStatus());
840                         oleItem.setDamagedItemNote(null);
841                     }
842                     oleItem.setMissingPiecesCount(oleLoanDocument.getMissingPiecesCount());
843                     if (oleLoanDocument.getItemNumberOfPieces() != null && !oleLoanDocument.getItemNumberOfPieces().toString().equalsIgnoreCase("")) {
844                         oleItem.setNumberOfPieces(oleLoanDocument.getItemNumberOfPieces().toString());
845                     }
846                     org.kuali.ole.docstore.common.document.Item itemXML = new ItemOleml();
847                     ItemOlemlRecordProcessor itemOlemlRecordProcessor = new ItemOlemlRecordProcessor();
848                     itemXML.setContent(itemOlemlRecordProcessor.toXML(oleItem));
849                     itemXML.setCategory(OLEConstants.WORK_CATEGORY);
850                     itemXML.setType(DocType.ITEM.getCode());
851                     itemXML.setFormat(OLEConstants.OLEML_FORMAT);
852                     itemXML.setId(oleLoanDocument.getItemUuid());
853                     getDocstoreClientLocator().getDocstoreClient().updateItem(itemXML);
854                 } catch (Exception e) {
855                     throw new RuntimeException(e);
856                 }
857             }
858 
859         }
860         if(!olePatronHelperService.validatePatron(newOlePatronDocument)) {
861             return getUIFModelAndView(form);
862         }
863         if (!KRADConstants.MAINTENANCE_EDIT_ACTION.equals(action)) {
864             if (newOlePatronDocument.getOlePatronId() == null || newOlePatronDocument.getOlePatronId().isEmpty()) {
865                 if (newOlePatronDocument.getActivationDate() != null && fmt.format(new Date(System.currentTimeMillis())).compareTo(fmt.format(newOlePatronDocument.getActivationDate())) > 0) {
866                     GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.OlePatron.ERROR_PATRON_ACTIVATION_DATE);
867 
868                     return getUIFModelAndView(mainForm); // JIRA OLE-5107
869                 }
870             }
871         } else {
872             Map<String, String> patronMap = new HashMap<String, String>();
873             patronMap.put(OLEConstants.OlePatron.PATRON_ID, newOlePatronDocument.getOlePatronId());
874             OlePatronDocument patronDocument = (OlePatronDocument) KRADServiceLocator.getBusinessObjectService().findByPrimaryKey(OlePatronDocument.class, patronMap);
875             SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");
876             Date todayDate=getDateTimeService().getCurrentDate();
877             String format=simpleDateFormat.format(getDateTimeService().getCurrentDate());
878             try {
879                  todayDate=simpleDateFormat.parse(format);
880             } catch (ParseException e) {
881                 e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
882             }
883             if(newOlePatronDocument.getActivationDate()!=null && newOlePatronDocument.getActivationDate().compareTo(todayDate)<0 && patronDocument!=null && patronDocument.getActivationDate()!=null && patronDocument.getActivationDate().compareTo(newOlePatronDocument.getActivationDate())>0){
884                 if (!newOlePatronDocument.isPopupDialog()) {
885                     newOlePatronDocument.setPopupDialog(true);
886                     newOlePatronDocument.setUiMessageType("patron-message-info");
887                     newOlePatronDocument.setPatronMessage(OLEConstants.OlePatron.ERROR_PATRON_NEW_PAST_DATE+"<br/>"+OLEConstants.PROCEED_MESSAGE);
888                     return getUIFModelAndView(mainForm);
889                 }
890             }
891         }
892 
893         newOlePatronDocument.setPopupDialog(false);
894         newOlePatronDocument.setOleLoanDocuments(oleLoanDocumentList);
895         List<OleProxyPatronDocument> oleProxyPatronDocumentList = newOlePatronDocument.getOleProxyPatronDocuments();
896         List<OleProxyPatronDocument> proxyPatronDocumentList = new ArrayList<OleProxyPatronDocument>();
897         if (oleProxyPatronDocumentList.size() > 0) {
898             for (OleProxyPatronDocument oleProxyPatronDocument : oleProxyPatronDocumentList) {
899                 Map<String, String> proxyMap = new HashMap<String, String>();
900                 proxyMap.put(OLEConstants.OlePatron.PATRON_ID, oleProxyPatronDocument.getProxyPatronId());
901                 OlePatronDocument tempDocument = (OlePatronDocument) KRADServiceLocator.getBusinessObjectService().findByPrimaryKey(OlePatronDocument.class, proxyMap);
902                 if (tempDocument != null) {
903                     oleProxyPatronDocument.setProxyPatronBarcode(tempDocument.getBarcode());
904                     oleProxyPatronDocument.setProxyPatronFirstName(tempDocument.getEntity().getNames().get(0).getFirstName());
905                     oleProxyPatronDocument.setProxyPatronLastName(tempDocument.getEntity().getNames().get(0).getLastName());
906                     proxyPatronDocumentList.add(oleProxyPatronDocument);
907                 }
908             }
909             newOlePatronDocument.setOleProxyPatronDocuments(proxyPatronDocumentList);
910         }
911         // Lost and reinstate barcode section
912         if (newOlePatronDocument.getOlePatronId() != null && !newOlePatronDocument.getOlePatronId().equalsIgnoreCase("")) {
913             // if barcode is editable mode and shouldn't be reinstated
914             if (newOlePatronDocument.isBarcodeEditable()&& !newOlePatronDocument.isReinstated()) {
915                 for (OlePatronLostBarcode olePatronLostBarcode : newOlePatronDocument.getLostBarcodes()) {
916                     if (olePatronLostBarcode.getInvalidOrLostBarcodeNumber() != null && olePatronLostBarcode.getInvalidOrLostBarcodeNumber().equalsIgnoreCase(newOlePatronDocument.getBarcode())) {
917                         GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.OlePatron.PATRON_BARCODE_BLOCK_MANUALLY,new String[]{newOlePatronDocument.getBarcode()});
918                         newOlePatronDocument.setBarcode(null);
919                         newOlePatronDocument.setBarcodeEditable(true);
920                         newOlePatronDocument.setReinstated(false);
921                         olePatronLostBarcode.setStatus(OLEConstants.OlePatron.NEWBARCODE_STATUS);
922                         olePatronLostBarcode.setDescription(OLEConstants.OlePatron.NEWBARCODE_DESCRIPTION);
923                         return getUIFModelAndView(mainForm);
924                     }
925                 }
926             }
927             Map<String, String> map = new HashMap<String, String>();
928             map.put(OLEConstants.OlePatron.PATRON_LOST_BARCODE_FLD, newOlePatronDocument.getBarcode());
929             map.put("active", "N");
930             List<OlePatronLostBarcode> olePatronLostBarcodes = (List<OlePatronLostBarcode>) KRADServiceLocator.getBusinessObjectService().findMatching(OlePatronLostBarcode.class, map);
931             if (olePatronLostBarcodes.size() > 0 && (!newOlePatronDocument.isSkipBarcodeValidation())) {
932                 GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.OlePatron.PATRON_DUPLICATE_BARCODE);
933                 return getUIFModelAndView(mainForm);
934             }
935             // LOST Barcode Validation for current lost section
936             boolean isBarcodeContainsInLostSection = false;
937             if(newOlePatronDocument.getLostBarcodes()!=null&& newOlePatronDocument.getBarcode()!=null){
938                 // if barcode contains in lost section submitting the document will reinstate the barcode
939                 for(OlePatronLostBarcode olePatronLostBarcode:olePatronLostBarcodes){
940                      if(olePatronLostBarcode.getInvalidOrLostBarcodeNumber()!=null && olePatronLostBarcode.getInvalidOrLostBarcodeNumber().equalsIgnoreCase(newOlePatronDocument.getBarcode())){
941                          isBarcodeContainsInLostSection=true;
942                      }
943                 }
944             }
945             if (!isBarcodeContainsInLostSection) {
946                 //JIRA OLE-5707
947                 Map<String, String> patronMap = new HashMap<String, String>();
948                 patronMap.put(OLEConstants.OlePatron.PATRON_ID, newOlePatronDocument.getOlePatronId());
949                 OlePatronDocument patronDocument = (OlePatronDocument) KRADServiceLocator.getBusinessObjectService().findByPrimaryKey(OlePatronDocument.class, patronMap);
950                 if (patronDocument != null && patronDocument.getBarcode() != null && !(patronDocument.getBarcode().equalsIgnoreCase(""))) {
951                     if (newOlePatronDocument.getLostBarcodes() == null) {
952                         newOlePatronDocument.setLostBarcodes(new ArrayList<OlePatronLostBarcode>());
953                     }
954                     if (!patronDocument.getBarcode().equalsIgnoreCase(newOlePatronDocument.getBarcode()) && (!newOlePatronDocument.isBarcodeChanged())) {
955                         if (patronDocument != null && patronDocument.getBarcode() != null) {
956                             boolean isNeedToUpdateBarcode=false;
957                             String originalBarcode=patronDocument.getBarcode();
958                             for(OlePatronLostBarcode olePatronLostBarcode:newOlePatronDocument.getLostBarcodes()){
959                                 if(olePatronLostBarcode.getInvalidOrLostBarcodeNumber()!=null && olePatronLostBarcode.getInvalidOrLostBarcodeNumber().equalsIgnoreCase(originalBarcode)){
960                                     isNeedToUpdateBarcode=true;
961                                 }
962                             }
963                             if (!isNeedToUpdateBarcode) {
964                                 OlePatronLostBarcode olePatronLostBarcode = new OlePatronLostBarcode();
965                                 olePatronLostBarcode.setInvalidOrLostBarcodeNumber(patronDocument.getBarcode());
966                                 olePatronLostBarcode.setInvalidOrLostBarcodeEffDate(new java.sql.Timestamp(getDateTimeService().getCurrentDate().getTime()));
967                                 olePatronLostBarcode.setRevertBarcode(true);
968                                 olePatronLostBarcode.setDescription("");
969                                 olePatronLostBarcode.setStatus("Lost");
970                                 newOlePatronDocument.getLostBarcodes().add(olePatronLostBarcode);
971                             }
972                         }
973 
974                     }
975                 }
976             }
977         }
978         // proxy patron
979         List<OleProxyPatronDocument> proxyPatron = newOlePatronDocument.getOleProxyPatronDocuments();
980         String patronId = "";
981         Date proxyActDate = null;
982         Date proxyExpDate = null;
983         if (proxyPatron.size() > 0) {
984             for (OleProxyPatronDocument proxy : proxyPatron) {
985                 patronId = proxy.getProxyPatronId();
986                 proxyActDate = proxy.getProxyPatronActivationDate();
987                 proxyExpDate = proxy.getProxyPatronExpirationDate();
988                 Map<String, String> patronMap = new HashMap<String, String>();
989                 patronMap.put(OLEConstants.OlePatron.PATRON_ID, patronId);
990                 OlePatronDocument patronDocument = (OlePatronDocument) KRADServiceLocator.getBusinessObjectService().findByPrimaryKey(OlePatronDocument.class, patronMap);
991                 if (patronDocument != null) {
992                     Date patronExpDate = patronDocument.getExpirationDate();
993                     Date patronActDate = patronDocument.getActivationDate();
994                     if (proxyActDate != null) {
995                         if (patronActDate != null && fmt.format(patronActDate).compareTo(fmt.format(proxyActDate)) > 0) {
996                             GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.OlePatron.ERROR_REAL_PATRON_ACTIVATION_DATE);
997                             return getUIFModelAndView(mainForm);
998                         }
999                     }
1000                     if (proxyExpDate != null) {
1001                         if (patronExpDate != null) {
1002                             if (fmt.format(proxyExpDate).compareTo(fmt.format(patronExpDate)) > 0) {
1003                                 if(newOlePatronDocument.isExpirationFlag()){
1004                                     GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.OlePatron.ERROR_REAL_PATRON_EXPIRATION_DATE);
1005                                     return getUIFModelAndView(mainForm);
1006                                 }
1007                             }
1008                         }
1009                     }
1010                 }
1011                /* boolean lostBarcodeCheck = olePatronHelperService.CheckBarcodeAndLostBarcode(newOlePatronDocument);
1012                 if (lostBarcodeCheck) {
1013                     GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.OlePatron.ERROR_PATRON_BARCODE_INVALID);
1014                     return getUIFModelAndView(mainForm);
1015                 }*/
1016                 boolean isBorrowerTypeActive = olePatronHelperService.isBorrowerTypeActive(newOlePatronDocument);
1017                 if (!isBorrowerTypeActive) {
1018                     GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.OlePatron.ERROR_PATRON_BORROWER_TYPE_INACTIVE);
1019                     return getUIFModelAndView(mainForm);
1020                 }
1021                 if (patronId != null && newOlePatronDocument.getOlePatronId() != null && newOlePatronDocument.getOlePatronId().equals(patronId)) {
1022                     GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.OlePatron.ERROR_PROXY_PATRON_ID);
1023                     return getUIFModelAndView(mainForm);
1024                 } /*else if (proxyActDate != null && fmt.format(new Date(System.currentTimeMillis())).compareTo(fmt.format(proxyActDate)) > 0) {
1025                     GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.OlePatron.ERROR_PROXY_PATRON_ACTIVATION_DATE);
1026                     return getUIFModelAndView(mainForm);
1027                 } */else {
1028                     if (proxyExpDate != null) {
1029                         if (proxyActDate != null) {
1030                             if ((fmt.format(proxyActDate).compareTo(fmt.format(proxyExpDate)) >= 0)) {
1031                                 GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.OlePatron.ERROR_PROXY_PATRON_EXPIRATION_DATE);
1032                                 return getUIFModelAndView(mainForm);
1033                             }
1034                         } /*else if (fmt.format(new Date(System.currentTimeMillis())).compareTo(fmt.format(proxyExpDate)) > 0) {
1035                             GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.OlePatron.ERROR_PROXY_PATRON_EXPIRATION_DATE);
1036                             return getUIFModelAndView(mainForm);
1037                         }*/
1038                     }
1039                 }
1040             }
1041         }
1042         if (newOlePatronDocument.isGeneralBlock() && (newOlePatronDocument.getGeneralBlockNotes() == null || newOlePatronDocument.getGeneralBlockNotes().equals(""))) {
1043             GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.OlePatron.ERROR_PATRON_GENERAL_BLOCK_NOTES, OLEConstants.OlePatron.PATRON_GENERAL_BLOCK_NOTES);
1044             return getUIFModelAndView(mainForm);
1045         } /*else if (newOlePatronDocument.getActivationDate() != null && fmt.format(new Date(System.currentTimeMillis())).compareTo(fmt.format(newOlePatronDocument.getActivationDate())) > 0) {
1046             GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.OlePatron.ERROR_PATRON_ACTIVATION_DATE);
1047             return getUIFModelAndView(mainForm); // JIRA OLE-5107
1048         }*/ else if ((newOlePatronDocument.getExpirationDate() != null && newOlePatronDocument.getActivationDate() != null && fmt.format(newOlePatronDocument.getActivationDate()).compareTo(fmt.format(newOlePatronDocument.getExpirationDate())) >= 0) || (newOlePatronDocument.getExpirationDate() != null && fmt.format(new Date(System.currentTimeMillis())).compareTo(fmt.format(newOlePatronDocument.getExpirationDate())) > 0)) {
1049             if(newOlePatronDocument.isExpirationFlag()){
1050             GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.OlePatron.ERROR_PATRON_EXPIRATION_DATE);
1051             return getUIFModelAndView(mainForm);
1052             }
1053         } else if (newOlePatronDocument.getOlePatronId() != null) {
1054             Map<String, String> tempId = new HashMap<String, String>();
1055             tempId.put(OLEConstants.OlePatron.PATRON_ID, newOlePatronDocument.getOlePatronId());
1056             OlePatronDocument tempDocument = (OlePatronDocument) KRADServiceLocator.getBusinessObjectService().findByPrimaryKey(OlePatronDocument.class, tempId);
1057             if (tempDocument != null) {
1058                 if (tempDocument.getEntity() != null) {
1059                     if (newOlePatronDocument.getDeletedOleEntityAddressBo().size() > 0) {
1060                         for(OleEntityAddressBo oleEntityAddressBo:newOlePatronDocument.getDeletedOleEntityAddressBo()){
1061                             KRADServiceLocator.getBusinessObjectService().delete(oleEntityAddressBo.getOleAddressBo());
1062                             KRADServiceLocator.getBusinessObjectService().delete(oleEntityAddressBo.getEntityAddressBo());
1063                         }
1064                     }
1065                     Map<String, String> mapEntityId = new HashMap<String, String>();
1066                     mapEntityId.put("entityId", newOlePatronDocument.getOlePatronId());
1067                     List<EntityEmailBo> emailBoList = tempDocument.getEntity().getEntityTypeContactInfos().get(0).getEmailAddresses();
1068                     if(newOlePatronDocument.getDeletedEmails().size()>0){
1069                         KRADServiceLocator.getBusinessObjectService().delete(newOlePatronDocument.getDeletedEmails());
1070                     }
1071                     List<EntityNameBo> entityNameBos = tempDocument.getEntity().getNames();
1072                     if (entityNameBos.size() > 0) {
1073                         KRADServiceLocator.getBusinessObjectService().deleteMatching(EntityNameBo.class,mapEntityId);
1074                     }
1075                     if(newOlePatronDocument.getDeletedPhones().size()>0){
1076                         KRADServiceLocator.getBusinessObjectService().delete(newOlePatronDocument.getDeletedPhones());
1077                     }
1078                     if(newOlePatronDocument.getDeletedNotes().size()>0){
1079                         KRADServiceLocator.getBusinessObjectService().delete(newOlePatronDocument.getDeletedNotes());
1080                     }
1081 
1082                     List<OlePatronLostBarcode> lostBarcodeList = tempDocument.getLostBarcodes();
1083                     if (lostBarcodeList.size() > 0) {
1084                         KRADServiceLocator.getBusinessObjectService().delete(lostBarcodeList);
1085                     }
1086                     if(newOlePatronDocument.getDeletedEmployments().size()>0){
1087                         KRADServiceLocator.getBusinessObjectService().delete(newOlePatronDocument.getDeletedEmployments());
1088                     }
1089                     if(newOlePatronDocument.getDeletedPatronAffiliations().size()>0){
1090                         for(OlePatronAffiliation olePatronAffiliation:newOlePatronDocument.getDeletedPatronAffiliations()){
1091                            if(olePatronAffiliation.getEmployments()!=null && olePatronAffiliation.getEmployments().size()>0){
1092                                KRADServiceLocator.getBusinessObjectService().delete(newOlePatronDocument.getDeletedOleProxyPatronDocuments());
1093                            }
1094                            Map<String,String> affiliationsMap=new HashMap<String,String>();
1095                            affiliationsMap.put("id",olePatronAffiliation.getEntityAffiliationId());
1096                             KRADServiceLocator.getBusinessObjectService().deleteMatching(EntityAffiliationBo.class,affiliationsMap);
1097 
1098                         }
1099                     }
1100                     if(newOlePatronDocument.getDeletedOleProxyPatronDocuments().size()>0){
1101                        KRADServiceLocator.getBusinessObjectService().delete(newOlePatronDocument.getDeletedOleProxyPatronDocuments());
1102                     }
1103                     if(newOlePatronDocument.getDeletedOlePatronLocalIds().size()>0){
1104                         KRADServiceLocator.getBusinessObjectService().delete(newOlePatronDocument.getDeletedOlePatronLocalIds());
1105                     }
1106                 }
1107             }
1108         }
1109         if (newOlePatronDocument.getLostBarcodes() != null) {
1110             for (OlePatronLostBarcode lostBarcodes : newOlePatronDocument.getLostBarcodes()) {
1111                 if (lostBarcodes.getInvalidOrLostBarcodeNumber().equalsIgnoreCase(newOlePatronDocument.getBarcode())) {
1112                     lostBarcodes.setActive(true);
1113                 }
1114             }
1115         }
1116         if (KRADConstants.MAINTENANCE_EDIT_ACTION.equals(action)) {
1117             newOlePatronDocument.setEntity(olePatronHelperService.editAndSaveEntityBo(newOlePatronDocument));
1118             Map<String, Object> criteria = new HashMap<String, Object>();
1119             criteria.put(OLEConstants.OlePatron.PATRON_ID, newOlePatronDocument.getOlePatronId());
1120             KRADServiceLocator.getBusinessObjectService().deleteMatching(OleAddressBo.class, criteria);
1121             prepareOleAddressForSave(newOlePatronDocument);
1122         }
1123         if (KRADConstants.MAINTENANCE_COPY_ACTION.equals(action) || KRADConstants.MAINTENANCE_NEW_ACTION.equals(action)) {
1124             newOlePatronDocument.setEntity(olePatronHelperService.copyAndSaveEntityBo(newOlePatronDocument));
1125             newOlePatronDocument.setOlePatronId(newOlePatronDocument.getEntity().getId());
1126             for (OleEntityAddressBo oleEntityAddressBo : newOlePatronDocument.getOleEntityAddressBo()) {
1127                if(oleEntityAddressBo.getOleAddressBo()!=null){
1128                    oleEntityAddressBo.getOleAddressBo().setOleAddressId(null);
1129                }
1130             }
1131             prepareOleAddressForSave(newOlePatronDocument);
1132         }
1133 
1134         if(StringUtils.isNotBlank(newOlePatronDocument.getOlePatronId())){
1135             Map<String,String> notesMap=new HashMap<String,String>();
1136             notesMap.put("olePatronId", newOlePatronDocument.getOlePatronId());
1137             List<OlePatronNotes>  olePatronNotesList = (List<OlePatronNotes>) KRADServiceLocator.getBusinessObjectService().findMatching(OlePatronNotes.class,notesMap);
1138             if(CollectionUtils.isNotEmpty(olePatronNotesList)){
1139                 Map<String,OlePatronNotes> patronNotesMap = new HashMap<>();
1140                 for(OlePatronNotes olePatronNotes  : olePatronNotesList){
1141                     patronNotesMap.put(olePatronNotes.getPatronNoteId(),olePatronNotes);
1142                 }
1143                 if(CollectionUtils.isNotEmpty(newOlePatronDocument.getNotes())){
1144                     for(OlePatronNotes olePatronNotes : newOlePatronDocument.getNotes()){
1145                         if(patronNotesMap.containsKey(olePatronNotes.getPatronNoteId())){
1146                             OlePatronNotes patronDbNote = patronNotesMap.get(olePatronNotes.getPatronNoteId());
1147                             if(!patronDbNote.getPatronNoteTypeId().equals(olePatronNotes.getPatronNoteTypeId()) ||
1148                                     !patronDbNote.getPatronNoteText().equals(olePatronNotes.getPatronNoteText())){
1149                                 olePatronNotes.setOperatorId(GlobalVariables.getUserSession().getPrincipalId());
1150                                 olePatronNotes.setNoteCreatedOrUpdatedDate(new Timestamp(System.currentTimeMillis()));
1151                             }
1152                         }
1153                     }
1154                 }
1155             }
1156         }
1157 
1158         ModelAndView model = null;
1159         try {
1160             model = super.route(mainForm, result, request, response);
1161         } catch (Exception e) {
1162             return model;
1163         }
1164         return model;
1165     }
1166 
1167 
1168     @RequestMapping(params = "methodToCall=lostBarcode")
1169     public ModelAndView lostBarcode(@ModelAttribute("KualiForm") DocumentFormBase form, BindingResult result,
1170                                     HttpServletRequest request, HttpServletResponse response) {
1171 
1172         LOG.debug(" Inside route method of patron maintenance controller ");
1173         ModelAndView modelAndView;
1174         MaintenanceDocumentForm mainForm = (MaintenanceDocumentForm) form;
1175         MaintenanceDocument document = (MaintenanceDocument) form.getDocument();
1176         OlePatronDocument newOlePatronDocument = (OlePatronDocument) document.getNewMaintainableObject().getDataObject();
1177         if (StringUtils.isBlank(newOlePatronDocument.getBarcode()) || StringUtils.isEmpty(newOlePatronDocument.getBarcode())) {
1178             newOlePatronDocument.setBarcodeEditable(true);
1179             GlobalVariables.getMessageMap().putError(KRADConstants.GLOBAL_ERRORS, OLEConstants.OlePatron.ERROR_REQUIRED, new String[]{"Barcode"});
1180             return getUIFModelAndView(mainForm);
1181         }
1182         newOlePatronDocument.setReinstated(false);
1183         boolean isBarcodeExistInOLE = false;
1184         Map<String, String> patronMap = new HashMap<String, String>();
1185         patronMap.put(OLEConstants.OlePatron.PATRON_ID, newOlePatronDocument.getOlePatronId());
1186         OlePatronDocument patronDocument = (OlePatronDocument) KRADServiceLocator.getBusinessObjectService().findByPrimaryKey(OlePatronDocument.class, patronMap);
1187         if (newOlePatronDocument.getBarcode() != null && (!newOlePatronDocument.getBarcode().equalsIgnoreCase(""))) {
1188             Map<String, String> map = new HashMap<String, String>();
1189             map.put(OLEConstants.OlePatron.PATRON_ID, newOlePatronDocument.getOlePatronId());
1190             map.put("active", "N");
1191             List<OlePatronLostBarcode> olePatronLostBarcodes = (List<OlePatronLostBarcode>) KRADServiceLocator.getBusinessObjectService().findMatching(OlePatronLostBarcode.class, map);
1192             if (olePatronLostBarcodes.size() > 0 && (!newOlePatronDocument.isSkipBarcodeValidation())) {
1193                 isBarcodeExistInOLE = true;
1194             }
1195             if (patronDocument != null && patronDocument.getBarcode() != null && patronDocument.getBarcode().equalsIgnoreCase(newOlePatronDocument.getBarcode())) {
1196                 isBarcodeExistInOLE = true;
1197             }
1198         }
1199         if (LOG.isDebugEnabled()){
1200             LOG.debug("Allow the patron to add barcode "+isBarcodeExistInOLE);
1201         }
1202         if (!isBarcodeExistInOLE) {
1203             // Added validation for if barcode exist in OLE system
1204             newOlePatronDocument.setBarcodeEditable(true);
1205             GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.OlePatron.ERROR_BARCODE_EXIST_LOST_SECTION);
1206             return getUIFModelAndView(mainForm);
1207         }
1208         for(OlePatronLostBarcode olePatronLostBarcode:newOlePatronDocument.getLostBarcodes()){
1209             // Added validation if barcode exist in current section to restrict duplicacy
1210             if(olePatronLostBarcode.getInvalidOrLostBarcodeNumber()!=null && olePatronLostBarcode.getInvalidOrLostBarcodeNumber().equalsIgnoreCase(newOlePatronDocument.getBarcode())){
1211                 if (!(patronDocument != null && patronDocument.getBarcode().equalsIgnoreCase(newOlePatronDocument.getBarcode()))) {
1212                     GlobalVariables.getMessageMap().putError(KRADConstants.GLOBAL_ERRORS, OLEConstants.OlePatron.ERROR_REQUIRED, new String[]{"Barcode"});
1213                     return getUIFModelAndView(mainForm);
1214                 }
1215             }
1216         }
1217         if (isBarcodeExistInOLE) {
1218             if (!newOlePatronDocument.isInvalidateBarcode()) {
1219                 if (StringUtils.isBlank(newOlePatronDocument.getBarcode()) || StringUtils.isEmpty(newOlePatronDocument.getBarcode())) {
1220                     GlobalVariables.getMessageMap().putError(KRADConstants.GLOBAL_ERRORS, OLEConstants.OlePatron.ERROR_REQUIRED, new String[]{"Barcode"});
1221                     return getUIFModelAndView(mainForm);
1222                 }
1223                 newOlePatronDocument.setBarcodeEditable(true);
1224                 newOlePatronDocument.setLostDescription("");
1225                 newOlePatronDocument.setInvalidateBarcode(true);
1226                 return getUIFModelAndView(mainForm);
1227             }
1228             boolean isBarcodeExist = false;
1229             newOlePatronDocument.setBarcodeChanged(true);
1230             newOlePatronDocument.setInvalidateBarcode(false);
1231             String lostBarcode = newOlePatronDocument.getBarcode();
1232             OlePatronLostBarcode olePatronLostBarcode = new OlePatronLostBarcode();
1233             olePatronLostBarcode.setInvalidOrLostBarcodeNumber(lostBarcode);
1234             olePatronLostBarcode.setInvalidOrLostBarcodeEffDate(new java.sql.Timestamp(getDateTimeService().getCurrentDate().getTime()));
1235             olePatronLostBarcode.setRevertBarcode(true);
1236             if(StringUtils.isBlank(newOlePatronDocument.getLostOperatorId())) {
1237                 olePatronLostBarcode.setOperatorId(GlobalVariables.getUserSession().getPrincipalId());
1238             }else {
1239                 olePatronLostBarcode.setOperatorId(newOlePatronDocument.getLostOperatorId());
1240             }
1241             olePatronLostBarcode.setDescription(newOlePatronDocument.getLostDescription());
1242             olePatronLostBarcode.setStatus(newOlePatronDocument.getLostStatus());
1243             /*for (OlePatronLostBarcode lostBarcodes : newOlePatronDocument.getLostBarcodes()) {
1244                 if (lostBarcodes.getInvalidOrLostBarcodeNumber().equalsIgnoreCase(lostBarcode)) {
1245                     lostBarcodes.setDescription(newOlePatronDocument.getLostDescription());
1246                     lostBarcodes.setStatus(newOlePatronDocument.getLostStatus());
1247                     isBarcodeExist = true;
1248                 }
1249             }*/
1250             List<OlePatronLostBarcode> lostBarcodes = newOlePatronDocument.getLostBarcodes();
1251             List<OlePatronLostBarcode> lostBarcodeList = new ArrayList<OlePatronLostBarcode>();
1252             if (!isBarcodeExist) {
1253                 lostBarcodeList.add(olePatronLostBarcode);
1254                 if (lostBarcodes.size() > 0) {
1255                     for (OlePatronLostBarcode lostPatronBarcode : lostBarcodes) {
1256                         lostPatronBarcode.setRevertBarcode(false);
1257                         lostBarcodeList.add(lostPatronBarcode);
1258                     }
1259                 }
1260                 newOlePatronDocument.setLostBarcodes(lostBarcodeList);
1261             }
1262             newOlePatronDocument.setReinstated(false);
1263             newOlePatronDocument.setBarcode(null);
1264             GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.OlePatron.ENTER_PATRON_BARCODE);
1265         }
1266         return getUIFModelAndView(mainForm);
1267     }
1268 
1269     @RequestMapping(params = "methodToCall=reinstateBarcode")
1270     public ModelAndView reinstateBarcode(@ModelAttribute("KualiForm") DocumentFormBase form, BindingResult result,
1271                                          HttpServletRequest request, HttpServletResponse response) {
1272 
1273         LOG.debug(" Inside route method of patron maintenance controller ");
1274         ModelAndView modelAndView;
1275         MaintenanceDocumentForm mainForm = (MaintenanceDocumentForm) form;
1276         MaintenanceDocument document = (MaintenanceDocument) form.getDocument();
1277         OlePatronDocument newOlePatronDocument = (OlePatronDocument) document.getNewMaintainableObject().getDataObject();
1278         String oldBarcode=newOlePatronDocument.getBarcode();
1279         if (!newOlePatronDocument.isReinstateBarcode()) {
1280             newOlePatronDocument.setReinstateBarcode(true);
1281             if (oldBarcode != null && !oldBarcode.equalsIgnoreCase("")) {
1282                 newOlePatronDocument.setBarcodeEditable(false);
1283             } else {
1284                 newOlePatronDocument.setBarcodeEditable(true);
1285             }
1286             return getUIFModelAndView(mainForm);
1287         }
1288         //adding or updating  older barcode to lost barcode table
1289 
1290         boolean isBarcodeExistInOLE=false;
1291 
1292         if (oldBarcode != null && !oldBarcode.equalsIgnoreCase("")) {
1293             Map<String, String> map = new HashMap<String, String>();
1294             map.put(OLEConstants.OlePatron.PATRON_LOST_BARCODE_FLD, newOlePatronDocument.getBarcode());
1295             List<OlePatronLostBarcode> olePatronLostBarcodes = (List<OlePatronLostBarcode>) KRADServiceLocator.getBusinessObjectService().findMatching(OlePatronLostBarcode.class, map);
1296             map.clear();
1297             map.put("barcode",oldBarcode);
1298             List<OlePatronDocument> patronDocuments = (List<OlePatronDocument>) KRADServiceLocator.getBusinessObjectService().findMatching(OlePatronDocument.class, map);
1299             if (olePatronLostBarcodes.size() > 0 || patronDocuments.size()>0) {
1300                  isBarcodeExistInOLE=true;
1301             }
1302             if(!isBarcodeExistInOLE){
1303                 GlobalVariables.getMessageMap().putError(KRADConstants.GLOBAL_ERRORS,OLEConstants.OlePatron.PATRON_BARCODE_DOES_NOT_EXIST_REINSTATE,new String[]{oldBarcode});
1304             }
1305         }
1306         OlePatronLostBarcode olePatronLostBarcodeHistory = new OlePatronLostBarcode();
1307         for (OlePatronLostBarcode olePatronLostBarcode : newOlePatronDocument.getLostBarcodes()) {
1308             if (olePatronLostBarcode.isActive()) {
1309                 newOlePatronDocument.setBarcode(olePatronLostBarcode.getInvalidOrLostBarcodeNumber());
1310                 olePatronLostBarcodeHistory.setOperatorId(GlobalVariables.getUserSession().getPrincipalId());
1311                 olePatronLostBarcodeHistory.setInvalidOrLostBarcodeNumber(newOlePatronDocument.getBarcode());
1312                 olePatronLostBarcodeHistory.setInvalidOrLostBarcodeEffDate(new java.sql.Timestamp(getDateTimeService().getCurrentDate().getTime()));
1313                 olePatronLostBarcodeHistory.setRevertBarcode(true);
1314                 olePatronLostBarcodeHistory.setDescription(newOlePatronDocument.getLostDescription());
1315                 olePatronLostBarcodeHistory.setStatus(newOlePatronDocument.getLostStatus());
1316             }
1317 
1318         }
1319         newOlePatronDocument.getLostBarcodes().add(olePatronLostBarcodeHistory);
1320 
1321         OlePatronLostBarcode invalidBarcode = new OlePatronLostBarcode();
1322         invalidBarcode.setInvalidOrLostBarcodeNumber(oldBarcode);
1323         invalidBarcode.setInvalidOrLostBarcodeEffDate(new java.sql.Timestamp(getDateTimeService().getCurrentDate().getTime()));
1324         invalidBarcode.setDescription(OLEConstants.OlePatron.NEWBARCODE_DESCRIPTION);
1325         invalidBarcode.setStatus(OLEConstants.OlePatron.NEWBARCODE_STATUS);
1326         invalidBarcode.setOperatorId(GlobalVariables.getUserSession().getPrincipalId());
1327         newOlePatronDocument.getLostBarcodes().add(invalidBarcode);
1328 
1329         /*if(olePatronLostBarcode.getInvalidOrLopeople.getPrincipalName()stBarcodeNumber().equalsIgnoreCase(oldBarcode)){
1330             olePatronLostBarcode.setDescription(OLEConstants.OlePatron.NEWBARCODE_DESCRIPTION);
1331             olePatronLostBarcode.setStatus(OLEConstants.OlePatron.NEWBARCODE_STATUS);
1332             olePatronLostBarcode.setActive(false);
1333         }*/
1334         boolean isOldBarcodeExist=false;
1335         for (OlePatronLostBarcode olePatronLostBarcode : newOlePatronDocument.getLostBarcodes()) {
1336             if (olePatronLostBarcode.getInvalidOrLostBarcodeNumber().equalsIgnoreCase(oldBarcode)) {
1337                 isOldBarcodeExist=true;
1338             }
1339         }
1340         if (oldBarcode != null && !oldBarcode.equalsIgnoreCase("")) {
1341             if (!isOldBarcodeExist && isBarcodeExistInOLE) {
1342                 OlePatronLostBarcode olePatronLostBarcode = new OlePatronLostBarcode();
1343                 olePatronLostBarcode.setInvalidOrLostBarcodeNumber(oldBarcode);
1344                 olePatronLostBarcode.setInvalidOrLostBarcodeEffDate(new java.sql.Timestamp(getDateTimeService().getCurrentDate().getTime()));
1345                 olePatronLostBarcode.setRevertBarcode(true);
1346                 olePatronLostBarcode.setDescription(OLEConstants.OlePatron.NEWBARCODE_DESCRIPTION);
1347                 olePatronLostBarcode.setStatus(OLEConstants.OlePatron.NEWBARCODE_STATUS);
1348                 //Person people = SpringContext.getBean(PersonService.class).getPerson(GlobalVariables.getUserSession().getPrincipalId());
1349                 olePatronLostBarcode.setOperatorId(GlobalVariables.getUserSession().getPrincipalId());
1350                 newOlePatronDocument.getLostBarcodes().add(olePatronLostBarcode);
1351             }
1352         }
1353         newOlePatronDocument.setBarcodeEditable(false);
1354         newOlePatronDocument.setBarcodeChanged(true);
1355         newOlePatronDocument.setReinstated(true);
1356         newOlePatronDocument.setSkipBarcodeValidation(true);
1357         newOlePatronDocument.setReinstateBarcode(false);
1358         return getUIFModelAndView(mainForm);
1359     }
1360 
1361     @RequestMapping(params = "methodToCall=refreshInvalidOrLostBarcodeSection")
1362     public ModelAndView refreshInvalidOrLostBarcodeSection(@ModelAttribute("KualiForm") DocumentFormBase form, BindingResult result,
1363                                                            HttpServletRequest request, HttpServletResponse response) {
1364 
1365         LOG.debug(" Inside route method of patron maintenance controller ");
1366         ModelAndView modelAndView;
1367         MaintenanceDocumentForm mainForm = (MaintenanceDocumentForm) form;
1368         MaintenanceDocument document = (MaintenanceDocument) form.getDocument();
1369         OlePatronDocument newOlePatronDocument = (OlePatronDocument) document.getNewMaintainableObject().getDataObject();
1370         for (OlePatronLostBarcode lostBarcode : newOlePatronDocument.getLostBarcodes()) {
1371             if (lostBarcode.getId() != null) {
1372                 Map<String, String> map = new HashMap<String, String>();
1373                 map.put(OLEConstants.OlePatron.PATRON_ID, lostBarcode.getId());
1374                 OlePatronLostBarcode olePatronLostBarcode = (OlePatronLostBarcode) KRADServiceLocator.getBusinessObjectService().findByPrimaryKey(OlePatronLostBarcode.class, map);
1375                 if (olePatronLostBarcode != null) {
1376                     lostBarcode.setActive(olePatronLostBarcode.isActive());
1377                 } else {
1378                     lostBarcode.setActive(false);
1379                 }
1380             }
1381             if(lostBarcode.getId() == null) {
1382                 lostBarcode.setActive(false);
1383             }
1384         }
1385         return navigate(form, result, request, response);
1386     }
1387 
1388     @RequestMapping(params = "methodToCall=uploadImage")
1389     public ModelAndView uploadImage(@ModelAttribute("KualiForm") DocumentFormBase form, BindingResult result,
1390                                     HttpServletRequest request, HttpServletResponse response) {
1391         ModelAndView modelAndView;
1392         MaintenanceDocumentForm mainForm = (MaintenanceDocumentForm) form;
1393         MaintenanceDocument document = (MaintenanceDocument) form.getDocument();
1394         OlePatronDocument newOlePatronDocument = (OlePatronDocument) document.getNewMaintainableObject().getDataObject();
1395         MultipartFile multipartFile = mainForm.getAttachmentFile();
1396         if (multipartFile == null) {
1397             GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.OlePatron.ERROR_PATRON_PHOTOGRAPH_WITHOUT_FILE);
1398             return getUIFModelAndView(mainForm);
1399         }
1400         String fileName = multipartFile.getOriginalFilename();
1401         if (validateFile(multipartFile.getOriginalFilename())) {
1402             try {
1403                 byte[] fileContent = multipartFile.getBytes();
1404                 BufferedImage patronImage = ImageIO.read(new ByteArrayInputStream(fileContent));
1405                 if (patronImage.getWidth() >= 100 || patronImage.getHeight() >= 100) {
1406                     BufferedImage resizedImage = new BufferedImage(100, 100, 1);
1407                     Graphics2D g = resizedImage.createGraphics();
1408                     g.drawImage(patronImage, 0, 0, 100, 100, null);
1409                     g.dispose();
1410                     ByteArrayOutputStream baos = new ByteArrayOutputStream();
1411                     ImageIO.write(resizedImage, "jpg", baos);
1412                     byte[] res = baos.toByteArray();
1413                     imageInByte = baos.toByteArray();
1414                     newOlePatronDocument.setPatronPhotograph(res);
1415                 } else {
1416                     GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.OlePatron.ERROR_PATRON_PHOTOGRAPH_SIZE);
1417                     return getUIFModelAndView(mainForm);
1418                 }
1419             } catch (Exception ex) {
1420                 LOG.error("Exception while uploading image", ex);
1421             }
1422         } else if (fileName != null && fileName.isEmpty()) {
1423             GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.OlePatron.ERROR_PATRON_PHOTOGRAPH_WITHOUT_FILE);
1424             return getUIFModelAndView(mainForm);
1425         } else {
1426             GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.OlePatron.ERROR_PATRON_PHOTOGRAPH_FORMAT);
1427             return getUIFModelAndView(mainForm);
1428         }
1429 
1430         return getUIFModelAndView(mainForm);
1431     }
1432 
1433     @RequestMapping(params = "methodToCall=deleteImage")
1434     public ModelAndView deleteImage(@ModelAttribute("KualiForm") DocumentFormBase form, BindingResult result,
1435                                     HttpServletRequest request, HttpServletResponse response) {
1436         MaintenanceDocumentForm mainForm = (MaintenanceDocumentForm) form;
1437         MaintenanceDocument document = (MaintenanceDocument) form.getDocument();
1438         OlePatronDocument newOlePatronDocument = (OlePatronDocument) document.getNewMaintainableObject().getDataObject();
1439         newOlePatronDocument.setPatronPhotograph(null);
1440         newOlePatronDocument.setDeleteImageFlag(true);
1441         return getUIFModelAndView(mainForm);
1442     }
1443 
1444     /**
1445      * This method validate the image file type.
1446      *
1447      * @param inputFile
1448      * @return boolean
1449      */
1450     public boolean validateFile(String inputFile) {
1451         return (inputFile.contains(".jpg") || inputFile.contains(".png") || inputFile.contains(".jpeg") || inputFile.contains(".gif") ? true : false);
1452     }
1453 
1454     @RequestMapping(params = "methodToCall=getImage")
1455     public ModelAndView getImage(@ModelAttribute("KualiForm") MaintenanceDocumentForm form, BindingResult result,
1456                                  HttpServletRequest request, HttpServletResponse response) {
1457         try {
1458             String inquiry = "false";
1459             if (request.getParameter("patronInquiryFlag") != null) {
1460                 inquiry = (String) request.getParameter("patronInquiryFlag");
1461             }
1462             String deleteImageFlag = (String)request.getParameter("deleteImageFlag");
1463             if (inquiry.equalsIgnoreCase("false")) {
1464                 String patronId = request.getParameter(OLEConstants.OlePatron.PATRON_ID);
1465                 if (patronId != null && !patronId.equals("")) {
1466                     Map patronMap = new HashMap();
1467                     patronMap.put(OLEConstants.OlePatron.PATRON_ID, patronId);
1468                     OlePatronDocument olePatronDocument = KRADServiceLocator.getBusinessObjectService().findByPrimaryKey(OlePatronDocument.class, patronMap);
1469                     byte[] patronPhoto = olePatronDocument.getPatronPhotograph();
1470                     if (patronPhoto != null && deleteImageFlag.equals("false")) {
1471                         if (imageInByte == null || !patronPhoto.equals(imageInByte)) {
1472                             response.setContentType("image/jpg");
1473                             response.getOutputStream().write(patronPhoto);
1474                         } else {
1475                             response.setContentType("image/jpg");
1476                             response.getOutputStream().write(imageInByte);
1477                         }
1478                     } else {
1479                         response.setContentType("image/jpg");
1480                         response.getOutputStream().write(imageInByte);
1481                     }
1482                 } else {
1483                     if (imageInByte != null) {
1484                         response.setContentType("image/jpg");
1485                         response.getOutputStream().write(imageInByte);
1486                     }
1487                 }
1488             } else {
1489 
1490                 Map patronMap = new HashMap();
1491                 String patronId = request.getParameter(OLEConstants.OlePatron.PATRON_ID);
1492                 if (patronId != null && !patronId.equals("")) {
1493                     patronMap.put(OLEConstants.OlePatron.PATRON_ID, patronId);
1494                     OlePatronDocument olePatronDocument = KRADServiceLocator.getBusinessObjectService().findByPrimaryKey(OlePatronDocument.class, patronMap);
1495                     olePatronDocument.setDeleteImageFlag(false);
1496                     byte[] patronPhoto = olePatronDocument.getPatronPhotograph();
1497                     if (patronPhoto != null) {
1498                         response.setContentType("image/jpg");
1499                         response.getOutputStream().write(patronPhoto);
1500                     }
1501                 }
1502             }
1503 
1504         } catch (Exception ex) {
1505             LOG.error("Exception while getting image", ex);
1506         }
1507         return null;
1508     }
1509 
1510     @RequestMapping(params = "methodToCall=getImageForLoan")
1511     public ModelAndView getImageForLoan(@ModelAttribute("KualiForm") MaintenanceDocumentForm form, BindingResult result,
1512                                         HttpServletRequest request, HttpServletResponse response) {
1513         try {
1514             String patronId = request.getParameter(OLEConstants.OlePatron.PATRON_ID);
1515             if (patronId != null && !patronId.equals("")) {
1516                 Map patronMap = new HashMap();
1517                 patronMap.put(OLEConstants.OlePatron.PATRON_ID, patronId);
1518                 OlePatronDocument olePatronDocument = KRADServiceLocator.getBusinessObjectService().findByPrimaryKey(OlePatronDocument.class, patronMap);
1519                 byte[] patronPhoto = olePatronDocument.getPatronPhotograph();
1520                 if (patronPhoto != null) {
1521                     response.setContentType("image/jpg");
1522                     response.getOutputStream().write(patronPhoto);
1523                 }
1524             }
1525         } catch (Exception ex) {
1526             LOG.error("Exception while getting image for loan", ex);
1527         }
1528         return null;
1529     }
1530 
1531     @RequestMapping(params = "methodToCall=refreshProgGroup")
1532     public ModelAndView refreshProgGroup(@ModelAttribute("KualiForm") MaintenanceDocumentForm form, BindingResult result,
1533                                          HttpServletRequest request, HttpServletResponse response) throws Exception {
1534         ModelAndView modelAndView;
1535         MaintenanceDocumentForm mainForm = (MaintenanceDocumentForm) form;
1536         MaintenanceDocument document = (MaintenanceDocument) form.getDocument();
1537         OlePatronDocument newOlePatronDocument = (OlePatronDocument) document.getNewMaintainableObject().getDataObject();
1538         if (newOlePatronDocument.getOleLoanDocuments() != null) {
1539             for (OleLoanDocument loanDocument : newOlePatronDocument.getOleLoanDocuments()) {
1540                 if(loanDocument.isMissingPieceFlag() && loanDocument.getMissingPiecesCount()==null || (loanDocument.getMissingPiecesCount()!=null && loanDocument.getMissingPiecesCount().equalsIgnoreCase(""))){
1541                     loanDocument.setNoOfMissingPiecesEditable(true);
1542                 } else {
1543                     loanDocument.setNoOfMissingPiecesEditable(false);
1544                 }
1545 
1546                 if(loanDocument.isMissingPieceFlag() && loanDocument.getItemNumberOfPieces()==null || (loanDocument.getItemNumberOfPieces()!=null && loanDocument.getItemNumberOfPieces().toString().equalsIgnoreCase(""))){
1547                     loanDocument.setNoOfPiecesEditable(true);
1548                 } else {
1549                     loanDocument.setNoOfPiecesEditable(false);
1550                 }
1551             }
1552         }
1553 
1554         return getUIFModelAndView(form);
1555     }
1556 
1557     /**
1558      * This method initiate LoanProcessor.
1559      *
1560      * @return LoanProcessor
1561      */
1562     private LoanProcessor getLoanProcessor() {
1563         if (loanProcessor == null) {
1564             loanProcessor = new LoanProcessor();
1565         }
1566         return loanProcessor;
1567     }
1568 
1569     private void prepareOleAddressForSave(OlePatronDocument newOlePatronDocument) {
1570         if (newOlePatronDocument.getOleEntityAddressBo() != null) {
1571             newOlePatronDocument.getOleAddresses().clear();
1572             int i=0;
1573             for (OleEntityAddressBo oleEntityAddressBo : newOlePatronDocument.getOleEntityAddressBo()) {
1574                 if (oleEntityAddressBo.getEntityAddressBo().getId() == null) {
1575                     if (newOlePatronDocument.getEntity() != null && newOlePatronDocument.getEntity().getEntityTypeContactInfos() != null && newOlePatronDocument.getEntity().getEntityTypeContactInfos().size() > 0) {
1576                         EntityTypeContactInfoBo entityTypeContactInfo = (EntityTypeContactInfoBo) newOlePatronDocument.getEntity().getEntityTypeContactInfos().get(0);
1577                         if (entityTypeContactInfo.getAddresses() != null && entityTypeContactInfo.getAddresses().size() > 0 && entityTypeContactInfo.getAddresses().size()>i) {
1578                             if(oleEntityAddressBo.getEntityAddressBo()!=null){
1579                                entityTypeContactInfo.getAddresses().get(i).setDefaultValue(oleEntityAddressBo.getEntityAddressBo().isDefaultValue());
1580                                 entityTypeContactInfo.getAddresses().get(i).setActive(oleEntityAddressBo.getEntityAddressBo().isActive());
1581                             }
1582                             oleEntityAddressBo.setEntityAddressBo(entityTypeContactInfo.getAddresses().get(i));
1583                         }
1584                     }
1585                 }
1586                 i++;
1587             }
1588             for (OleEntityAddressBo oleEntityAddressBo : newOlePatronDocument.getOleEntityAddressBo()) {
1589                 if (oleEntityAddressBo.getEntityAddressBo() != null && oleEntityAddressBo.getEntityAddressBo().getId() != null) {
1590 
1591                     oleEntityAddressBo.getOleAddressBo().setOleAddressId(KRADServiceLocator.getSequenceAccessorService().getNextAvailableSequenceNumber("OLE_DLVR_ADD_S").toString());
1592 
1593                     oleEntityAddressBo.getOleAddressBo().setId(oleEntityAddressBo.getEntityAddressBo().getId());
1594                     oleEntityAddressBo.getOleAddressBo().setOlePatronId(newOlePatronDocument.getOlePatronId());
1595                     oleEntityAddressBo.getOleAddressBo().setVersionNumber(null);
1596                     oleEntityAddressBo.getOleAddressBo().setObjectId(null);
1597                     oleEntityAddressBo.getOleAddressBo().setAddressSource(oleEntityAddressBo.getOleAddressBo().getAddressSource());
1598                     oleEntityAddressBo.getOleAddressBo().setAddressValidFrom(oleEntityAddressBo.getOleAddressBo().getAddressValidFrom());
1599                     oleEntityAddressBo.getOleAddressBo().setAddressValidTo(oleEntityAddressBo.getOleAddressBo().getAddressValidTo());
1600                     oleEntityAddressBo.getOleAddressBo().setAddressVerified(oleEntityAddressBo.getOleAddressBo().isAddressVerified());
1601                 }
1602                 OleAddressBo oleAddressBo = (OleAddressBo) ObjectUtils.deepCopy(oleEntityAddressBo.getOleAddressBo());
1603                 EntityAddressBo entityAddressBo = (EntityAddressBo) ObjectUtils.deepCopy(oleEntityAddressBo.getEntityAddressBo());
1604                 oleEntityAddressBo.getOleAddressBo().setEntityAddress(entityAddressBo);
1605                 newOlePatronDocument.getOleAddresses().add(oleAddressBo);
1606             }
1607         }
1608     }
1609 
1610     @RequestMapping(method = RequestMethod.POST, params = "methodToCall=deleteAddress")
1611     public ModelAndView deleteAddress(@ModelAttribute("KualiForm") UifFormBase uifForm, BindingResult result,
1612                                         HttpServletRequest request, HttpServletResponse response) {
1613         LOG.debug("Initialized addLine method");
1614         MaintenanceDocumentForm form = (MaintenanceDocumentForm) uifForm;
1615         String selectedLineIndex = form.getActionParamaterValue(UifParameters.SELECTED_LINE_INDEX);
1616         MaintenanceDocument document = (MaintenanceDocument) form.getDocument();
1617         OlePatronDocument newOlePatronDocument = (OlePatronDocument) document.getNewMaintainableObject().getDataObject();
1618         newOlePatronDocument.getDeletedOleEntityAddressBo().add(newOlePatronDocument.getOleEntityAddressBo().get(Integer.parseInt(selectedLineIndex)));
1619         return deleteLine(uifForm, result, request, response);
1620     }
1621 
1622     @RequestMapping(method = RequestMethod.POST, params = "methodToCall=deletePhoneNumber")
1623     public ModelAndView deletePhoneNumber(@ModelAttribute("KualiForm") UifFormBase uifForm, BindingResult result,
1624                                         HttpServletRequest request, HttpServletResponse response) {
1625         LOG.debug("Initialized addLine method");
1626         MaintenanceDocumentForm form = (MaintenanceDocumentForm) uifForm;
1627         String selectedLineIndex = form.getActionParamaterValue(UifParameters.SELECTED_LINE_INDEX);
1628         MaintenanceDocument document = (MaintenanceDocument) form.getDocument();
1629         OlePatronDocument newOlePatronDocument = (OlePatronDocument) document.getNewMaintainableObject().getDataObject();
1630         newOlePatronDocument.getDeletedPhones().add(newOlePatronDocument.getPhones().get(Integer.parseInt(selectedLineIndex)));
1631         return deleteLine(uifForm, result, request, response);
1632 
1633     }
1634 
1635     @RequestMapping(method = RequestMethod.POST, params = "methodToCall=deleteEmailAddress")
1636     public ModelAndView deleteEmailAddress(@ModelAttribute("KualiForm") UifFormBase uifForm, BindingResult result,
1637                                         HttpServletRequest request, HttpServletResponse response) {
1638         LOG.debug("Initialized addLine method");
1639         MaintenanceDocumentForm form = (MaintenanceDocumentForm) uifForm;
1640         String selectedLineIndex = form.getActionParamaterValue(UifParameters.SELECTED_LINE_INDEX);
1641         MaintenanceDocument document = (MaintenanceDocument) form.getDocument();
1642         OlePatronDocument newOlePatronDocument = (OlePatronDocument) document.getNewMaintainableObject().getDataObject();
1643         newOlePatronDocument.getDeletedEmails().add(newOlePatronDocument.getEmails().get(Integer.parseInt(selectedLineIndex)));
1644         return deleteLine(uifForm, result, request, response);
1645 
1646     }
1647 
1648     @RequestMapping(method = RequestMethod.POST, params = "methodToCall=deleteProxyPatron")
1649     public ModelAndView deleteProxyPatron(@ModelAttribute("KualiForm") UifFormBase uifForm, BindingResult result,
1650                                           HttpServletRequest request, HttpServletResponse response) {
1651         LOG.debug("Initialized addLine method");
1652         MaintenanceDocumentForm form = (MaintenanceDocumentForm) uifForm;
1653         String selectedLineIndex = form.getActionParamaterValue(UifParameters.SELECTED_LINE_INDEX);
1654         MaintenanceDocument document = (MaintenanceDocument) form.getDocument();
1655         OlePatronDocument newOlePatronDocument = (OlePatronDocument) document.getNewMaintainableObject().getDataObject();
1656         newOlePatronDocument.getDeletedOleProxyPatronDocuments().add(newOlePatronDocument.getOleProxyPatronDocuments().get(Integer.parseInt(selectedLineIndex)));
1657         return deleteLine(uifForm, result, request, response);
1658 
1659     }
1660 
1661     @RequestMapping(method = RequestMethod.POST, params = "methodToCall=deleteNotes")
1662     public ModelAndView deleteNotes(@ModelAttribute("KualiForm") UifFormBase uifForm, BindingResult result,
1663                                            HttpServletRequest request, HttpServletResponse response) {
1664         LOG.debug("Initialized addLine method");
1665         MaintenanceDocumentForm form = (MaintenanceDocumentForm) uifForm;
1666         String selectedLineIndex = form.getActionParamaterValue(UifParameters.SELECTED_LINE_INDEX);
1667         MaintenanceDocument document = (MaintenanceDocument) form.getDocument();
1668         OlePatronDocument newOlePatronDocument = (OlePatronDocument) document.getNewMaintainableObject().getDataObject();
1669         newOlePatronDocument.getDeletedNotes().add(newOlePatronDocument.getNotes().get(Integer.parseInt(selectedLineIndex)));
1670         return deleteLine(uifForm, result, request, response);
1671 
1672     }
1673 
1674     @RequestMapping(method = RequestMethod.POST, params = "methodToCall=deleteOlePatronLocalIds")
1675     public ModelAndView deleteOlePatronLocalIds(@ModelAttribute("KualiForm") UifFormBase uifForm, BindingResult result,
1676                                           HttpServletRequest request, HttpServletResponse response) {
1677         LOG.debug("Initialized addLine method");
1678         MaintenanceDocumentForm form = (MaintenanceDocumentForm) uifForm;
1679         String selectedLineIndex = form.getActionParamaterValue(UifParameters.SELECTED_LINE_INDEX);
1680         MaintenanceDocument document = (MaintenanceDocument) form.getDocument();
1681         OlePatronDocument newOlePatronDocument = (OlePatronDocument) document.getNewMaintainableObject().getDataObject();
1682         newOlePatronDocument.getDeletedOlePatronLocalIds().add(newOlePatronDocument.getOlePatronLocalIds().get(Integer.parseInt(selectedLineIndex)));
1683         return deleteLine(uifForm, result, request, response);
1684 
1685     }
1686 
1687 
1688 
1689     @RequestMapping(method = RequestMethod.POST, params = "methodToCall=deletePatronAffiliations")
1690     public ModelAndView deletePatronAffiliations(@ModelAttribute("KualiForm") UifFormBase uifForm, BindingResult result,
1691                                           HttpServletRequest request, HttpServletResponse response) {
1692         LOG.debug("Initialized addLine method");
1693         MaintenanceDocumentForm form = (MaintenanceDocumentForm) uifForm;
1694         String selectedLineIndex = form.getActionParamaterValue(UifParameters.SELECTED_LINE_INDEX);
1695         MaintenanceDocument document = (MaintenanceDocument) form.getDocument();
1696         OlePatronDocument newOlePatronDocument = (OlePatronDocument) document.getNewMaintainableObject().getDataObject();
1697         newOlePatronDocument.getDeletedPatronAffiliations().add(newOlePatronDocument.getPatronAffiliations().get(Integer.parseInt(selectedLineIndex)));
1698         newOlePatronDocument.getDeletedEmployments().addAll(newOlePatronDocument.getPatronAffiliations().get(Integer.parseInt(selectedLineIndex)).getEmployments());
1699 
1700         return deleteLine(uifForm, result, request, response);
1701     }
1702 
1703     @RequestMapping(method = RequestMethod.POST, params = "methodToCall=deleteEmploymentBo")
1704     public ModelAndView deleteEmploymentBo(@ModelAttribute("KualiForm") UifFormBase uifForm, BindingResult result,
1705                                                  HttpServletRequest request, HttpServletResponse response) {
1706         LOG.debug("Initialized addLine method");
1707         MaintenanceDocumentForm form = (MaintenanceDocumentForm) uifForm;
1708         Map<String,String> actionParameters = form.getActionParameters();
1709         String subCollectionIndex = actionParameters.get(UifParameters.SELECTED_LINE_INDEX);
1710         String mainCollectionIndex= StringUtils.substringBefore(StringUtils.substringAfter(actionParameters.get(UifParameters.SELLECTED_COLLECTION_PATH),"["),"]");
1711         MaintenanceDocument document = (MaintenanceDocument) form.getDocument();
1712         OlePatronDocument newOlePatronDocument = (OlePatronDocument) document.getNewMaintainableObject().getDataObject();
1713         EntityEmploymentBo entityEmploymentBo=newOlePatronDocument.getPatronAffiliations().get(Integer.parseInt(mainCollectionIndex)).getEmployments().get(Integer.parseInt(subCollectionIndex));
1714         if(entityEmploymentBo!=null){
1715             newOlePatronDocument.getDeletedEmployments().add(entityEmploymentBo);
1716             newOlePatronDocument.getPatronAffiliations().get(Integer.parseInt(mainCollectionIndex)).getEmployments().remove(Integer.parseInt(subCollectionIndex));
1717             return getUIFModelAndView(uifForm);
1718         }else{
1719             newOlePatronDocument.getDeletedEmployments().add(entityEmploymentBo);
1720             return deleteLine(uifForm, result, request, response);
1721         }
1722     }
1723 
1724     @RequestMapping(method = RequestMethod.POST, params = "methodToCall=showPatronLoanedItem")
1725     public ModelAndView showPatronLoanedItem(@ModelAttribute("KualiForm") UifFormBase uifForm, BindingResult result,
1726                                            HttpServletRequest request, HttpServletResponse response) {
1727         LOG.debug("Patron View : showing Patron Loaned Records");
1728         MaintenanceDocumentForm form = (MaintenanceDocumentForm) uifForm;
1729         OlePatronDocument olePatronDocument=(OlePatronDocument)form.getDocument().getNewMaintainableObject().getDataObject();
1730         try {
1731             olePatronDocument.setOleLoanDocuments(getOleLoanDocumentsFromSolrBuilder().getPatronLoanedItemBySolr
1732                     (olePatronDocument.getOlePatronId(), null));
1733             if(CollectionUtils.isNotEmpty(olePatronDocument.getOleLoanDocuments())) {
1734                 for(OleLoanDocument oleLoanDocument : olePatronDocument.getOleLoanDocuments()) {
1735                     if(StringUtils.isNotEmpty(oleLoanDocument.getRealPatronName())) {
1736                         Map patronMap = new HashMap();
1737                         patronMap.put(OLEConstants.OlePatron.PATRON_ID, oleLoanDocument.getRealPatronName());
1738                         OlePatronDocument patronDocument = KRADServiceLocator.getBusinessObjectService().findByPrimaryKey(OlePatronDocument.class, patronMap);
1739                         if(patronDocument != null){
1740                             patronDocument = OLEDeliverService.populatePatronName(patronDocument);
1741                             oleLoanDocument.setRealPatronName(patronDocument.getPatronName());
1742                             oleLoanDocument.setProxyPatronBarcode(patronDocument.getBarcode());
1743                             oleLoanDocument.setProxyPatronBarcodeUrl(OLEConstants.ASSIGN_INQUIRY_PATRON_ID + patronDocument.getOlePatronId() + OLEConstants.ASSIGN_PATRON_INQUIRY);
1744                         }
1745                     }
1746                 }
1747             }
1748         } catch (Exception e) {
1749             LOG.error("While fetching loan records error occured" + e);
1750         }
1751         olePatronDocument.setShowLoanedRecords(true);
1752         return getUIFModelAndView(form);
1753     }
1754 
1755     private OleLoanDocumentsFromSolrBuilder getOleLoanDocumentsFromSolrBuilder() {
1756         if (null == oleLoanDocumentsFromSolrBuilder) {
1757             oleLoanDocumentsFromSolrBuilder = new OleLoanDocumentsFromSolrBuilder();
1758         }
1759         return oleLoanDocumentsFromSolrBuilder;
1760     }
1761 
1762     public void setOleLoanDocumentsFromSolrBuilder(OleLoanDocumentsFromSolrBuilder oleLoanDocumentsFromSolrBuilder) {
1763         this.oleLoanDocumentsFromSolrBuilder = oleLoanDocumentsFromSolrBuilder;
1764     }
1765 
1766     @RequestMapping(method = RequestMethod.POST, params = "methodToCall=hidePatronLoanedItem")
1767     public ModelAndView hidePatronLoanedItem(@ModelAttribute("KualiForm") UifFormBase uifForm, BindingResult result,
1768                                            HttpServletRequest request, HttpServletResponse response) {
1769         LOG.debug("Patron View : Hiding Patron Loaned Records");
1770         MaintenanceDocumentForm form = (MaintenanceDocumentForm) uifForm;
1771         OlePatronDocument olePatronDocument=(OlePatronDocument)form.getDocument().getNewMaintainableObject().getDataObject();
1772         //olePatronDocument.setOleLoanDocuments(new ArrayList<OleLoanDocument>());
1773         olePatronDocument.setShowLoanedRecords(false);
1774         return getUIFModelAndView(form);
1775     }
1776 
1777     @RequestMapping(method = RequestMethod.POST, params = "methodToCall=showPatronRequestedRecords")
1778     public ModelAndView showPatronRequestedRecords(@ModelAttribute("KualiForm") UifFormBase uifForm, BindingResult result,
1779                                              HttpServletRequest request, HttpServletResponse response) {
1780         LOG.debug("Patron View : showing Patron Requested Records");
1781         MaintenanceDocumentForm form = (MaintenanceDocumentForm) uifForm;
1782         OlePatronDocument olePatronDocument=(OlePatronDocument)form.getDocument().getNewMaintainableObject().getDataObject();
1783         try {
1784             OleDeliverRequestDocumentHelperServiceImpl requestService = new OleDeliverRequestDocumentHelperServiceImpl();
1785             List<OleDeliverRequestBo> oleDeliverRequestBoList = olePatronDocument.getOleDeliverRequestBos();
1786             if (oleDeliverRequestBoList.size() > 0) {
1787                 for (int i = 0; i < oleDeliverRequestBoList.size(); i++) {
1788                     OleItemSearch oleItemSearch = requestService.getItemDetailsForPatron(oleDeliverRequestBoList.get(i).getItemUuid());
1789                     if (oleItemSearch != null && oleItemSearch.getItemBarCode() != null) {
1790                         oleDeliverRequestBoList.get(i).setTitle(oleItemSearch.getTitle());
1791                         oleDeliverRequestBoList.get(i).setCallNumber(oleItemSearch.getCallNumber());
1792                     }
1793                 }
1794             }
1795             olePatronDocument.setOleDeliverRequestBos(loanProcessor.getPatronRequestRecords(olePatronDocument.getOlePatronId()));
1796         } catch (Exception e) {
1797             LOG.error("While fetching Patron Requested Records error occured" + e);
1798         }
1799         olePatronDocument.setShowRequestedItems(true);
1800         return getUIFModelAndView(form);
1801     }
1802 
1803     @RequestMapping(method = RequestMethod.POST, params = "methodToCall=hidePatronRequestedRecords")
1804     public ModelAndView hidePatronRequestedRecords(@ModelAttribute("KualiForm") UifFormBase uifForm, BindingResult result,
1805                                              HttpServletRequest request, HttpServletResponse response) {
1806         LOG.debug("Patron View : Hiding Patron Loaned Records");
1807         MaintenanceDocumentForm form = (MaintenanceDocumentForm) uifForm;
1808         OlePatronDocument olePatronDocument=(OlePatronDocument)form.getDocument().getNewMaintainableObject().getDataObject();
1809         olePatronDocument.setOleDeliverRequestBos(new ArrayList<OleDeliverRequestBo>());
1810         olePatronDocument.setShowRequestedItems(false);
1811         return getUIFModelAndView(form);
1812     }
1813 
1814     @RequestMapping(method = RequestMethod.POST, params = "methodToCall=showTemporaryCirculationHistoryRecords")
1815     public ModelAndView showTemporaryCirculationHistoryRecords(@ModelAttribute("KualiForm") UifFormBase uifForm, BindingResult result,
1816                                              HttpServletRequest request, HttpServletResponse response) {
1817         LOG.debug("Patron View : showing Patron TemporaryCirculationHistory Records");
1818         MaintenanceDocumentForm form = (MaintenanceDocumentForm) uifForm;
1819         OlePatronDocument olePatronDocument=(OlePatronDocument)form.getDocument().getNewMaintainableObject().getDataObject();
1820         try {
1821             olePatronDocument.setOleTemporaryCirculationHistoryRecords(getOleLoanDocumentsFromSolrBuilder().getPatronTemporaryCirculationHistoryRecords(olePatronDocument.getOlePatronId()));
1822         } catch (Exception e) {
1823             LOG.error("While fetching Patron TemporaryCirculationHistory Records error occured" + e);
1824         }
1825 
1826         olePatronDocument.setShowTemporaryCirculationHistoryRecords(true);
1827         return getUIFModelAndView(form);
1828     }
1829     @RequestMapping(method = RequestMethod.POST, params = "methodToCall=hideTemporaryCirculationHistoryRecords")
1830     public ModelAndView hideTemporaryCirculationHistoryRecords(@ModelAttribute("KualiForm") UifFormBase uifForm, BindingResult result,
1831                                              HttpServletRequest request, HttpServletResponse response) {
1832         LOG.debug("Patron View : Hiding Patron Loaned Records");
1833         MaintenanceDocumentForm form = (MaintenanceDocumentForm) uifForm;
1834         OlePatronDocument olePatronDocument=(OlePatronDocument)form.getDocument().getNewMaintainableObject().getDataObject();
1835         olePatronDocument.setOleTemporaryCirculationHistoryRecords(new ArrayList<OleTemporaryCirculationHistory>());
1836         olePatronDocument.setShowTemporaryCirculationHistoryRecords(false);
1837         return getUIFModelAndView(form);
1838     }
1839 
1840     @RequestMapping(method = RequestMethod.POST, params = "methodToCall=refreshLoanedItemSection")
1841     public ModelAndView refreshLoanedItemSection(@ModelAttribute("KualiForm") UifFormBase uifForm, BindingResult result,
1842                                            HttpServletRequest request, HttpServletResponse response) {
1843         LOG.debug("Patron View : Hiding Patron Loaned Records");
1844         MaintenanceDocumentForm form = (MaintenanceDocumentForm) uifForm;
1845         OlePatronDocument olePatronDocument=(OlePatronDocument)form.getDocument().getNewMaintainableObject().getDataObject();
1846         return getUIFModelAndView(form);
1847     }
1848 
1849     @RequestMapping(method = RequestMethod.POST, params = "methodToCall=refreshProxyPatron")
1850     public ModelAndView refreshProxyPatron(@ModelAttribute("KualiForm") UifFormBase uifForm, BindingResult result,
1851                                            HttpServletRequest request, HttpServletResponse response) throws Exception {
1852 
1853         if ((uifForm instanceof OlePatronMaintenanceDocumentForm)
1854         		&& !((OlePatronMaintenanceDocumentForm) uifForm).isFilterProxySection()) {
1855         	
1856         	OlePatronMaintenanceDocumentForm form = (OlePatronMaintenanceDocumentForm) uifForm;
1857             OlePatronDocument olePatron =
1858             		(OlePatronDocument)form.getDocument().getNewMaintainableObject().getDataObject();
1859         	
1860             List<OleProxyPatronDocument> oleProxyPatronDocuments = olePatron.getOleProxyPatronDocuments();
1861             List<OleProxyPatronDocument> proxyPatronDocumentList = new ArrayList<OleProxyPatronDocument>();
1862             List<OlePatronDocument> olePatronDocuments = new ArrayList<OlePatronDocument>();
1863 			ProcessLogger.trace("patron:proxy:begin:"
1864 					+ oleProxyPatronDocuments.size());
1865             if (oleProxyPatronDocuments.size() > 0) {
1866                 for (Iterator<OleProxyPatronDocument> proxyPatronIterator = oleProxyPatronDocuments.iterator(); proxyPatronIterator.hasNext(); ) {
1867                     OleProxyPatronDocument oleProxyPatronDocument = (OleProxyPatronDocument) proxyPatronIterator.next();
1868                     Map map = new HashMap();
1869                     map.put(OLEConstants.OlePatron.PATRON_ID, oleProxyPatronDocument.getProxyPatronId());
1870         			ProcessLogger.trace("patron:proxy:"
1871         					+ oleProxyPatronDocument.getProxyPatronId());
1872                     OlePatronDocument olePatronDocument = (OlePatronDocument) getBusinessObjectService().findByPrimaryKey(OlePatronDocument.class, map);
1873                    // if (olePatronDocument.isActiveIndicator()) {
1874                         oleProxyPatronDocument.setProxyPatronBarcode(olePatronDocument.getBarcode());
1875                         oleProxyPatronDocument.setProxyPatronFirstName(olePatronDocument.getEntity().getNames().get(0).getFirstName());
1876                         oleProxyPatronDocument.setProxyPatronLastName(olePatronDocument.getEntity().getNames().get(0).getLastName());
1877                         proxyPatronDocumentList.add(oleProxyPatronDocument);
1878                    // }
1879                 }
1880                 olePatron.setOleProxyPatronDocuments(proxyPatronDocumentList);
1881                 ProcessLogger.trace("patron:proxy:end");
1882             }
1883         }
1884         
1885         return super.refresh(uifForm, result, request, response);
1886     }
1887 
1888     @RequestMapping(method = RequestMethod.POST, params = "methodToCall=addNotes")
1889     public ModelAndView addNotes(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
1890                                         HttpServletRequest request, HttpServletResponse response) {
1891         MaintenanceDocumentForm maintenanceForm = (MaintenanceDocumentForm) form;
1892         MaintenanceDocument maintenanceDocument = (MaintenanceDocument) maintenanceForm.getDocument();
1893         OlePatronDocument olePatronDocument = (OlePatronDocument) maintenanceDocument.getNewMaintainableObject().getDataObject();
1894         String selectedCollectionPath = maintenanceForm.getActionParamaterValue(UifParameters.SELLECTED_COLLECTION_PATH);
1895         CollectionGroup collectionGroup = maintenanceForm.getPostedView().getViewIndex().getCollectionGroupByPath(
1896                 selectedCollectionPath);
1897         String addLinePath = collectionGroup.getAddLineBindingInfo().getBindingPath();
1898         Object eventObject = ObjectPropertyUtils.getPropertyValue(maintenanceForm, addLinePath);
1899         OlePatronNotes olePatronNotes = (OlePatronNotes) eventObject;
1900         olePatronNotes.setOperatorId(GlobalVariables.getUserSession().getPrincipalId());
1901         olePatronNotes.setNoteCreatedOrUpdatedDate(new Timestamp(System.currentTimeMillis()));
1902         return super.addLine(form, result, request, response);
1903     }
1904 
1905 
1906 }