Ejemplo n.º 1
0
        public ValidationData ValidateCancelBooking(ClaimsPrincipal principal,
                                                    Booking entity,
                                                    CancelBookingModel model)
        {
            var validationData = new ValidationData();
            var userId         = principal.Identity.Name;

            if (entity.BookMemberId != userId)
            {
                validationData.Fail(code: AppResultCode.AccessDenied);
            }
            var now       = DateTime.UtcNow;
            var startTime = entity.BookedDate.Add(entity.FromTime);

            if (entity.Status == BookingStatusValues.FINISHED ||
                entity.Status == BookingStatusValues.DENIED ||
                entity.Status == BookingStatusValues.ABORTED ||
                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);
        }
Ejemplo n.º 2
0
        public async Task <ResponseObject> Handle(CancelBookingModel message)
        {
            List <CancelPNRResponse> cancelbookinpnrresponse = new List <CancelPNRResponse>();
            bool mystiflyResponse = await CancelbookingfromSupplier(cancelbookinpnrresponse, message);

            var response = new ResponseObject
            {
                ResponseMessage = new HttpResponseMessage(HttpStatusCode.OK),
                Data            = cancelbookinpnrresponse,
                Message         = "Data retrieved Successfully",
                IsSuccessful    = true
            };

            return(response);
        }
        public async Task <IActionResult> CancelBooking(int id, CancelBookingModel model)
        {
            var entity = _service.Bookings.Id(id).FirstOrDefault();

            if (entity == null)
            {
                return(NotFound(AppResult.NotFound()));
            }
            var validationData = _service.ValidateCancelBooking(User, entity, model);

            if (!validationData.IsValid)
            {
                return(BadRequest(AppResult.FailValidation(data: validationData)));
            }
            var      fromStatus = entity.Status;
            AppEvent ev;

            using (var trans = context.Database.BeginTransaction())
            {
                _service.CancelBooking(model, entity);
                var history = _service.CreateHistoryForCancelBooking(entity, fromStatus, entity.BookMember);
                //log event
                ev = _sysService.GetEventForBookingProcessing(history);
                _sysService.CreateAppEvent(ev);
                //end log event
                context.SaveChanges();
                trans.Commit();
            }
            //notify using members, managers (if any)
            var notiData = new Dictionary <string, string>
            {
                { "event", ev.Type },
                { "id", entity.Id.ToString() }
            };
            var notiMemberIds = entity.UsingMemberIds.Split('\n')
                                .Where(o => o != UserId).ToList();
            var notiMembers = notiMemberIds.Any() ? NotiHelper.Notify(notiMemberIds, new Notification
            {
                Title = $"Your booking {entity.Code} has been aborted",
                Body  = $"{UserEmail} has just aborted booking {entity.Code}. Press for more detail"
            }, data: notiData) : Task.CompletedTask;
            var managerNoti = new Notification
            {
                Title = $"A booking managed by you has been aborted",
                Body  = $"{UserEmail} has just aborted booking {entity.Code}. Press for more detail"
            };

            if (entity.Status == BookingStatusValues.VALID)
            {
                var managerIds = _memberService.QueryManagersOfMember(entity.BookMemberId)
                                 .Select(o => o.UserId).ToList();
                if (managerIds.Count > 0)
                {
                    await NotiHelper.Notify(managerIds, managerNoti, data : notiData);
                }
            }
            else if (entity.Status == BookingStatusValues.APPROVED)
            {
                var managerIds = _memberService.QueryManagersOfArea(entity.Room.BuildingAreaCode)
                                 .Select(o => o.UserId).ToList();
                if (managerIds.Count > 0)
                {
                    await NotiHelper.Notify(managerIds, managerNoti, data : notiData);
                }
            }
            await notiMembers;

            return(NoContent());
        }
Ejemplo n.º 4
0
 public Booking CancelBooking(CancelBookingModel model, Booking entity)
 {
     model.CopyTo(entity);
     entity.Status = BookingStatusValues.ABORTED;
     return(entity);
 }