1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.kuali.kfs.fp.document.validation.impl;
20
21 import java.util.Iterator;
22 import java.util.List;
23
24 import org.apache.commons.lang.StringUtils;
25 import org.kuali.kfs.fp.businessobject.ProcurementCardTargetAccountingLine;
26 import org.kuali.kfs.fp.businessobject.ProcurementCardTransactionDetail;
27 import org.kuali.kfs.fp.document.ProcurementCardDocument;
28 import org.kuali.kfs.sys.KFSKeyConstants;
29 import org.kuali.kfs.sys.KFSPropertyConstants;
30 import org.kuali.kfs.sys.businessobject.AccountingLine;
31 import org.kuali.kfs.sys.businessobject.SourceAccountingLine;
32 import org.kuali.kfs.sys.context.SpringContext;
33 import org.kuali.kfs.sys.document.validation.GenericValidation;
34 import org.kuali.kfs.sys.document.validation.event.AttributedDocumentEvent;
35 import org.kuali.rice.core.api.parameter.ParameterEvaluator;
36 import org.kuali.rice.core.api.parameter.ParameterEvaluatorService;
37 import org.kuali.rice.krad.util.GlobalVariables;
38 import org.kuali.rice.krad.util.MessageMap;
39 import org.kuali.rice.krad.util.ObjectUtils;
40
41
42
43
44 public class ProcurementCardObjectCodeValidation extends GenericValidation {
45 private AccountingLine accountingLineForValidation;
46
47
48
49
50
51
52 public boolean validate(AttributedDocumentEvent event) {
53 ProcurementCardDocument pcDocument = (ProcurementCardDocument) event.getDocument();
54 AccountingLine accountingLine = getAccountingLineForValidation();
55 if (!accountingLine.isTargetAccountingLine()) return true;
56
57 MessageMap errors = GlobalVariables.getMessageMap();
58 String errorKey = KFSPropertyConstants.FINANCIAL_OBJECT_CODE;
59 boolean objectCodeAllowed = true;
60
61
62 if (ObjectUtils.isNull(accountingLine.getObjectCode())) {
63 return false;
64 }
65
66
67 if (!accountingLine.getObjectCode().isFinancialObjectActiveCode()) {
68 errors.putError(errorKey, KFSKeyConstants.ERROR_INACTIVE, "object code");
69 objectCodeAllowed = false;
70 }
71
72
73 String mccRestriction = "";
74 ProcurementCardTargetAccountingLine line = (ProcurementCardTargetAccountingLine) accountingLine;
75 List pcTransactions = pcDocument.getTransactionEntries();
76 for (Iterator iter = pcTransactions.iterator(); iter.hasNext();) {
77 ProcurementCardTransactionDetail transactionEntry = (ProcurementCardTransactionDetail) iter.next();
78 if (transactionEntry.getFinancialDocumentTransactionLineNumber().equals(line.getFinancialDocumentTransactionLineNumber())) {
79 mccRestriction = transactionEntry.getProcurementCardVendor().getTransactionMerchantCategoryCode();
80 }
81 }
82
83 if (StringUtils.isBlank(mccRestriction)) {
84 return objectCodeAllowed;
85 }
86
87
88 if (objectCodeAllowed) {
89 ParameterEvaluator evaluator = SpringContext.getBean(ParameterEvaluatorService.class).getParameterEvaluator(ProcurementCardDocument.class, ProcurementCardDocumentRuleConstants.VALID_OBJECTS_BY_MCC_CODE_PARM_NM, ProcurementCardDocumentRuleConstants.INVALID_OBJECTS_BY_MCC_CODE_PARM_NM, mccRestriction, accountingLine.getFinancialObjectCode());
90 objectCodeAllowed = evaluator.evaluateAndAddError(SourceAccountingLine.class, KFSPropertyConstants.FINANCIAL_OBJECT_CODE);
91 }
92
93
94 if (objectCodeAllowed) {
95 ParameterEvaluator evaluator = SpringContext.getBean(ParameterEvaluatorService.class).getParameterEvaluator(ProcurementCardDocument.class, ProcurementCardDocumentRuleConstants.VALID_OBJ_SUB_TYPE_BY_MCC_CODE_PARM_NM, ProcurementCardDocumentRuleConstants.INVALID_OBJ_SUB_TYPE_BY_MCC_CODE_PARM_NM, mccRestriction, accountingLine.getObjectCode().getFinancialObjectSubTypeCode());
96 objectCodeAllowed = evaluator.evaluateAndAddError(SourceAccountingLine.class, "objectCode.financialObjectSubTypeCode", KFSPropertyConstants.FINANCIAL_OBJECT_CODE);
97 }
98 return objectCodeAllowed;
99 }
100
101
102
103
104
105
106 public AccountingLine getAccountingLineForValidation() {
107 return accountingLineForValidation;
108 }
109
110
111
112
113
114 public void setAccountingLineForValidation(AccountingLine accountingLineForValidation) {
115 this.accountingLineForValidation = accountingLineForValidation;
116 }
117 }