001 /*
002 * Copyright 2011 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
017 package org.kuali.kfs.module.ec.businessobject;
018
019 import java.util.LinkedHashMap;
020 import java.util.List;
021
022 import org.apache.commons.lang.StringUtils;
023 import org.kuali.kfs.coa.businessobject.Account;
024 import org.kuali.kfs.coa.businessobject.Chart;
025 import org.kuali.kfs.coa.businessobject.ObjectCode;
026 import org.kuali.kfs.coa.businessobject.SubAccount;
027 import org.kuali.kfs.integration.cg.ContractsAndGrantsModuleService;
028 import org.kuali.kfs.integration.ld.LaborModuleService;
029 import org.kuali.kfs.module.ec.EffortPropertyConstants;
030 import org.kuali.kfs.module.ec.document.EffortCertificationDocument;
031 import org.kuali.kfs.module.ec.util.EffortCertificationParameterFinder;
032 import org.kuali.kfs.module.ec.util.PayrollAmountHolder;
033 import org.kuali.kfs.module.ld.LaborPropertyConstants;
034 import org.kuali.kfs.module.ld.businessobject.PositionData;
035 import org.kuali.kfs.sys.KFSConstants;
036 import org.kuali.kfs.sys.KFSPropertyConstants;
037 import org.kuali.kfs.sys.businessobject.AccountingLineOverride;
038 import org.kuali.kfs.sys.businessobject.SystemOptions;
039 import org.kuali.kfs.sys.context.SpringContext;
040 import org.kuali.rice.kns.bo.PersistableBusinessObjectBase;
041 import org.kuali.rice.kns.util.KualiDecimal;
042
043 /**
044 * Business Object for the Effort Certification Detail Table.
045 */
046 public class EffortCertificationDetail extends PersistableBusinessObjectBase {
047 private String documentNumber;
048 private String chartOfAccountsCode;
049 private String accountNumber;
050 private String subAccountNumber;
051 private String positionNumber;
052 private String financialObjectCode;
053 private String sourceChartOfAccountsCode;
054 private String sourceAccountNumber;
055
056 private KualiDecimal effortCertificationPayrollAmount;
057 private KualiDecimal effortCertificationOriginalPayrollAmount;
058 private Integer effortCertificationCalculatedOverallPercent;
059 private Integer effortCertificationUpdatedOverallPercent;
060 private String costShareSourceSubAccountNumber;
061
062 private Integer universityFiscalYear;
063
064 private KualiDecimal originalFringeBenefitAmount;
065
066 private boolean accountExpiredOverride;
067 private boolean accountExpiredOverrideNeeded;
068 private String overrideCode = AccountingLineOverride.CODE.NONE;
069
070 private boolean newLineIndicator; // to indicate if this detail line has been persisted or not
071
072 // holds last saved updated payroll amount so business rule can check if it has been updated at the route level
073 private KualiDecimal persistedPayrollAmount;
074 private Integer persistedEffortPercent;
075 private String groupId;
076
077 private EffortCertificationDocument effortCertificationDocument;
078 private ObjectCode financialObject;
079 private Chart chartOfAccounts;
080 private Account account;
081 private Chart sourceChartOfAccounts;
082 private Account sourceAccount;
083 private SubAccount subAccount;
084 private SystemOptions options;
085
086 protected PositionData positionData;
087 protected String effectiveDate;
088 /**
089 * Default constructor.
090 */
091 public EffortCertificationDetail() {
092 super();
093
094 try {
095 subAccountNumber = KFSConstants.getDashSubAccountNumber();
096 } catch ( RuntimeException ex ) {
097 // skip errors caused by calling this prior to spring startup
098 }
099
100 effortCertificationPayrollAmount = KualiDecimal.ZERO;
101 effortCertificationOriginalPayrollAmount = KualiDecimal.ZERO;
102 effortCertificationCalculatedOverallPercent = new Integer(0);
103 effortCertificationUpdatedOverallPercent = new Integer(0);
104 originalFringeBenefitAmount = KualiDecimal.ZERO;
105 effectiveDate = KFSConstants.EMPTY_STRING;
106 }
107
108 public EffortCertificationDetail(EffortCertificationDetail effortCertificationDetail) {
109 super();
110 if (effortCertificationDetail != null) {
111 this.chartOfAccountsCode = effortCertificationDetail.getChartOfAccountsCode();
112 this.accountNumber = effortCertificationDetail.getAccountNumber();
113 this.subAccountNumber = effortCertificationDetail.getSubAccountNumber();
114 this.positionNumber = effortCertificationDetail.getPositionNumber();
115 this.financialObjectCode = effortCertificationDetail.getFinancialObjectCode();
116 this.sourceChartOfAccountsCode = effortCertificationDetail.getSourceChartOfAccountsCode();
117 this.sourceAccountNumber = effortCertificationDetail.getSourceAccountNumber();
118 this.effortCertificationPayrollAmount = effortCertificationDetail.getEffortCertificationPayrollAmount();
119 this.effortCertificationCalculatedOverallPercent = effortCertificationDetail.getEffortCertificationCalculatedOverallPercent();
120 this.effortCertificationUpdatedOverallPercent = effortCertificationDetail.getEffortCertificationUpdatedOverallPercent();
121 this.universityFiscalYear = effortCertificationDetail.getUniversityFiscalYear();
122 this.costShareSourceSubAccountNumber = effortCertificationDetail.getCostShareSourceSubAccountNumber();
123 this.effortCertificationOriginalPayrollAmount = effortCertificationDetail.getEffortCertificationOriginalPayrollAmount();
124 this.originalFringeBenefitAmount = effortCertificationDetail.getOriginalFringeBenefitAmount();
125 this.effectiveDate = effortCertificationDetail.getEffectiveDate();
126 }
127 }
128
129 /**
130 * Gets the documentNumber attribute.
131 *
132 * @return Returns the documentNumber.
133 */
134 public String getDocumentNumber() {
135 return documentNumber;
136 }
137
138 /**
139 * Sets the documentNumber attribute value.
140 *
141 * @param documentNumber The documentNumber to set.
142 */
143 public void setDocumentNumber(String documentNumber) {
144 this.documentNumber = documentNumber;
145 }
146
147 /**
148 * Gets the chartOfAccountsCode attribute.
149 *
150 * @return Returns the chartOfAccountsCode.
151 */
152 public String getChartOfAccountsCode() {
153 return chartOfAccountsCode;
154 }
155
156 /**
157 * Sets the chartOfAccountsCode attribute value.
158 *
159 * @param chartOfAccountsCode The chartOfAccountsCode to set.
160 */
161 public void setChartOfAccountsCode(String chartOfAccountsCode) {
162 this.chartOfAccountsCode = chartOfAccountsCode;
163 }
164
165 /**
166 * Gets the accountNumber attribute.
167 *
168 * @return Returns the accountNumber.
169 */
170 public String getAccountNumber() {
171 return accountNumber;
172 }
173
174 /**
175 * Sets the accountNumber attribute value.
176 *
177 * @param accountNumber The accountNumber to set.
178 */
179 public void setAccountNumber(String accountNumber) {
180 this.accountNumber = accountNumber;
181 }
182
183 /**
184 * Gets the subAccountNumber attribute.
185 *
186 * @return Returns the subAccountNumber.
187 */
188 public String getSubAccountNumber() {
189 return subAccountNumber;
190 }
191
192 /**
193 * Sets the subAccountNumber attribute value.
194 *
195 * @param subAccountNumber The subAccountNumber to set.
196 */
197 public void setSubAccountNumber(String subAccountNumber) {
198 this.subAccountNumber = subAccountNumber;
199 }
200
201 /**
202 * Gets the positionNumber attribute.
203 *
204 * @return Returns the positionNumber.
205 */
206 public String getPositionNumber() {
207 return positionNumber;
208 }
209
210 /**
211 * Sets the positionNumber attribute value.
212 *
213 * @param positionNumber The positionNumber to set.
214 */
215 public void setPositionNumber(String positionNumber) {
216 this.positionNumber = positionNumber;
217 }
218
219 /**
220 * Gets the effectiveDate attribute.
221 *
222 * @return Returns the effectiveDate.
223 */
224 public String getEffectiveDate() {
225 return effectiveDate;
226 }
227
228 /**
229 * Sets the effectiveDate attribute value.
230 *
231 * @param effectiveDate The effectiveDate to set.
232 */
233 public void setEffectiveDate(String effectiveDate) {
234 this.effectiveDate = effectiveDate;
235 }
236
237 /**
238 * Gets the financialObjectCode attribute.
239 *
240 * @return Returns the financialObjectCode.
241 */
242 public String getFinancialObjectCode() {
243 return financialObjectCode;
244 }
245
246 /**
247 * Sets the financialObjectCode attribute value.
248 *
249 * @param financialObjectCode The financialObjectCode to set.
250 */
251 public void setFinancialObjectCode(String financialObjectCode) {
252 this.financialObjectCode = financialObjectCode;
253 }
254
255 /**
256 * Gets the sourceChartOfAccountsCode attribute.
257 *
258 * @return Returns the sourceChartOfAccountsCode.
259 */
260 public String getSourceChartOfAccountsCode() {
261 return sourceChartOfAccountsCode;
262 }
263
264 /**
265 * Sets the sourceChartOfAccountsCode attribute value.
266 *
267 * @param sourceChartOfAccountsCode The sourceChartOfAccountsCode to set.
268 */
269 public void setSourceChartOfAccountsCode(String sourceChartOfAccountsCode) {
270 this.sourceChartOfAccountsCode = sourceChartOfAccountsCode;
271 }
272
273 /**
274 * Gets the sourceAccountNumber attribute.
275 *
276 * @return Returns the sourceAccountNumber.
277 */
278 public String getSourceAccountNumber() {
279 return sourceAccountNumber;
280 }
281
282 /**
283 * Sets the sourceAccountNumber attribute value.
284 *
285 * @param sourceAccountNumber The sourceAccountNumber to set.
286 */
287 public void setSourceAccountNumber(String sourceAccountNumber) {
288 this.sourceAccountNumber = sourceAccountNumber;
289 }
290
291 /**
292 * Gets the effortCertificationPayrollAmount attribute.
293 *
294 * @return Returns the effortCertificationPayrollAmount.
295 */
296 public KualiDecimal getEffortCertificationPayrollAmount() {
297 return effortCertificationPayrollAmount;
298 }
299
300 /**
301 * Sets the effortCertificationPayrollAmount attribute value.
302 *
303 * @param effortCertificationPayrollAmount The effortCertificationPayrollAmount to set.
304 */
305 public void setEffortCertificationPayrollAmount(KualiDecimal effortCertificationPayrollAmount) {
306 this.effortCertificationPayrollAmount = effortCertificationPayrollAmount;
307 }
308
309 /**
310 * Gets the effortCertificationCalculatedOverallPercent attribute.
311 *
312 * @return Returns the effortCertificationCalculatedOverallPercent.
313 */
314 public Integer getEffortCertificationCalculatedOverallPercent() {
315 return effortCertificationCalculatedOverallPercent;
316 }
317
318 /**
319 * Sets the effortCertificationCalculatedOverallPercent attribute value.
320 *
321 * @param effortCertificationCalculatedOverallPercent The effortCertificationCalculatedOverallPercent to set.
322 */
323 public void setEffortCertificationCalculatedOverallPercent(Integer effortCertificationCalculatedOverallPercent) {
324 this.effortCertificationCalculatedOverallPercent = effortCertificationCalculatedOverallPercent;
325 }
326
327 /**
328 * Gets the effortCertificationUpdatedOverallPercent attribute.
329 *
330 * @return Returns the effortCertificationUpdatedOverallPercent.
331 */
332 public Integer getEffortCertificationUpdatedOverallPercent() {
333 return effortCertificationUpdatedOverallPercent;
334 }
335
336 /**
337 * Sets the effortCertificationUpdatedOverallPercent attribute value.
338 *
339 * @param effortCertificationUpdatedOverallPercent The effortCertificationUpdatedOverallPercent to set.
340 */
341 public void setEffortCertificationUpdatedOverallPercent(Integer effortCertificationUpdatedOverallPercent) {
342 this.effortCertificationUpdatedOverallPercent = effortCertificationUpdatedOverallPercent;
343 }
344
345 /**
346 * Gets the costShareSourceSubAccountNumber attribute.
347 *
348 * @return Returns the costShareSourceSubAccountNumber.
349 */
350 public String getCostShareSourceSubAccountNumber() {
351 return costShareSourceSubAccountNumber;
352 }
353
354 /**
355 * Sets the costShareSourceSubAccountNumber attribute value.
356 *
357 * @param costShareSourceSubAccountNumber The costShareSourceSubAccountNumber to set.
358 */
359 public void setCostShareSourceSubAccountNumber(String costShareSourceSubAccountNumber) {
360 this.costShareSourceSubAccountNumber = costShareSourceSubAccountNumber;
361 }
362
363 /**
364 * Gets the effortCertificationOriginalPayrollAmount attribute.
365 *
366 * @return Returns the effortCertificationOriginalPayrollAmount.
367 */
368 public KualiDecimal getEffortCertificationOriginalPayrollAmount() {
369 return effortCertificationOriginalPayrollAmount;
370 }
371
372 /**
373 * Sets the effortCertificationOriginalPayrollAmount attribute value.
374 *
375 * @param effortCertificationOriginalPayrollAmount The effortCertificationOriginalPayrollAmount to set.
376 */
377 public void setEffortCertificationOriginalPayrollAmount(KualiDecimal effortCertificationOriginalPayrollAmount) {
378 this.effortCertificationOriginalPayrollAmount = effortCertificationOriginalPayrollAmount;
379 }
380
381
382 /**
383 * Gets the financialObject attribute.
384 *
385 * @return Returns the financialObject.
386 */
387 public ObjectCode getFinancialObject() {
388 return financialObject;
389 }
390
391 /**
392 * Sets the financialObject attribute value.
393 *
394 * @param financialObject The financialObject to set.
395 */
396 @Deprecated
397 public void setFinancialObject(ObjectCode financialObject) {
398 this.financialObject = financialObject;
399 }
400
401 /**
402 * Gets the chartOfAccounts attribute.
403 *
404 * @return Returns the chartOfAccounts.
405 */
406 public Chart getChartOfAccounts() {
407 return chartOfAccounts;
408 }
409
410 /**
411 * Sets the chartOfAccounts attribute value.
412 *
413 * @param chartOfAccounts The chartOfAccounts to set.
414 */
415 @Deprecated
416 public void setChartOfAccounts(Chart chartOfAccounts) {
417 this.chartOfAccounts = chartOfAccounts;
418 }
419
420 /**
421 * Gets the effortCertificationDocument attribute.
422 *
423 * @return Returns the effortCertificationDocument.
424 */
425 public EffortCertificationDocument getEffortCertificationDocument() {
426 return effortCertificationDocument;
427 }
428
429 /**
430 * Sets the effortCertificationDocument attribute value.
431 *
432 * @param effortCertificationDocument The effortCertificationDocument to set.
433 */
434 @Deprecated
435 public void setEffortCertificationDocument(EffortCertificationDocument effortCertificationDocument) {
436 this.effortCertificationDocument = effortCertificationDocument;
437 }
438
439 /**
440 * Gets the account attribute.
441 *
442 * @return Returns the account.
443 */
444 public Account getAccount() {
445 if (account == null && StringUtils.isNotBlank(this.getChartOfAccountsCode()) && StringUtils.isNotBlank(this.getAccountNumber())) {
446 this.refreshReferenceObject(KFSPropertyConstants.ACCOUNT);
447 }
448
449 return account;
450 }
451
452 /**
453 * Sets the account attribute value.
454 *
455 * @param account The account to set.
456 */
457 @Deprecated
458 public void setAccount(Account account) {
459 this.account = account;
460 }
461
462 /**
463 * Gets the sourceChartOfAccounts attribute.
464 *
465 * @return Returns the sourceChartOfAccounts.
466 */
467 public Chart getSourceChartOfAccounts() {
468 return sourceChartOfAccounts;
469 }
470
471 /**
472 * Sets the sourceChartOfAccounts attribute value.
473 *
474 * @param sourceChartOfAccounts The sourceChartOfAccounts to set.
475 */
476 @Deprecated
477 public void setSourceChartOfAccounts(Chart sourceChartOfAccounts) {
478 this.sourceChartOfAccounts = sourceChartOfAccounts;
479 }
480
481 /**
482 * Gets the sourceAccount attribute.
483 *
484 * @return Returns the sourceAccount.
485 */
486 public Account getSourceAccount() {
487 return sourceAccount;
488 }
489
490 /**
491 * Sets the sourceAccount attribute value.
492 *
493 * @param sourceAccount The sourceAccount to set.
494 */
495 @Deprecated
496 public void setSourceAccount(Account sourceAccount) {
497 this.sourceAccount = sourceAccount;
498 }
499
500 /**
501 * Gets the subAccount attribute.
502 *
503 * @return Returns the subAccount.
504 */
505 public SubAccount getSubAccount() {
506 return subAccount;
507 }
508
509 /**
510 * Sets the subAccount attribute value.
511 *
512 * @param subAccount The subAccount to set.
513 */
514 @Deprecated
515 public void setSubAccount(SubAccount subAccount) {
516 this.subAccount = subAccount;
517 }
518
519 /**
520 * Gets the options attribute.
521 *
522 * @return Returns the options.
523 */
524 public SystemOptions getOptions() {
525 return options;
526 }
527
528 /**
529 * Sets the options attribute value.
530 *
531 * @param options The options to set.
532 */
533 @Deprecated
534 public void setOptions(SystemOptions options) {
535 this.options = options;
536 }
537
538 /**
539 * Gets the positionData attribute.
540 *
541 * @return Returns the positionData.
542 */
543 public PositionData getPositionData() {
544 return positionData;
545 }
546
547 /**
548 * Sets the positionData attribute value.
549 *
550 * @param positionData The positionData to set.
551 */
552 public void setPositionData(PositionData positionData) {
553 this.positionData = positionData;
554 }
555
556 /**
557 * Gets the newLineIndicator attribute.
558 *
559 * @return Returns the newLineIndicator.
560 */
561 public boolean isNewLineIndicator() {
562 return newLineIndicator;
563 }
564
565 /**
566 * Sets the newLineIndicator attribute value.
567 *
568 * @param newLineIndicator The newLineIndicator to set.
569 */
570 public void setNewLineIndicator(boolean newLineIndicator) {
571 this.newLineIndicator = newLineIndicator;
572 }
573
574 /**
575 * If the account of this detail line is closed, the line cannot be edited.
576 *
577 * @return Returns true if line can be edited, false otherwise
578 */
579 public boolean isEditable() {
580 if (this.getAccount() != null && !this.getAccount().isActive()) {
581 return false;
582 }
583
584 return true;
585 }
586
587 /**
588 * Gets the federalOrFederalPassThroughIndicator attribute. If this line is associated with a valid account, the indicator will
589 * be retrieved and updated.
590 *
591 * @return Returns the federalOrFederalPassThroughIndicator.
592 */
593 public boolean isFederalOrFederalPassThroughIndicator() {
594 if (this.getAccount() != null) {
595 List<String> federalAgencyTypeCodes = EffortCertificationParameterFinder.getFederalAgencyTypeCodes();
596 return SpringContext.getBean(ContractsAndGrantsModuleService.class).isAwardedByFederalAgency(getAccount().getChartOfAccountsCode(), getAccount().getAccountNumber(), federalAgencyTypeCodes);
597 }
598
599 return false;
600 }
601
602 /**
603 * This is a marker method, which does nothing.
604 */
605 public void setFederalOrFederalPassThroughIndicator(boolean federalOrFederalPassThroughIndicator) {
606 return;
607 }
608
609 /**
610 * Gets the overrideCode attribute.
611 *
612 * @return Returns the overrideCode.
613 */
614 public String getOverrideCode() {
615 return overrideCode;
616 }
617
618 /**
619 * Sets the overrideCode attribute value.
620 *
621 * @param overrideCode The overrideCode to set.
622 */
623 public void setOverrideCode(String overrideCode) {
624 this.overrideCode = overrideCode;
625 }
626
627 /**
628 * Gets the fringeBenefitAmount attribute.
629 *
630 * @return Returns the fringeBenefitAmount.
631 */
632 public KualiDecimal getFringeBenefitAmount() {
633 KualiDecimal payrollAmount = this.getEffortCertificationPayrollAmount();
634
635 return EffortCertificationDetail.calculateFringeBenefit(this, payrollAmount);
636 }
637
638 /**
639 * This is a marker method, which does nothing.
640 */
641 public void setFringeBenefitAmount(KualiDecimal fringeBenefitAmount) {
642 return;
643 }
644
645 /**
646 * Gets the originalFringeBenefitAmount attribute.
647 *
648 * @return Returns the originalFringeBenefitAmount.
649 */
650 public KualiDecimal getOriginalFringeBenefitAmount() {
651 if (this.originalFringeBenefitAmount == null || originalFringeBenefitAmount.isZero()) {
652 this.recalculateOriginalFringeBenefit();
653 }
654 return originalFringeBenefitAmount;
655 }
656
657 /**
658 * Sets the originalFringeBenefitAmount attribute value.
659 *
660 * @param originalFringeBenefitAmount The originalFringeBenefitAmount to set.
661 */
662 public void setOriginalFringeBenefitAmount(KualiDecimal originalFringeBenefitAmount) {
663 this.originalFringeBenefitAmount = originalFringeBenefitAmount;
664 }
665
666 /**
667 * Gets the universityFiscalYear attribute.
668 *
669 * @return Returns the universityFiscalYear.
670 */
671 public Integer getUniversityFiscalYear() {
672 return this.universityFiscalYear;
673 }
674
675 /**
676 * Sets the universityFiscalYear attribute value.
677 *
678 * @param universityFiscalYear The universityFiscalYear to set.
679 */
680 public void setUniversityFiscalYear(Integer universityFiscalYear) {
681 this.universityFiscalYear = universityFiscalYear;
682 }
683
684 /**
685 * Gets the persistedPayrollAmount attribute.
686 *
687 * @return Returns the persistedPayrollAmount.
688 */
689 public KualiDecimal getPersistedPayrollAmount() {
690 return persistedPayrollAmount;
691 }
692
693 /**
694 * Sets the persistedPayrollAmount attribute value.
695 *
696 * @param persistedPayrollAmount The persistedPayrollAmount to set.
697 */
698 public void setPersistedPayrollAmount(KualiDecimal persistedPayrollAmount) {
699 this.persistedPayrollAmount = persistedPayrollAmount;
700 }
701
702 /**
703 * @see org.kuali.rice.kns.bo.BusinessObjectBase#toStringMapper()
704 */
705 @SuppressWarnings("unchecked")
706 protected LinkedHashMap toStringMapper() {
707 LinkedHashMap map = new LinkedHashMap();
708 map.put(KFSPropertyConstants.DOCUMENT_NUMBER, this.documentNumber);
709 map.put(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE, this.chartOfAccountsCode);
710 map.put(KFSPropertyConstants.ACCOUNT_NUMBER, this.accountNumber);
711 map.put(KFSPropertyConstants.SUB_ACCOUNT_NUMBER, this.subAccountNumber);
712 map.put(KFSPropertyConstants.POSITION_NUMBER, this.positionNumber);
713 map.put(KFSPropertyConstants.FINANCIAL_OBJECT_CODE, this.financialObjectCode);
714 map.put(EffortPropertyConstants.SOURCE_CHART_OF_ACCOUNTS_CODE, this.sourceChartOfAccountsCode);
715 map.put(EffortPropertyConstants.SOURCE_ACCOUNT_NUMBER, this.sourceAccountNumber);
716 map.put(EffortPropertyConstants.EFFORT_CERTIFICATION_PAYROLL_AMOUNT, this.effortCertificationPayrollAmount);
717 map.put(EffortPropertyConstants.EFFORT_CERTIFICATION_ORIGINAL_PAYROLL_AMOUNT, this.effortCertificationOriginalPayrollAmount);
718 map.put(LaborPropertyConstants.EFFECTIVE_DATE, this.effectiveDate);
719
720 return map;
721 }
722
723 /**
724 * Gets the accountExpiredOverride attribute.
725 *
726 * @return Returns the accountExpiredOverride.
727 */
728 public boolean isAccountExpiredOverride() {
729 return accountExpiredOverride;
730 }
731
732 /**
733 * Sets the accountExpiredOverride attribute value.
734 *
735 * @param accountExpiredOverride The accountExpiredOverride to set.
736 */
737 public void setAccountExpiredOverride(boolean accountExpiredOverride) {
738 this.accountExpiredOverride = accountExpiredOverride;
739 }
740
741 /**
742 * Gets the accountExpiredOverrideNeeded attribute.
743 *
744 * @return Returns the accountExpiredOverrideNeeded.
745 */
746 public boolean isAccountExpiredOverrideNeeded() {
747 return accountExpiredOverrideNeeded;
748 }
749
750 /**
751 * Sets the accountExpiredOverrideNeeded attribute value.
752 *
753 * @param accountExpiredOverrideNeeded The accountExpiredOverrideNeeded to set.
754 */
755 public void setAccountExpiredOverrideNeeded(boolean accountExpiredOverrideNeeded) {
756 this.accountExpiredOverrideNeeded = accountExpiredOverrideNeeded;
757 }
758
759 /**
760 * calculate the total effort percent of the given detail lines
761 *
762 * @param the given detail lines
763 * @return Returns the total effort percent
764 */
765 public static Integer getTotalEffortPercent(List<EffortCertificationDetail> effortCertificationDetailLines) {
766 Integer totalEffortPercent = 0;
767
768 for (EffortCertificationDetail detailLine : effortCertificationDetailLines) {
769 totalEffortPercent += detailLine.getEffortCertificationUpdatedOverallPercent();
770 }
771
772 return totalEffortPercent;
773 }
774
775 /**
776 * calculate the total persised effort percent of the given detail lines
777 *
778 * @param the given detail lines
779 * @return Returns the total persisted effort percent
780 */
781 public static Integer getTotalPersistedEffortPercent(List<EffortCertificationDetail> effortCertificationDetailLines) {
782 Integer totalEffortPercent = 0;
783
784 for (EffortCertificationDetail detailLine : effortCertificationDetailLines) {
785 totalEffortPercent += detailLine.getPersistedEffortPercent();
786 }
787
788 return totalEffortPercent;
789 }
790
791 /**
792 * calculate the total original effort percent of the given detail lines
793 *
794 * @param the given detail lines
795 * @return Returns the total original effort percent
796 */
797 public static Integer getTotalOriginalEffortPercent(List<EffortCertificationDetail> effortCertificationDetailLines) {
798 Integer totalOriginalEffortPercent = 0;
799
800 for (EffortCertificationDetail detailLine : effortCertificationDetailLines) {
801 totalOriginalEffortPercent += detailLine.getEffortCertificationCalculatedOverallPercent();
802 }
803
804 return totalOriginalEffortPercent;
805 }
806
807 /**
808 * calculate the total payroll amount of the given detail lines
809 *
810 * @param the given detail lines
811 * @return Returns the total original payroll amount
812 */
813 public static KualiDecimal getTotalPayrollAmount(List<EffortCertificationDetail> effortCertificationDetailLines) {
814 KualiDecimal totalPayrollAmount = KualiDecimal.ZERO;
815
816 for (EffortCertificationDetail detailLine : effortCertificationDetailLines) {
817 totalPayrollAmount = totalPayrollAmount.add(detailLine.getEffortCertificationPayrollAmount());
818 }
819
820 return totalPayrollAmount;
821 }
822
823 /**
824 * calculate the total payroll amount of the given detail lines
825 *
826 * @param the given detail lines
827 * @return Returns the total original payroll amount
828 */
829 public static KualiDecimal getTotalPersistedPayrollAmount(List<EffortCertificationDetail> effortCertificationDetailLines) {
830 KualiDecimal totalPayrollAmount = KualiDecimal.ZERO;
831
832 for (EffortCertificationDetail detailLine : effortCertificationDetailLines) {
833 totalPayrollAmount = totalPayrollAmount.add(detailLine.getPersistedPayrollAmount());
834 }
835
836 return totalPayrollAmount;
837 }
838
839 /**
840 * calculate the total original payroll amount of the given detail lines
841 *
842 * @param the given detail lines
843 * @return Returns the total original payroll amount
844 */
845 public static KualiDecimal getTotalOriginalPayrollAmount(List<EffortCertificationDetail> effortCertificationDetailLines) {
846 KualiDecimal totalOriginalPayrollAmount = KualiDecimal.ZERO;
847
848 for (EffortCertificationDetail detailLine : effortCertificationDetailLines) {
849 totalOriginalPayrollAmount = totalOriginalPayrollAmount.add(detailLine.getEffortCertificationOriginalPayrollAmount());
850 }
851
852 return totalOriginalPayrollAmount;
853 }
854
855 /**
856 * Gets the totalFringeBenefit attribute.
857 *
858 * @return Returns the totalFringeBenefit.
859 */
860 public static KualiDecimal getTotalFringeBenefit(List<EffortCertificationDetail> effortCertificationDetailLines) {
861 KualiDecimal totalFringeBenefit = KualiDecimal.ZERO;
862
863 for (EffortCertificationDetail detailLine : effortCertificationDetailLines) {
864 totalFringeBenefit = totalFringeBenefit.add(detailLine.getFringeBenefitAmount());
865 }
866
867 return totalFringeBenefit;
868 }
869
870 /**
871 * Gets the totalOriginalFringeBenefit attribute.
872 *
873 * @return Returns the totalOriginalFringeBenefit.
874 */
875 public static KualiDecimal getTotalOriginalFringeBenefit(List<EffortCertificationDetail> effortCertificationDetailLines) {
876 KualiDecimal totalOriginalFringeBenefit = KualiDecimal.ZERO;
877
878 for (EffortCertificationDetail detailLine : effortCertificationDetailLines) {
879 totalOriginalFringeBenefit = totalOriginalFringeBenefit.add(detailLine.getOriginalFringeBenefitAmount());
880 }
881
882 return totalOriginalFringeBenefit;
883 }
884
885 /**
886 * recalculate the payroll amount of the current detail line
887 *
888 * @param totalPayrollAmount the total payroll amount of the hosting document
889 */
890 public void recalculatePayrollAmount(KualiDecimal totalPayrollAmount) {
891 Integer effortPercent = this.getEffortCertificationUpdatedOverallPercent();
892 KualiDecimal payrollAmount = PayrollAmountHolder.recalculatePayrollAmount(totalPayrollAmount, effortPercent);
893 this.setEffortCertificationPayrollAmount(payrollAmount);
894 }
895
896 /**
897 * recalculate the original fringe benefit of the current detail line
898 */
899 public void recalculateOriginalFringeBenefit() {
900 KualiDecimal originalPayrollAmount = this.getEffortCertificationOriginalPayrollAmount();
901 KualiDecimal fringeBenefit = EffortCertificationDetail.calculateFringeBenefit(this, originalPayrollAmount);
902 this.setOriginalFringeBenefitAmount(fringeBenefit);
903 }
904
905 /**
906 * recalculate the original fringe benefit of the current detail line
907 */
908 public static KualiDecimal calculateFringeBenefit(EffortCertificationDetail detailLine, KualiDecimal payrollAmount) {
909 LaborModuleService laborModuleService = SpringContext.getBean(LaborModuleService.class);
910 Integer fiscalYear = detailLine.getUniversityFiscalYear();
911 String chartOfAccountsCode = detailLine.getChartOfAccountsCode();
912 String objectCode = detailLine.getFinancialObjectCode();
913
914 return laborModuleService.calculateFringeBenefit(fiscalYear, chartOfAccountsCode, objectCode, payrollAmount);
915 }
916
917 /**
918 * Gets the persistedEffortPercent attribute.
919 * @return Returns the persistedEffortPercent.
920 */
921 public Integer getPersistedEffortPercent() {
922 return persistedEffortPercent;
923 }
924
925 /**
926 * Sets the persistedEffortPercent attribute value.
927 * @param persistedEffortPercent The persistedEffortPercent to set.
928 */
929 public void setPersistedEffortPercent(Integer persistedEffortPercent) {
930 this.persistedEffortPercent = persistedEffortPercent;
931 }
932
933 /**
934 * Gets the groupId attribute.
935 * @return Returns the groupId.
936 */
937 public String getGroupId() {
938 return groupId;
939 }
940
941 /**
942 * Sets the groupId attribute value.
943 * @param groupId The groupId to set.
944 */
945 public void setGroupId(String groupId) {
946 this.groupId = groupId;
947 }
948 }