private Integer getVacationDaysCountForPeriod( String beginDateString, Integer employeeId, Integer vacationTypeId) { Employee employee = employeeService.find(employeeId); final Timestamp beginDate = DateTimeUtil.stringToTimestamp(beginDateString, CreateVacationForm.DATE_FORMAT); Calendar calendar = Calendar.getInstance(); calendar.setTime(employee.getStartDate()); Integer beginDay = calendar.get(Calendar.DAY_OF_MONTH); calendar.setTime(beginDate); Integer vacDay = calendar.get(Calendar.DAY_OF_MONTH); Integer month = calendar.get(Calendar.MONTH); Integer year = calendar.get(Calendar.YEAR); // Если день начала отпуска меньше даты устройства на работу // то оставляем месяц без изменений т.к. calendar.get(Calendar.MONTH) дает -1 один месяц if (vacDay > beginDay) { ++month; } Integer count = null; if (vacationTypeId.equals(VacationTypesEnum.WITH_PAY.getId())) { count = getFactVacationDaysCount(employee, year, month); } else { count = getPlanVacationDaysCount(employee, year, month); } return count; }
void setEmployee(int idper) { Employee e = null; try { e = service.find(idper); old = e; } catch (EmployeeException ex) { GemLogger.logException(ex); } if (e == null) { e = new Employee(idper); } view.set(e); }
public String checkVacationCountDaysJSON( String beginDateString, String endDateString, Integer employeeId, Integer vacationTypeId) { Employee employee = employeeService.find(employeeId); final Timestamp beginDate = DateTimeUtil.stringToTimestamp(beginDateString, CreateVacationForm.DATE_FORMAT); final Timestamp endDate = DateTimeUtil.stringToTimestamp(endDateString, CreateVacationForm.DATE_FORMAT); Integer factCount = getVacationDaysCountForPeriod( beginDateString, employeeId, VacationTypesEnum.WITH_PAY.getId()); Integer planCount = getVacationDaysCountForPeriod( beginDateString, employeeId, VacationTypesEnum.PLANNED.getId()); // Получаем кол-во дней в отпуске за исключением неучитываемых праздников Integer vacationDayCountExCons = calendarService.getCountDaysForPeriodForRegionExConsiderHolidays( beginDate, endDate, employee.getRegion()); boolean factError = factCount - vacationDayCountExCons < 0 && vacationTypeId.equals(VacationTypesEnum.WITH_PAY.getId()); boolean planError = planCount - vacationDayCountExCons < 0; JsonObjectNodeBuilder builder = anObjectBuilder() .withField( "error", factError ? JsonUtil.aNumberBuilder(-1) : planError ? JsonUtil.aNumberBuilder(1) : JsonUtil.aNumberBuilder(0)) .withField( "message", aStringBuilder( factError ? String.format( "Внимание! Вы не можете запланировать отпуск на количество дней, больше %s дней", factCount.toString()) : planError ? "Внимание! Создаваемый отпуск превышает допустимое количество дней. Продолжить?" : "")); return JsonUtil.format(builder); }
private void processJsonDataItems( List<EmployeePlan> employeePlans, List<EmployeeProjectPlan> employeeProjectPlans, JsonRootNode rootNode, Integer year, Integer month) { Integer employeeId; for (JsonNode jsonNode : rootNode.getArrayNode(JSON_DATA_ITEMS)) { employeeId = JsonUtil.getDecNumberValue(jsonNode, EMPLOYEE_ID); final Employee employee = employeeService.find(employeeId); addEmployeePlans(employeePlans, year, month, employee, jsonNode); addEmployeeProjectPlans(employeeProjectPlans, year, month, employee, jsonNode); } }
@RequestMapping(value = "/timesheet", method = RequestMethod.GET) public ModelAndView showMainForm( @RequestParam(value = "date", required = false) String date, @RequestParam(value = "id", required = false) Integer id) { logger.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>>"); logger.info("Showing Time Sheet main page!"); ModelAndView mav = new ModelAndView(); mav.setViewName("timesheet"); TimeSheetForm tsForm = new TimeSheetForm(); TimeSheetUser securityUser = securityService.getSecurityPrincipal(); if (id != null) { tsForm.setDivisionId(employeeService.find(id).getDivision().getId()); tsForm.setEmployeeId(id); } else if (securityUser != null) { tsForm.setDivisionId(securityUser.getEmployee().getDivision().getId()); tsForm.setEmployeeId(securityUser.getEmployee().getId()); } if (date != null) { tsForm.setCalDate(date); mav.addObject( "selectedCalDateJson", getSelectedCalDateJson(tsForm)); // выставляем дату для DateTextBox } else { mav.addObject("selectedCalDateJson", "''"); } mav.addObject("timeSheetForm", tsForm); // command object mav.addObject("selectedProjectRolesJson", "[{row:'0', role:''}]"); mav.addObject("selectedProjectTasksJson", "[{row:'0', task:''}]"); mav.addObject("selectedProjectsJson", "[{row:'0', project:''}]"); mav.addObject("selectedWorkplaceJson", "[{row:'0', workplace:''}]"); mav.addObject("selectedActCategoriesJson", "[{row:'0', actCat:''}]"); mav.addObject("selectedLongVacationIllnessJson", getSelectedLongVacationIllnessJson(tsForm)); mav.addObject("getDateByDefault", getDateByDefault(tsForm.getEmployeeId())); mav.addObject("getFirstWorkDate", getEmployeeFirstWorkDay(tsForm.getEmployeeId())); mav.addAllObjects(getListsToMAV()); return mav; }
public String getExitToWorkAndCountVacationDayJson( String beginDateString, String endDateString, Integer employeeId, Integer vacationTypeId) { final JsonObjectNodeBuilder builder = anObjectBuilder(); try { Employee employee = employeeService.find(employeeId); final Timestamp beginDate = DateTimeUtil.stringToTimestamp(beginDateString, CreateVacationForm.DATE_FORMAT); final Timestamp endDate = DateTimeUtil.stringToTimestamp(endDateString, CreateVacationForm.DATE_FORMAT); // Получаем день выхода на работу com.aplana.timesheet.dao.entity.Calendar endDateCalendar = calendarService.find(endDate); com.aplana.timesheet.dao.entity.Calendar nextWorkDay = calendarService.getNextWorkDay(endDateCalendar, employee.getRegion()); String format = DateFormatUtils.format(nextWorkDay.getCalDate(), CreateVacationForm.DATE_FORMAT); builder.withField("exitDate", aStringBuilder(format)); // Получаем кол-во дней в отпуске за исключением неучитываемых праздников Integer vacationDayCountExCons = calendarService.getCountDaysForPeriodForRegionExConsiderHolidays( beginDate, endDate, employee.getRegion()); // Получаем кол-во рабочих дней в отпуске Integer vacationWorkCount = calendarService.getCountWorkDaysForPeriodForRegion( beginDate, endDate, employee.getRegion()); builder.withField("vacationWorkDayCount", aStringBuilder(vacationWorkCount.toString())); builder.withField( "vacationDayCount", aStringBuilder((vacationDayCountExCons <= 0) ? "0" : vacationDayCountExCons.toString())); /* проверка на необходимость вывода информ сообщения о необходимости оформления отпуска по вск для отпуска с сохранением содержания */ Calendar calendar = java.util.Calendar.getInstance(); calendar.setTime(beginDate); int beginWeekYear = calendar.get(Calendar.WEEK_OF_YEAR); calendar.setTime(endDate); int endWeekYear = calendar.get(Calendar.WEEK_OF_YEAR); calendar.set(Calendar.DAY_OF_WEEK, calendar.getFirstDayOfWeek()); Date beginWeekDate = calendar.getTime(); int endDay = calendar.get(Calendar.DAY_OF_WEEK); int leftDays = Calendar.SATURDAY - endDay; calendar.add(Calendar.DATE, ++leftDays); Date sunday = calendar.getTime(); // Количество рабочих дней в отпуске, если конец отпуска приходится // на следующую неделю то считается с понедельника след недели по дату конца отпуска Integer countWorkDaysVacationPeriod = calendarService.getCountWorkDaysForPeriodForRegion( beginWeekYear != endWeekYear ? beginWeekDate : beginDate, endDate, employee.getRegion()); // Количество рабочих дней в неделе приходящихся на конец отпуска Integer countWorkDaysWeek = calendarService.getCountWorkDaysForPeriodForRegion( beginWeekDate, DateUtils.addDays(beginWeekDate, 6), employee.getRegion()); // Количество учитываемых дней в период с понедельника последней недели отпуска по конец // отпуска Integer countVacConsiderDaysOnEndWeek = calendarService.getCountDaysForPeriodForRegionExConsiderHolidays( beginWeekYear != endWeekYear ? beginWeekDate : beginDate, endDate, employee.getRegion()); // Количество учитываемых дней в неделе Integer countConsiderDaysOnEndWeek = calendarService.getCountDaysForPeriodForRegionExConsiderHolidays( beginWeekYear != endWeekYear ? beginWeekDate : beginDate, sunday, employee.getRegion()); if (vacationTypeId != null && vacationTypeId == VacationTypesEnum.WITH_PAY.getId() && // проверка что в отпуск попала не вся учитываемая неделя !countVacConsiderDaysOnEndWeek.equals(countConsiderDaysOnEndWeek) && // и в этот период попадают все рабочие дни countWorkDaysVacationPeriod.equals(countWorkDaysWeek)) { builder.withField("vacationFridayInform", aStringBuilder("true")); } return JsonUtil.format(builder); } catch (Exception th) { logger.error(CANT_GET_EXIT_TO_WORK_EXCEPTION_MESSAGE, th); return CANT_GET_EXIT_TO_WORK_EXCEPTION_MESSAGE; } }