private void SaveExecute(IClosable window) { var vacationToAdd = new VacationToAdd { UserId = (int)SelectedUserId, VacationTypeId = (int)SelectedVacationTypeId, StartDate = (DateTime)StartDate, EndDate = (DateTime)EndDate, Comment = Comment }; try { _vacationService.AddVacation(vacationToAdd); Messenger.Default.Send <VacationToAdd>(vacationToAdd); if (window != null) { window.Close(); } } catch (VacationException exc) { CustomMessageBox.CustomMessageBox.Show(exc.Message, "Błąd"); } }
private void RefreshVacationsGrid(VacationToAdd newVacation) { RetrieveVacations(); }
public void AddVacation(VacationToAdd vacationToAdd) { if (vacationToAdd.StartDate > vacationToAdd.EndDate) { throw new VacationException("Wybrano niewłaściwy zakres dat."); } var isUserAlreadyHaveVacation = db.Vacations .Any(v => v.StartDate <vacationToAdd.EndDate && v.EndDate> vacationToAdd.StartDate && v.UserId == vacationToAdd.UserId); if (isUserAlreadyHaveVacation) { var userDisplayName = db.Users .Where(u => u.Id == vacationToAdd.UserId) .ToList() .Select(u => string.Format("{0} {1}", u.FirstName, u.LastName)) .SingleOrDefault(); var message = string.Format("{0} w podanym terminie przebywa już na urlopie.", userDisplayName); throw new VacationException(message); } var isUserAlreadyHaveSubstitution = db.Vacations .Any(v => v.StartDate <vacationToAdd.EndDate && v.EndDate> vacationToAdd.StartDate && v.SubstituteUserId == vacationToAdd.UserId); if (isUserAlreadyHaveSubstitution) { var userDisplayName = db.Users .Where(u => u.Id == vacationToAdd.UserId) .ToList() .Select(u => string.Format("{0} {1}", u.FirstName, u.LastName)) .SingleOrDefault(); var message = string.Format("{0} w podanym terminie przebywa na zastępstwie.", userDisplayName); throw new VacationException(message); } var usersIdOnSubstitution = db.Vacations .Where(v => v.StartDate <vacationToAdd.EndDate && v.EndDate> vacationToAdd.StartDate && v.SubstituteUserId != vacationToAdd.UserId) .Select(v => v.SubstituteUserId); var userRoleId = db.Users .Where(u => u.Id == vacationToAdd.UserId) .Select(u => u.RoleId) .SingleOrDefault(); var substituteUsersId = db.Users .Where(u => u.Id != vacationToAdd.UserId && u.RoleId == userRoleId && u.IsActive == true && !u.Vacations.Any(v => v.StartDate <vacationToAdd.EndDate && v.EndDate> vacationToAdd.StartDate)) .Select(u => u.Id); var substituteUserId = substituteUsersId .Except(usersIdOnSubstitution) .FirstOrDefault(); if (substituteUserId == default(int)) { throw new VacationException("W podanym terminie nie można znaleźć zastępstwa."); } var vacation = new Vacation { UserId = vacationToAdd.UserId, VacationTypeId = vacationToAdd.VacationTypeId, SubstituteUserId = substituteUserId, StartDate = vacationToAdd.StartDate, EndDate = vacationToAdd.EndDate, Comment = vacationToAdd.Comment, }; db.Vacations.Add(vacation); db.SaveChanges(); }