コード例 #1
0
        public async Task UpdateBookingShouldUpdateFieldsAsync()
        {
            // arrange
            var booking = new BookingEntity {
                Id = Guid.NewGuid(), UserEntityId = _currentUserEntity.Id
            };

            _bookingList.Add(booking);

            var model = new UpdateBookingModel
            {
                BookingStatusCode   = "testBookingUpdate",
                SelfBooked          = true,
                DateOfBooking       = DateTime.UtcNow.ToLocalTime(),
                OtherBookingDetails = "testOtherBookingDetails"
            };

            // act
            var result = await _bookingsQueryProcessor.Update(booking.Id, model);

            // assert
            result.Should().Be(booking);
            result.BookingStatusCode.Should().Be(model.BookingStatusCode);
            result.SelfBooked.Should().Be(model.SelfBooked);
            result.UserEntityId.Should().Be(_currentUserEntity.Id);

            _unitOfWorkMock.Verify(x => x.CommitAsync());
        }
コード例 #2
0
        public async Task <BookingModel> PutAsync(Guid id, [FromBody] UpdateBookingModel model)
        {
            var item = await _bookingsQuery.Update(id, model);

            var resultModel = _mapper.Map <BookingModel>(item);

            return(resultModel);
        }
コード例 #3
0
 public Booking UpdateBooking(UpdateBookingModel model, Booking entity)
 {
     model.CopyTo(entity);
     if (model.RemoveServiceIds != null)
     {
         RemoveBookingAttachedServices(model.RemoveServiceIds);
     }
     return(entity);
 }
コード例 #4
0
        public ValidationData ValidateUpdateBooking(ClaimsPrincipal principal,
                                                    Member manager,
                                                    Booking entity,
                                                    UpdateBookingModel model)
        {
            var validationData = new ValidationData();
            var userId         = principal.Identity.Name;

            if (entity.Status == BookingStatusValues.PROCESSING)
            {
                var bookMemberId = entity.BookMemberId;
                var managerIds   = _memberService.QueryManagersOfMember(bookMemberId)
                                   .Select(o => o.UserId).ToList();
                if (!managerIds.Contains(userId))
                {
                    validationData.Fail(code: AppResultCode.AccessDenied);
                }
            }
            else if (entity.Status == BookingStatusValues.VALID)
            {
                var areaCode   = entity.Room.BuildingAreaCode;
                var managerIds = _memberService.QueryManagersOfArea(areaCode)
                                 .Select(o => o.UserId).ToList();
                if (!managerIds.Contains(userId))
                {
                    validationData.Fail(code: AppResultCode.AccessDenied);
                }
            }
            else
            {
                validationData.Fail(mess: "Invalid status", code: AppResultCode.FailValidation);
            }
            if (model.RoomCode != entity.RoomCode)
            {
                var room = _roomService.Rooms.Code(model.RoomCode).FirstOrDefault();
                if (room == null)
                {
                    validationData.Fail(mess: "Room not found", AppResultCode.FailValidation);
                }
                else
                if (!CheckAvailabilityOfRoomForBooking(userId, entity, room))
                {
                    validationData.Fail(mess: "New room is not available", AppResultCode.FailValidation);
                }
                else
                {
                    validationData.TempData["room"] = room;
                }
            }
            return(validationData);
        }
コード例 #5
0
        public async Task <IActionResult> UpdateBooking(int id, UpdateBookingModel model)
        {
            var entity = _service.Bookings.Id(id).FirstOrDefault();

            if (entity == null)
            {
                return(NotFound(AppResult.NotFound()));
            }
            var member         = _memberService.Members.Id(UserId).FirstOrDefault();
            var validationData = _service.ValidateUpdateBooking(User, member, entity, model);

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

            using (var trans = context.Database.BeginTransaction())
            {
                _service.UpdateBooking(model, entity);
                var history = _service.CreateHistoryForUpdateBooking(entity, member);
                //log event
                ev = _sysService.GetEventForBookingProcessing(history);
                _sysService.CreateAppEvent(ev);
                //end log event
                context.SaveChanges();
                trans.Commit();
            }
            //notify using members
            var notiData = new Dictionary <string, string>
            {
                { "event", ev.Type },
                { "id", entity.Id.ToString() }
            };
            var updatePerson = fromStatus == BookingStatusValues.PROCESSING ? "department manager" :
                               "location manager";
            var usingMemberIds = entity.UsingMemberIds.Split('\n');
            var notiMemberIds  = usingMemberIds.Where(o => o != UserId).ToList();
            await NotiHelper.Notify(notiMemberIds, new Notification
            {
                Title = $"Booking {entity.Code} has been updated by your {updatePerson}",
                Body  = $"{UserEmail} has just updated your booking of room {entity.RoomCode}. Press for more detail"
            }, data : notiData);

            return(NoContent());
        }
コード例 #6
0
        public async Task <BookingEntity> Update(Guid id, UpdateBookingModel model)
        {
            var booking = GetQuery().FirstOrDefault(b => b.Id == id);

            if (booking == null)
            {
                throw new NotFoundException("Booking not found");
            }
            booking.BookingStatusCode   = model.BookingStatusCode;
            booking.DateOfBooking       = model.DateOfBooking;
            booking.SelfBooked          = model.SelfBooked;
            booking.OtherBookingDetails = model.OtherBookingDetails;
            booking.ModifyDate          = DateTime.UtcNow.ToLocalTime();
            booking.ModifyUserId        = _securityContext.UserEntity.Id.ToString();
            booking.IsDeleted           = model.IsDeleted;

            await _uniOfWork.CommitAsync();

            return(booking);
        }
コード例 #7
0
        public void updateBookingDetails(UpdateBookingModel model)
        {
            var      todayDate = DateTime.Today;
            DateTime datecheck = new DateTime();

            datecheck = Convert.ToDateTime(model.date);
            if (datecheck > todayDate)
            {
                var bookingDetails = (BookingDetailsModel)Session["selectedBookingDetails"];
                var bookingUpdate  = db.Venue_Booking.Where(b => b.Venue_Booking_Seq.Equals(bookingDetails.booking_seq)).FirstOrDefault();

                var test = bookingUpdate.Venue_Booking_Seq;

                //get the time and date components
                DateTime bookingTime  = Convert.ToDateTime(model.time);
                var      timeTimespan = bookingTime.TimeOfDay;
                var      bookingDate  = datecheck;

                //calculate the start time of the new session
                DateTime startDateTime = new DateTime(bookingDate.Year, bookingDate.Month, bookingDate.Day, timeTimespan.Hours, timeTimespan.Minutes, timeTimespan.Seconds);

                //calculate the end time of the new session
                var      duration    = Convert.ToDateTime(model.length).TimeOfDay;
                DateTime endDateTime = startDateTime.Add(duration);

                var buildingFloorId = (from b in db.Building_Floor
                                       where b.Building_ID.Equals(model.building_id) && b.Campus_ID.Equals(model.campus_id)
                                       select b.Building_Floor_ID).FirstOrDefault();

                bookingUpdate.DateTime_From     = startDateTime;
                bookingUpdate.DateTime_To       = endDateTime;
                bookingUpdate.Campus_ID         = model.campus_id;
                bookingUpdate.Building_ID       = model.building_id;
                bookingUpdate.Building_Floor_ID = buildingFloorId;
                bookingUpdate.Venue_ID          = model.venue_id;

                db.Entry(bookingUpdate).State = EntityState.Modified;
                db.SaveChanges();

                //record action
                global.addAudit("Bookings", "Bookings: Update Booking", "Update", User.Identity.Name);
            }
            else
            {
                var bookingDetails = (BookingDetailsModel)Session["selectedBookingDetails"];
                var bookingUpdate  = db.Venue_Booking.Where(b => b.Venue_Booking_Seq.Equals(bookingDetails.booking_seq)).FirstOrDefault();

                TempData["Message"]    = "Invalid date entry. Date is in the past";
                TempData["classStyle"] = "warning";
                ViewBag.Campus         = from c in db.Campus
                                         select c;

                ViewBag.Building = from b in db.Buildings
                                   where b.Campus_ID.Equals(bookingUpdate.Campus_ID)
                                   select b;

                var venues       = db.findBookingVenuesFunc(bookingUpdate.DateTime_From, bookingUpdate.DateTime_To, "Discussion", bookingUpdate.Campus_ID).ToList();
                var currentVenue = db.Venues.Where(v => v.Venue_ID.Equals(bookingUpdate.Venue_ID)).FirstOrDefault();
                venues.Add(currentVenue);

                ViewBag.Venue = venues;
                RedirectToAction("updateBookingDetails", "Booking", model);
            }
        }
コード例 #8
0
        public ActionResult updateBookingDetails()
        {
            var bookingDetails = (BookingDetailsModel)Session["selectedBookingDetails"];

            var booking = db.Venue_Booking.Where(b => b.Venue_Booking_Seq.Equals(bookingDetails.booking_seq)).FirstOrDefault();

            if (booking.Booking_Type.Booking_Type_Name == "Training")
            {
                TempData["Message"]    = "Unfortunately unable to update training session!";
                TempData["classStyle"] = "danger";
                if (User.IsInRole("Admin"))
                {
                    return(RedirectToAction("employeeViewBookings"));
                }
                else
                {
                    return(RedirectToAction("ViewBookings"));
                }
            }
            else
            {
                UpdateBookingModel a = new UpdateBookingModel
                {
                    booking_seq       = bookingDetails.booking_seq,
                    building          = bookingDetails.building,
                    campus            = bookingDetails.campus,
                    date              = bookingDetails.date,
                    startDate         = booking.DateTime_From,
                    endDate           = booking.DateTime_To,
                    person_id         = bookingDetails.person_id,
                    time              = booking.DateTime_From.TimeOfDay.ToString(),
                    venue             = bookingDetails.venue,
                    campus_id         = booking.Campus_ID,
                    building_id       = booking.Building_ID,
                    building_floor_id = booking.Building_Floor_ID,
                    venue_id          = booking.Venue_ID,
                    length            = booking.DateTime_To.Subtract(booking.DateTime_From).ToString().Substring(0, 5),
                };

                //get xml
                var      settingsPath = Path.Combine(Server.MapPath("~"), "settings.xml");
                XElement doc          = XElement.Load(settingsPath);

                //get list of durations
                List <string> durations = (from el in doc.Elements("discussionduration")
                                           select el.Value).ToList();
                durations.Sort();
                ViewBag.Durations = durations;

                //get start/closing time
                var open  = doc.Elements("opentime").First();
                var close = doc.Elements("closetime").First();

                ViewBag.Open  = open;
                ViewBag.Close = close;

                ViewBag.Campus = from c in db.Campus
                                 select c;

                ViewBag.Building = from b in db.Buildings
                                   where b.Campus_ID.Equals(booking.Campus_ID)
                                   select b;

                var venues       = db.findBookingVenuesFunc(booking.DateTime_From, booking.DateTime_To, "Discussion", booking.Campus_ID).ToList();
                var currentVenue = db.Venues.Where(v => v.Venue_ID.Equals(booking.Venue_ID)).FirstOrDefault();
                venues.Add(currentVenue);

                ViewBag.Venue = venues;

                ModelState.Clear();

                return(View(a));
            }
        }