View Javadoc
1   /*
2    * The Kuali Financial System, a comprehensive financial management system for higher education.
3    * 
4    * Copyright 2005-2014 The Kuali Foundation
5    * 
6    * This program is free software: you can redistribute it and/or modify
7    * it under the terms of the GNU Affero General Public License as
8    * published by the Free Software Foundation, either version 3 of the
9    * License, or (at your option) any later version.
10   * 
11   * This program is distributed in the hope that it will be useful,
12   * but WITHOUT ANY WARRANTY; without even the implied warranty of
13   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   * GNU Affero General Public License for more details.
15   * 
16   * You should have received a copy of the GNU Affero General Public License
17   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
18   */
19  package org.kuali.kfs.module.tem.document.validation.impl;
20  
21  import org.kuali.kfs.coa.document.validation.impl.MaintenancePreRulesBase;
22  import org.kuali.kfs.module.tem.businessobject.PerDiem;
23  import org.kuali.rice.core.api.util.type.KualiDecimal;
24  import org.kuali.rice.kns.document.MaintenanceDocument;
25  import org.kuali.rice.krad.document.Document;
26  
27  /**
28   * Business Prerules applicable to Per Diem documents. These PreRules checks that the Per Diem totals match.
29   */
30  public class PerDiemDocumentPreRules extends MaintenancePreRulesBase {
31  
32  
33      protected static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(PerDiemDocumentPreRules.class);
34  
35      protected PerDiem newPerDiem;
36  
37      /**
38       * Sets up a convenience object and few other vendor attributes
39       *
40       * @see org.kuali.kfs.coa.document.validation.impl.MaintenancePreRulesBase#doCustomPreRules(org.kuali.rice.kns.document.MaintenanceDocument)
41       */
42      @Override
43      protected boolean doCustomPreRules(MaintenanceDocument document) {
44          setupConvenienceObjects(document);
45          checkTotals(document);
46          return true;
47      }
48  
49      /**
50       * Sets the convenience objects like newPerDiem and oldPerDiem, so you have short and easy handles to the new and old
51       * objects contained in the maintenance document. It also calls the BusinessObjectBase.refresh(), which will attempt to load all
52       * sub-objects from the DB by their primary keys, if available.
53       *
54       * @param document - the maintenanceDocument being evaluated
55       */
56      protected void setupConvenienceObjects(MaintenanceDocument document) {
57          // setup newPerDiem convenience objects, make sure all possible sub-objects are populated
58          newPerDiem = (PerDiem) document.getNewMaintainableObject().getBusinessObject();
59      }
60  
61      /**
62       * Checks if the B+L+D+IE total does not match Meal+Incidentals total
63       *
64       * @param document - per diem document
65       */
66      public void checkTotals(Document document) {
67          boolean proceed = true;
68  
69          KualiDecimal total = newPerDiem.getBreakfast();
70          total = total.add(newPerDiem.getLunch());
71          total = total.add(newPerDiem.getDinner());
72          total = total.add(newPerDiem.getIncidentals());
73  
74          if(!total.equals(newPerDiem.getMealsAndIncidentals()))
75          {
76              proceed = askOrAnalyzeYesNoQuestion("mealsAndIncidentals", "Warning: Breakfast, Lunch, Dinner, and Incidentals total do not match Meals and Incidentals.  Would you like to proceed anyway?");
77              if (!proceed) {
78                  abortRulesCheck();
79              }
80          }
81      }
82  }