public IActionResult FeedbackBooking(int id, FeedbackBookingModel model) { var entity = _service.Bookings.Id(id).FirstOrDefault(); if (entity == null) { return(NotFound(AppResult.NotFound())); } var validationData = _service.ValidateFeedbackBooking(User, entity, model); if (!validationData.IsValid) { return(BadRequest(AppResult.FailValidation(data: validationData))); } var fromStatus = entity.Status; using (var trans = context.Database.BeginTransaction()) { _service.FeedbackBooking(model, entity); var history = _service.CreateHistoryForFeedbackBooking(entity, entity.BookMember); //log event var ev = _sysService.GetEventForBookingProcessing(history); _sysService.CreateAppEvent(ev); //end log event context.SaveChanges(); trans.Commit(); } //notify managers (if any) //var managerIds = _memberService.QueryManagersOfArea(entity.Room.BuildingAreaCode) // .Select(o => o.UserId).ToList(); //if (managerIds.Count > 0) // await NotiHelper.Notify(managerIds, managerNoti); return(NoContent()); }
public ValidationData ValidateFeedbackBooking(ClaimsPrincipal principal, Booking entity, FeedbackBookingModel model) { var validationData = new ValidationData(); var userId = principal.Identity.Name; if (entity.BookMemberId != userId) { validationData.Fail(code: AppResultCode.AccessDenied); } var now = DateTime.UtcNow; var bookedDateDefault = entity.BookedDate.ToDefaultTimeZone(); var startTime = bookedDateDefault .AddMinutes(entity.FromTime.TotalMinutes).ToUtc(); var allowFeedbackTime = bookedDateDefault .AddMinutes(entity.ToTime.TotalMinutes) .AddHours(4).ToUtc(); if (entity.Status != BookingStatusValues.APPROVED || allowFeedbackTime <= now || startTime >= now) { validationData.Fail(mess: "Not allowed", code: AppResultCode.FailValidation); } if (model.Feedback == null) { validationData.Fail(mess: "You must provide a reason in feedback", code: AppResultCode.FailValidation); } return(validationData); }
public Booking FeedbackBooking(FeedbackBookingModel model, Booking entity) { model.CopyTo(entity); entity.Status = BookingStatusValues.FINISHED; return(entity); }