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");
            }
        }
Example #2
0
 private void RefreshVacationsGrid(VacationToAdd newVacation)
 {
     RetrieveVacations();
 }
Example #3
0
        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();
        }