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());
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
 public Booking FeedbackBooking(FeedbackBookingModel model, Booking entity)
 {
     model.CopyTo(entity);
     entity.Status = BookingStatusValues.FINISHED;
     return(entity);
 }