1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.hr.lm.balancetransfer;
17
18 import java.math.BigDecimal;
19 import java.sql.Date;
20 import java.util.ArrayList;
21 import java.util.List;
22
23 import org.kuali.hr.lm.accrual.AccrualCategory;
24 import org.kuali.hr.lm.accrual.AccrualCategoryRule;
25 import org.kuali.hr.lm.leaveblock.LeaveBlock;
26 import org.kuali.hr.time.HrBusinessObject;
27 import org.kuali.hr.time.service.base.TkServiceLocator;
28 import org.kuali.hr.time.util.TkConstants;
29 import org.kuali.rice.kim.api.identity.Person;
30 import org.kuali.rice.krad.util.ObjectUtils;
31
32 public class BalanceTransfer extends HrBusinessObject {
33
34 private static final long serialVersionUID = 6948695780968441016L;
35
36 private String balanceTransferId;
37 private String documentHeaderId;
38 private String accrualCategoryRule;
39 private String principalId;
40 private String toAccrualCategory;
41 private String fromAccrualCategory;
42 private BigDecimal transferAmount;
43 private BigDecimal amountTransferred;
44 private BigDecimal forfeitedAmount;
45 private String leaveCalendarDocumentId;
46
47 private String status;
48 private String forfeitedLeaveBlockId;
49 private String accruedLeaveBlockId;
50 private String debitedLeaveBlockId;
51 private String sstoId;
52
53 private transient Person principal;
54
55 public String getPrincipalId() {
56 return principalId;
57 }
58
59 public void setPrincipalId(String principalId) {
60 this.principalId = principalId;
61 }
62
63 public String getToAccrualCategory() {
64 return toAccrualCategory;
65 }
66
67 public void setToAccrualCategory(String toAccrualCategory) {
68 this.toAccrualCategory = toAccrualCategory;
69 }
70
71 public String getFromAccrualCategory() {
72 return fromAccrualCategory;
73 }
74
75 public void setFromAccrualCategory(String fromAccrualCategory) {
76 this.fromAccrualCategory = fromAccrualCategory;
77 }
78
79 public BigDecimal getTransferAmount() {
80 return transferAmount;
81 }
82
83 public void setTransferAmount(BigDecimal transferAmount) {
84 this.transferAmount = transferAmount;
85 }
86
87 public BigDecimal getForfeitedAmount() {
88 return forfeitedAmount;
89 }
90
91 public void setForfeitedAmount(BigDecimal forfeitedAmount) {
92 this.forfeitedAmount = forfeitedAmount;
93 }
94
95 public String getBalanceTransferId() {
96 return balanceTransferId;
97 }
98
99 public void setBalanceTransferId(String balanceTransferId) {
100 this.balanceTransferId = balanceTransferId;
101 }
102
103 public String getAccrualCategoryRule() {
104 return accrualCategoryRule;
105 }
106
107 public void setAccrualCategoryRule(String accrualCategoryRule) {
108 this.accrualCategoryRule = accrualCategoryRule;
109 }
110
111 @Override
112 protected String getUniqueKey() {
113 return balanceTransferId;
114 }
115
116 @Override
117 public String getId() {
118 return getBalanceTransferId();
119 }
120
121 @Override
122 public void setId(String id) {
123 setBalanceTransferId(id);
124 }
125
126 public Person getPrincipal() {
127 return principal;
128 }
129
130 public void setPrincipal(Person principal) {
131 this.principal = principal;
132 }
133
134 public AccrualCategory getCreditedAccrualCategory() {
135 return TkServiceLocator.getAccrualCategoryService().getAccrualCategory(toAccrualCategory, super.getEffectiveDate());
136 }
137
138 public AccrualCategory getDebitedAccrualCategory() {
139 return TkServiceLocator.getAccrualCategoryService().getAccrualCategory(fromAccrualCategory, super.getEffectiveDate());
140 }
141
142 public String getLeaveCalendarDocumentId() {
143 return leaveCalendarDocumentId;
144 }
145
146 public void setLeaveCalendarDocumentId(String leaveCalendarDocumentId) {
147 this.leaveCalendarDocumentId = leaveCalendarDocumentId;
148 }
149
150
151
152
153
154
155
156
157
158
159
160
161 public BalanceTransfer adjust(BigDecimal transferAmount) {
162 BigDecimal difference = this.transferAmount.subtract(transferAmount);
163 AccrualCategoryRule aRule = TkServiceLocator.getAccrualCategoryRuleService().getAccrualCategoryRule(accrualCategoryRule);
164
165
166
167
168
169 if(difference.signum() < 0) {
170
171 if(forfeitedAmount.compareTo(BigDecimal.ZERO) > 0) {
172
173 if(forfeitedAmount.compareTo(difference.abs()) >= 0)
174
175 forfeitedAmount = forfeitedAmount.subtract(difference.abs());
176 else
177
178 forfeitedAmount = BigDecimal.ZERO;
179 }
180
181
182
183 }
184 else if (difference.signum() > 0) {
185
186 forfeitedAmount = forfeitedAmount.add(difference);
187 }
188
189 this.transferAmount = transferAmount;
190
191 if(ObjectUtils.isNotNull(aRule.getMaxBalanceTransferConversionFactor()))
192 this.amountTransferred = transferAmount.multiply(aRule.getMaxBalanceTransferConversionFactor()).setScale(2);
193 else
194 this.amountTransferred = transferAmount;
195
196 return this;
197 }
198
199 public List<LeaveBlock> getLeaveBlocks() {
200 List<LeaveBlock> leaveBlocks = new ArrayList<LeaveBlock>();
201 if (getForfeitedLeaveBlockId() != null) {
202 leaveBlocks.add(TkServiceLocator.getLeaveBlockService().getLeaveBlock(forfeitedLeaveBlockId));
203 }
204 if (getAccruedLeaveBlockId() != null) {
205 leaveBlocks.add(TkServiceLocator.getLeaveBlockService().getLeaveBlock(accruedLeaveBlockId));
206 }
207 if (getDebitedLeaveBlockId() != null) {
208 leaveBlocks.add(TkServiceLocator.getLeaveBlockService().getLeaveBlock(debitedLeaveBlockId));
209 }
210
211 return leaveBlocks;
212 }
213
214 public String getStatus() {
215 return status;
216 }
217
218 public void setStatus(String status) {
219 this.status = status;
220 }
221
222 public void disapprove() {
223 TkServiceLocator.getLeaveBlockService().updateLeaveBlock(null, principalId);
224 setStatus(TkConstants.ROUTE_STATUS.DISAPPROVED);
225 }
226
227 public void approve() {
228
229 setStatus(TkConstants.ROUTE_STATUS.FINAL);
230 }
231
232 public void cancel() {
233
234 setStatus(TkConstants.ROUTE_STATUS.CANCEL);
235 }
236
237 public String getAccruedLeaveBlockId() {
238 return accruedLeaveBlockId;
239 }
240
241 public void setAccruedLeaveBlockId(String accruedLeaveBlockId) {
242 this.accruedLeaveBlockId = accruedLeaveBlockId;
243 }
244
245 public String getForfeitedLeaveBlockId() {
246 return forfeitedLeaveBlockId;
247 }
248
249 public void setForfeitedLeaveBlockId(String forfeitedLeaveBlockId) {
250 this.forfeitedLeaveBlockId = forfeitedLeaveBlockId;
251 }
252
253 public String getDebitedLeaveBlockId() {
254 return debitedLeaveBlockId;
255 }
256
257 public void setDebitedLeaveBlockId(String debitedLeaveBlockId) {
258 this.debitedLeaveBlockId = debitedLeaveBlockId;
259 }
260
261 public BigDecimal getAmountTransferred() {
262 return amountTransferred;
263 }
264
265 public void setAmountTransferred(BigDecimal amountTransferrerd) {
266 this.amountTransferred = amountTransferrerd;
267 }
268
269 public String getSstoId() {
270 return sstoId;
271 }
272
273 public void setSstoId(String sstoId) {
274 this.sstoId = sstoId;
275 }
276
277 public String getDocumentHeaderId() {
278 return documentHeaderId;
279 }
280
281 public void setDocumentHeaderId(String documentHeaderId) {
282 this.documentHeaderId = documentHeaderId;
283 }
284
285
286
287
288 }