public async Task <Models.ReservationModel> Start(int reservationId, int clientId, string ip)
        {
            var rsv = DA.Scheduler.Reservation.Single(reservationId);

            var isInLab = KioskUtility.ClientInLab(rsv.Resource.ProcessTech.Lab.LabID, clientId, ip);

            ReservationState state = ReservationUtility.GetReservationState(rsv.ReservationID, clientId, isInLab);
            var startable          = ReservationUtility.IsStartable(state);

            if (!startable)
            {
                throw new InvalidOperationException(string.Format("ReservationID {0} cannot be started: {1}", reservationId, GetNotStartableMessage(state)));
            }

            if (rsv != null)
            {
                await ReservationUtility.StartReservation(rsv, clientId, isInLab);

                return(CreateReservationModel(rsv, clientId, ip));
            }
            else
            {
                throw new ArgumentException(string.Format("Cannot find record for ReservationID = {0}", reservationId), "reservationId");
            }
        }