コード例 #1
0
        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");
            }
        }
コード例 #2
0
 private void RefreshLeavesGrid(LeaveToAdd newLeave)
 {
     RetrieveLeaves();
 }
コード例 #3
0
ファイル: LeaveService.cs プロジェクト: mdybich/DentalClinic
        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();
        }