private void SaveExecute(IClosable window) { var leaveToAdd = new LeaveToAdd { UserId = (int)SelectedUserId, LeaveTypeId = (int)SelectedLeaveTypeId, StartDate = (DateTime)StartDate, EndDate = (DateTime)EndDate, Comment = Comment }; try { _leaveService.AddLeave(leaveToAdd); Messenger.Default.Send <LeaveToAdd>(leaveToAdd); if (window != null) { window.Close(); } } catch (LeaveException exc) { CustomMessageBox.CustomMessageBox.Show(exc.Message, "Błąd"); } }
private void RefreshLeavesGrid(LeaveToAdd newLeave) { RetrieveLeaves(); }
public void AddLeave(LeaveToAdd leaveToAdd) { if (leaveToAdd.StartDate > leaveToAdd.EndDate) { throw new LeaveException("Wybrano niewłaściwy zakres dat."); } var isUserAlreadyHaveLeave = db.Leaves .Any(l => l.StartDate <leaveToAdd.EndDate && l.EndDate> leaveToAdd.StartDate && l.UserId == leaveToAdd.UserId); if (isUserAlreadyHaveLeave) { var userDisplayName = db.Users .Where(u => u.Id == leaveToAdd.UserId) .ToList() .Select(u => string.Format("{0} {1}", u.FirstName, u.LastName)) .SingleOrDefault(); var message = string.Format("{0} w podanym terminie przebywa już na zwolnieniu.", userDisplayName); throw new LeaveException(message); } var isUserAlreadyHaveSubstitution = db.Leaves .Any(l => l.StartDate <leaveToAdd.EndDate && l.EndDate> leaveToAdd.StartDate && l.SubstituteUserId == leaveToAdd.UserId); if (isUserAlreadyHaveSubstitution) { var userDisplayName = db.Users .Where(u => u.Id == leaveToAdd.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 LeaveException(message); } var usersIdOnSubstitution = db.Leaves .Where(l => l.StartDate <leaveToAdd.EndDate && l.EndDate> leaveToAdd.StartDate && l.SubstituteUserId != leaveToAdd.UserId) .Select(l => l.SubstituteUserId); var userRoleId = db.Users .Where(u => u.Id == leaveToAdd.UserId) .Select(u => u.RoleId) .SingleOrDefault(); var substituteUsersId = db.Users .Where(u => u.Id != leaveToAdd.UserId && u.RoleId == userRoleId && u.IsActive == true && !u.Leaves.Any(l => l.StartDate <leaveToAdd.EndDate && l.EndDate> leaveToAdd.StartDate)) .Select(u => u.Id); var substituteUserId = substituteUsersId .Except(usersIdOnSubstitution) .FirstOrDefault(); if (substituteUserId == default(int)) { throw new LeaveException("W podanym terminie nie można znaleźć zastępstwa."); } var leave = new Leave { UserId = leaveToAdd.UserId, LeaveTypeId = leaveToAdd.LeaveTypeId, SubstituteUserId = substituteUserId, StartDate = leaveToAdd.StartDate, EndDate = leaveToAdd.EndDate, Comment = leaveToAdd.Comment, }; db.Leaves.Add(leave); db.SaveChanges(); }