1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  package org.kuali.ole.fp.document.validation.impl;
17  
18  import org.kuali.ole.fp.businessobject.CashDrawer;
19  import org.kuali.ole.fp.service.CashDrawerService;
20  import org.kuali.ole.sys.OLEKeyConstants;
21  import org.kuali.ole.sys.context.SpringContext;
22  import org.kuali.rice.core.api.util.type.KualiDecimal;
23  import org.kuali.rice.kns.document.MaintenanceDocument;
24  import org.kuali.rice.kns.maintenance.rules.MaintenanceDocumentRuleBase;
25  
26  
27  
28  
29  public class CashDrawerMaintenanceDocumentRule extends MaintenanceDocumentRuleBase {
30  
31      
32  
33  
34      @Override
35      protected boolean processCustomRouteDocumentBusinessRules(MaintenanceDocument document) {
36          boolean documentValid = super.processCustomRouteDocumentBusinessRules(document);
37          final CashDrawer cashDrawer = (CashDrawer)document.getNewMaintainableObject().getBusinessObject();
38          documentValid &= checkCashDrawerStillClosed(cashDrawer);
39          documentValid &= checkCurrencyAmountsPositive(cashDrawer);
40          documentValid &= checkCoinAmountsPositive(cashDrawer);
41          return documentValid;
42      }
43  
44      
45  
46  
47      @Override
48      protected boolean processCustomSaveDocumentBusinessRules(MaintenanceDocument document) {
49          boolean documentValid = super.processCustomSaveDocumentBusinessRules(document);
50          final CashDrawer cashDrawer = (CashDrawer)document.getNewMaintainableObject().getBusinessObject();
51          documentValid &= checkCashDrawerStillClosed(cashDrawer);
52          if (documentValid) {
53              checkCurrencyAmountsPositive(cashDrawer);
54              checkCoinAmountsPositive(cashDrawer);
55          }
56          return documentValid;
57      }
58  
59      
60  
61  
62      @Override
63      protected boolean processCustomApproveDocumentBusinessRules(MaintenanceDocument document) {
64          boolean documentValid = super.processCustomApproveDocumentBusinessRules(document);
65          final CashDrawer cashDrawer = (CashDrawer)document.getNewMaintainableObject().getBusinessObject();
66          checkCurrencyAmountsPositive(cashDrawer);
67          checkCoinAmountsPositive(cashDrawer);
68          return documentValid;
69      }
70  
71      
72  
73  
74  
75  
76      protected boolean checkCurrencyAmountsPositive(CashDrawer cashDrawer) {
77          boolean valid = true;
78          if (cashDrawer.getFinancialDocumentHundredDollarAmount() != null && cashDrawer.getFinancialDocumentHundredDollarAmount().compareTo(KualiDecimal.ZERO) < 0) {
79              putFieldError("hundredDollarCount", OLEKeyConstants.CashDrawerMaintenance.HUNDRED_DOLLAR_AMOUNT_NEGATIVE, new String[] { cashDrawer.getHundredDollarCount().toString() });
80              valid = false;
81          }
82          if (cashDrawer.getFinancialDocumentFiftyDollarAmount() != null && cashDrawer.getFinancialDocumentFiftyDollarAmount().compareTo(KualiDecimal.ZERO) < 0) {
83              putFieldError("fiftyDollarCount", OLEKeyConstants.CashDrawerMaintenance.FIFTY_DOLLAR_AMOUNT_NEGATIVE, new String[] { cashDrawer.getFiftyDollarCount().toString() });
84              valid = false;
85          }
86          if (cashDrawer.getFinancialDocumentTwentyDollarAmount() != null && cashDrawer.getFinancialDocumentTwentyDollarAmount().compareTo(KualiDecimal.ZERO) < 0) {
87              putFieldError("twentyDollarCount", OLEKeyConstants.CashDrawerMaintenance.TWENTY_DOLLAR_AMOUNT_NEGATIVE, new String[] { cashDrawer.getTwentyDollarCount().toString() });
88              valid = false;
89          }
90          if (cashDrawer.getFinancialDocumentTenDollarAmount() != null && cashDrawer.getFinancialDocumentTenDollarAmount().compareTo(KualiDecimal.ZERO) < 0) {
91              putFieldError("tenDollarCount", OLEKeyConstants.CashDrawerMaintenance.TEN_DOLLAR_AMOUNT_NEGATIVE, new String[] { cashDrawer.getTenDollarCount().toString() });
92              valid = false;
93          }
94          if (cashDrawer.getFinancialDocumentFiveDollarAmount() != null && cashDrawer.getFinancialDocumentFiveDollarAmount().compareTo(KualiDecimal.ZERO) < 0) {
95              putFieldError("fiveDollarCount", OLEKeyConstants.CashDrawerMaintenance.FIVE_DOLLAR_AMOUNT_NEGATIVE, new String[] { cashDrawer.getFiveDollarCount().toString() });
96              valid = false;
97          }
98          if (cashDrawer.getFinancialDocumentTwoDollarAmount() != null && cashDrawer.getFinancialDocumentTwoDollarAmount().compareTo(KualiDecimal.ZERO) < 0) {
99              putFieldError("twoDollarCount", OLEKeyConstants.CashDrawerMaintenance.TWO_DOLLAR_AMOUNT_NEGATIVE, new String[] { cashDrawer.getTwoDollarCount().toString() });
100             valid = false;
101         }
102         if (cashDrawer.getFinancialDocumentOneDollarAmount() != null && cashDrawer.getFinancialDocumentOneDollarAmount().compareTo(KualiDecimal.ZERO) < 0) {
103             putFieldError("oneDollarCount", OLEKeyConstants.CashDrawerMaintenance.ONE_DOLLAR_AMOUNT_NEGATIVE, new String[] { cashDrawer.getOneDollarCount().toString() });
104             valid = false;
105         }
106         if (cashDrawer.getFinancialDocumentOtherDollarAmount() != null && cashDrawer.getFinancialDocumentOtherDollarAmount().compareTo(KualiDecimal.ZERO) < 0) {
107             putFieldError("financialDocumentOtherDollarAmount", OLEKeyConstants.CashDrawerMaintenance.OTHER_DOLLAR_AMOUNT_NEGATIVE, new String[] { cashDrawer.getFinancialDocumentOtherDollarAmount().toString() });
108             valid = false;
109         }
110         return valid;
111     }
112     
113     
114 
115 
116 
117 
118     protected boolean checkCoinAmountsPositive(CashDrawer cashDrawer) {
119         boolean valid = true;
120         if (cashDrawer.getFinancialDocumentHundredCentAmount() != null && cashDrawer.getFinancialDocumentHundredCentAmount().compareTo(KualiDecimal.ZERO) < 0) {
121             putFieldError("hundredCentCount", OLEKeyConstants.CashDrawerMaintenance.HUNDRED_CENT_AMOUNT_NEGATIVE, new String[] { cashDrawer.getHundredCentCount().toString() });
122             valid = false;
123         }
124         if (cashDrawer.getFinancialDocumentFiftyCentAmount() != null && cashDrawer.getFinancialDocumentFiftyCentAmount().compareTo(KualiDecimal.ZERO) < 0) {
125             putFieldError("fiftyCentCount", OLEKeyConstants.CashDrawerMaintenance.FIFTY_CENT_AMOUNT_NEGATIVE, new String[] { cashDrawer.getFiftyCentCount().toString() });
126             valid = false;
127         }
128         if (cashDrawer.getFinancialDocumentTwentyFiveCentAmount() != null && cashDrawer.getFinancialDocumentTwentyFiveCentAmount().compareTo(KualiDecimal.ZERO) < 0) {
129             putFieldError("twentyFiveCentCount", OLEKeyConstants.CashDrawerMaintenance.TWENTY_FIVE_CENT_AMOUNT_NEGATIVE, new String[] { cashDrawer.getTwentyFiveCentCount().toString() });
130             valid = false;
131         }
132         if (cashDrawer.getFinancialDocumentTenCentAmount() != null && cashDrawer.getFinancialDocumentTenCentAmount().compareTo(KualiDecimal.ZERO) < 0) {
133             putFieldError("tenCentCount", OLEKeyConstants.CashDrawerMaintenance.TEN_CENT_AMOUNT_NEGATIVE, new String[] { cashDrawer.getTenCentCount().toString() });
134             valid = false;
135         }
136         if (cashDrawer.getFinancialDocumentFiveCentAmount() != null && cashDrawer.getFinancialDocumentFiveCentAmount().compareTo(KualiDecimal.ZERO) < 0) {
137             putFieldError("fiveCentCount", OLEKeyConstants.CashDrawerMaintenance.FIVE_CENT_AMOUNT_NEGATIVE, new String[] { cashDrawer.getFiveCentCount().toString() });
138             valid = false;
139         }
140         if (cashDrawer.getFinancialDocumentOneCentAmount() != null && cashDrawer.getFinancialDocumentOneCentAmount().compareTo(KualiDecimal.ZERO) < 0) {
141             putFieldError("oneCentCount", OLEKeyConstants.CashDrawerMaintenance.ONE_CENT_AMOUNT_NEGATIVE, new String[] { cashDrawer.getOneCentCount().toString() });
142             valid = false;
143         }
144         if (cashDrawer.getFinancialDocumentOtherCentAmount() != null && cashDrawer.getFinancialDocumentOtherCentAmount().compareTo(KualiDecimal.ZERO) < 0) {
145             putFieldError("financialDocumentOtherCentAmount", OLEKeyConstants.CashDrawerMaintenance.OTHER_CENT_AMOUNT_NEGATIVE, new String[] { cashDrawer.getFinancialDocumentOtherCentAmount().toString() });
146             valid = false;
147         }
148         return valid;
149     }
150     
151     
152 
153 
154 
155     public boolean checkCashDrawerStillClosed(CashDrawer cashDrawer) {
156        boolean valid = true;
157        final CashDrawerService cashDrawerService = SpringContext.getBean(CashDrawerService.class);
158        final CashDrawer cashDrawerFromDB = cashDrawerService.getByCampusCode(cashDrawer.getCampusCode());
159        if (cashDrawerFromDB != null && !cashDrawerFromDB.isClosed()) {
160            putFieldError("campusCode", OLEKeyConstants.CashDrawerMaintenance.CASH_DRAWER_NOT_CLOSED, new String[] { cashDrawer.getCampusCode() });
161            valid = false;
162        }
163        return valid;
164     }
165 }