1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  package org.kuali.ole.module.purap.document.validation.impl;
17  
18  import org.apache.commons.lang.StringUtils;
19  import org.kuali.ole.module.purap.PurapConstants;
20  import org.kuali.ole.module.purap.PurapConstants.InvoiceStatuses;
21  import org.kuali.ole.module.purap.PurapKeyConstants;
22  import org.kuali.ole.module.purap.PurapParameterConstants;
23  import org.kuali.ole.module.purap.businessobject.PurApAccountingLine;
24  import org.kuali.ole.module.purap.businessobject.PurApItem;
25  import org.kuali.ole.module.purap.document.InvoiceDocument;
26  import org.kuali.ole.sys.context.SpringContext;
27  import org.kuali.ole.sys.document.AccountingDocument;
28  import org.kuali.ole.sys.document.validation.event.AttributedDocumentEvent;
29  import org.kuali.ole.sys.service.impl.OleParameterConstants;
30  import org.kuali.rice.coreservice.framework.parameter.ParameterService;
31  import org.kuali.rice.krad.service.DataDictionaryService;
32  import org.kuali.rice.krad.util.GlobalVariables;
33  import org.kuali.rice.krad.util.ObjectUtils;
34  
35  public class InvoiceNonZeroAccountingLineAmountValidation extends PurchasingAccountsPayableAccountingLineAccessibleValidation {
36  
37      private PurApItem itemForValidation;
38      private ParameterService parameterService;
39  
40      public boolean validate(AttributedDocumentEvent event) {
41          boolean valid = true;
42          String status = ((InvoiceDocument) event.getDocument()).getApplicationDocumentStatus();
43  
44          AccountingDocument accountingDocument = (AccountingDocument) event.getDocument();
45          this.setAccountingDocumentForValidation(accountingDocument);
46          this.setDataDictionaryService(SpringContext.getBean(DataDictionaryService.class));
47  
48          
49          if (StringUtils.equals(InvoiceStatuses.APPDOC_AWAITING_FISCAL_REVIEW, status)) {
50              for (PurApAccountingLine acct : itemForValidation.getSourceAccountingLines()) {
51                  this.setAccountingLineForValidation(acct);
52                  final boolean lineIsAccessible = lookupAccountingLineAuthorizer().hasEditPermissionOnAccountingLine(accountingDocument, acct, getAccountingLineCollectionProperty(), GlobalVariables.getUserSession().getPerson(), true);
53                  
54                  if (lineIsAccessible) {
55                      
56                      
57                      if (ObjectUtils.isNull(acct.getAmount())) {
58                          GlobalVariables.getMessageMap().putError(PurapConstants.ITEM_TAB_ERROR_PROPERTY, PurapKeyConstants.ERROR_ITEM_ACCOUNTING_AMOUNT_INVALID, itemForValidation.getItemIdentifierString());
59                          valid &= false;
60                      } else {
61                          if (acct.getAmount().isZero()) {
62                              if (!canApproveAccountingLinesWithZeroAmount()) {
63                                  GlobalVariables.getMessageMap().putError(PurapConstants.ITEM_TAB_ERROR_PROPERTY, PurapKeyConstants.ERROR_ITEM_ACCOUNTING_AMOUNT_INVALID, itemForValidation.getItemIdentifierString());
64                                  valid &= false;
65                              }
66                          }
67                      }
68                  }
69              }
70          }
71  
72          return valid;
73      }
74  
75      
76  
77  
78  
79  
80  
81  
82      public boolean canApproveAccountingLinesWithZeroAmount() {
83          boolean canApproveLine = false;
84  
85          
86          String approveZeroAmountLine = SpringContext.getBean(ParameterService.class).getParameterValueAsString(OleParameterConstants.PURCHASING_DOCUMENT.class, PurapParameterConstants.APPROVE_ACCOUNTING_LINES_WITH_ZERO_DOLLAR_AMOUNT_IND);
87  
88          if ("Y".equalsIgnoreCase(approveZeroAmountLine)) {
89              return true;
90          }
91  
92          return canApproveLine;
93      }
94  
95      public PurApItem getItemForValidation() {
96          return itemForValidation;
97      }
98  
99      public void setItemForValidation(PurApItem itemForValidation) {
100         this.itemForValidation = itemForValidation;
101     }
102 
103     
104 
105 
106 
107 
108 
109     public ParameterService getParameterService() {
110         return parameterService;
111     }
112 
113     
114 
115 
116 
117 
118     public void setParameterService(ParameterService parameterService) {
119         this.parameterService = parameterService;
120     }
121 }