public IActionResult Edit(int id, string StartTime, string EndTime, string remarks, string tag) { var timeslip = timeslipRepo.EditTimeslip(id, StartTime, EndTime, remarks, tag); if (timeslip == null) { return(new NotFoundObjectResult(timeslip)); } return(new ObjectResult(timeslip)); }
public IActionResult Edit([FromBody] TimeslipVM timeslipVM) { //check if the view model being passed is null if (timeslipVM == null) { return(new BadRequestObjectResult(new { message = "Invalid timeslip view model" })); } DateTime newStartTime; DateTime newEndTime; //check if the dates are null if ((timeslipVM.StartTime == null || timeslipVM.StartTime == "") || (timeslipVM.EndTime == null || timeslipVM.EndTime == "")) { return(new BadRequestObjectResult(new { message = "Invalid time input. Please enter a valid time." })); } //check that start time is a valid datetime bool success1 = DateTime.TryParse(timeslipVM.StartTime, out DateTime result1); if (success1) { newStartTime = result1; } else { return(new BadRequestObjectResult(new { message = "Please enter a valid start time" })); } //check that end time is a valid datetime bool success2 = DateTime.TryParse(timeslipVM.EndTime, out DateTime result2); if (success2) { newEndTime = result2; } else { return(new BadRequestObjectResult(new { message = "Please enter a valid end time" })); } //check if the user id is null if (timeslipVM.UserId == null || timeslipVM.UserId == "") { return(new BadRequestObjectResult(new { message = "Invalid user. Please log in." })); } //check if the end time is earlier than start time if (newStartTime >= newEndTime) { return(new BadRequestObjectResult(new { message = "Invalid time input. End time should be later that start time." })); } //check to make sure the actual hours do not exceed the estimated hours TimeSpan?duration = Convert.ToDateTime(timeslipVM.EndTime) - Convert.ToDateTime(timeslipVM.StartTime); int durationInHours = (int)duration?.TotalHours; var tempWBI_Id = timeslipRepo.GetOneTimeslip(timeslipVM.TimeslipId).NewChangeRequestId.ToString(); Guid wbiGuid = Guid.Parse(tempWBI_Id); var wbi = wbiRepo.GetOneWBI(wbiGuid); int? localActualHours = wbi.NewActualHours; localActualHours += durationInHours; if (localActualHours > wbi.NewEstimatedHours) { return(new BadRequestObjectResult(new { message = "Alloted hours for this WBI has been maxed out." })); } //check to make sure two timeslips do not overlap Guid userGuid = Guid.Parse(timeslipVM.UserId); var timeslipListByUserId = timeslipRepo.GetAllTimeslipsByUserId(userGuid); var date = Convert.ToDateTime(timeslipVM.StartTime); var sameDate = date.Date; Guid timeslipGuid = Guid.Parse(timeslipVM.TimeslipId); //this makes sure to exclude the same timeslip when validating overlaps var timeslipListByUserIdOnTheSameDay = timeslipListByUserId.Where(u => Convert.ToDateTime(u.NewStartTask).Date == sameDate) .Where(i => i.NewTimesheetEntryId != timeslipGuid); foreach (var item in timeslipListByUserIdOnTheSameDay) { if (item.NewStartTask < Convert.ToDateTime(timeslipVM.EndTime) && item.NewEndTask > Convert.ToDateTime(timeslipVM.StartTime)) { return(new BadRequestObjectResult(new { message = "Times cannot overlap" })); } } var timeslip = timeslipRepo.EditTimeslip(timeslipVM); if (timeslip == null) { return(new NotFoundObjectResult(timeslip)); } return(new ObjectResult(timeslip)); }