/**
  * Compares 2 time sheets
  *
  * @param ts1 the 1st timesheet
  * @param ts2 the 2nd timesheet
  * @return the difference in minutes between the 2 timesheets
  */
 private int myCompare(Time_Sheet ts1, Time_Sheet ts2) {
   if (ts1.getMinutes() == ts2.getMinutes()) {
     return ts1.getId() - ts2.getId();
   } else {
     return ts2.getMinutes() - ts1.getMinutes();
   }
 }
  /**
   * Calculates how many hours a given timesheet should get
   *
   * @param ts the timesheet of which you want the hours
   * @return the hours
   * @throws SQLException if an error has occured executing the sql query
   */
  public int getHoursForTimeSheeet(Time_Sheet ts) throws SQLException {
    ArrayList<Time_Sheet> conflicts = getAllConflicts(ts);

    Collections.sort(conflicts);
    ArrayList<Time_Sheet> currentTimesheets =
        new ArrayList(); // A list of timesheets that are still active
    ArrayList<Time_Sheet> primaryTimesheets =
        new ArrayList(); // A list of timesheets that are currently getting the hours
    for (int i = 0; i < conflicts.size(); i++) {
      Time_Sheet currentTs = conflicts.get(i);

      /**
       * If the current timesheet is the first timesheet in conflicts, or if the current timesheet
       * has the same startime, as the current active timesheets the add it to the currently active
       * timesheets
       */
      if (primaryTimesheets.isEmpty()
          || primaryTimesheets.get(0).getStartTime().getTime()
              == currentTs.getStartTime().getTime()) {
        primaryTimesheets.add(currentTs);

      } else {

        removeOldTimeSheets(currentTimesheets, currentTs.getStartTime());
        addTimeToPrimaryTimeSheets(primaryTimesheets, currentTimesheets, currentTs.getStartTime());
        primaryTimesheets.add(currentTs);
      }
    }
    cleanUpRemainingTimeSheets(primaryTimesheets, currentTimesheets);

    // calculate the total amount of minutes
    int minutes = 0;
    for (Time_Sheet myTS : conflicts) {
      minutes += myTS.getMinutes();
    }
    // calculate the total amount of hours
    int totalHours;
    if (minutes % 60 == 0) totalHours = (int) (minutes / 60);
    else totalHours = (int) (minutes / 60) + 1;

    if (totalHours < 2) totalHours = 2;
    for (Time_Sheet myTS : conflicts) {
      while (myTS.getMinutes() >= 60) {
        myTS.addHours(1);
        myTS.removeMinute(60);
        totalHours--;
      }
    }

    sortTimeSheetListByHours(conflicts, 0, conflicts.size() - 1);

    while (totalHours > 0) {
      conflicts.get(conflicts.size() - 1).addHours(1);
      totalHours--;
      conflicts.get(conflicts.size() - 1).removeMinute(60);
      sortTimeSheetListByHours(conflicts, 0, conflicts.size() - 1);
    }
    int res = ts.getHours();
    for (Time_Sheet myTS : conflicts) {
      myTS.clearHoursAndMinutes();
    }

    return res;
  }