View Javadoc
1   /*
2    * Copyright 2009 The Kuali Foundation
3    *
4    * Licensed under the Educational Community License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    * http://www.opensource.org/licenses/ecl2.php
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package org.kuali.ole.module.purap.document.validation.impl;
17  
18  import org.kuali.ole.module.purap.PurapConstants;
19  import org.kuali.ole.module.purap.PurapKeyConstants;
20  import org.kuali.ole.module.purap.businessobject.PurApAccountingLine;
21  import org.kuali.ole.module.purap.businessobject.PurApItem;
22  import org.kuali.ole.sys.document.validation.GenericValidation;
23  import org.kuali.ole.sys.document.validation.event.AttributedDocumentEvent;
24  import org.kuali.rice.krad.util.GlobalVariables;
25  
26  import java.math.BigDecimal;
27  
28  public class PurchasingAccountsPayableAccountPercentValidation extends GenericValidation {
29  
30      private PurApItem itemForValidation;
31  
32      /**
33       * Verifies account percent. If the total percent does not equal 100, the validation fails.
34       */
35      @Override
36      public boolean validate(AttributedDocumentEvent event) {
37          boolean valid = true;
38          boolean isAnyAccountingLineZero = false;
39          // validate that the percents total 100 for each item
40          BigDecimal totalPercent = BigDecimal.ZERO;
41          BigDecimal desiredPercent = new BigDecimal("100");
42          for (PurApAccountingLine account : itemForValidation.getSourceAccountingLines()) {
43              if (account.getAccountLinePercent() != null
44                      && account.getAccountLinePercent().compareTo(BigDecimal.ZERO) == 0) {
45                  isAnyAccountingLineZero = true;
46              }
47              if (account.getAccountLinePercent() != null) {
48                  totalPercent = totalPercent.add(account.getAccountLinePercent());
49              } else {
50                  totalPercent = totalPercent.add(BigDecimal.ZERO);
51              }
52          }
53          if (desiredPercent.compareTo(totalPercent) != 0) {
54              GlobalVariables.getMessageMap().putError(PurapConstants.ITEM_TAB_ERROR_PROPERTY, PurapKeyConstants.ERROR_ITEM_ACCOUNTING_TOTAL, itemForValidation.getItemIdentifierString());
55              valid = false;
56          }
57  
58          // MSU Contribution OLEMI-8470 DTT-3147 OLECNTRB-962
59          if (isAnyAccountingLineZero && itemForValidation.getSourceAccountingLines().size() > 1) {
60              GlobalVariables.getMessageMap().putError(PurapConstants.ITEM_TAB_ERROR_PROPERTY,
61                      PurapKeyConstants.ERROR_ITEM_ACCOUNTING_ZERO, itemForValidation.getItemIdentifierString());
62              valid = false;
63          }
64  
65          return valid;
66      }
67  
68      public PurApItem getItemForValidation() {
69          return itemForValidation;
70      }
71  
72      public void setItemForValidation(PurApItem itemForValidation) {
73          this.itemForValidation = itemForValidation;
74      }
75  
76  }