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"); } }
public Models.ReservationModel CreateReservationModel(Reservation rsv, int clientId, string ip) { var item = new Models.ReservationModel(); item.ReservationID = rsv.ReservationID; item.ResourceID = rsv.Resource.ResourceID; item.ResourceName = rsv.Resource.ResourceName; item.AccountID = rsv.Account.AccountID; item.AccountName = rsv.Account.Name; item.ShortCode = rsv.Account.ShortCode; item.ReservedByClientID = rsv.Client.ClientID; item.ReservedByClientName = string.Format("{0} {1}", rsv.Client.FName, rsv.Client.LName); Client c; if (rsv.ClientIDBegin.HasValue) { if (rsv.ClientIDBegin.Value > 0) { c = DA.Current.Single <Client>(rsv.ClientIDBegin.Value); item.StartedByClientID = c.ClientID; item.StartedByClientName = string.Format("{0} {1}", c.FName, c.LName); } else { item.StartedByClientID = 0; item.StartedByClientName = string.Empty; } } else { c = DA.Current.Single <Client>(clientId); item.StartedByClientID = clientId; item.StartedByClientName = string.Format("{0} {1}", c.FName, c.LName); } var isInLab = KioskUtility.ClientInLab(rsv.Resource.ProcessTech.Lab.LabID, clientId, ip); ReservationState state = ReservationUtility.GetReservationState(rsv.ReservationID, clientId, isInLab); item.Startable = ReservationUtility.IsStartable(state); item.NotStartableMessage = GetNotStartableMessage(state); var inst = ActionInstanceUtility.Find(ActionType.Interlock, rsv.Resource.ResourceID); item.HasInterlock = inst != null; item.ReturnUrl = GetResourceUrl(rsv.Resource.ResourceID); return(item); }