//method for adding a shift public void AddShift(ShiftDTO shift) { _repo.Add<Shift>(new Shift { Employee = _repo.Query<ApplicationUser>().FirstOrDefault(u => u.Email == shift.Employee.Email), EndShift = shift.EndShift.ToUniversalTime(), StartShift = shift.StartShift.ToUniversalTime(), IsAvailable = shift.IsAvailable }); _repo.SaveChanges(); }
public HttpResponseMessage Post(ShiftDTO shift) { if (ModelState.IsValid) { var correctedDate = shift; if (shift.Id == 0) { _service.AddShift(shift); return Request.CreateResponse(HttpStatusCode.OK, shift); } else { _service.EditShift(shift); return Request.CreateResponse(HttpStatusCode.OK, shift); } } else { return Request.CreateErrorResponse(HttpStatusCode.BadRequest, this.ModelState); } }
//method for swapping two shifts employees public void SwapShifts(ShiftDTO shift1, ShiftDTO shift2) { if (shift1.IsAvailable) { var temp = new Shift(); temp.Employee = _repo.Query<ApplicationUser>().FirstOrDefault(u => u.Email == shift1.Employee.Email); var s1 = _repo.Query<Shift>().Include(s => s.Employee).FirstOrDefault(s => s.Id == shift1.Id); var s2 = _repo.Query<Shift>().Include(s => s.Employee).FirstOrDefault(s => s.Id == shift2.Id); s1.Employee = _repo.Query<ApplicationUser>().FirstOrDefault(u => u.Email == s2.Employee.Email); s2.Employee = _repo.Query<ApplicationUser>().FirstOrDefault(u => u.Email == temp.Employee.Email); var trade = _repo.Query<Trade>().Include(t => t.ShiftsOffered.Select(s => s.Employee)).Include(t => t.ShiftForTrade).FirstOrDefault(t => t.ShiftForTrade.Id == shift1.Id); trade.IsPending = false; trade.ShiftsOffered.Clear(); s1.IsAvailable = false; s2.IsAvailable = false; _repo.SaveChanges(); } else { var trade = _repo.Query<Trade>().Include(t => t.ShiftsOffered.Select(s => s.Employee)).Include(t => t.ShiftForTrade).FirstOrDefault(t => t.ShiftForTrade.Id == shift1.Id); trade.IsPending = false; trade.ShiftsOffered.Clear(); _repo.SaveChanges(); } }
//get a list of pending trade public IList<TradeDTO> ListTrades() { var trades = _repo.Query<Trade>().Include(s => s.ShiftsOffered.Select(a => a.Employee)).Include(s => s.ShiftForTrade.Employee).ToList(); var tradesDTO = new List<TradeDTO>(); foreach (var t in trades) { var shiftList = new List<ShiftDTO>(); foreach (var st in t.ShiftsOffered) { var shift = new ShiftDTO { Id = st.Id, StartShift = st.StartShift, EndShift = st.EndShift, Employee = Mapper.Map<ApplicationUserDTO>(st.Employee), IsAvailable = st.IsAvailable }; shiftList.Add(shift); } var tradeDTO = new TradeDTO { Id = t.Id, ShiftForTrade = new ShiftDTO { Id = t.ShiftForTrade.Id, StartShift = t.ShiftForTrade.StartShift, EndShift = t.ShiftForTrade.EndShift, Employee = Mapper.Map<ApplicationUserDTO>(t.ShiftForTrade.Employee), IsAvailable = t.ShiftForTrade.IsAvailable }, ShiftsOffered = shiftList, IsPending = t.IsPending }; tradesDTO.Add(tradeDTO); } return tradesDTO; }
//get list of day shifts public IEnumerable<ShiftDTO> ListDayShifts() { var shifts = _repo.Query<Shift>().Include(s => s.Employee).ToList().OrderBy(t => t.StartShift); var shiftDTO = new List<ShiftDTO>(); foreach (var s in shifts) { var newshift = new ShiftDTO { Id = s.Id, StartShift = s.StartShift, EndShift = s.EndShift, Employee = Mapper.Map<ApplicationUserDTO>(s.Employee), IsAvailable = s.IsAvailable }; shiftDTO.Add(newshift); } return shiftDTO; }
//edit shift public void EditShift(ShiftDTO shift) { var originalShift = _repo.Find<Shift>(shift.Id); originalShift.StartShift = shift.StartShift.ToUniversalTime(); originalShift.EndShift = shift.EndShift.ToUniversalTime(); originalShift.Employee = _repo.Query<ApplicationUser>().FirstOrDefault(u => u.Email == shift.Employee.Email); originalShift.IsAvailable = shift.IsAvailable; var trade = _repo.Query<Trade>().Include(t => t.ShiftsOffered).FirstOrDefault(t => t.ShiftForTrade.Id == shift.Id); if (trade != null && trade.IsPending == true) { trade.IsPending = false; trade.ShiftsOffered.Clear(); _repo.SaveChanges(); } _repo.SaveChanges(); }