View Javadoc

1   package org.kuali.ole.patron.bill.controller;
2   
3   import org.apache.log4j.Logger;
4   import org.kuali.ole.OLEConstants;
5   import org.kuali.ole.patron.bill.*;
6   import org.kuali.ole.patron.bo.OlePatronDocument;
7   import org.kuali.rice.krad.service.BusinessObjectService;
8   import org.kuali.rice.krad.service.KRADServiceLocator;
9   import org.kuali.rice.krad.util.GlobalVariables;
10  import org.kuali.rice.krad.util.KRADConstants;
11  import org.kuali.rice.krad.web.controller.UifControllerBase;
12  import org.kuali.rice.krad.web.form.UifFormBase;
13  import org.springframework.stereotype.Controller;
14  import org.springframework.validation.BindingResult;
15  import org.springframework.web.bind.annotation.ModelAttribute;
16  import org.springframework.web.bind.annotation.RequestMapping;
17  import org.springframework.web.servlet.ModelAndView;
18  import org.kuali.ole.patron.bill.form.PatronBillForm;
19  import javax.servlet.http.HttpServletRequest;
20  import javax.servlet.http.HttpServletResponse;
21  import java.math.BigDecimal;
22  import java.sql.*;
23  import java.util.*;
24  import java.util.Date;
25  
26  /**
27   * Created with IntelliJ IDEA.
28   * User: ?
29   * Date: 9/7/12
30   * Time: 11:32 AM
31   * To change this template use File | Settings | File Templates.
32   */
33  
34  @Controller
35  @RequestMapping(value = "/patronbill")
36  public class PatronBillController extends UifControllerBase {
37  
38      private static final Logger LOG = Logger.getLogger(PatronBillController.class);
39  
40  
41      private BusinessObjectService businessObjectService;
42  
43      /**
44       *  Gets the businessObjectService attribute.
45       * @return  Returns the businessObjectService
46       */
47      private BusinessObjectService getBusinessObjectService() {
48          if (null == businessObjectService) {
49              businessObjectService = KRADServiceLocator.getBusinessObjectService();
50          }
51          return businessObjectService;
52      }
53  
54      /**
55       *  This method creates new PatronBill form
56       * @param request
57       * @return  PatronBillForm
58       */
59      @Override
60      protected PatronBillForm createInitialForm(HttpServletRequest request) {
61          return new PatronBillForm();
62      }
63  
64  
65  
66      /**
67       * This method takes the initial request when click(Patron Bill) on Patron Screen.
68       * @param form
69       * @param result
70       * @param request
71       * @param response
72       * @return  ModelAndView
73       */
74      @Override
75      @RequestMapping(params = "methodToCall=start")
76      public ModelAndView start(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
77                                HttpServletRequest request, HttpServletResponse response) {
78          PatronBillForm patronBillForm = (PatronBillForm) form;
79          PatronBillHelperService patronBillHelperService = new PatronBillHelperService();
80          patronBillForm.setOlePatronDocument(patronBillHelperService.getPatronDetails(patronBillForm.getPatronId()));
81          patronBillForm.setPatronBillPaymentList(patronBillHelperService.getBillPayment(patronBillForm.getPatronId()));
82          patronBillForm.setFeeTypes(patronBillHelperService.getFeeTypeList(patronBillForm.getPatronBillPaymentList()));
83          patronBillForm.setPaymentAmount(null);
84          patronBillForm.setPaymentMethod("");
85          patronBillForm.setBillWisePayment("default");
86          return super.start(patronBillForm, result, request, response);
87      }
88  
89      /**
90       * This method will accept payment from user and update the record in Patron bill payment table.
91       * @param form
92       * @param result
93       * @param request
94       * @param response
95       * @return  ModelAndView
96       */
97      @RequestMapping(params = "methodToCall=accept")
98      public ModelAndView acceptPayment(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
99                                        HttpServletRequest request, HttpServletResponse response) {
100         LOG.debug("Initialized acceptPayment Method");
101         PatronBillHelperService patronBillHelperService = new PatronBillHelperService();
102         PatronBillForm patronBillForm = (PatronBillForm) form;
103         boolean valid = true;
104         if(patronBillForm.getPaymentAmount()==null){
105             valid = false;
106             GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.PAY_AMT_EMPTY );
107         }else {
108             int signum = patronBillForm.getPaymentAmount().signum();
109             if(signum < 0){
110                 valid = false;
111                 GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.NEGATIVE_NUM );
112             }
113         }
114         if(patronBillForm.getPaymentMethod()==null || patronBillForm.getPaymentMethod().trim().isEmpty()){
115             valid = false;
116             GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.PAY_METHOD_REQUIRED );
117         }
118         if(!valid){
119             return getUIFModelAndView(patronBillForm);
120         }
121         BigDecimal paymentAmount = patronBillForm.getPaymentAmount();
122         if(patronBillForm.getBillWisePayment().equalsIgnoreCase(OLEConstants.BILL_WISE)){
123             List<PatronBillPayment> patronBillPayments = patronBillForm.getPatronBillPaymentList();
124             paymentAmount = patronBillHelperService.billWiseTransaction(patronBillPayments,paymentAmount,OLEConstants.FULL_PAID,OLEConstants.PAR_PAID,false,null);
125         }else if(patronBillForm.getBillWisePayment().equalsIgnoreCase(OLEConstants.ITEM_WISE)){
126             List<FeeType> feeTypes = patronBillForm.getFeeTypes();
127             paymentAmount = patronBillHelperService.itemWiseTransaction(feeTypes,paymentAmount,OLEConstants.FULL_PAID,OLEConstants.PAR_PAID,null);
128         }else{
129             List<PatronBillPayment> patronBillPayments = patronBillForm.getPatronBillPaymentList();
130             paymentAmount = patronBillHelperService.billWiseTransaction(patronBillPayments,paymentAmount,OLEConstants.FULL_PAID,OLEConstants.PAR_PAID,true,null);
131         }
132         if(paymentAmount.compareTo(OLEConstants.BIGDECIMAL_DEF_VALUE)>0){
133             patronBillForm.setMessage(OLEConstants.BAL_AMT+paymentAmount);
134         }
135         return start(patronBillForm, result, request, response);
136     }
137 
138     /**
139      * This method will allow library operator to forgive payment for user
140      * @param form
141      * @param result
142      * @param request
143      * @param response
144      * @return  ModelAndView
145      */
146     @RequestMapping(params = "methodToCall=forgive")
147     public ModelAndView forgivePayment(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
148                                        HttpServletRequest request, HttpServletResponse response) {
149         LOG.debug("Initialized forgivePayment Method");
150         PatronBillHelperService patronBillHelperService = new PatronBillHelperService();
151         PatronBillForm patronBillForm = (PatronBillForm) form;
152         boolean valid = true;
153         if(patronBillForm.getPaymentAmount()==null){
154             valid = false;
155             GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.PAY_AMT_EMPTY );
156         }else{
157             int signum = patronBillForm.getPaymentAmount().signum();
158             if(signum < 0){
159                 valid = false;
160                 GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.NEGATIVE_NUM );
161             }
162         }
163      /*   if(patronBillForm.getPaymentMethod()==null || patronBillForm.getPaymentMethod().trim().isEmpty()){
164             valid = false;
165             GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.PAY_METHOD_REQUIRED );
166         }*/
167         if(!valid){
168             return getUIFModelAndView(patronBillForm);
169         }
170         BigDecimal paymentAmount = patronBillForm.getPaymentAmount();
171         if(patronBillForm.getBillWisePayment().equalsIgnoreCase(OLEConstants.BILL_WISE)){
172             List<PatronBillPayment> patronBillPayments = patronBillForm.getPatronBillPaymentList();
173             paymentAmount =  patronBillHelperService.billWiseTransaction(patronBillPayments,paymentAmount,OLEConstants.FORGIVEN,OLEConstants.PAR_PAID,false,patronBillForm.getForgiveNote());
174         }else if(patronBillForm.getBillWisePayment().equalsIgnoreCase(OLEConstants.ITEM_WISE)){
175             List<FeeType> feeTypes = patronBillForm.getFeeTypes();
176             paymentAmount = patronBillHelperService.itemWiseTransaction(feeTypes,paymentAmount,OLEConstants.FORGIVEN,OLEConstants.PAR_PAID,patronBillForm.getForgiveNote());
177 
178         }else{
179             GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.SELECT );
180             return start(patronBillForm, result, request, response);
181         }
182         if(paymentAmount.compareTo(OLEConstants.BIGDECIMAL_DEF_VALUE)>0){
183             patronBillForm.setMessage(OLEConstants.BAL_AMT+paymentAmount);
184         }
185         return start(patronBillForm, result, request, response);
186     }
187 
188     /**
189      * This method will allow library operator to error payment for user
190      * @param form
191      * @param result
192      * @param request
193      * @param response
194      * @return  ModelAndView
195      */
196     @RequestMapping(params = "methodToCall=error")
197     public ModelAndView errorPayment(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
198                                        HttpServletRequest request, HttpServletResponse response) {
199         LOG.debug("Initialized forgivePayment Method");
200         PatronBillHelperService patronBillHelperService = new PatronBillHelperService();
201         PatronBillForm patronBillForm = (PatronBillForm) form;
202         boolean valid = true;
203         if(patronBillForm.getPaymentAmount()==null){
204             valid = false;
205             GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.PAY_AMT_EMPTY );
206         }else {
207             int signum = patronBillForm.getPaymentAmount().signum();
208             if(signum < 0){
209                 valid = false;
210                 GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.NEGATIVE_NUM );
211             }
212         }
213        /* if(patronBillForm.getPaymentMethod()==null || patronBillForm.getPaymentMethod().trim().isEmpty()){
214             valid = false;
215             GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.PAY_METHOD_REQUIRED );
216         }*/
217         if(!valid){
218             return getUIFModelAndView(patronBillForm);
219         }
220         BigDecimal paymentAmount = patronBillForm.getPaymentAmount();
221         if(patronBillForm.getBillWisePayment().equalsIgnoreCase(OLEConstants.BILL_WISE)){
222             List<PatronBillPayment> patronBillPayments = patronBillForm.getPatronBillPaymentList();
223             paymentAmount = patronBillHelperService.billWiseTransaction(patronBillPayments,paymentAmount,OLEConstants.IN_ERROR,OLEConstants.PAR_PAID,false,patronBillForm.getErrorNote());
224         }else if(patronBillForm.getBillWisePayment().equalsIgnoreCase(OLEConstants.ITEM_WISE)){
225             List<FeeType> feeTypes = patronBillForm.getFeeTypes();
226             paymentAmount = patronBillHelperService.itemWiseTransaction(feeTypes,paymentAmount,OLEConstants.IN_ERROR,OLEConstants.PAR_PAID,patronBillForm.getErrorNote());
227 
228         }else{
229             GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.SELECT );
230             return start(patronBillForm, result, request, response);
231         }
232         if(paymentAmount.compareTo(OLEConstants.BIGDECIMAL_DEF_VALUE)>0){
233             patronBillForm.setMessage(OLEConstants.BAL_AMT+paymentAmount);
234         }
235         return start(patronBillForm, result, request, response);
236     }
237 
238     /**
239      * This method will allow library operator to forgive payment for user
240      * @param form
241      * @param result
242      * @param request
243      * @param response
244      * @return  ModelAndView
245      */
246     @RequestMapping(params = "methodToCall=print")
247     public ModelAndView printBill(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,HttpServletRequest request, HttpServletResponse response) throws Exception {
248         LOG.debug("Initialized printBill Method");
249         PatronBillForm patronBillForm = (PatronBillForm) form;
250         PatronBillHelperService patronBillHelperService = new PatronBillHelperService();
251         PrintBill printBill = new PrintBill();
252         List<PatronBillPayment> patronBillList = new ArrayList<PatronBillPayment>();
253         List<PatronBillPayment> patronBillPaymentList =new ArrayList<PatronBillPayment>();
254         List<FeeType> feeTypes = new ArrayList<FeeType>();
255         OlePatronDocument olePatronDocument = patronBillForm.getOlePatronDocument();
256         String firstName = olePatronDocument.getFirstName();
257         String lastName= olePatronDocument.getLastName();
258 
259         if(patronBillForm.getBillWisePayment().equalsIgnoreCase(OLEConstants.BILL_WISE)){
260             for(PatronBillPayment patronBillPayment : patronBillForm.getPatronBillPaymentList()) {
261                 if (patronBillPayment.isSelectBill()) {
262                     patronBillPaymentList.add(patronBillPayment);
263                     feeTypes = patronBillHelperService.getFeeTypeList(patronBillPaymentList);
264                 }
265             }
266             printBill.generatePdf(firstName,lastName,patronBillPaymentList,feeTypes,response);
267         }else if(patronBillForm.getBillWisePayment().equalsIgnoreCase(OLEConstants.ITEM_WISE)){
268             patronBillList = patronBillForm.getPatronBillPaymentList();
269             for(FeeType feeType : patronBillForm.getFeeTypes()) {
270                 if (feeType.isActiveItem()) {
271                    feeTypes.add(feeType);
272                 }
273             }
274             printBill.generatePdf(firstName,lastName,patronBillList,feeTypes,response);
275         }
276         return getUIFModelAndView(patronBillForm,"BillViewPage");
277     }
278 
279     /**
280      * This method will allow library operator to cancel payment for user
281      * @param form
282      * @param result
283      * @param request
284      * @param response
285      * @return  ModelAndView
286      */
287     @RequestMapping(params = "methodToCall=payment")
288     public ModelAndView payment(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
289                               HttpServletRequest request, HttpServletResponse response) {
290         return getUIFModelAndView(form,"BillViewPage");
291     }
292 
293     /**
294      * Just returns as if return with no value was selected.
295      */
296     @Override
297     @RequestMapping(params = "methodToCall=close")
298     public ModelAndView close(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
299                               HttpServletRequest request, HttpServletResponse response) {
300         return super.close(form, result, request, response);
301     }
302     /**
303      * This method will allow library operator to enter note for cancel
304      * @param form
305      * @param result
306      * @param request
307      * @param response
308      * @return  ModelAndView
309      */
310     @RequestMapping(params = "methodToCall=freeTextNote")
311     public ModelAndView freeTextNote(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
312                               HttpServletRequest request, HttpServletResponse response) {
313         PatronBillHelperService patronBillHelperService = new PatronBillHelperService();
314         PatronBillForm patronBillForm = (PatronBillForm) form;
315         if(patronBillForm.getBillWisePayment().equalsIgnoreCase(OLEConstants.BILL_WISE)){
316             List<PatronBillPayment> patronBillPayments = patronBillForm.getPatronBillPaymentList();
317             patronBillHelperService.billWiseCancellation(patronBillPayments,patronBillForm.getFreeTextNote());
318         }else if(patronBillForm.getBillWisePayment().equalsIgnoreCase(OLEConstants.ITEM_WISE)){
319             List<FeeType> feeTypes = patronBillForm.getFeeTypes();
320             patronBillHelperService.itemWiseCancellation(feeTypes,patronBillForm.getFreeTextNote());
321 
322         }else{
323             GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.SELECT );
324         }
325         return start(patronBillForm, result, request, response);
326     }
327 
328     /**
329      * This method will allow library operator to enter note for cancel
330      * @param form
331      * @param result
332      * @param request
333      * @param response
334      * @return  ModelAndView
335      */
336     @RequestMapping(params = "methodToCall=printBillPayment")
337     public ModelAndView printBillPayment(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
338                                      HttpServletRequest request, HttpServletResponse response) {
339         PatronBillForm patronBillForm = (PatronBillForm) form;
340         PatronBillHelperService patronBillHelperService = new PatronBillHelperService();
341         List<PatronBillPayment> patronBillPaymentList = patronBillHelperService.getBillPayment(patronBillForm.getPatronId());
342         List<FeeType> feeTypeList = patronBillHelperService.getFeeTypeList(patronBillPaymentList);
343         patronBillForm.setPrintBillReview(true);
344         patronBillForm.setPrintFlag(true);
345         boolean review = false;
346         String reviewBillParameter = patronBillHelperService.getParameter(OLEConstants.OlePatron.PATRON_BILL_REVIEW_PRINT);
347         boolean reviewParameter = reviewBillParameter.equalsIgnoreCase(OLEConstants.TRUE);
348         if(patronBillForm.getBillWisePayment().equalsIgnoreCase("default")){
349             patronBillForm.setPrintFlag(false);
350             GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.SELECT );
351         }
352         if (patronBillForm.getPatronBillPaymentList().size() > 0) {
353             for (PatronBillPayment  patronBill : patronBillForm.getPatronBillPaymentList() ) {
354                 if ( patronBillPaymentList.size() > 0 ) {
355                     for ( PatronBillPayment patronBillPayment : patronBillPaymentList ) {
356                         if (patronBillPayment.getBillNumber().equals(patronBill.getBillNumber())) {
357                             if (patronBill.isSelectBill()) {
358                                 review = patronBillPayment.isReviewed();
359                                 if ( (reviewParameter && !review)) {
360                                     patronBillForm.setPrintBillReview(false);
361                                     break;
362                                 }
363                             }
364                         }
365                     }
366                 }
367             }
368         }
369         if (patronBillForm.getFeeTypes().size() > 0) {
370             for (FeeType feeTypeBo : patronBillForm.getFeeTypes() ) {
371                 if ( feeTypeList.size() > 0 ) {
372                     for ( FeeType feeType : feeTypeList ) {
373                         if ( feeType.getBillNumber().equals(feeTypeBo.getBillNumber()) ) {
374                             if ( feeTypeBo.isActiveItem() ) {
375                                 PatronBillPayment billPayment = feeType.getPatronBillPayment();
376                                 review = billPayment.isReviewed();
377                                 if ( (reviewParameter && !review) ) {
378                                     patronBillForm.setPrintBillReview(false);
379                                     break;
380                                 }
381                             }
382                         }
383                     }
384                 }
385             }
386         }
387         if ( !patronBillForm.isPrintBillReview() ) {
388             GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.NOT_REVIEWED );
389         }
390         return getUIFModelAndView(patronBillForm,"BillViewPage");
391     }
392 
393 }