001 /**
002 * Copyright 2004-2013 The Kuali Foundation
003 *
004 * Licensed under the Educational Community License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/ecl2.php
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package org.kuali.hr.time.timesummary;
017
018 import java.io.Serializable;
019 import java.math.BigDecimal;
020 import java.util.ArrayList;
021 import java.util.List;
022 import java.util.ListIterator;
023
024 import org.kuali.hr.time.util.TkConstants;
025
026 public class AssignmentRow implements Serializable {
027
028 private static final long serialVersionUID = 5550424832906084957L;
029
030 private String descr;
031 private String assignmentKey;
032 private String cssClass;
033
034 private EarnCodeSection earnCodeSection;
035 private BigDecimal periodTotal = BigDecimal.ZERO;
036
037 private List<AssignmentColumn> assignmentColumns = new ArrayList<AssignmentColumn>();
038
039 public String getDescr() {
040 return descr;
041 }
042
043 public void setDescr(String descr) {
044 this.descr = descr;
045 }
046
047 public String getAssignmentKey() {
048 return assignmentKey;
049 }
050
051 public void setAssignmentKey(String assignmentKey) {
052 this.assignmentKey = assignmentKey;
053 }
054
055 public String getCssClass() {
056 return cssClass;
057 }
058
059 public void setCssClass(String cssClass) {
060 this.cssClass = cssClass;
061 }
062
063 public EarnCodeSection getEarnCodeSection() {
064 return earnCodeSection;
065 }
066
067 public void setEarnCodeSection(EarnCodeSection earnCodeSection) {
068 this.earnCodeSection = earnCodeSection;
069 }
070
071 public BigDecimal getPeriodTotal() {
072 return periodTotal;
073 }
074
075 public void setPeriodTotal(BigDecimal periodTotal) {
076 this.periodTotal = periodTotal;
077 }
078
079 public List<AssignmentColumn> getAssignmentColumns() {
080 return assignmentColumns;
081 }
082
083 public void setAssignmentColumns(List<AssignmentColumn> assignmentColumns) {
084 this.assignmentColumns = assignmentColumns;
085 }
086
087 public void addAssignmentColumn(AssignmentColumn assignmentColumn) {
088 this.assignmentColumns.add(assignmentColumn);
089 }
090
091 public void addToAmount(int index, BigDecimal amount) {
092 if (amount != null) {
093 if (0 <= index && index < getAssignmentColumns().size()) {
094 AssignmentColumn assignmentColumn = getAssignmentColumns().get(index);
095
096 BigDecimal newAmount = assignmentColumn.getAmount().add(amount, TkConstants.MATH_CONTEXT);
097 assignmentColumn.setAmount(newAmount);
098 }
099 }
100 }
101
102 public void addToTotal(int index, BigDecimal total) {
103 if (total != null) {
104 if (0 <= index && index < getAssignmentColumns().size()) {
105 AssignmentColumn assignmentColumn = getAssignmentColumns().get(index);
106
107 BigDecimal newTotal = assignmentColumn.getTotal().add(total, TkConstants.MATH_CONTEXT);
108 assignmentColumn.setTotal(newTotal);
109 getEarnCodeSection().addToTotal(index, total);
110 }
111 }
112 }
113
114 public void addWeeklyTotal(int index, int weekSize) {
115 BigDecimal weeklyAmount = BigDecimal.ZERO;
116 BigDecimal weeklyTotal = BigDecimal.ZERO;
117
118 for (ListIterator<AssignmentColumn> iterator = getAssignmentColumns().listIterator(index); iterator.hasPrevious() && iterator.previousIndex() >= (index - weekSize); ) {
119 AssignmentColumn assignmentColumn = iterator.previous();
120 weeklyAmount = weeklyAmount.add(assignmentColumn.getAmount(), TkConstants.MATH_CONTEXT);
121 weeklyTotal = weeklyTotal.add(assignmentColumn.getTotal(), TkConstants.MATH_CONTEXT);
122 }
123
124 if (0 <= index && index < getAssignmentColumns().size()) {
125 AssignmentColumn assignmentColumn = getAssignmentColumns().get(index);
126 assignmentColumn.setAmount(weeklyAmount);
127 assignmentColumn.setTotal(weeklyTotal);
128 assignmentColumn.setWeeklyTotal(true);
129 }
130
131 if (!getAssignmentColumns().isEmpty()) {
132 AssignmentColumn assignmentColumn = getAssignmentColumns().get(getAssignmentColumns().size() - 1);
133
134 BigDecimal periodTotal = assignmentColumn.getTotal().add(weeklyTotal, TkConstants.MATH_CONTEXT);
135 assignmentColumn.setTotal(periodTotal);
136
137 BigDecimal periodAmount = assignmentColumn.getAmount().add(weeklyAmount, TkConstants.MATH_CONTEXT);
138 assignmentColumn.setAmount(periodAmount);
139
140 assignmentColumn.setWeeklyTotal(true);
141 }
142 }
143
144 }