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
34
35
36
37
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
49
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
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
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
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
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
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
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
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 }