/** проверяем, согласован ли отпуск с линейным руководителем */
  protected Boolean vacationIsApprovedByLineManager(Vacation vacation)
      throws VacationApprovalServiceException {
    if (vacation.getStatus() != null
        && approvedByLineManager.contains(
            vacation.getStatus().getId())) { // проверка уже утвержденного отпуска
      return true;
    }

    if (!managerExists(
        vacation
            .getEmployee())) { // если линейных нет или сам себе линейный - утверждаем без проверок
      setFinalStatusForVacationAndSendVacationApprovedMessages(vacation, true);
      return true;
    }

    /* APLANATS-865
     Boolean manager2Result = getManager2Result(vacation);       //если второй линейный отказал - сразу возвращаем отказ
    if (BooleanUtils.isFalse(manager2Result)) {
        return manager2Result;
    }*/

    int lineManagerDaysToApprove = getControlTimeForLineManager(vacation);
    VacationApproval lineManagerApproval = getTopLineManagerApproval(vacation);

    if (lineManagerApproval.getResult() != null) { // нашли результат у одного из линейных
      setFinalStatusForVacationAndSendVacationApprovedMessages(
          vacation, lineManagerApproval.getResult());
      return lineManagerApproval.getResult();
    }

    if (lineManagerHasTimeToApproveVacation(
        lineManagerDaysToApprove, lineManagerApproval)) { // у линейного еще есть время подумать
      return lineManagerApproval.getResult();
    }

    /*if (manager2Result != null) {       //после проверки всех линейных, если они не отвечают и если второй линейный вынес решение - возвращаем его
        return manager2Result;
    }*/

    VacationApproval approvalResult =
        prepareApproveLetterForLineManagerOfEmployee(vacation, lineManagerApproval.getManager());
    if (approvalResult != null) {
      sendMailService.performVacationApproveRequestSender(
          approvalResult); // посылаем письмо с уведомлением следующему в иерархии линейному
      // руководителю
    } else {
      if (!employeeService.isLineManager(
          vacation.getEmployee())) { // проверяем, что сотрудник - не чей-то линейный
        setFinalStatusForVacationAndSendVacationApprovedMessages(vacation, true);
        return true;
      }
    }

    return false;
  }
예제 #2
0
 // возвращает количество дней в списке отпусков (в зависимости от того какой список был передан)
 private int getSummaryDaysCount(Map<Vacation, Integer> days) {
   int summaryDays = 0;
   for (Map.Entry<Vacation, Integer> entry : days.entrySet()) {
     Vacation vacation = entry.getKey();
     Integer daysInVacation = entry.getValue();
     if (VacationStatusEnum.APPROVED.getId() == vacation.getStatus().getId()
         || VacationTypesEnum.PLANNED.getId() == vacation.getType().getId()) {
       summaryDays += daysInVacation;
     }
   }
   return summaryDays;
 }
예제 #3
0
 public JsonArrayNodeBuilder createVacationsNode(Employee employee, List<Vacation> vacationList) {
   JsonArrayNodeBuilder vacationNode = anArrayBuilder();
   for (Vacation vacation : vacationList) {
     if (vacation.getEmployee().equals(employee)) {
       vacationNode.withElement(
           anObjectBuilder()
               .withField(
                   "beginDate",
                   aStringBuilder(dateToString(vacation.getBeginDate(), VIEW_DATE_PATTERN)))
               .withField(
                   "endDate",
                   aStringBuilder(dateToString(vacation.getEndDate(), VIEW_DATE_PATTERN)))
               .withField("status", aStringBuilder(vacation.getStatus().getValue()))
               .withField("type", aStringBuilder(vacation.getType().getId().toString()))
               .withField("typeName", aStringBuilder(vacation.getType().getValue())));
     }
   }
   return vacationNode;
 }
예제 #4
0
 /* функция возвращает можно ли удалить планируемый отпуск в таблице заявлений на отпуск */
 public Boolean isVacationDeletePermission(Vacation vacation, Employee employee) {
   if (employee != null && vacation != null) {
     /* проверим Админ ли текущий пользователь */
     if (employeeService.isEmployeeAdmin(employee.getId())) {
       return Boolean.TRUE;
     } else {
       /* для запланированных отпусков проверяем что это либо создатель отпуска либо сам отпускник
        * либо является лин. рук. отпускника */
       if (vacation.getType().getId() == VacationTypesEnum.PLANNED.getId()
           && (vacation.getEmployee().equals(employee)
               || vacation.getAuthor().equals(employee)
               || employeeService.getLinearEmployees(vacation.getEmployee()).contains(employee))) {
         return Boolean.TRUE;
       }
       /* пользователь создатель или отпускник и статус не отклонено и не утверждено */
       if ((vacation.getEmployee().equals(employee) || vacation.getAuthor().equals(employee))
           && vacation.getStatus().getId() != VacationStatusEnum.REJECTED.getId()
           && vacation.getStatus().getId() != VacationStatusEnum.APPROVED.getId()) {
         return Boolean.TRUE;
       }
     }
   }
   return Boolean.FALSE;
 }
예제 #5
0
 public Boolean isVacationNotApproved(Vacation vacation) {
   return !vacation
       .getStatus()
       .getId()
       .equals(dictionaryItemService.find(VacationStatusEnum.APPROVED.getId()).getId());
 }
예제 #6
0
 private boolean needsToBeApproved(Vacation vacation) {
   return !vacation.getStatus().getId().equals(VacationStatusEnum.APPROVED.getId());
 }