001package org.kuali.ole.krad;
002
003import java.util.ArrayList;
004import java.util.HashMap;
005import java.util.List;
006import java.util.Map;
007
008import javax.servlet.http.HttpServletRequest;
009import javax.servlet.http.HttpServletResponse;
010
011import org.apache.log4j.Logger;
012import org.kuali.ole.OLEConstants;
013import org.kuali.ole.deliver.bo.OleDeliverRequestBo;
014import org.kuali.ole.deliver.bo.OlePatronDocument;
015import org.kuali.ole.deliver.bo.OleProxyPatronDocument;
016import org.kuali.ole.deliver.form.OlePatronDocumentInquiryForm;
017import org.kuali.ole.deliver.processor.LoanProcessor;
018import org.kuali.ole.deliver.service.OleDeliverRequestDocumentHelperServiceImpl;
019import org.kuali.rice.krad.service.KRADServiceLocator;
020import org.kuali.rice.krad.web.controller.InquiryController;
021import org.kuali.rice.krad.web.form.InquiryForm;
022import org.kuali.rice.krad.web.form.UifFormBase;
023import org.springframework.stereotype.Controller;
024import org.springframework.validation.BindingResult;
025import org.springframework.web.bind.annotation.ModelAttribute;
026import org.springframework.web.bind.annotation.RequestMapping;
027import org.springframework.web.bind.annotation.RequestMethod;
028import org.springframework.web.servlet.ModelAndView;
029
030@Controller
031@RequestMapping(value = "/inquiry")
032public class OleInquiryController extends InquiryController {
033
034        private static final Logger LOG = Logger
035                        .getLogger(OleInquiryController.class);
036
037        private static String DATA_OBJECT_CN_PARAM = "dataObjectClassName";
038        private static String DATA_OBJECT_CN_ATTRIBUTE = OleInquiryController.class
039                        .getName() + '.' + DATA_OBJECT_CN_PARAM;
040
041        private String getDataObjectClassName(HttpServletRequest request) {
042                String rv = request.getParameter(DATA_OBJECT_CN_PARAM);
043                if (rv == null)
044
045                        rv = (String) request.getSession().getAttribute(
046                                        DATA_OBJECT_CN_ATTRIBUTE);
047
048                else
049                        request.getSession().setAttribute(DATA_OBJECT_CN_ATTRIBUTE, rv);
050
051                return rv;
052        }
053
054        @Override
055        protected InquiryForm createInitialForm(HttpServletRequest request) {
056                String dataObjectClassName = getDataObjectClassName(request);
057
058                if (OlePatronDocument.class.getName().equals(dataObjectClassName))
059                        return new OlePatronDocumentInquiryForm();
060
061                return super.createInitialForm(request);
062        }
063
064        @RequestMapping(method = RequestMethod.POST, params = "methodToCall=refreshLoanSection")
065        public ModelAndView refreshLoanSection(
066                        @ModelAttribute("KualiForm") UifFormBase uifForm,
067                        BindingResult result, HttpServletRequest request,
068                        HttpServletResponse response) throws Exception {
069                if ((uifForm instanceof OlePatronDocumentInquiryForm)
070                                && !((OlePatronDocumentInquiryForm) uifForm)
071                                                .isFilterProxySection()) {
072
073                        OlePatronDocumentInquiryForm form = (OlePatronDocumentInquiryForm) uifForm;
074                        OlePatronDocument patronDocument = (OlePatronDocument) form
075                                        .getDataObject();
076
077                        LoanProcessor loanProcessor = new LoanProcessor();
078                        OleDeliverRequestDocumentHelperServiceImpl requestService = new OleDeliverRequestDocumentHelperServiceImpl();
079                        List<OleDeliverRequestBo> oleDeliverRequestBoList = patronDocument
080                                        .getOleDeliverRequestBos();
081                        if (oleDeliverRequestBoList.size() > 0) {
082                                for (int i = 0; i < oleDeliverRequestBoList.size(); i++) {
083
084                                        // OleItemSearch oleItemSearch = requestService
085                                        // .getItemDetailsForPatron(oleDeliverRequestBoList
086                                        // .get(i).getItemUuid());
087                                        // if (oleItemSearch != null
088                                        // && oleItemSearch.getItemBarCode() != null) {
089                                        // oleDeliverRequestBoList.get(i).setTitle(
090                                        // oleItemSearch.getTitle());
091                                        // oleDeliverRequestBoList.get(i).setCallNumber(
092                                        // oleItemSearch.getCallNumber());
093                                        // }
094
095                                        requestService.processItem(oleDeliverRequestBoList.get(i));
096                                }
097                        }
098
099                        try {
100                                patronDocument.setOleLoanDocuments(loanProcessor
101                                                .getPatronLoanedItemBySolr(patronDocument
102                                                                .getOlePatronId()));
103                                patronDocument
104                                                .setOleTemporaryCirculationHistoryRecords(loanProcessor
105                                                                .getPatronTemporaryCirculationHistoryRecords(patronDocument
106                                                                                .getOlePatronId()));
107                                patronDocument.setOleDeliverRequestBos(loanProcessor
108                                                .getPatronRequestRecords(patronDocument
109                                                                .getOlePatronId()));
110                        } catch (Exception e) {
111                                LOG.error("Cannot fetch the patron loaned items.", e);
112
113                        }
114
115                }
116
117                return super.refresh(uifForm, result, request, response);
118        }
119
120        @SuppressWarnings("unchecked")
121        @RequestMapping(method = RequestMethod.POST, params = "methodToCall=refreshProxyPatron")
122        public ModelAndView refreshProxyPatron(
123                        @ModelAttribute("KualiForm") UifFormBase uifForm,
124                        BindingResult result, HttpServletRequest request,
125                        HttpServletResponse response) throws Exception {
126
127                if ((uifForm instanceof OlePatronDocumentInquiryForm)
128                                && !((OlePatronDocumentInquiryForm) uifForm)
129                                                .isFilterProxySection()) {
130
131                        OlePatronDocumentInquiryForm form = (OlePatronDocumentInquiryForm) uifForm;
132                        OlePatronDocument patronDocument = (OlePatronDocument) form
133                                        .getDataObject();
134
135                        List<OleProxyPatronDocument> oleProxyPatronDocuments = patronDocument
136                                        .getOleProxyPatronDocuments();
137                        List<OleProxyPatronDocument> proxyPatronDocumentList = new ArrayList<OleProxyPatronDocument>();
138                        if (oleProxyPatronDocuments.size() > 0) {
139                                for (OleProxyPatronDocument oleProxyPatronDocument : oleProxyPatronDocuments) {
140                                        Map<String, String> proxyMap = new HashMap<String, String>();
141                                        proxyMap.put(OLEConstants.OlePatron.PATRON_ID,
142                                                        oleProxyPatronDocument.getProxyPatronId());
143                                        OlePatronDocument tempDocument = (OlePatronDocument) KRADServiceLocator
144                                                        .getBusinessObjectService().findByPrimaryKey(
145                                                                        OlePatronDocument.class, proxyMap);
146                                        if (tempDocument != null
147                                                        && tempDocument.isActiveIndicator()) {
148                                                oleProxyPatronDocument
149                                                                .setProxyPatronBarcode(tempDocument
150                                                                                .getBarcode());
151                                                oleProxyPatronDocument
152                                                                .setProxyPatronFirstName(tempDocument
153                                                                                .getEntity().getNames().get(0)
154                                                                                .getFirstName());
155                                                oleProxyPatronDocument
156                                                                .setProxyPatronLastName(tempDocument
157                                                                                .getEntity().getNames().get(0)
158                                                                                .getLastName());
159                                                proxyPatronDocumentList.add(oleProxyPatronDocument);
160                                        }
161                                }
162                                patronDocument
163                                                .setOleProxyPatronDocuments(proxyPatronDocumentList);
164                        }
165                        OlePatronDocument olePatronDocument;
166                        OleProxyPatronDocument proxyPatronDocument = null;
167                        List<OleProxyPatronDocument> proxyPatronDocuments = new ArrayList<OleProxyPatronDocument>();
168                        Map proxyMap = new HashMap();
169                        proxyMap.put(OLEConstants.OlePatron.PROXY_PATRON_ID,
170                                        patronDocument.getOlePatronId());
171                        List<OleProxyPatronDocument> oleProxyPatronDocumentList = (List<OleProxyPatronDocument>) KRADServiceLocator
172                                        .getBusinessObjectService().findMatching(
173                                                        OleProxyPatronDocument.class, proxyMap);
174                        if (oleProxyPatronDocumentList.size() > 0) {
175                                proxyMap.remove(OLEConstants.OlePatron.PROXY_PATRON_ID);
176                                for (OleProxyPatronDocument oleProxyPatronDocument : oleProxyPatronDocumentList) {
177                                        proxyMap.put(OLEConstants.OlePatron.PATRON_ID,
178                                                        oleProxyPatronDocument.getOlePatronId());
179                                        List<OlePatronDocument> olePatronDocumentList = (List<OlePatronDocument>) KRADServiceLocator
180                                                        .getBusinessObjectService().findMatching(
181                                                                        OlePatronDocument.class, proxyMap);
182                                        if (olePatronDocumentList.size() > 0) {
183                                                olePatronDocument = olePatronDocumentList.get(0);
184                                                proxyPatronDocument = new OleProxyPatronDocument();
185                                                if (olePatronDocument.isActiveIndicator()) {
186                                                        proxyPatronDocument
187                                                                        .setOlePatronId(olePatronDocument
188                                                                                        .getOlePatronId());
189                                                        proxyPatronDocument
190                                                                        .setProxyForPatronFirstName(olePatronDocument
191                                                                                        .getEntity().getNames().get(0)
192                                                                                        .getFirstName());
193                                                        proxyPatronDocument
194                                                                        .setProxyForPatronLastName(olePatronDocument
195                                                                                        .getEntity().getNames().get(0)
196                                                                                        .getLastName());
197                                                        proxyPatronDocument
198                                                                        .setProxyPatronActivationDate(oleProxyPatronDocument
199                                                                                        .getProxyPatronActivationDate());
200                                                        proxyPatronDocument
201                                                                        .setProxyPatronExpirationDate(oleProxyPatronDocument
202                                                                                        .getProxyPatronExpirationDate());
203                                                        /*
204                                                         * List<OleProxyPatronDocument> proxyPatronList =
205                                                         * (List<OleProxyPatronDocument>)
206                                                         * getBusinessObjectService
207                                                         * ().findMatching(OleProxyPatronDocument.class,
208                                                         * proxyMap); if (proxyPatronList.size() > 0) { for
209                                                         * (OleProxyPatronDocument proxyPatron :
210                                                         * proxyPatronList) { if
211                                                         * (proxyPatron.getOlePatronId(
212                                                         * ).equals(olePatronDocument.getOlePatronId())) {
213                                                         * proxyPatronDocument
214                                                         * .setProxyPatronActivationDate(proxyPatron
215                                                         * .getProxyPatronActivationDate());
216                                                         * proxyPatronDocument
217                                                         * .setProxyPatronExpirationDate(proxyPatron
218                                                         * .getProxyPatronExpirationDate()); } } }
219                                                         */
220                                                }
221                                                proxyPatronDocuments.add(proxyPatronDocument);
222                                        }
223                                }
224                                patronDocument
225                                                .setOleProxyPatronDocumentList(proxyPatronDocuments);
226                        }
227                }
228
229                return super.refresh(uifForm, result, request, response);
230        }
231
232}
233