View Javadoc
1   package org.kuali.ole.coa.controller;
2   
3   import org.apache.commons.lang3.StringUtils;
4   import org.kuali.ole.OLEConstants;
5   import org.kuali.ole.coa.businessobject.*;
6   import org.kuali.ole.sys.context.SpringContext;
7   import org.kuali.ole.sys.service.UniversityDateService;
8   import org.kuali.rice.krad.service.KRADServiceLocator;
9   import org.kuali.rice.krad.uif.UifConstants;
10  import org.kuali.rice.krad.uif.UifParameters;
11  import org.kuali.rice.krad.uif.component.BindingInfo;
12  import org.kuali.rice.krad.uif.container.CollectionGroup;
13  import org.kuali.rice.krad.uif.util.ObjectPropertyUtils;
14  import org.kuali.rice.krad.util.GlobalVariables;
15  import org.kuali.rice.krad.util.ObjectUtils;
16  import org.kuali.rice.krad.web.controller.MaintenanceDocumentController;
17  import org.kuali.rice.krad.web.form.MaintenanceDocumentForm;
18  import org.kuali.rice.krad.web.form.UifFormBase;
19  import org.springframework.stereotype.Controller;
20  import org.springframework.validation.BindingResult;
21  import org.springframework.web.bind.annotation.ModelAttribute;
22  import org.springframework.web.bind.annotation.RequestMapping;
23  import org.springframework.web.bind.annotation.RequestMethod;
24  import org.springframework.web.servlet.ModelAndView;
25  
26  import javax.servlet.http.HttpServletRequest;
27  import javax.servlet.http.HttpServletResponse;
28  import java.util.HashMap;
29  import java.util.List;
30  import java.util.Map;
31  
32  /**
33   * Created with IntelliJ IDEA.
34   * User: aurojyotit
35   * Date: 9/30/14
36   * Time: 7:26 PM
37   * To change this template use File | Settings | File Templates.
38   */
39  @Controller
40  @RequestMapping(value = "/addAccountingLineValidator")
41  public class OleFundAccountLineMaintenanceController extends MaintenanceDocumentController {
42  
43      @RequestMapping(method = RequestMethod.POST, params = "methodToCall=addAccountingLine")
44      public ModelAndView addAccountingLine(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
45                                            HttpServletRequest request, HttpServletResponse response) {
46          MaintenanceDocumentForm maintenanceForm = (MaintenanceDocumentForm) form;
47          String selectedCollectionPath = form.getActionParamaterValue(UifParameters.SELLECTED_COLLECTION_PATH);
48          /*BindingInfo addLineBindingInfo = (BindingInfo) form.getViewPostMetadata().getComponentPostData(
49                  selectedCollectionId, UifConstants.PostMetadata.ADD_LINE_BINDING_INFO);*/
50          CollectionGroup collectionGroup = form.getPostedView().getViewIndex().getCollectionGroupByPath(
51                  selectedCollectionPath);
52          String addLinePath = collectionGroup.getAddLineBindingInfo().getBindingPath();
53          Object accountingLineObject = ObjectPropertyUtils.getPropertyValue(maintenanceForm, addLinePath);
54          OleFundCodeAccountingLine oleFundCodeAccountingLine = (OleFundCodeAccountingLine) accountingLineObject;
55          boolean error = false;
56          //blank validation
57          if (StringUtils.isBlank(oleFundCodeAccountingLine.getChartCode()) || StringUtils.isBlank(oleFundCodeAccountingLine.getAccountNumber()) || StringUtils.isBlank(oleFundCodeAccountingLine.getObjectCode()) || ObjectUtils.isNull(oleFundCodeAccountingLine.getPercentage())) {
58              GlobalVariables.getMessageMap().putErrorForSectionId(OLEConstants.OLE_FUND_CODE_ACCOUNTING_LINE, OLEConstants.OLEEResourceRecord.ERROR_MANDATORY_FIELDS);
59              return getUIFModelAndView(form);
60          }
61          //chart code validation
62          Chart chart = KRADServiceLocator.getBusinessObjectService().findBySinglePrimaryKey(Chart.class, oleFundCodeAccountingLine.getChartCode());
63          if (chart == null) {
64              GlobalVariables.getMessageMap().putErrorForSectionId(OLEConstants.OLE_FUND_CODE_ACCOUNTING_LINE, OLEConstants.OLEEResourceRecord.ERROR_INVALID_CHART_CODE);
65              error = true;
66          }
67          //Account no validation
68          Map accNoMap = new HashMap();
69          accNoMap.put(OLEConstants.ACCOUNT_NUMBER, oleFundCodeAccountingLine.getAccountNumber());
70          Account account = KRADServiceLocator.getBusinessObjectService().findByPrimaryKey(Account.class, accNoMap);
71          if (account == null) {
72              GlobalVariables.getMessageMap().putErrorForSectionId(OLEConstants.OLE_FUND_CODE_ACCOUNTING_LINE, OLEConstants.OLEEResourceRecord.ERROR_INVALID_ACCOUNT_NUM);
73              error = true;
74          } else {
75              accNoMap = new HashMap();
76              accNoMap.put(OLEConstants.ACCOUNT_NUMBER, oleFundCodeAccountingLine.getAccountNumber());
77              accNoMap.put(OLEConstants.OLEBatchProcess.CHART_OF_ACCOUNTS_CODE, oleFundCodeAccountingLine.getChartCode());
78              List<Account> accountList = (List<Account>) KRADServiceLocator.getBusinessObjectService().findMatching(Account.class, accNoMap);
79              if (accountList.size() == 0) {
80                  GlobalVariables.getMessageMap().putErrorForSectionId(OLEConstants.OLE_FUND_CODE_ACCOUNTING_LINE, OLEConstants.OLEEResourceRecord.ERROR_INVALID_COMBINATION_ACCOUNT_NUM);
81                  error = true;
82              }
83          }
84          //Object Code validation
85          UniversityDateService universityDateService = SpringContext.getBean(UniversityDateService.class);
86          Integer fiscalYear = universityDateService.getCurrentUniversityDate().getUniversityFiscalYear();
87          Map objectCodeMap = new HashMap();
88          objectCodeMap.put(OLEConstants.OLEBatchProcess.OBJECT_CODE, oleFundCodeAccountingLine.getObjectCode());
89          objectCodeMap.put(org.kuali.ole.sys.OLEConstants.FISCAL_YEAR, fiscalYear);
90          List<ObjectCode> objectCodeList = (List<ObjectCode>) KRADServiceLocator.getBusinessObjectService().findMatching(ObjectCode.class, objectCodeMap);
91          if (objectCodeList.size() == 0) {
92              GlobalVariables.getMessageMap().putErrorForSectionId(OLEConstants.OLE_FUND_CODE_ACCOUNTING_LINE, OLEConstants.OLEEResourceRecord.ERROR_INVALID_OBJECT_CODE);
93              error = true;
94          }
95          //Sub-Account no validation
96          String subAccNo = oleFundCodeAccountingLine.getSubAccount();
97          if (StringUtils.isNotBlank(subAccNo)) {
98              Map subAccNoMap = new HashMap();
99              subAccNoMap.put(OLEConstants.SUB_ACCOUNT_NUMBER, subAccNo);
100             SubAccount subAccount = KRADServiceLocator.getBusinessObjectService().findByPrimaryKey(SubAccount.class, subAccNoMap);
101             if (subAccount == null) {
102                 GlobalVariables.getMessageMap().putErrorForSectionId(OLEConstants.OLE_FUND_CODE_ACCOUNTING_LINE, OLEConstants.OLEEResourceRecord.ERROR_INVALID_SUB_ACCOUNT_NUM);
103                 error = true;
104             } else {
105                 subAccNoMap = new HashMap();
106                 subAccNoMap.put(OLEConstants.SUB_ACCOUNT_NUMBER, subAccNo);
107                 subAccNoMap.put(OLEConstants.ACCOUNT_NUMBER, oleFundCodeAccountingLine.getAccountNumber());
108                 subAccNoMap.put(OLEConstants.OLEBatchProcess.CHART_OF_ACCOUNTS_CODE, oleFundCodeAccountingLine.getChartCode());
109                 List<SubAccount> subAccountList = (List<SubAccount>) KRADServiceLocator.getBusinessObjectService().findMatching(SubAccount.class, subAccNoMap);
110                 if (subAccountList.size() == 0) {
111                     GlobalVariables.getMessageMap().putErrorForSectionId(OLEConstants.OLE_FUND_CODE_ACCOUNTING_LINE, OLEConstants.OLEEResourceRecord.ERROR_INVALID_COMBINATION_SUB_ACCOUNT_NUM);
112                     error = true;
113                 }
114             }
115         }
116         //Sub Object Code validation
117         String subObjectCode = oleFundCodeAccountingLine.getSubObject();
118         if (StringUtils.isNotBlank(subObjectCode)) {
119             Map subObjectCodeMap = new HashMap();
120             subObjectCodeMap.put(OLEConstants.FINANCIAL_SUB_OBJECT_CODE, subObjectCode);
121             SubObjectCode subObject = KRADServiceLocator.getBusinessObjectService().findByPrimaryKey(SubObjectCode.class, subObjectCodeMap);
122             if (subObject == null) {
123                 GlobalVariables.getMessageMap().putErrorForSectionId(OLEConstants.OLE_FUND_CODE_ACCOUNTING_LINE, OLEConstants.OLEEResourceRecord.ERROR_INVALID_SUB_OBJECT_CODE);
124                 error = true;
125             } else {
126                 subObjectCodeMap = new HashMap();
127                 subObjectCodeMap.put(OLEConstants.FINANCIAL_SUB_OBJECT_CODE, subObjectCode);
128                 subObjectCodeMap.put(OLEConstants.ACCOUNT_NUMBER, oleFundCodeAccountingLine.getAccountNumber());
129                 subObjectCodeMap.put(OLEConstants.OLEBatchProcess.CHART_OF_ACCOUNTS_CODE, oleFundCodeAccountingLine.getChartCode());
130                 subObjectCodeMap.put(OLEConstants.OLEBatchProcess.OBJECT_CODE, oleFundCodeAccountingLine.getObjectCode());
131                 subObjectCodeMap.put(org.kuali.ole.sys.OLEConstants.FISCAL_YEAR, fiscalYear);
132                 List<SubObjectCode> subObjectCodeList = (List<SubObjectCode>) KRADServiceLocator.getBusinessObjectService().findMatching(SubObjectCode.class, subObjectCodeMap);
133                 if (subObjectCodeList.size() == 0) {
134                     GlobalVariables.getMessageMap().putErrorForSectionId(OLEConstants.OLE_FUND_CODE_ACCOUNTING_LINE, OLEConstants.OLEEResourceRecord.ERROR_INVALID_COMBINATION_SUB_OBJECT_CODE);
135                     error = true;
136                 }
137             }
138         }
139         //Project Code validation
140         String projectCode = oleFundCodeAccountingLine.getProject();
141         if (StringUtils.isNotBlank(projectCode)) {
142             Map projectCodeMap = new HashMap();
143             projectCodeMap.put(OLEConstants.CODE, projectCode);
144             List<ProjectCode> projectCodeList = (List<ProjectCode>) KRADServiceLocator.getBusinessObjectService().findMatching(ProjectCode.class, projectCodeMap);
145             if (projectCodeList.size() == 0) {
146                 GlobalVariables.getMessageMap().putErrorForSectionId(OLEConstants.OLE_FUND_CODE_ACCOUNTING_LINE, OLEConstants.OLEEResourceRecord.ERROR_INVALID_PROJECT_CODE);
147                 error = true;
148             }
149         }
150         if (!error) {
151             ModelAndView modelAndView = super.addLine(form,result,request,response);
152             return modelAndView;
153         } else {
154             return getUIFModelAndView(form);
155         }
156     }
157 
158 }