001package org.kuali.ole.sip2.service.impl;
002
003import org.apache.commons.collections.CollectionUtils;
004import org.apache.log4j.Logger;
005import org.kuali.ole.OLEConstants;
006import org.kuali.ole.deliver.bo.OleItemSearch;
007import org.kuali.ole.deliver.bo.OleLoanDocument;
008import org.kuali.ole.deliver.bo.OlePatronDocument;
009import org.kuali.ole.deliver.processor.LoanProcessor;
010import org.kuali.ole.docstore.common.client.DocstoreClientLocator;
011import org.kuali.ole.docstore.common.document.Item;
012import org.kuali.ole.docstore.common.document.content.enums.DocType;
013import org.kuali.ole.docstore.common.search.SearchParams;
014import org.kuali.ole.docstore.common.search.SearchResponse;
015import org.kuali.ole.ncip.bo.*;
016import org.kuali.ole.ncip.converter.*;
017import org.kuali.ole.ncip.service.OLECirculationService;
018import org.kuali.ole.ncip.service.impl.OLECirculationHelperServiceImpl;
019import org.kuali.ole.ncip.service.impl.OLECirculationServiceImpl;
020import org.kuali.ole.olekrad.filter.OLELoginFilter;
021import org.kuali.ole.service.OlePatronService;
022import org.kuali.ole.service.OlePatronServiceImpl;
023import org.kuali.ole.sip2.common.OLESIP2Util;
024import org.kuali.ole.sip2.constants.OLESIP2Constants;
025import org.kuali.ole.sip2.requestParser.*;
026import org.kuali.ole.sip2.service.OLESIP2HelperService;
027import org.kuali.ole.sip2.service.OLESIP2Service;
028import org.kuali.ole.sip2.sip2Response.*;
029import org.kuali.ole.sys.context.SpringContext;
030import org.kuali.ole.util.DocstoreUtil;
031import org.kuali.rice.core.api.util.type.KualiDecimal;
032import org.kuali.rice.krad.service.BusinessObjectService;
033import org.kuali.rice.krad.service.KRADServiceLocator;
034
035import java.util.ArrayList;
036import java.util.HashMap;
037import java.util.List;
038import java.util.Map;
039
040/**
041 * Created by sheiksalahudeenm on 1/5/15.
042 */
043public class OLESIP2ServiceImpl implements OLESIP2Service {
044
045    private static final Logger LOG = Logger.getLogger(OLESIP2ServiceImpl.class);
046
047    private DocstoreClientLocator docstoreClientLocator;
048    private DocstoreUtil docstoreUtil;
049    private int totalRecCount;
050    private OlePatronService olePatronService;
051
052    OLESIP2HelperService OLESIP2HelperService = new OLESIP2HelperServiceImpl();
053    OLECirculationService oleCirculationService = new OLECirculationServiceImpl();
054    private OLECirculationHelperServiceImpl oleCirculationHelperService = new OLECirculationHelperServiceImpl();
055
056    public OlePatronService getOlePatronService() {
057
058        if (olePatronService == null)
059            olePatronService = new OlePatronServiceImpl();
060        return olePatronService;
061    }
062
063
064    private BusinessObjectService businessObjectService;
065
066    protected BusinessObjectService getBusinessObjectService() {
067        if (businessObjectService == null) {
068            businessObjectService = KRADServiceLocator.getBusinessObjectService();
069        }
070        return businessObjectService;
071    }
072
073    public DocstoreUtil getDocstoreUtil() {
074        if (docstoreUtil == null) {
075            docstoreUtil = SpringContext.getBean(DocstoreUtil.class);
076        }
077        return docstoreUtil;
078    }
079
080    public DocstoreClientLocator getDocstoreClientLocator() {
081        if (docstoreClientLocator == null) {
082            docstoreClientLocator = SpringContext.getBean(DocstoreClientLocator.class);
083        }
084        return docstoreClientLocator;
085    }
086
087    @Override
088    public String feePaidService(OLESIP2FeePaidRequestParser sip2FeePaidRequestParser, String service, String operatorId) {
089
090        String responseString = "";
091        String message = "";
092        KualiDecimal feeAmount = new KualiDecimal(Double.parseDouble(sip2FeePaidRequestParser.getFeeAmount()));
093        if (sip2FeePaidRequestParser.getCurrencyType().equals(OLESIP2Util.getDefaultCurrency().getCurrencyCode())) {
094            message = OLESIP2HelperService.feePaid(sip2FeePaidRequestParser.getPatronIdentifier(), sip2FeePaidRequestParser.getFeeType(),
095                    sip2FeePaidRequestParser.getFeeIdentifier(), sip2FeePaidRequestParser.getPaymentType(), feeAmount,
096                    sip2FeePaidRequestParser.getTransactionId(), operatorId);
097        } else {
098            message = "Please Enter Valid Currency";
099        }
100
101
102        OLESIP2FeePaidResponse sip2FeePaidResponse = new OLESIP2FeePaidResponse();
103        responseString = sip2FeePaidResponse.getFeePaidResponse(message, sip2FeePaidRequestParser);
104
105        if (responseString == null || responseString.equalsIgnoreCase("")) {
106            OLENCIPErrorResponse olencipErrorResponse = new OLENCIPErrorResponse();
107            olencipErrorResponse.getErrorMap().put(OLENCIPConstants.PATRON_BARCODE, sip2FeePaidRequestParser.getPatronIdentifier());
108            olencipErrorResponse.getErrorMap().put(OLENCIPConstants.OPERATOR_ID, operatorId);
109            olencipErrorResponse.getErrorMap().put(OLENCIPConstants.MESSAGE, OLENCIPConstants.INVALID_INPUT);
110            responseString = olencipErrorResponse.getErrorXml(service);
111        }
112
113
114        return responseString;
115    }
116
117
118    @Override
119    public String processRequest(String requestData, String service, String operatorId) {
120        String responseString = "";
121
122        if (requestData.startsWith("99")) {
123
124            LOG.info("Request Type :  SC Status Request");
125            OLESIP2SCStatusRequestParser sip2SCStatusRequestParser = new OLESIP2SCStatusRequestParser(requestData);
126            responseString = this.scStatusService(sip2SCStatusRequestParser, service, operatorId);
127
128        } else if (requestData.startsWith("93")) {
129            LOG.info("Request Type :  Login Request");
130            OLESIP2LoginRequestParser loginRequestParser = new OLESIP2LoginRequestParser(requestData);
131            responseString = this.loginService(loginRequestParser, service, operatorId);
132
133
134        } else if (requestData.startsWith("11")) {
135            LOG.info("Request Type :  Checkout Request");
136            OLESIP2CheckOutRequestParser sip2CheckOutRequestParser = new OLESIP2CheckOutRequestParser(requestData);
137            responseString = this.checkOutService(sip2CheckOutRequestParser, service, operatorId);
138
139        } else if (requestData.startsWith("09")) {
140            LOG.info("Request Type :  Check-in Request");
141            OLESIP2CheckInRequestParser sip2CheckInRequestParser = new OLESIP2CheckInRequestParser(requestData);
142            responseString = this.checkInService(sip2CheckInRequestParser, service, operatorId);
143
144
145        } else if (requestData.startsWith("17")) {
146            LOG.info("Request Type :  Item Information");
147            OLESIP2ItemInformationRequestParser sip2ItemInformationRequestParser = new OLESIP2ItemInformationRequestParser(requestData);
148            responseString = this.itemInformationService(sip2ItemInformationRequestParser, service, operatorId);
149
150        } else if (requestData.startsWith("23")) {
151            LOG.info("Request Type :  Patron Status Request");
152            OLESIP2PatronStatusRequestParser sip2PatronStatusRequestParser = new OLESIP2PatronStatusRequestParser(requestData);
153            responseString = this.patronStatusService(sip2PatronStatusRequestParser, service, operatorId);
154
155        } else if (requestData.startsWith("63")) {
156            LOG.info("Request Type :  Patron Information");
157            OLESIP2PatronInformationRequestParser sip2PatronInformationRequestParser = new OLESIP2PatronInformationRequestParser(requestData);
158            responseString = this.patronInformationService(sip2PatronInformationRequestParser, service, operatorId);
159
160        } else if (requestData.startsWith("01")) {
161            LOG.info("Request Type :  Patron Block");
162
163            OLESIP2BlockPatronRequestParser sip2BlockPatronRequestParser = new OLESIP2BlockPatronRequestParser(requestData);
164            responseString = this.blockPatronService(sip2BlockPatronRequestParser, service, operatorId);
165
166        } else if (requestData.startsWith("25")) {
167            LOG.info("Request Type :  Patron Enable");
168            OLESIP2PatronEnableRequestParser sip2PatronEnableRequestParser = new OLESIP2PatronEnableRequestParser(requestData);
169            responseString = this.patronEnableService(sip2PatronEnableRequestParser, service, operatorId);
170
171
172        } else if (requestData.startsWith("35")) {
173            LOG.info("Request Type :  End Patron Session");
174            OLESIP2EndPatronSessionRequestParser sip2EndPatronSessionRequestParser = new OLESIP2EndPatronSessionRequestParser(requestData);
175            OLESIP2EndPatronSessionResponse olesip2EndPatronSessionResponse = new OLESIP2EndPatronSessionResponse();
176            responseString = olesip2EndPatronSessionResponse.getEndPatronSession(sip2EndPatronSessionRequestParser);
177
178
179        } else if (requestData.startsWith("29")) {
180            LOG.info("Request Type :  Renew");
181            System.out.println(requestData);
182            OLESIP2RenewRequestParser sip2RenewRequestParser = new OLESIP2RenewRequestParser(requestData);
183            responseString = this.renewService(sip2RenewRequestParser, service, operatorId);
184
185        } else if (requestData.startsWith("15")) {
186            LOG.info("Request Type :  Hold");
187            OLESIP2HoldRequestParser sip2HoldRequestParser = new OLESIP2HoldRequestParser(requestData);
188            responseString = this.holdService(sip2HoldRequestParser, service, operatorId);
189
190        } else if (requestData.startsWith("37")) {
191            LOG.info("Request Type :  Fee Paid Message");
192            OLESIP2FeePaidRequestParser sip2FeePaidRequestParser = new OLESIP2FeePaidRequestParser(requestData);
193            responseString = this.feePaidService(sip2FeePaidRequestParser, service, operatorId);
194        } else if (requestData.startsWith("65")) {
195            LOG.info("Request Type :  Renew All");
196            OLESIP2RenewAllRequestParser sip2RenewAllRequestParser = new OLESIP2RenewAllRequestParser(requestData);
197            responseString = this.renewAllService(sip2RenewAllRequestParser, service, operatorId);
198
199        } else if (requestData.startsWith("19")) {
200            LOG.info("Request Type :  Item Status Update");
201            OLESIP2ItemStatusUpdateRequestParser sip2ItemStatusUpdateRequestParser = new OLESIP2ItemStatusUpdateRequestParser(requestData);
202            //TODO This service is not currently implemented in ole
203            responseString = this.itemStatusUpdateService(requestData, sip2ItemStatusUpdateRequestParser, service, operatorId);
204        } else {
205            LOG.info("Request Type :  *****Not a valid request");
206            responseString = "Not a valid SIP2 request";
207            new Throwable("Not a valid SIP2 request");
208
209        }
210        LOG.info("Exit SOASNettyServerHandler.analysisRequestType(String requestData)");
211        return responseString;
212    }
213
214
215    @Override
216    public String loginService(OLESIP2LoginRequestParser loginRequestParser, String service, String operatorId) {
217        OLELoginFilter oleLoginFilter = new OLELoginFilter();
218        String responseString = "";
219        Boolean validateUser = oleLoginFilter.checkValidUserNameAndPassword(loginRequestParser.getLoginUserId(),
220                loginRequestParser.getLoginPassword());
221
222        OLESIP2LoginResponse sip2LoginResponseParser = new OLESIP2LoginResponse();
223        responseString = sip2LoginResponseParser.getSIP2LoginResponse(validateUser, loginRequestParser);
224        if (responseString == null) {
225            OLENCIPErrorResponse olencipErrorResponse = new OLENCIPErrorResponse();
226            olencipErrorResponse.getErrorMap().put(OLENCIPConstants.PATRON_BARCODE, loginRequestParser.getLoginUserId());
227            olencipErrorResponse.getErrorMap().put(OLENCIPConstants.OPERATOR_ID, loginRequestParser.getLoginPassword());
228            responseString = olencipErrorResponse.getErrorXml(service);
229        }
230        return responseString;
231    }
232
233    @Override
234    public String scStatusService(OLESIP2SCStatusRequestParser sip2SCStatusRequestParser, String service, String operatorId) {
235        String responseString = "";
236        OLESIP2ACSStatusResponse sip2ACSStatusResponseParser = new OLESIP2ACSStatusResponse();
237
238        responseString = sip2ACSStatusResponseParser.getSIP2ACSStatusResponse(sip2SCStatusRequestParser);
239
240        if (responseString == null) {
241            OLENCIPErrorResponse olencipErrorResponse = new OLENCIPErrorResponse();
242            responseString = olencipErrorResponse.getErrorXml(service);
243        }
244
245        return responseString;
246
247    }
248
249    @Override
250    public String checkOutService(OLESIP2CheckOutRequestParser sip2CheckOutRequestParser, String service, String operatorId) {
251        String responseString = null;
252        OLECirculationService oleCirculationService = new OLECirculationServiceImpl();
253
254
255        Map patronMap = new HashMap();
256        patronMap.put("barcode", sip2CheckOutRequestParser.getPatronIdentifier());
257        List<OlePatronDocument> olePatronDocumentList = (List<OlePatronDocument>) getBusinessObjectService()
258                .findMatching(OlePatronDocument.class, patronMap);
259
260        if (olePatronDocumentList != null && olePatronDocumentList.size() > 0) {
261            Map barMap = new HashMap();
262            barMap.put("itemId", sip2CheckOutRequestParser.getItemIdentifier());
263            barMap.put("patronId", olePatronDocumentList.get(0).getOlePatronId());
264            List<OleLoanDocument> oleLoanDocuments = (List<OleLoanDocument>) getBusinessObjectService().findMatchingOrderBy(OleLoanDocument.class, barMap, "loanId", true);
265            if (oleLoanDocuments != null && oleLoanDocuments.size() > 0) {
266
267                responseString = oleCirculationService.renewItem(sip2CheckOutRequestParser.getPatronIdentifier(),
268                        operatorId,
269                        sip2CheckOutRequestParser.getItemIdentifier(), true);
270
271                if (responseString != null && !responseString.equalsIgnoreCase("")) {
272                    OLERenewItem oleRenewItem = (OLERenewItem) new OLERenewItemConverter().generateRenewItemObject(responseString);
273                    OLESIP2CheckOutResponse sip2CheckOutResponseParser = new OLESIP2CheckOutResponse();
274                    responseString = sip2CheckOutResponseParser.getSIP2CheckOutResponse(oleRenewItem, sip2CheckOutRequestParser);
275                }
276            } else {
277                responseString = oleCirculationService.checkOutItem(sip2CheckOutRequestParser.getPatronIdentifier(),
278                        operatorId,
279                        sip2CheckOutRequestParser.getItemIdentifier(), true);
280
281                if (responseString != null && !responseString.equalsIgnoreCase("")) {
282                    OLECheckOutItem oleCheckOutItem = (OLECheckOutItem) new OLECheckOutItemConverter().generateCheckoutItemObject(responseString);
283                    OLESIP2CheckOutResponse sip2CheckOutResponseParser = new OLESIP2CheckOutResponse();
284                    responseString = sip2CheckOutResponseParser.getSIP2CheckOutResponse(oleCheckOutItem, sip2CheckOutRequestParser);
285                }
286
287            }
288
289        }
290        if (responseString == null || responseString.equalsIgnoreCase("")) {
291            OLENCIPErrorResponse olencipErrorResponse = new OLENCIPErrorResponse();
292            olencipErrorResponse.getErrorMap().put(OLENCIPConstants.PATRON_BARCODE, sip2CheckOutRequestParser.getPatronIdentifier());
293            olencipErrorResponse.getErrorMap().put(OLENCIPConstants.OPERATOR_ID, operatorId);
294            olencipErrorResponse.getErrorMap().put(OLENCIPConstants.MESSAGE, OLENCIPConstants.INVALID_INPUT);
295            responseString = olencipErrorResponse.getErrorXml(service);
296        }
297
298
299        return responseString;
300
301    }
302
303    @Override
304    public String checkInService(OLESIP2CheckInRequestParser sip2CheckInRequestParser, String service, String operatorId) {
305        String responseString = "";
306        OLECirculationService oleCirculationService = new OLECirculationServiceImpl();
307        OLECheckInItem oleCheckInItem = new OLECheckInItem();
308
309
310        LoanProcessor loanProcessor = new LoanProcessor();
311
312        OleLoanDocument oleLoanDocument = loanProcessor.getOleLoanDocumentUsingItemBarcode(sip2CheckInRequestParser.getItemIdentifier());
313
314        if(oleLoanDocument != null){
315            responseString = oleCirculationService.checkInItem(oleLoanDocument.getPatronBarcode(),
316                    operatorId,
317                    sip2CheckInRequestParser.getItemIdentifier(),
318                    "N", true);
319            if (responseString != null && !responseString.equalsIgnoreCase("")) {
320                oleCheckInItem = (OLECheckInItem) new OLECheckInItemConverter().generateCheckInItemObject(responseString);
321                OLESIP2CheckInResponse sip2CheckInResponseParser = new OLESIP2CheckInResponse();
322                responseString = sip2CheckInResponseParser.getSIP2CheckInResponse(oleCheckInItem, sip2CheckInRequestParser);
323            }
324        }else{
325            oleCheckInItem.setCode("500");
326            oleCheckInItem.setMessage("Item is not currently checked out.");
327            OLESIP2CheckInResponse sip2CheckInResponseParser = new OLESIP2CheckInResponse();
328            responseString = sip2CheckInResponseParser.getSIP2CheckInResponse(oleCheckInItem, sip2CheckInRequestParser);
329        }
330
331
332
333        if (responseString == null) {
334            OLENCIPErrorResponse olencipErrorResponse = new OLENCIPErrorResponse();
335            olencipErrorResponse.getErrorMap().put(OLENCIPConstants.PATRON_BARCODE, oleLoanDocument.getPatronBarcode());
336            olencipErrorResponse.getErrorMap().put(OLENCIPConstants.OPERATOR_ID, operatorId);
337            olencipErrorResponse.getErrorMap().put(OLENCIPConstants.MESSAGE, OLENCIPConstants.INVALID_INPUT);
338            responseString = olencipErrorResponse.getErrorXml(service);
339        }
340
341        return responseString;
342
343    }
344
345
346    @Override
347    public String patronStatusService(OLESIP2PatronStatusRequestParser sip2PatronStatusRequestParser, String service, String operatorId) {
348        String responseString = "";
349        OLECirculationService oleCirculationService = new OLECirculationServiceImpl();
350
351        responseString = oleCirculationService.lookupUser(sip2PatronStatusRequestParser.getPatronIdentifier(),
352                operatorId, null, true);
353
354        if (responseString != null && !responseString.equalsIgnoreCase("")) {
355            OLELookupUser oleLookupUser = (OLELookupUser) new OLELookupUserConverter().getLookupUser(responseString);
356            OLESIP2PatronStatusResponse sip2PatronStatusResponse = new OLESIP2PatronStatusResponse();
357
358            responseString = sip2PatronStatusResponse.getSIP2PatronStatusResponse(oleLookupUser,
359                    sip2PatronStatusRequestParser);
360
361        }
362        if (responseString == null) {
363            OLENCIPErrorResponse olencipErrorResponse = new OLENCIPErrorResponse();
364            olencipErrorResponse.getErrorMap().put(OLENCIPConstants.PATRON_BARCODE, sip2PatronStatusRequestParser.getPatronIdentifier());
365            olencipErrorResponse.getErrorMap().put(OLENCIPConstants.OPERATOR_ID, operatorId);
366            responseString = olencipErrorResponse.getErrorXml(service);
367        }
368
369
370        return responseString;
371    }
372
373    @Override
374    public String patronInformationService(OLESIP2PatronInformationRequestParser sip2PatronInformationRequestParser, String service, String operatorId) {
375        String responseString = "";
376
377        responseString = oleCirculationService.lookupUser(sip2PatronInformationRequestParser.getPatronIdentifier(),
378                operatorId, null, true);
379
380        if (responseString != null && !responseString.equalsIgnoreCase("")) {
381            OLELookupUser oleLookupUser = (OLELookupUser) new OLELookupUserConverter().getLookupUser(responseString);
382            OLESIP2PatronInformationResponse sip2PatronInformationResponse = new OLESIP2PatronInformationResponse();
383
384            responseString = sip2PatronInformationResponse.getSIP2PatronInfoResponse(oleLookupUser,
385                    sip2PatronInformationRequestParser);
386
387        }
388        if (responseString == null) {
389            OLENCIPErrorResponse olencipErrorResponse = new OLENCIPErrorResponse();
390            olencipErrorResponse.getErrorMap().put(OLENCIPConstants.PATRON_BARCODE, sip2PatronInformationRequestParser.getPatronIdentifier());
391            olencipErrorResponse.getErrorMap().put(OLENCIPConstants.OPERATOR_ID, operatorId);
392            responseString = olencipErrorResponse.getErrorXml(service);
393        }
394
395
396        return responseString;
397
398    }
399
400    @Override
401    public String itemInformationService(OLESIP2ItemInformationRequestParser sip2ItemInformationRequestParser, String service, String operatorId) {
402        String responseString = "";
403
404        OleItemSearch oleItemSearch = new OleItemSearch();
405        List<OleItemSearch> oleItemSearches = new ArrayList<>();
406        SearchParams item_search_Params = new SearchParams();
407        item_search_Params.getSearchConditions().add(item_search_Params.buildSearchCondition("phrase", item_search_Params.buildSearchField(DocType.ITEM.getCode(), Item.ITEM_BARCODE, sip2ItemInformationRequestParser.getItemIdentifier()), "AND"));
408        getDocstoreUtil().getSearchResultFields(item_search_Params);
409        SearchResponse searchResponse = null;
410
411
412        try {
413            searchResponse = getDocstoreClientLocator().getDocstoreClient().search(item_search_Params);
414            this.totalRecCount = searchResponse.getTotalRecordCount();
415            oleItemSearches = getDocstoreUtil().getSearchResults(searchResponse);
416            if (CollectionUtils.isNotEmpty(oleItemSearches))
417                oleItemSearch = oleItemSearches.get(0);
418        } catch (Exception e) {
419            e.printStackTrace();
420        }
421
422        if (oleItemSearch != null) {
423
424            OLESIP2ItemInformationResponse sip2ItemInfoParser = new OLESIP2ItemInformationResponse();
425            responseString = sip2ItemInfoParser.getSIP2ItemInfoResponse(oleItemSearch, sip2ItemInformationRequestParser);
426
427        }
428        if (responseString == null) {
429            OLENCIPErrorResponse olencipErrorResponse = new OLENCIPErrorResponse();
430            olencipErrorResponse.getErrorMap().put(OLENCIPConstants.ITEM_BARCODE, sip2ItemInformationRequestParser.getItemIdentifier());
431            responseString = olencipErrorResponse.getErrorXml(service);
432        }
433
434
435        return responseString;
436
437    }
438
439    @Override
440    public String blockPatronService(OLESIP2BlockPatronRequestParser sip2BlockPatronRequestParser, String service, String operatorId) {
441        String responseString = "";
442
443        Map<String, String> patronMap = new HashMap<String, String>();
444        patronMap.put(OLEConstants.OlePatron.BARCODE, sip2BlockPatronRequestParser.getPatronIdentifier());
445        OlePatronDocument patronDocument = (OlePatronDocument) KRADServiceLocator.getBusinessObjectService().findByPrimaryKey(OlePatronDocument.class, patronMap);
446        patronDocument.setGeneralBlock(true);
447        patronDocument.setGeneralBlockNotes(sip2BlockPatronRequestParser.getBlockedCardMessage());
448
449        KRADServiceLocator.getBusinessObjectService().save(patronDocument);
450        String lookupUserResponse = oleCirculationService.lookupUser(sip2BlockPatronRequestParser.getPatronIdentifier(),
451                OLESIP2Constants.OPERATOR_ID, null, true);
452        OLELookupUser oleLookupUser = new OLELookupUser();
453        if (lookupUserResponse != null && !lookupUserResponse.equalsIgnoreCase("")) {
454            oleLookupUser = (OLELookupUser) new OLELookupUserConverter().getLookupUser(lookupUserResponse);
455        }
456        OLESIP2PatronStatusResponse sip2PatronStatusResponse = new OLESIP2PatronStatusResponse();
457
458        responseString = sip2PatronStatusResponse.getSIP2PatronStatusResponse(oleLookupUser, sip2BlockPatronRequestParser);
459
460
461        if (responseString == null) {
462            OLENCIPErrorResponse olencipErrorResponse = new OLENCIPErrorResponse();
463            olencipErrorResponse.getErrorMap().put(OLENCIPConstants.PATRON_BARCODE, sip2BlockPatronRequestParser.getPatronIdentifier());
464
465            olencipErrorResponse.getErrorMap().put(OLENCIPConstants.MESSAGE, responseString);
466            responseString = olencipErrorResponse.getErrorXml(service);
467        }
468
469        return responseString;
470
471    }
472
473    @Override
474    public String patronEnableService(OLESIP2PatronEnableRequestParser sip2PatronEnableRequestParser, String service, String operatorId) {
475        String responseString = "";
476
477
478        Map<String, String> patronMap = new HashMap<String, String>();
479        patronMap.put(OLEConstants.OlePatron.BARCODE, sip2PatronEnableRequestParser.getPatronIdentifier());
480        OlePatronDocument patronDocument = (OlePatronDocument) KRADServiceLocator.getBusinessObjectService().findByPrimaryKey(OlePatronDocument.class, patronMap);
481        patronDocument.setGeneralBlock(false);
482
483
484        KRADServiceLocator.getBusinessObjectService().save(patronDocument);
485        OLESIP2PatronEnableResponse sip2PatronEnableResponse = new OLESIP2PatronEnableResponse();
486        boolean isValidPatron = false;
487        if (!(patronDocument.isGeneralBlock() || oleCirculationHelperService.isPatronExpired(patronDocument) || !patronDocument.isActiveIndicator() || oleCirculationHelperService.isPatronActivated(patronDocument))) {
488            isValidPatron = true;
489        }
490        responseString = sip2PatronEnableResponse.getSIP2PatronEnableResponse(patronDocument, sip2PatronEnableRequestParser, isValidPatron);
491        if (responseString == null) {
492            OLENCIPErrorResponse olencipErrorResponse = new OLENCIPErrorResponse();
493            olencipErrorResponse.getErrorMap().put(OLENCIPConstants.PATRON_BARCODE, sip2PatronEnableRequestParser.getPatronIdentifier());
494
495            olencipErrorResponse.getErrorMap().put(OLENCIPConstants.MESSAGE, responseString);
496            responseString = olencipErrorResponse.getErrorXml(service);
497        }
498
499
500        return responseString;
501
502    }
503
504    @Override
505    public String renewService(OLESIP2RenewRequestParser sip2RenewRequestParser, String service, String operatorId) {
506        String responseString = "";
507        OLECirculationService oleCirculationService = new OLECirculationServiceImpl();
508        responseString = oleCirculationService.renewItem(sip2RenewRequestParser.getPatronIdentifier(),
509                operatorId,
510                sip2RenewRequestParser.getItemIdentifier(), true);
511
512        if (responseString != null && !responseString.equalsIgnoreCase("")) {
513            OLERenewItem oleRenewItem = (OLERenewItem) new OLERenewItemConverter().generateRenewItemObject(responseString);
514            OLESIP2RenewResponse sip2RenewResponse = new OLESIP2RenewResponse();
515            responseString = sip2RenewResponse.getSIP2RenewResponse(oleRenewItem, sip2RenewRequestParser);
516        }
517
518        if (responseString == null) {
519            OLENCIPErrorResponse olencipErrorResponse = new OLENCIPErrorResponse();
520            olencipErrorResponse.getErrorMap().put(OLENCIPConstants.PATRON_BARCODE, sip2RenewRequestParser.getPatronIdentifier());
521            olencipErrorResponse.getErrorMap().put(OLENCIPConstants.OPERATOR_ID, operatorId);
522            olencipErrorResponse.getErrorMap().put(OLENCIPConstants.MESSAGE, responseString);
523            responseString = olencipErrorResponse.getErrorXml(service);
524        }
525
526
527        return responseString;
528
529    }
530
531    @Override
532    public String itemStatusUpdateService(String requestData, OLESIP2ItemStatusUpdateRequestParser oleSIP2ItemStatusUpdateRequestParser, String service, String operatorId) {
533        String responseString = "";
534        OLESIP2ItemStatusUpdateResponse olesip2ItemStatusUpdateResponse = new OLESIP2ItemStatusUpdateResponse();
535        responseString = olesip2ItemStatusUpdateResponse.getOLESIP2ItemStatusUpdateResponse(requestData, oleSIP2ItemStatusUpdateRequestParser);
536
537        if (responseString == null) {
538            OLENCIPErrorResponse olencipErrorResponse = new OLENCIPErrorResponse();
539            olencipErrorResponse.getErrorMap().put(OLENCIPConstants.PATRON_BARCODE, oleSIP2ItemStatusUpdateRequestParser.getPatronIdentifier());
540            olencipErrorResponse.getErrorMap().put(OLENCIPConstants.OPERATOR_ID, operatorId);
541            olencipErrorResponse.getErrorMap().put(OLENCIPConstants.MESSAGE, responseString);
542            responseString = olencipErrorResponse.getErrorXml(service);
543        }
544        return responseString;
545    }
546
547    @Override
548    public String holdService(OLESIP2HoldRequestParser sip2HoldRequestParser, String service, String operatorId) {
549        String responseString = "";
550        OLESIP2HoldResponse sip2HoldResponse = new OLESIP2HoldResponse();
551        String pickupLocation = null;
552        OLECirculationService oleCirculationService = new OLECirculationServiceImpl();
553        if (sip2HoldRequestParser.getHoldType().equalsIgnoreCase("add")) {
554            responseString = oleCirculationService.placeRequest(sip2HoldRequestParser.getPatronIdentifier(),
555                    operatorId,
556                    sip2HoldRequestParser.getItemIdentifier(),
557                    OLESIP2Constants.REQUEST_TYPE,
558                    (sip2HoldRequestParser.getPickupLocation() != null
559                            && !sip2HoldRequestParser.getPickupLocation().equalsIgnoreCase("")) ?
560                            sip2HoldRequestParser.getPickupLocation() : "",null,null,
561                    null,null);
562            if (responseString != null && !responseString.equalsIgnoreCase("")) {
563                OLEPlaceRequest olePlaceRequest = (OLEPlaceRequest) new OLEPlaceRequestConverter().generatePlaceRequestObject(responseString);
564
565                responseString = sip2HoldResponse.getSIP2PlaceHoldRequestService(olePlaceRequest, sip2HoldRequestParser);
566
567            }
568            if (responseString == null) {
569                OLENCIPErrorResponse olencipErrorResponse = new OLENCIPErrorResponse();
570                olencipErrorResponse.getErrorMap().put(OLENCIPConstants.PATRON_BARCODE, sip2HoldRequestParser.getPatronIdentifier());
571                olencipErrorResponse.getErrorMap().put(OLENCIPConstants.OPERATOR_ID, operatorId);
572                olencipErrorResponse.getErrorMap().put(OLENCIPConstants.MESSAGE, OLENCIPConstants.INVALID_INPUT);
573                responseString = olencipErrorResponse.getErrorXml(service);
574            }
575        } else if (sip2HoldRequestParser.getHoldType().equals("delete")) {//12.)b.Cancel Hold
576
577            responseString = oleCirculationService.cancelRequest(operatorId,
578                    sip2HoldRequestParser.getPatronIdentifier(),
579                    sip2HoldRequestParser.getItemIdentifier());
580
581            if (responseString != null && !responseString.equalsIgnoreCase("")) {
582                OLECancelRequest oleCancelRequest = (OLECancelRequest) new OLECancelRequestConverter().generateCancelRequestObject(responseString);
583                responseString = sip2HoldResponse.getSIP2CancelHoldRequestService(oleCancelRequest, sip2HoldRequestParser);
584
585            }
586            if (responseString == null) {
587                OLENCIPErrorResponse olencipErrorResponse = new OLENCIPErrorResponse();
588                olencipErrorResponse.getErrorMap().put(OLENCIPConstants.OPERATOR_ID, operatorId);
589                olencipErrorResponse.getErrorMap().put(OLENCIPConstants.PATRON_ID, sip2HoldRequestParser.getPatronIdentifier());
590                olencipErrorResponse.getErrorMap().put(OLENCIPConstants.MESSAGE, OLENCIPConstants.INVALID_INPUT);
591                responseString = olencipErrorResponse.getErrorXml(service);
592            }
593
594        } else if (sip2HoldRequestParser.getHoldType().equals("updateHold")) {//12.)c.Update Hold
595            responseString = sip2HoldResponse.getSIP2UpdateHoldRequestService(sip2HoldRequestParser);
596
597        }
598        return responseString;
599
600    }
601
602    @Override
603    public String getCirculationErrorMessage(String service, String message, String code, String requiredParameters, String outputFormat) {
604        OLECirculationErrorMessage oleCirculationErrorMessage = new OLECirculationErrorMessage();
605        OLECirculationErrorMessageConverter oleCirculationErrorMessageConverter = new OLECirculationErrorMessageConverter();
606        oleCirculationErrorMessage.setMessage(message);
607        oleCirculationErrorMessage.setCode(code);
608        oleCirculationErrorMessage.setService(service);
609        oleCirculationErrorMessage.setRequiredParameters(requiredParameters);
610        String errorMessage = "";
611        errorMessage = oleCirculationErrorMessageConverter.generateCirculationErrorXml(oleCirculationErrorMessage);
612        if (outputFormat.equalsIgnoreCase(OLENCIPConstants.JSON_FORMAT)) {
613            errorMessage = oleCirculationErrorMessageConverter.generateLookupUserJson(errorMessage);
614        }
615        return errorMessage;
616    }
617
618
619    @Override
620    public String renewAllService(OLESIP2RenewAllRequestParser sip2RenewAllRequestParser, String service, String operatorId) {
621        String responseString = "";
622        String itemBarcodes = "";
623        int count = 1;
624        OLECirculationService oleCirculationService = new OLECirculationServiceImpl();
625
626        Map<String, Object> parameterMap = new HashMap<>();
627        parameterMap.put("barcode", sip2RenewAllRequestParser.getPatronIdentifier());
628        List<OlePatronDocument> olePatronDocumentList = (List<OlePatronDocument>) KRADServiceLocator.getBusinessObjectService().findMatching(OlePatronDocument.class, parameterMap);
629        if (olePatronDocumentList != null && olePatronDocumentList.size() > 0) {
630            OlePatronDocument olePatronDocument = olePatronDocumentList.get(0);
631            for (OleLoanDocument oleLoanDocument : olePatronDocument.getOleLoanDocuments()) {
632                if (count == 1) {
633                    itemBarcodes = oleLoanDocument.getItemId();
634                    count = count + 1;
635                } else {
636                    itemBarcodes = itemBarcodes + "," + oleLoanDocument.getItemId();
637                }
638
639            }
640        }
641        if (org.apache.commons.lang3.StringUtils.isNotBlank(itemBarcodes)) {
642            responseString = oleCirculationService.renewItemList(sip2RenewAllRequestParser.getPatronIdentifier(),
643                    operatorId,
644                    itemBarcodes, true);
645        } else {
646            responseString = "Patron don't have loaned item to renew";
647        }
648
649        if (org.apache.commons.lang3.StringUtils.isNotBlank(responseString)) {
650            OLESIP2RenewAllResponse sip2RenewAllResponse = new OLESIP2RenewAllResponse();
651            if (responseString.equalsIgnoreCase("Patron don't have loaned item to renew")) {
652                responseString = sip2RenewAllResponse.getSIP2RenewAllResponse(responseString, sip2RenewAllRequestParser);
653            } else {
654                OLERenewItemList oleRenewItemList = (OLERenewItemList) new OLERenewItemConverter().generateRenewItemListObjectForSip2(responseString);
655                responseString = sip2RenewAllResponse.getSIP2RenewAllResponse(oleRenewItemList, sip2RenewAllRequestParser);
656            }
657        }
658        if (org.apache.commons.lang3.StringUtils.isBlank(responseString)) {
659            OLENCIPErrorResponse olencipErrorResponse = new OLENCIPErrorResponse();
660            olencipErrorResponse.getErrorMap().put(OLENCIPConstants.PATRON_BARCODE, sip2RenewAllRequestParser.getPatronIdentifier());
661            olencipErrorResponse.getErrorMap().put(OLENCIPConstants.OPERATOR_ID, operatorId);
662            olencipErrorResponse.getErrorMap().put(OLENCIPConstants.MESSAGE, OLENCIPConstants.INVALID_INPUT);
663            responseString = olencipErrorResponse.getErrorXml(service);
664        }
665        return responseString;
666
667    }
668
669}