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));
        }
Esempio n. 2
0
        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));
        }