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; } } }
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; } } }
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; } } }
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); }