Example usage for org.joda.time LocalDate fromDateFields

List of usage examples for org.joda.time LocalDate fromDateFields

Introduction

In this page you can find the example usage for org.joda.time LocalDate fromDateFields.

Prototype

@SuppressWarnings("deprecation")
public static LocalDate fromDateFields(Date date) 

Source Link

Document

Constructs a LocalDate from a java.util.Date using exactly the same field values.

Usage

From source file:org.kuali.kpme.tklm.leave.accrual.bucket.KPMEAccrualCategoryBucket.java

License:Educational Community License

private void adjustAsOfDates(CalendarEntry calendarEntry, List<CalendarEntry> calendarEntries) {

    LocalDate newAsOfDate = null;

    //determine if the bucket is being switched to the current leave year
    //also compute max end date to determine if the bucket is being switched to a future leave year. ( could use leave plan service's getRollOverDate )
    boolean switchingToCurrentLeaveYear = false;
    LocalDate maxEndDate = LocalDate.now();
    for (CalendarEntry entry : calendarEntries) {
        if (entry.getHrCalendarEntryId().equals(calendarEntry.getHrCalendarEntryId())
                && entry.getHrCalendarId().equals(calendarEntry.getHrCalendarId())) {
            switchingToCurrentLeaveYear = true;
        }/*from ww w  .  ja  v a  2  s.c  o m*/
        if (entry.getEndPeriodDate().after(maxEndDate.toDate()))
            maxEndDate = LocalDate.fromDateFields(entry.getEndPeriodDate());
    }

    if (switchingToCurrentLeaveYear) {
        Interval otherCalendarInterval = new Interval(calendarEntry.getBeginPeriodDate().getTime(),
                calendarEntry.getEndPeriodDate().getTime());
        if (otherCalendarInterval.contains(LocalDate.now().toDate().getTime())) {
            //switching to the present calendar.
            newAsOfDate = LocalDate.now();
        } else if (otherCalendarInterval.getEnd().isBefore(LocalDate.now().toDate().getTime())) {
            //switching to a historical calendar in the current leave plan year, use calendar end date
            newAsOfDate = otherCalendarInterval.getEnd().toLocalDate().minusDays(1);
        } else {
            //switching to a future/planning calendar in the current leave plan year, use calendar start date.
            newAsOfDate = otherCalendarInterval.getStart().toLocalDate().minusDays(1);
        }
    } else if (calendarEntry.getEndPeriodDate().after(maxEndDate.toDate())) {
        //switching to a leave year beyond the current leave year, same as future/planning calendar in current leave year.
        newAsOfDate = LocalDate.fromDateFields(calendarEntry.getBeginPeriodDate()).minusDays(1);
    } else {
        //switching to a calendar period within a past leave calendar year.
        DateTime otherCalendarRolloverDate = HrServiceLocator.getLeavePlanService().getRolloverDayOfLeavePlan(
                principalCalendar.getLeavePlan(), LocalDate.fromDateFields(calendarEntry.getEndPeriodDate()));
        //for past leave calendar years, regardless of calendar period, we require values as of the rollover day.
        newAsOfDate = LocalDate.fromDateFields(otherCalendarRolloverDate.toDate()).minusDays(1);
    }

    //update asOfDates and calendar period end point dates for all leave balance objects
    for (Entry<String, List<LeaveBalance>> entry : leaveBalances.entrySet()) {
        for (LeaveBalance leaveBalance : entry.getValue()) {
            leaveBalance.asOfDate = newAsOfDate;
            leaveBalance.calendarPeriodBeginDate = LocalDate.fromDateFields(calendarEntry.getBeginPeriodDate());
            leaveBalance.calendarPeriodEndDate = LocalDate.fromDateFields(calendarEntry.getEndPeriodDate());
        }
    }

    //reset this buckets asOfDate
    asOfDate = newAsOfDate;

}

From source file:org.kuali.kpme.tklm.leave.accrual.bucket.KPMEAccrualCategoryBucket.java

License:Educational Community License

private void adjustBalances(CalendarEntry calendarEntry, DateTime rolloverDate, Set<String> assignmentKeys)
        throws KPMEBalanceException {

    //fetch calendar entries in this sequence belonging to the current leave year.
    String dateString = TKUtils.formatDate(LocalDate.now());
    List<CalendarEntry> calendarEntries = HrServiceLocator.getCalendarEntryService()
            .getAllCalendarEntriesForCalendarIdAndYear(calendarEntry.getHrCalendarId(),
                    dateString.substring(6, 10));

    //calendar change into a different leave calendar year
    if (rolloverDate != null) {

        //clear all balances.
        clearLeaveBalances();/*ww w . j  av  a  2  s  .c  om*/

        //reset the asOfDate this bucket will go off of, as well as those of the leave balances
        adjustAsOfDates(calendarEntry, calendarEntries);

        //TODO: if in current calendar year, use current date + planning months for extent of fetch.
        List<LeaveBlock> leaveBlocks = LmServiceLocator.getLeaveBlockService().getLeaveBlocksSinceCarryOver(
                principalCalendar.getPrincipalId(),
                LmServiceLocator.getLeaveBlockService().getLastCarryOverBlocks(
                        principalCalendar.getPrincipalId(), rolloverDate.minusDays(1).toLocalDate()),
                rolloverDate.plusDays(365).toLocalDate(), true);

        //retrieve (if any) last carryover blocks given the new asOfDate
        Map<String, LeaveBlock> carryOverBlocks = LmServiceLocator.getLeaveBlockService()
                .getLastCarryOverBlocks(principalCalendar.getPrincipalId(), asOfDate);

        //method taken from leave summary service - map general leave block fetch by accrual category
        Map<String, List<LeaveBlock>> accrualCategoryMappedLeaveBlocks = mapLeaveBlocksByAccrualCategory(
                leaveBlocks);

        //merge carryOverBlock map with accrualCategoryMappedLeaveBlocks.
        for (Entry<String, LeaveBlock> entry : carryOverBlocks.entrySet()) {
            //TODO: modify CarryOverLeaveBalance to identify and make use of CARRY_OVER type leave block
            if (accrualCategoryMappedLeaveBlocks.containsKey(entry.getKey()))
                accrualCategoryMappedLeaveBlocks.get(entry.getKey()).add(entry.getValue());
            else {
                List<LeaveBlock> carryOverList = new ArrayList<LeaveBlock>();
                carryOverList.add(entry.getValue());
                accrualCategoryMappedLeaveBlocks.put(entry.getKey(), carryOverList);
            }

        }
        //add leave blocks, accrual category by accrual category, to this bucket.
        for (Entry<String, List<LeaveBlock>> entry : accrualCategoryMappedLeaveBlocks.entrySet()) {
            for (LeaveBlock leaveBlock : entry.getValue()) {
                try {
                    addLeaveBlock(leaveBlock);
                } catch (KPMEBalanceException e) {
                    InstantiationException ie = new InstantiationException();
                    ie.setStackTrace(e.getStackTrace());
                    ie.printStackTrace();
                }
            }
        }
    } else {
        //Calendar change within the same leave year.

        List<String> assignmentKeyList = new ArrayList<String>();
        assignmentKeyList.addAll(assignmentKeys);

        List<LeaveBlock> leaveBlocks = new ArrayList<LeaveBlock>();

        //determine which leave blocks are affected by the calendar change, remove them, and re-add them under the new asOfDate
        if (calendarEntry.getEndPeriodFullDateTime()
                .isBefore(viewingCalendarEntry.getEndPeriodFullDateTime().getMillis())) {
            //need to remove leave blocks from otherLeaveCalendarDocument begin date to thisLeaveCalendarDocument end date
            leaveBlocks = LmServiceLocator.getLeaveBlockService().getLeaveBlocks(
                    principalCalendar.getPrincipalId(),
                    LocalDate.fromDateFields(calendarEntry.getBeginPeriodDateTime()),
                    LocalDate.fromDateFields(viewingCalendarEntry.getEndPeriodDateTime()));
            //leaveBlocks = LmServiceLocator.getLeaveBlockService().getLeaveBlocksForLeaveCalendar(principalCalendar.getPrincipalId(), LocalDate.fromDateFields(calendarEntry.getBeginPeriodDateTime()), LocalDate.fromDateFields(viewingCalendarEntry.getEndPeriodDateTime()), assignmentKeyList);
        } else {
            //need to remove leave blocks from thisLeaveCalendarDocument begin date to otherLeaveCalendarDocument end date
            leaveBlocks = LmServiceLocator.getLeaveBlockService().getLeaveBlocks(
                    principalCalendar.getPrincipalId(),
                    LocalDate.fromDateFields(viewingCalendarEntry.getBeginPeriodDateTime()),
                    LocalDate.fromDateFields(calendarEntry.getEndPeriodDateTime()));
            //leaveBlocks = LmServiceLocator.getLeaveBlockService().getLeaveBlocksForLeaveCalendar(principalCalendar.getPrincipalId(), LocalDate.fromDateFields(viewingCalendarEntry.getBeginPeriodDateTime()), LocalDate.fromDateFields(calendarEntry.getEndPeriodDateTime()), assignmentKeyList);
        }
        //remove affected leave blocks
        for (LeaveBlock block : leaveBlocks) {
            removeLeaveBlock(block);
        }

        //update this bucket and its leave balances with new relative date information
        LocalDate newAsOfDate = null;
        DateTime currentLeavePlanStartDate = HrServiceLocator.getLeavePlanService()
                .getFirstDayOfLeavePlan(principalCalendar.getLeavePlan(), LocalDate.now());
        if (calendarEntry.getEndPeriodDate().before(currentLeavePlanStartDate.toDate())) {
            //require balances as of the final day of the leave calendar year.
            DateTime calendarEntryLeavePlanRolloverDate = HrServiceLocator.getLeavePlanService()
                    .getRolloverDayOfLeavePlan(principalCalendar.getLeavePlan(),
                            LocalDate.fromDateFields(calendarEntry.getEndPeriodDate()));
            newAsOfDate = LocalDate.fromDateFields(calendarEntryLeavePlanRolloverDate.toDate()).minusDays(1);
        } else {
            Interval interval = new Interval(calendarEntry.getBeginPeriodDateTime().getTime(),
                    calendarEntry.getEndPeriodDateTime().getTime());
            if (interval.contains(LocalDate.now().toDate().getTime())) {
                newAsOfDate = LocalDate.now();
            } else if (calendarEntry.getBeginPeriodDate().before(LocalDate.now().toDate()))
                newAsOfDate = LocalDate.fromDateFields(calendarEntry.getEndPeriodDate()).minusDays(1);
            else // if it's in the calendar interval above, the equals case is taken care of, begin date must be after today
                newAsOfDate = LocalDate.fromDateFields(calendarEntry.getBeginPeriodDate()).minusDays(1);
        }

        asOfDate = newAsOfDate;

        for (Entry<String, List<LeaveBalance>> leaveBalance : leaveBalances.entrySet()) {
            for (LeaveBalance balance : leaveBalance.getValue()) {
                balance.calendarPeriodBeginDate = LocalDate
                        .fromDateFields(calendarEntry.getBeginPeriodDateTime());
                balance.calendarPeriodEndDate = LocalDate.fromDateFields(calendarEntry.getEndPeriodDateTime());
                balance.asOfDate = newAsOfDate;
            }
        }
        //re-add the affected leave blocks under the new date / calendar information
        for (LeaveBlock block : leaveBlocks) {
            addLeaveBlock(block);
        }
    }
}

From source file:org.kuali.kpme.tklm.leave.accrual.bucket.KPMEAccrualCategoryBucket.java

License:Educational Community License

private DateTime iterateOverCalendarEntries(Set<String> assignmentKeys, CalendarEntry otherCalendarEntry) {

    DateTime rolloverDate = null;/*from   ww  w.j av a2 s  .  c om*/

    DateTime leavePlanPrevStart = HrServiceLocator.getLeavePlanService()
            .getFirstDayOfLeavePlan(principalCalendar.getLeavePlan(), asOfDate);
    DateTime leavePlanStart = HrServiceLocator.getLeavePlanService()
            .getRolloverDayOfLeavePlan(principalCalendar.getLeavePlan(), asOfDate);
    System.out.println();
    if (otherCalendarEntry.getEndPeriodFullDateTime()
            .isBefore(viewingCalendarEntry.getEndPeriodFullDateTime().getMillis())) {
        //moving backward from viewingCalendarEntry
        CalendarEntry itor = viewingCalendarEntry;

        while (!itor.getEndPeriodDate().before(otherCalendarEntry.getEndPeriodDate())) {
            //need to iterate over calendars to gather assignment keys
            List<Assignment> assignments = HrServiceLocator.getAssignmentService()
                    .getAssignmentsByCalEntryForLeaveCalendar(principalCalendar.getPrincipalId(), itor);
            for (Assignment assignment : assignments) {
                assignmentKeys.add(assignment.getAssignmentKey());
            }
            //check if the iteration crosses a roll over date
            if (itor.getEndPeriodDate().compareTo(leavePlanPrevStart.toDate()) <= 0) {
                rolloverDate = HrServiceLocator.getLeavePlanService().getFirstDayOfLeavePlan(
                        principalCalendar.getLeavePlan(), LocalDate.fromDateFields(itor.getBeginPeriodDate()));
                leavePlanPrevStart = rolloverDate;
            }
            itor = HrServiceLocator.getCalendarEntryService()
                    .getPreviousCalendarEntryByCalendarId(viewingCalendarEntry.getHrCalendarId(), itor);

        }

    } else if (otherCalendarEntry.getEndPeriodFullDateTime()
            .isAfter(viewingCalendarEntry.getEndPeriodFullDateTime().getMillis())) {
        //moving forward from viewingCalendarEntry
        CalendarEntry itor = viewingCalendarEntry;
        while (!itor.getEndPeriodDate().after(otherCalendarEntry.getEndPeriodDate())) {

            List<Assignment> assignments = HrServiceLocator.getAssignmentService()
                    .getAssignmentsByCalEntryForLeaveCalendar(principalCalendar.getPrincipalId(), itor);
            for (Assignment assignment : assignments) {
                assignmentKeys.add(assignment.getAssignmentKey());
            }

            if (itor.getBeginPeriodDate().compareTo(leavePlanStart.toDate()) >= 0) {
                rolloverDate = HrServiceLocator.getLeavePlanService().getRolloverDayOfLeavePlan(
                        principalCalendar.getLeavePlan(), LocalDate.fromDateFields(itor.getEndPeriodDate()));
                leavePlanStart = rolloverDate;
            }

            itor = HrServiceLocator.getCalendarEntryService()
                    .getNextCalendarEntryByCalendarId(viewingCalendarEntry.getHrCalendarId(), itor);
        }
    }

    return rolloverDate;
}

From source file:org.kuali.kpme.tklm.leave.accrual.bucket.PendingLeaveBalance.java

License:Educational Community License

@Override
public void add(LeaveBlock leaveBlock)
        throws UsageLimitException, MaximumBalanceException, NegativeBalanceException {
    EarnCode earnCode = HrServiceLocator.getEarnCodeService().getEarnCode(leaveBlock.getEarnCode(),
            LocalDate.fromDateFields(leaveBlock.getLeaveDate()));
    if (earnCode != null) {
        if (leaveBlock.getLeaveDate().compareTo(asOfDate.toDate()) > 0
                && leaveBlock.getLeaveAmount().signum() < 0) {

            if (earnCode.getAccrualBalanceAction().equals(HrConstants.ACCRUAL_BALANCE_ACTION.USAGE)) {

                add(leaveBlock.getLeaveAmount());

                leaveBlocks.add(leaveBlock);
            } else if (earnCode.getAccrualBalanceAction()
                    .equals(HrConstants.ACCRUAL_BALANCE_ACTION.ADJUSTMENT)) {
                //does not validate against balances
                add(leaveBlock.getLeaveAmount());

                leaveBlocks.add(leaveBlock);
            } else if (earnCode.getAccrualBalanceAction().equals(HrConstants.ACCRUAL_BALANCE_ACTION.NONE)) {
                //no balance validations, does not affect balances

                leaveBlocks.add(leaveBlock);
            }//from w ww  .j  a  v  a  2s . c o  m
        }
    }
}

From source file:org.kuali.kpme.tklm.leave.accrual.bucket.PendingLeaveBalance.java

License:Educational Community License

@Override
public void remove(LeaveBlock leaveBlock)
        throws UsageLimitException, MaximumBalanceException, NegativeBalanceException {
    EarnCode earnCode = HrServiceLocator.getEarnCodeService().getEarnCode(leaveBlock.getEarnCode(),
            LocalDate.fromDateFields(leaveBlock.getLeaveDate()));
    if (earnCode != null) {
        if (leaveBlock.getLeaveDate().compareTo(asOfDate.toDate()) > 0
                && leaveBlock.getLeaveAmount().signum() < 0) {

            if (earnCode.getAccrualBalanceAction().equals(HrConstants.ACCRUAL_BALANCE_ACTION.USAGE)) {

                remove(leaveBlock.getLeaveAmount());

                leaveBlocks.remove(leaveBlock);
            } else if (earnCode.getAccrualBalanceAction()
                    .equals(HrConstants.ACCRUAL_BALANCE_ACTION.ADJUSTMENT)) {
                //does not validate against balances
                remove(leaveBlock.getLeaveAmount());

                leaveBlocks.remove(leaveBlock);
            } else if (earnCode.getAccrualBalanceAction().equals(HrConstants.ACCRUAL_BALANCE_ACTION.NONE)) {
                //no balance validations, does not affect balances

                leaveBlocks.remove(leaveBlock);
            }/*ww  w  .  j  a  v  a 2s . c o  m*/
        }
    }
}

From source file:org.kuali.kpme.tklm.leave.accrual.bucket.YearToDateEarnedLeaveBalance.java

License:Educational Community License

@Override
public void add(LeaveBlock leaveBlock) {
    EarnCode earnCode = HrServiceLocator.getEarnCodeService().getEarnCode(leaveBlock.getEarnCode(),
            LocalDate.fromDateFields(leaveBlock.getLeaveDate()));

    DateTime rolloverDate = HrServiceLocator.getLeavePlanService()
            .getFirstDayOfLeavePlan(principalCalendar.getLeavePlan(), asOfDate);
    if (earnCode != null) {
        if (leaveBlock.getLeaveDate().compareTo(asOfDate.toDate()) <= 0
                && leaveBlock.getLeaveDate().compareTo(rolloverDate.toDate()) >= 0) {
            if (leaveBlock.getLeaveAmount().signum() >= 0) {

                if (earnCode.getAccrualBalanceAction().equals(HrConstants.ACCRUAL_BALANCE_ACTION.USAGE)) {

                    add(leaveBlock.getLeaveAmount());

                    leaveBlocks.add(leaveBlock);

                } else if (earnCode.getAccrualBalanceAction()
                        .equals(HrConstants.ACCRUAL_BALANCE_ACTION.ADJUSTMENT)) {
                    //does not validate against balances
                    add(leaveBlock.getLeaveAmount());

                    leaveBlocks.add(leaveBlock);
                } else if (earnCode.getAccrualBalanceAction().equals(HrConstants.ACCRUAL_BALANCE_ACTION.NONE)) {

                    add(leaveBlock.getLeaveAmount());
                    //no balance validations, does not affect balances
                    leaveBlocks.add(leaveBlock);
                }/*  w ww  .ja  va2  s.  co  m*/
            }
        }
        //otherwise, it goes into PendingLeaveBalance
    }
}

From source file:org.kuali.kpme.tklm.leave.accrual.bucket.YearToDateEarnedLeaveBalance.java

License:Educational Community License

@Override
public void remove(LeaveBlock leaveBlock) throws NegativeBalanceException {

    EarnCode earnCode = HrServiceLocator.getEarnCodeService().getEarnCode(leaveBlock.getEarnCode(),
            LocalDate.fromDateFields(leaveBlock.getLeaveDate()));

    DateTime rolloverDate = HrServiceLocator.getLeavePlanService()
            .getFirstDayOfLeavePlan(principalCalendar.getLeavePlan(), asOfDate);
    if (earnCode != null) {
        if (leaveBlock.getLeaveDate().compareTo(asOfDate.toDate()) <= 0
                && leaveBlock.getLeaveDate().compareTo(rolloverDate.toDate()) >= 0) {
            if (leaveBlock.getLeaveAmount().signum() >= 0) {

                if (earnCode.getAccrualBalanceAction().equals(HrConstants.ACCRUAL_BALANCE_ACTION.USAGE)) {

                    remove(leaveBlock.getLeaveAmount());

                    leaveBlocks.remove(leaveBlock);

                } else if (earnCode.getAccrualBalanceAction()
                        .equals(HrConstants.ACCRUAL_BALANCE_ACTION.ADJUSTMENT)) {
                    //does not validate against balances
                    remove(leaveBlock.getLeaveAmount());

                    leaveBlocks.remove(leaveBlock);
                } else if (earnCode.getAccrualBalanceAction().equals(HrConstants.ACCRUAL_BALANCE_ACTION.NONE)) {
                    //no balance validations, does not affect balances
                    leaveBlocks.remove(leaveBlock);
                }/*from w  ww .ja v a2s. co m*/
            }
        }
    }
}

From source file:org.kuali.kpme.tklm.leave.accrual.bucket.YearToDateUsageLeaveBalance.java

License:Educational Community License

@Override
public void add(LeaveBlock leaveBlock) throws UsageLimitException {

    DateTime rolloverDate = HrServiceLocator.getLeavePlanService()
            .getFirstDayOfLeavePlan(principalCalendar.getLeavePlan(), asOfDate);

    if (leaveBlock.getLeaveDate().compareTo(asOfDate.toDate()) <= 0
            && leaveBlock.getLeaveDate().compareTo(rolloverDate.toDate()) >= 0) {

        if (leaveBlock.getLeaveAmount().signum() < 0) {
            EarnCode earnCode = HrServiceLocator.getEarnCodeService().getEarnCode(leaveBlock.getEarnCode(),
                    LocalDate.fromDateFields(leaveBlock.getLeaveDate()));
            if (earnCode != null) {
                if (earnCode.getAccrualBalanceAction().equals(HrConstants.ACCRUAL_BALANCE_ACTION.USAGE)) {

                    AccrualCategoryRule accrualRule = getAccrualCategoryRuleForDate(
                            leaveBlock.getLeaveLocalDate());

                    if (accrualRule != null && ObjectUtils.isNotNull(accrualRule.getMaxUsage())) {

                        BigDecimal maxUsage = new BigDecimal(accrualRule.getMaxUsage());
                        BigDecimal fteSum = HrServiceLocator.getJobService()
                                .getFteSumForAllActiveLeaveEligibleJobs(leaveBlock.getPrincipalId(),
                                        leaveBlock.getLeaveLocalDate());
                        maxUsage = maxUsage.multiply(fteSum).setScale(HrConstants.BIG_DECIMAL_SCALE,
                                HrConstants.BIG_DECIMAL_SCALE_ROUNDING);

                        EmployeeOverride employeeOverride = getEmployeeOverride(leaveBlock, "MU");
                        if (employeeOverride != null)
                            maxUsage = new BigDecimal(employeeOverride.getOverrideValue());

                        if (maxUsage.compareTo(this.balance.add(leaveBlock.getLeaveAmount().negate())) <= 0) {
                            add(leaveBlock.getLeaveAmount().negate());
                            leaveBlocks.add(leaveBlock);
                            //throw new UsageLimitException();
                        } else {
                            add(leaveBlock.getLeaveAmount().negate());
                            leaveBlocks.add(leaveBlock);
                        }//w w w  . j av a 2 s  .  c o  m
                    } else {
                        //no usage limit
                        add(leaveBlock.getLeaveAmount().negate());
                        leaveBlocks.add(leaveBlock);
                    }

                } else if (earnCode.getAccrualBalanceAction()
                        .equals(HrConstants.ACCRUAL_BALANCE_ACTION.ADJUSTMENT)) {
                    //does not validate against balances
                    add(leaveBlock.getLeaveAmount().negate());
                    leaveBlocks.add(leaveBlock);
                } else if (earnCode.getAccrualBalanceAction().equals(HrConstants.ACCRUAL_BALANCE_ACTION.NONE)) {
                    //no balance validations, does not affect balances
                    leaveBlocks.add(leaveBlock);
                }
            }
        }
    }
}

From source file:org.kuali.kpme.tklm.leave.accrual.bucket.YearToDateUsageLeaveBalance.java

License:Educational Community License

@Override
public void remove(LeaveBlock leaveBlock) throws NegativeBalanceException {

    DateTime rolloverDate = HrServiceLocator.getLeavePlanService()
            .getFirstDayOfLeavePlan(principalCalendar.getLeavePlan(), asOfDate);

    if (leaveBlock.getLeaveDate().compareTo(asOfDate.toDate()) <= 0
            && leaveBlock.getLeaveDate().compareTo(rolloverDate.toDate()) >= 0) {

        if (leaveBlock.getLeaveAmount().signum() < 0) {
            EarnCode earnCode = HrServiceLocator.getEarnCodeService().getEarnCode(leaveBlock.getEarnCode(),
                    LocalDate.fromDateFields(leaveBlock.getLeaveDate()));
            if (earnCode != null) {
                if (earnCode.getAccrualBalanceAction().equals(HrConstants.ACCRUAL_BALANCE_ACTION.USAGE)) {

                    AccrualCategoryRule accrualRule = getAccrualCategoryRuleForDate(
                            leaveBlock.getLeaveLocalDate());

                    if (accrualRule != null && ObjectUtils.isNotNull(accrualRule.getMaxUsage())) {

                        BigDecimal maxUsage = new BigDecimal(accrualRule.getMaxUsage());
                        BigDecimal fteSum = HrServiceLocator.getJobService()
                                .getFteSumForAllActiveLeaveEligibleJobs(leaveBlock.getPrincipalId(),
                                        leaveBlock.getLeaveLocalDate());
                        maxUsage = maxUsage.multiply(fteSum).setScale(HrConstants.BIG_DECIMAL_SCALE,
                                HrConstants.BIG_DECIMAL_SCALE_ROUNDING);

                        EmployeeOverride employeeOverride = getEmployeeOverride(leaveBlock, "MU");
                        if (employeeOverride != null)
                            maxUsage = new BigDecimal(employeeOverride.getOverrideValue());

                        if (BigDecimal.ZERO
                                .compareTo(this.balance.subtract(leaveBlock.getLeaveAmount().negate())) > 0) {
                            remove(leaveBlock.getLeaveAmount().negate());
                            leaveBlocks.remove(leaveBlock);
                            //throw new NegativeBalanceException();
                        } else {
                            remove(leaveBlock.getLeaveAmount().negate());
                            leaveBlocks.remove(leaveBlock);
                        }//from ww w. ja va  2  s  .co m
                    } else {
                        //no usage limit
                        remove(leaveBlock.getLeaveAmount().negate());
                        leaveBlocks.remove(leaveBlock);
                    }

                } else if (earnCode.getAccrualBalanceAction()
                        .equals(HrConstants.ACCRUAL_BALANCE_ACTION.ADJUSTMENT)) {
                    //does not validate against balances
                    remove(leaveBlock.getLeaveAmount().negate());
                    leaveBlocks.remove(leaveBlock);
                } else if (earnCode.getAccrualBalanceAction().equals(HrConstants.ACCRUAL_BALANCE_ACTION.NONE)) {
                    //no balance validations, does not affect balances
                    leaveBlocks.remove(leaveBlock);
                }
            }
        }
    }
}

From source file:org.kuali.kpme.tklm.leave.block.LeaveBlock.java

License:Educational Community License

public LocalDate getLeaveLocalDate() {
    return leaveDate != null ? LocalDate.fromDateFields(leaveDate) : null;
}