private IBaseRecord ParsePiecesAndTimeRecord(XElement recordElement) { IBaseRecord rec = null; Enum.TryParse(recordElement.Attribute("Type")?.Value, out ERecordType recType); XElement dataElement = recordElement.Element("Data"); if (dataElement != null) { DateTime date = ParseDate(dataElement.Attribute("Date")?.Value); string description = dataElement.Attribute("Description")?.Value; var(price, bonus) = ParseIRecord(recType, dataElement.Attribute("Price")?.Value, dataElement.Attribute("Bonus")?.Value); switch (recType) { case ERecordType.Hours: TimeSpan workTimeFrom = ParseTimeRecord(dataElement.Attribute("WorkTimeFrom")?.Value.Split(':')).ToTimeSpan(); TimeSpan workTimeTo = ParseTimeRecord(dataElement.Attribute("WorkTimeTo")?.Value.Split(':')).ToTimeSpan(); TimeSpan breakTime = ParseTimeRecord(dataElement.Attribute("BreakTime")?.Value.Split(':')) .ToTimeSpan(); WorkTime overTime = ParseTimeRecord(dataElement.Attribute("OverTime")?.Value.Split(':')); rec = new HoursRecord(date, workTimeFrom, workTimeTo, price, bonus, description, overTime, new WorkTime(breakTime.Hours, breakTime.Minutes)); break; case ERecordType.Pieces: uint.TryParse(dataElement.Attribute("Variable")?.Value, out uint pieces); rec = new PiecesRecord(date, pieces, price, bonus, description); break; case ERecordType.Vacation: rec = new VacationRecord(date, description); break; } } return(rec); }
public ActionResult Details(int?id, int?version) { if (id == null) { return(StatusCode(StatusCodes.Status400BadRequest)); } VacationRecord vacationRecord = _vacationRecordService.GetById((int)id); if (vacationRecord == null) { return(StatusCode(StatusCodes.Status404NotFound)); } if (version != null && version.HasValue) { var recordVersion = _vacationRecordService.GetVersion(id.Value, version.Value); if (recordVersion == null) { return(StatusCode(StatusCodes.Status404NotFound)); } recordVersion.Versions = new List <VacationRecord>().AsEnumerable(); return(View(recordVersion)); } return(View(vacationRecord)); }
public ActionResult Edit(VacationRecord vacationRecord) { var currentUser = _userService.GetUserDataForVersion(); var currentUserEmployee = _userService.GetEmployeeForCurrentUser(); var tsHoursRecordByVacationList = _tsHoursRecordService.Get(x => x.Where(t => t.ParentVacationRecordID == vacationRecord.ID).ToList()); var originalItem = _vacationRecordService.Get(records => records.Where(x => x.ID == vacationRecord.ID).AsNoTracking().ToList()).FirstOrDefault(); if (vacationRecord.VacationBeginDate > vacationRecord.VacationEndDate) { ModelState.AddModelError("VacationBeginDate", "Дата начала не может быть больше даты конца."); } var reportingPeriodForBeginDate = _reportingPeriodService.GetAll(x => x.Month == vacationRecord.VacationBeginDate.Month && x.Year == vacationRecord.VacationBeginDate.Year).FirstOrDefault(); var reportingPeriodForEndDate = _reportingPeriodService.GetAll(x => x.Month == vacationRecord.VacationEndDate.Month && x.Year == vacationRecord.VacationEndDate.Year).FirstOrDefault(); //дату начала отпуска в закрытый перод менить нельзя if (reportingPeriodForBeginDate != null && reportingPeriodForBeginDate.NewTSRecordsAllowedUntilDate < DateTime.Now && originalItem.VacationBeginDate != vacationRecord.VacationBeginDate) { ModelState.AddModelError("VacationBeginDate", "Дату начала отпуска нельзя изменить, так как отчетный период закрыт."); } //дату окончания отпуска в закрытый перод менить нельзя if (reportingPeriodForEndDate != null && reportingPeriodForEndDate.NewTSRecordsAllowedUntilDate < DateTime.Now && originalItem.VacationEndDate != vacationRecord.VacationEndDate) { ModelState.AddModelError("VacationEndDate", "Дату окончания отпуска нельзя изменить, так как отчетный период закрыт."); } //невозможно изменить вид отпуска если запись в таймшите уже есть if (tsHoursRecordByVacationList != null && tsHoursRecordByVacationList.Count() != 0 && originalItem.VacationType != vacationRecord.VacationType) { ModelState.AddModelError("VacationType", "Невозможно изменить вид отпуска, так как созданы связанные записи ТШ."); } if (ModelState.IsValid) { _vacationRecordService.Update(vacationRecord); //TODO добавить //_taskTimesheetProcessing.ProcessVacationRecords(currentEmployee, vacationRecord); return(RedirectToAction("Index")); } SetViewBag(vacationRecord); ViewBag.EmployeeID = new SelectList(_employeeService.Get(x => x.Where(e => e.ID == originalItem.EmployeeID).ToList()), "ID", "FullName", originalItem?.EmployeeID ?? 1); return(View(vacationRecord)); }
public ActionResult Delete(int?id) { if (id == null) { return(StatusCode(StatusCodes.Status400BadRequest)); } VacationRecord vacationRecord = _vacationRecordService.GetById((int)id); if (vacationRecord == null) { return(StatusCode(StatusCodes.Status404NotFound)); } return(View(vacationRecord)); }
public ActionResult Create(VacationRecord vacationRecord) { var currentUser = _userService.GetUserDataForVersion(); if (vacationRecord.VacationBeginDate > vacationRecord.VacationEndDate) { ModelState.AddModelError("VacationBeginDate", "Дата начала не может быть больше даты конца."); } else if (CheckDateCrossing(vacationRecord)) { ModelState.AddModelError("VacationBeginDate", "Выберите другой день."); } else { //SKIPR-563 - временное отключение ограничения, согласно которому нельзя создать запись отпуска, если недостаточно накопленных дней отпуска /*EmployeeVacationDto employeeVacationDto = GetAvailableVacationDays(_employeeService.GetById(vacationRecord.EmployeeID)); * * if ((employeeVacationDto.AvailableVacationDays < vacationRecord.VacationDays) || (employeeVacationDto.AvailableVacationDays == 0)) * { * ModelState.AddModelError("VacationDays", "Доступных дней отпуска: " + employeeVacationDto.AvailableVacationDays); * }*/ } var reportingPeriodForBeginDate = _reportingPeriodService.GetAll(x => x.Month == vacationRecord.VacationBeginDate.Month && x.Year == vacationRecord.VacationBeginDate.Year).FirstOrDefault(); var reportingPeriodForEndDate = _reportingPeriodService.GetAll(x => x.Month == vacationRecord.VacationEndDate.Month && x.Year == vacationRecord.VacationEndDate.Year).FirstOrDefault(); if (reportingPeriodForBeginDate != null && reportingPeriodForBeginDate.NewTSRecordsAllowedUntilDate < DateTime.Now) { ModelState.AddModelError("VacationBeginDate", "Отчетный период закрыт"); } if (reportingPeriodForEndDate != null && reportingPeriodForEndDate.NewTSRecordsAllowedUntilDate < DateTime.Now) { ModelState.AddModelError("VacationEndDate", "Отчетный период закрыт"); } if (ModelState.IsValid) { vacationRecord.RecordSource = VacationRecordSource.UserInput; _vacationRecordService.Add(vacationRecord); //TODO добавить //_taskTimesheetProcessing.ProcessVacationRecords(currentEmployee, vacationRecord); return(RedirectToAction("Index")); } SetViewBag(vacationRecord); return(View(vacationRecord)); }
private void SetViewBag(VacationRecord vacationRecord) { var arrayStatus = new SelectList(Enum.GetValues(typeof(VacationRecordType)).Cast <VacationRecordType>() .Where(n => n != VacationRecordType.All) .Select(x => { return(new SelectListItem { Text = x.GetAttributeOfType <DisplayAttribute>().Name, Value = x.ToString() }); }), "Value", "Text"); ViewBag.NewVacationType = arrayStatus; ViewBag.EmployeeID = new SelectList(_employeeService.GetCurrentEmployees(new DateTimeRange(DateTime.Today, DateTime.Today)), "ID", "FullName", vacationRecord?.EmployeeID ?? 1); }
public ActionResult Edit(int?id) { if (id == null) { return(StatusCode(StatusCodes.Status400BadRequest)); } VacationRecord vacationRecord = _vacationRecordService.GetById((int)id); if (vacationRecord == null) { return(StatusCode(StatusCodes.Status404NotFound)); } SetViewBag(vacationRecord); ViewBag.EmployeeID = new SelectList(_employeeService.Get(x => x.Where(e => e.ID == vacationRecord.EmployeeID).ToList()), "ID", "FullName", vacationRecord?.EmployeeID ?? 1); return(View(vacationRecord)); }
private bool CheckDateCrossing(VacationRecord vacationRecord) { return(_vacationRecordService.Get(records => records.Where(x => x.EmployeeID == vacationRecord.EmployeeID && vacationRecord.VacationBeginDate <= x.VacationEndDate && vacationRecord.VacationEndDate >= x.VacationBeginDate).ToList()).Count() > 0); }