/// <summary>
        /// Gets the anon meeting.
        /// </summary>
        /// <param name="subject">The subject.</param>
        /// <param name="description">The description.</param>
        /// <param name="doctors">The doctors.</param>
        /// <param name="accessLevel">The access level is set to default "Invited" by default and you can pass any value,
        /// send string.empty if you want to sent access level to everyone
        /// UCAP does not allow access level Same Enterprise
        /// Also setting access level to Locked will lock meeting for everyone except organizer
        /// Hence only two values should be used, either Everyone or Invited</param>
        /// <returns>
        /// JSON string
        /// </returns>
        public static async Task <string> GetAnonMeeting(string subject, string description, List <Core.Models.Peers> doctors, string accessLevel = "Invited")
        {
            string jsonResponseString;

            var doctorSipAddress = new List <string>();

            doctorSipAddress.AddRange(doctors.Select(doctor => $"sip:{doctor.Email}"));

            var meeting = new MeetingInput
            {
                AccessLevel = accessLevel,
                Description = string.IsNullOrEmpty(description) ? "Virtual Health Meeting generated using UCAP" : description,
                Subject     = string.IsNullOrEmpty(subject) ? "Virtual Health Meeting generated using UCAP" : subject,
                Leaders     = doctorSipAddress.ToArray()
            };

            var jsonData = JsonConvert.SerializeObject(meeting);

            using (var wc = new WebClient())
            {
                string trustedApiUri = $"{ConfigurationManager.AppSettings["TrustedApi"]}/GetAdhocMeetingJob";
                wc.Headers.Add(HttpRequestHeader.Accept, "application/json");
                wc.Headers.Add(HttpRequestHeader.ContentType, "application/json");
                wc.Headers.Add("user-agent", "Other");
                jsonResponseString = await wc.UploadStringTaskAsync(new Uri(trustedApiUri), "POST", jsonData);
            }

            return(JsonConvert.DeserializeObject(jsonResponseString).ToString());
        }
        public void Should_get_formatted_date()
        {
            var meeting = new MeetingInput();

            meeting.StartDate = DateTime.Parse("1/1/2000 8:30 am");
            meeting.EndDate   = DateTime.Parse("1/1/2000 5:00 pm");
            meeting.TimeZone  = "cst";
            meeting.GetDate().ShouldEqual("01/01/2000 8:30 - 5:00 p.m. cst");
        }
 public ActionResult Edit(MeetingInput input)
 {
     if (!_securityContext.HasPermissionsForUserGroup(input.UserGroupId))
     {
         return(View(ViewPages.NotAuthorized));
     }
     return(Command <MeetingInput, Meeting>(input,
                                            r => RedirectToAction <HomeController>(c => c.Index(r.UserGroup)),
                                            r => View(input)));
 }
        public MeetingOutput ScheduleAdhocMeeting(MeetingInput input)
        {
            AdhocMeetingInput adhocMeetingInput = input.ToAdhocMeetingInput();

            if (!_isInitialized)
            {
                InitializeEndpoint();
            }
            var adhocMeeting = _applicationEndpoint.Application.GetAdhocMeetingResourceAsync(_loggingContext, adhocMeetingInput).Result;

            return(adhocMeeting.ToMeetingOutput());
        }
        public ActionResult Create(int minutesOffset, long?ticks, bool?allDay)
        {
            var start = (ticks.HasValue ? new DateTime(ticks.Value) : DateTime.UtcNow).AddMinutes(-minutesOffset);

            start = start.AddMinutes(5 - start.Minute % 5);
            var end = start.AddMinutes(15);

            var input = new MeetingInput
            {
                Start     = start,
                StartTime = start,
                AllDay    = allDay.HasValue && allDay.Value,
                End       = end,
                EndTime   = end,
                Color     = "#5484ED"
            };

            return(PartialView(input));
        }
        public ActionResult Create(MeetingInput input, int minutesOffset)
        {
            if (!ModelState.IsValid)
            {
                return(PartialView(input));
            }

            //get date
            var start = input.Start.Value.Date;
            var end   = input.End.Value.Date;

            //add time
            if (!input.AllDay)
            {
                start += input.StartTime.TimeOfDay;
                end   += input.EndTime.TimeOfDay;
            }

            start = start.AddMinutes(minutesOffset);
            end   = end.AddMinutes(minutesOffset);

            if (!input.AllDay && end <= start || end < start)
            {
                ModelState.AddModelError("Start", "end date and time should be greater than start date and time");
                return(PartialView(input));
            }

            var meeting = new Meeting
            {
                Title    = input.Title,
                Start    = start,
                End      = end,
                Location = input.Location,
                Notes    = input.Notes,
                AllDay   = input.AllDay,
                Color    = input.Color
            };

            Db.Insert(meeting);

            return(Json(new { }));
        }
        public async Task <ActionResult> Join(Guid identifier)
        {
            var            session = db.RemoteAdvisorSessions.Where(c => c.SessionId == identifier).First();
            SkypeApiClient client  = new SkypeApiClient();
            MeetingInput   mi      = new MeetingInput();

            mi.AccessLevel       = "Everyone";
            mi.Description       = session.Subject;
            mi.MeetingIdentifier = session.JoinUrl;
            var token = await client.GetAnonymousTokenAsync(mi);

            JoinViewModel jvm = new JoinViewModel();

            jvm.AnonymousToken   = token.AnonToken;
            jvm.DiscoverUri      = token.DiscoverUrl;
            jvm.JoinUrl          = session.JoinUrl;
            jvm.Customer         = session.Customer;
            jvm.Subject          = session.Subject;
            jvm.OnlineMeetingUri = session.OnlineMeetingUri;
            return(View(jvm));
        }
        public ActionResult Edit(int id, int minutesOffset)
        {
            var meeting = Db.Get <Meeting>(id);
            var start   = meeting.Start.AddMinutes(-minutesOffset);
            var end     = meeting.End.AddMinutes(-minutesOffset);

            var input = new MeetingInput
            {
                Id        = id,
                Title     = meeting.Title,
                Location  = meeting.Location,
                Start     = start,
                StartTime = start,
                End       = end,
                EndTime   = end,
                Notes     = meeting.Notes,
                AllDay    = meeting.AllDay,
                Color     = meeting.Color
            };

            return(PartialView("Create", input));
        }
        public async Task <ActionResult> Create(CreateViewModel model)
        {
            if (ModelState.IsValid)
            {
                SkypeApiClient client = new SkypeApiClient();
                MeetingInput   mi     = new MeetingInput();
                mi.Subject = model.Subject;
                var meeting = await client.CreateSkypeAdhocMeetingAsync(mi);

                RemoteAdvisorSession newSession = new RemoteAdvisorSession();
                newSession.SessionId        = Guid.NewGuid();
                newSession.Subject          = model.Subject;
                newSession.Customer         = model.CustomerName;
                newSession.OnlineMeetingUri = meeting.OnlineMeetingUri;
                newSession.JoinUrl          = meeting.JoinUrl;
                newSession.CreateDate       = DateTime.Now;
                db.RemoteAdvisorSessions.Add(newSession);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            return(View(model));
        }