コード例 #1
0
        public void CancelLeaveApplication(LeaveApplication leaveApplication)
        {
            if (leaveApplication.TaskState == TaskState.Approved)
            {
                throw new InvalidOperationException("审批完成的申请不可以取消或删除");
            }
            AnnualLeaveStatistic annualLeaveStatistic = GetAnnualLeaveStatistic(leaveApplication.Initiator);

            annualLeaveStatistic.RemainingDays = annualLeaveStatistic.RemainingDays + leaveApplication.TotalDays;

            using (DbContextTransaction transaction = _context.Database.BeginTransaction())
            {
                try
                {
                    _context.LeaveApplications.Attach(leaveApplication);
                    _context.Entry(leaveApplication).State = EntityState.Modified;
                    _context.AnnualLeaveStatistics.Attach(annualLeaveStatistic);
                    _context.Entry(annualLeaveStatistic).State = EntityState.Modified;
                    _context.SaveChanges();
                    transaction.Commit();
                }
                catch (Exception e)
                {
                    transaction.Rollback();
                    _logger.Error(e.Message, e);
                    throw;
                }
            }
        }
コード例 #2
0
        public void CreateLeaveApplication(LeaveApplication leaveApplication)
        {
            if (IsScheduleConflict(leaveApplication))
            {
                throw new InvalidOperationException("当前请假时间和已存在的请假申请冲突");
            }
            AnnualLeaveStatistic annualLeaveStatistic = GetAnnualLeaveStatistic(leaveApplication.Initiator);

            if (leaveApplication.TotalDays > annualLeaveStatistic.RemainingDays)
            {
                throw new InvalidOperationException("剩余假期不足,请重新选择请假时间");
            }
            annualLeaveStatistic.RemainingDays = annualLeaveStatistic.RemainingDays - leaveApplication.TotalDays;
            leaveApplication.TaskState         = TaskState.Applying;
            using (DbContextTransaction transaction = _context.Database.BeginTransaction())
            {
                try
                {
                    _context.LeaveApplications.Add(leaveApplication);
                    _context.AnnualLeaveStatistics.Attach(annualLeaveStatistic);
                    _context.Entry(annualLeaveStatistic).State = EntityState.Modified;
                    _context.SaveChanges();
                    transaction.Commit();
                }
                catch (Exception e)
                {
                    transaction.Rollback();
                    _logger.Error(e.Message, e);
                    throw;
                }
            }
        }
コード例 #3
0
        public void ModifyLeaveApplication(LeaveApplication leaveApplication)
        {
            if (IsScheduleConflict(leaveApplication))
            {
                throw new InvalidOperationException("当前请假时间和已存在的请假申请冲突");
            }
            AnnualLeaveStatistic annualLeaveStatistic = GetAnnualLeaveStatistic(leaveApplication.Initiator);
            LeaveApplication     oldLeaveApplication  = _context.LeaveApplications.Find(leaveApplication.Id);
            float differenceTotalDays = leaveApplication.TotalDays - oldLeaveApplication.TotalDays;

            annualLeaveStatistic.RemainingDays = annualLeaveStatistic.RemainingDays + differenceTotalDays;
            using (DbContextTransaction transaction = _context.Database.BeginTransaction())
            {
                try
                {
                    _context.LeaveApplications.Attach(leaveApplication);
                    _context.Entry(leaveApplication).State = EntityState.Modified;
                    _context.AnnualLeaveStatistics.Attach(annualLeaveStatistic);
                    _context.Entry(annualLeaveStatistic).State = EntityState.Modified;
                    _context.SaveChanges();
                    transaction.Commit();
                }
                catch (Exception e)
                {
                    transaction.Rollback();
                    _logger.Error(e.Message, e);
                    throw;
                }
            }
        }
コード例 #4
0
        private AnnualLeaveStatistic GetAnnualLeaveStatistic(User user)
        {
            AnnualLeaveStatistic annualLeaveStatistic = _context.AnnualLeaveStatistics.Where(a => a.User.Id == user.Id).FirstOrDefault();

            if (annualLeaveStatistic == null)
            {
                AnnualLeaveStatisticFactory annualLeaveStatisticFactory = new AnnualLeaveStatisticFactory(_context);
                annualLeaveStatistic = annualLeaveStatisticFactory.CreateAndSave(user);
            }
            return(annualLeaveStatistic);
        }