1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.ole.module.cg.document.validation.impl;
17
18 import java.util.Collection;
19
20 import org.apache.commons.lang.StringUtils;
21 import org.apache.log4j.Logger;
22 import org.kuali.ole.module.cg.businessobject.Award;
23 import org.kuali.ole.module.cg.businessobject.AwardAccount;
24 import org.kuali.ole.module.cg.businessobject.AwardOrganization;
25 import org.kuali.ole.module.cg.businessobject.AwardProjectDirector;
26 import org.kuali.ole.module.cg.businessobject.AwardSubcontractor;
27 import org.kuali.ole.sys.OLEConstants;
28 import org.kuali.ole.sys.OLEKeyConstants;
29 import org.kuali.ole.sys.OLEPropertyConstants;
30 import org.kuali.ole.sys.context.SpringContext;
31 import org.kuali.rice.kim.api.identity.Person;
32 import org.kuali.rice.kns.document.MaintenanceDocument;
33 import org.kuali.rice.kns.service.DataDictionaryService;
34 import org.kuali.rice.krad.bo.PersistableBusinessObject;
35 import org.kuali.rice.krad.util.GlobalVariables;
36 import org.kuali.rice.krad.util.ObjectUtils;
37
38
39
40
41 public class AwardRule extends CGMaintenanceDocumentRuleBase {
42 protected static Logger LOG = org.apache.log4j.Logger.getLogger(AwardRule.class);
43
44 protected Award newAwardCopy;
45
46 @Override
47 protected boolean processCustomSaveDocumentBusinessRules(MaintenanceDocument document) {
48 LOG.debug("Entering AwardRule.processCustomSaveDocumentBusinessRules");
49 processCustomRouteDocumentBusinessRules(document);
50 LOG.info("Leaving AwardRule.processCustomSaveDocumentBusinessRules");
51 return true;
52 }
53
54 @Override
55 protected boolean processCustomRouteDocumentBusinessRules(MaintenanceDocument document) {
56 LOG.debug("Entering AwardRule.processCustomRouteDocumentBusinessRules");
57 boolean success = true;
58 success &= checkProposal();
59 success &= checkEndAfterBegin(newAwardCopy.getAwardBeginningDate(), newAwardCopy.getAwardEndingDate(), OLEPropertyConstants.AWARD_ENDING_DATE);
60 success &= checkPrimary(newAwardCopy.getAwardOrganizations(), AwardOrganization.class, OLEPropertyConstants.AWARD_ORGRANIZATIONS, Award.class);
61 success &= checkPrimary(newAwardCopy.getAwardProjectDirectors(), AwardProjectDirector.class, OLEPropertyConstants.AWARD_PROJECT_DIRECTORS, Award.class);
62 success &= checkAccounts();
63 success &= checkProjectDirectorsExist(newAwardCopy.getAwardProjectDirectors(), AwardProjectDirector.class, OLEPropertyConstants.AWARD_PROJECT_DIRECTORS);
64 success &= checkProjectDirectorsExist(newAwardCopy.getAwardAccounts(), AwardAccount.class, OLEPropertyConstants.AWARD_ACCOUNTS);
65 success &= checkProjectDirectorsStatuses(newAwardCopy.getAwardProjectDirectors(), AwardProjectDirector.class, OLEPropertyConstants.AWARD_PROJECT_DIRECTORS);
66 success &= checkFederalPassThrough();
67 success &= checkAgencyNotEqualToFederalPassThroughAgency(newAwardCopy.getAgency(), newAwardCopy.getFederalPassThroughAgency(), OLEPropertyConstants.AGENCY_NUMBER, OLEPropertyConstants.FEDERAL_PASS_THROUGH_AGENCY_NUMBER);
68 LOG.info("Leaving AwardRule.processCustomRouteDocumentBusinessRules");
69 return success;
70 }
71
72
73
74
75
76
77 protected boolean checkAccounts() {
78 boolean success = true;
79 Collection<AwardAccount> awardAccounts = newAwardCopy.getAwardAccounts();
80
81 if (ObjectUtils.isNull(awardAccounts) || awardAccounts.isEmpty()) {
82 String elementLabel = SpringContext.getBean(DataDictionaryService.class).getCollectionElementLabel(Award.class.getName(), OLEPropertyConstants.AWARD_ACCOUNTS, AwardAccount.class);
83 putFieldError(OLEPropertyConstants.AWARD_ACCOUNTS, OLEKeyConstants.ERROR_ONE_REQUIRED, elementLabel);
84 success = false;
85 }
86
87 return success;
88 }
89
90
91
92
93
94
95
96
97
98
99 protected boolean checkProposal() {
100 boolean success = true;
101 if (AwardRuleUtil.isProposalAwarded(newAwardCopy)) {
102 putFieldError(OLEPropertyConstants.PROPOSAL_NUMBER, OLEKeyConstants.ERROR_AWARD_PROPOSAL_AWARDED, newAwardCopy.getProposalNumber().toString());
103 success = false;
104 }
105
106
107
108
109
110
111 return success;
112 }
113
114
115
116
117
118
119 protected boolean checkFederalPassThrough() {
120 boolean success = true;
121 success = super.checkFederalPassThrough(newAwardCopy.getFederalPassThroughIndicator(), newAwardCopy.getAgency(), newAwardCopy.getFederalPassThroughAgencyNumber(), Award.class, OLEPropertyConstants.FEDERAL_PASS_THROUGH_INDICATOR);
122
123 if (newAwardCopy.getFederalPassThroughIndicator()) {
124 String indicatorLabel = SpringContext.getBean(DataDictionaryService.class).getAttributeErrorLabel(Award.class, OLEPropertyConstants.FEDERAL_PASS_THROUGH_INDICATOR);
125 if (StringUtils.isBlank(newAwardCopy.getFederalPassThroughAgencyNumber())) {
126 putFieldError(OLEPropertyConstants.FEDERAL_PASS_THROUGH_AGENCY_NUMBER, OLEKeyConstants.ERROR_FPT_AGENCY_NUMBER_REQUIRED);
127 success = false;
128 }
129 }
130
131 return success;
132 }
133
134
135
136
137 @Override
138 public void setupConvenienceObjects() {
139
140 newAwardCopy = (Award) super.getNewBo();
141 }
142
143
144
145
146
147 @Override
148 public boolean processCustomAddCollectionLineBusinessRules(MaintenanceDocument document, String collectionName, PersistableBusinessObject bo) {
149 boolean success = true;
150
151 if (bo instanceof AwardProjectDirector) {
152 AwardProjectDirector awardProjectDirector = (AwardProjectDirector) bo;
153 success = this.checkAwardProjectDirector(awardProjectDirector);
154 }
155 else if (bo instanceof AwardAccount) {
156 AwardAccount awardAccount = (AwardAccount) bo;
157 success = this.checkAwardAccount(awardAccount);
158 }
159 else if (bo instanceof AwardSubcontractor) {
160 AwardSubcontractor awardSubcontractor = (AwardSubcontractor) bo;
161 success = this.checkAwardSubcontractor(awardSubcontractor);
162 }
163 else if (bo instanceof AwardOrganization) {
164 AwardOrganization awardOrganization = (AwardOrganization) bo;
165 success = this.checkAwardOrganization(awardOrganization);
166 }
167
168 return success;
169 }
170
171
172 protected boolean checkAwardOrganization(AwardOrganization awardOrganization) {
173 boolean success = true;
174 int originalErrorCount = GlobalVariables.getMessageMap().getErrorCount();
175 String errorPathPrefix = OLEConstants.MAINTENANCE_ADD_PREFIX + OLEPropertyConstants.AWARD_ORGRANIZATIONS + ".";
176
177 this.getDictionaryValidationService().validateBusinessObject(awardOrganization);
178 if (StringUtils.isNotBlank(awardOrganization.getOrganizationCode()) && StringUtils.isNotBlank(awardOrganization.getChartOfAccountsCode())) {
179 awardOrganization.refreshReferenceObject(OLEPropertyConstants.ORGANIZATION);
180
181 if (ObjectUtils.isNull(awardOrganization.getOrganization())) {
182 String label = this.getDataDictionaryService().getAttributeLabel(AwardOrganization.class, OLEPropertyConstants.ORGANIZATION_CODE);
183 String message = label + "(" + awardOrganization.getOrganizationCode() + ")";
184
185 putFieldError(errorPathPrefix + OLEPropertyConstants.ORGANIZATION_CODE, OLEKeyConstants.ERROR_EXISTENCE, message);
186 }
187 }
188
189 success &= GlobalVariables.getMessageMap().getErrorCount() == originalErrorCount;
190
191 return success;
192 }
193
194
195 protected boolean checkAwardSubcontractor(AwardSubcontractor awardSubcontractor) {
196 boolean success = true;
197 int originalErrorCount = GlobalVariables.getMessageMap().getErrorCount();
198 String errorPathPrefix = OLEConstants.MAINTENANCE_ADD_PREFIX + OLEPropertyConstants.AWARD_SUBCONTRACTORS + ".";
199
200 this.getDictionaryValidationService().validateBusinessObject(awardSubcontractor);
201 if (StringUtils.isNotBlank(awardSubcontractor.getSubcontractorNumber())) {
202 awardSubcontractor.refreshReferenceObject("subcontractor");
203
204 if (ObjectUtils.isNull(awardSubcontractor.getSubcontractor())) {
205 String label = this.getDataDictionaryService().getAttributeLabel(AwardSubcontractor.class, OLEPropertyConstants.SUBCONTRACTOR_NUMBER);
206 String message = label + "(" + awardSubcontractor.getSubcontractorNumber() + ")";
207
208 putFieldError(errorPathPrefix + OLEPropertyConstants.SUBCONTRACTOR_NUMBER, OLEKeyConstants.ERROR_EXISTENCE, message);
209 }
210 }
211
212 success &= GlobalVariables.getMessageMap().getErrorCount() == originalErrorCount;
213
214 return success;
215 }
216
217
218 protected boolean checkAwardAccount(AwardAccount awardAccount) {
219 boolean success = true;
220 int originalErrorCount = GlobalVariables.getMessageMap().getErrorCount();
221 String errorPathPrefix = OLEConstants.MAINTENANCE_ADD_PREFIX + OLEPropertyConstants.AWARD_ACCOUNTS + ".";
222
223 this.getDictionaryValidationService().validateBusinessObject(awardAccount);
224 if (StringUtils.isNotBlank(awardAccount.getAccountNumber()) && StringUtils.isNotBlank(awardAccount.getChartOfAccountsCode())) {
225 awardAccount.refreshReferenceObject(OLEPropertyConstants.ACCOUNT);
226
227 if (ObjectUtils.isNull(awardAccount.getAccount())) {
228 String label = this.getDataDictionaryService().getAttributeLabel(AwardAccount.class, OLEPropertyConstants.ACCOUNT_NUMBER);
229 String message = label + "(" + awardAccount.getChartOfAccountsCode() + "-" + awardAccount.getAccountNumber() + ")";
230
231 putFieldError(errorPathPrefix + OLEPropertyConstants.ACCOUNT_NUMBER, OLEKeyConstants.ERROR_EXISTENCE, message);
232 }
233 }
234
235 Person projectDirector = awardAccount.getProjectDirector();
236 if (StringUtils.isBlank(awardAccount.getPrincipalId()) || ObjectUtils.isNull(projectDirector)) {
237 String label = this.getDataDictionaryService().getAttributeLabel(AwardAccount.class, "projectDirector.principalName");
238 String message = label + "(" + awardAccount.getPrincipalId() + ")";
239
240 putFieldError(errorPathPrefix + "projectDirector.principalName", OLEKeyConstants.ERROR_EXISTENCE, message);
241 }
242
243 success &= GlobalVariables.getMessageMap().getErrorCount() == originalErrorCount;
244
245 return success;
246 }
247
248
249 protected boolean checkAwardProjectDirector(AwardProjectDirector awardProjectDirector) {
250 boolean success = true;
251
252 Person projectDirector = awardProjectDirector.getProjectDirector();
253 if (StringUtils.isBlank(awardProjectDirector.getPrincipalId()) || ObjectUtils.isNull(projectDirector)) {
254 String errorPath = OLEConstants.MAINTENANCE_ADD_PREFIX + OLEPropertyConstants.AWARD_PROJECT_DIRECTORS + "." + "projectDirector.principalName";
255 String label = this.getDataDictionaryService().getAttributeLabel(AwardProjectDirector.class, "projectDirector.principalName");
256 String message = label + "(" + awardProjectDirector.getPrincipalId() + ")";
257
258 putFieldError(errorPath, OLEKeyConstants.ERROR_EXISTENCE, message);
259
260 success &= false;
261 }
262
263 return success;
264 }
265 }