/** * Add time to primary timesheets and move them to current timesheets if they're still active * * @param primaryTimesheets A list of timesheets that are currently getting the hours * @param currentTimesheets A list of timesheets that are still active * @param currentTime The current time to calculate hours and such from; */ private void addTimeToPrimaryTimeSheets( ArrayList<Time_Sheet> primaryTimesheets, ArrayList<Time_Sheet> currentTimesheets, Timestamp currentTime) { // Do for all time sheets in primary time sheet for (int j = 0; j < primaryTimesheets.size(); j++) { Timestamp tempEnd = currentTime; Time_Sheet currentPrimaryTS = primaryTimesheets.get(j); // If the primary timesheet ended before the new current time, then remove it, add minutes and // check if any current timesheets are still active. if (currentPrimaryTS.getEndTime().getTime() <= currentTime.getTime()) { tempEnd = currentPrimaryTS.getEndTime(); long millis = currentPrimaryTS.getEndTime().getTime() - currentPrimaryTS.getStartTimeForCurrentTimeAtAlarm().getTime(); int minutes = (int) (millis / (60 * 1000)); // split the time between all the primary time sheets for (Time_Sheet myTS : primaryTimesheets) { myTS.addMinute((minutes / primaryTimesheets.size())); myTS.setStartTimeForCurrentTimeAtAlarm(currentPrimaryTS.getEndTime()); } boolean hasAddedNewTimeSheet = false; // If it's the last primary time sheet. Then move the last added current time sheet to // primary time sheets. if (primaryTimesheets.size() == 1 && !currentTimesheets.isEmpty()) { removeOldTimeSheets(currentTimesheets, currentPrimaryTS.getEndTime()); primaryTimesheets.add(currentTimesheets.get(currentTimesheets.size() - 1)); j++; primaryTimesheets.get(j).setStartTimeForCurrentTimeAtAlarm(currentPrimaryTS.getEndTime()); currentTimesheets.remove(currentTimesheets.size() - 1); hasAddedNewTimeSheet = true; } // Remove the primary time sheet we have calculated time for if (hasAddedNewTimeSheet) { primaryTimesheets.remove(j - 1); j--; } else { primaryTimesheets.remove(j); } j--; } else { // if the primary time sheet ended after the current time, then add minutes and move // it to current time sheets long millis = tempEnd.getTime() - currentPrimaryTS.getStartTimeForCurrentTimeAtAlarm().getTime(); int minutes = (int) (millis / (60 * 1000)); currentPrimaryTS.addMinute(minutes); currentPrimaryTS.setStartTimeForCurrentTimeAtAlarm(currentTime); currentTimesheets.add(currentPrimaryTS); primaryTimesheets.remove(j); j--; } } }
/** * Adds time to timesheets from two given lists and removes them from the lists * * @param primaryTimesheets //A list of timesheets that are currently getting the hours * @param currentTimesheets //A list of timesheets that are still active */ private void cleanUpRemainingTimeSheets( ArrayList<Time_Sheet> primaryTimesheets, ArrayList<Time_Sheet> currentTimesheets) { Timestamp latestTimePayedFor = primaryTimesheets.get(primaryTimesheets.size() - 1).getEndTime(); // removes all the timesheets from current time sheets, that ended before the last primary time // sheet removeOldTimeSheets(currentTimesheets, latestTimePayedFor); // adds time to the remaining primary time sheets addTimeToPrimaryTimeSheets( primaryTimesheets, currentTimesheets, primaryTimesheets.get(primaryTimesheets.size() - 1).getEndTime()); // Adds time to the remaining current time sheets for (int j = currentTimesheets.size() - 1; j >= 0; j--) { Time_Sheet currenTempTS = currentTimesheets.get(j); long millis = currenTempTS.getEndTime().getTime() - latestTimePayedFor.getTime(); int minutes = (int) (millis / (60 * 1000)); currenTempTS.addMinute(minutes); latestTimePayedFor = currenTempTS.getEndTime(); } currentTimesheets.clear(); }