// GET: O365Calendar
        public async Task <ActionResult> Index()
        {
            List <CalendarEvent> myEvents = new List <CalendarEvent>();

            // Call the GetExchangeClient method, which will authenticate
            // the user and create the ExchangeClient object.
            var client = await O365Util.GetOutlookClient(Capabilities.Calendar);

            // Use the ExchangeClient object to call the Calendar API.
            // Get all events that have an end time after now.
            var eventsResults = await(from i in client.Me.Events
                                      //where i.End >= DateTimeOffset.UtcNow
                                      select i).Take(10).ExecuteAsync();

            // Order the results by start time.
            var events = eventsResults.CurrentPage.OrderBy(e => e.Start);

            // Create a CalendarEvent object for each event returned
            // by the API.
            foreach (Event calendarEvent in events)
            {
                CalendarEvent newEvent = new CalendarEvent();
                newEvent.Subject  = calendarEvent.Subject;
                newEvent.Location = new CalendarEventLocation {
                    DisplayName = calendarEvent.Location.DisplayName
                };
                newEvent.Start = calendarEvent.Start.GetValueOrDefault().DateTime;
                newEvent.End   = calendarEvent.End.GetValueOrDefault().DateTime;

                myEvents.Add(newEvent);
            }
            return(View(myEvents));
        }
Пример #2
0
        public async Task <ActionResult> AuditRepair(string button, DashboardInspectionDetailsViewModel model)
        {
            var outlookToken = await O365Util.GetAccessToken(Capabilities.Mail);

            var sharePointToken = await O365Util.GetAccessToken(ServiceResources.DemoSite);

            var outlookClient = await O365Util.GetOutlookClient(Capabilities.Mail);

            Dashboard dashboardModel = new Dashboard(sharePointToken);

            var result = button == "Approve" ? ApprovalResult.Approved : ApprovalResult.Rejected;

            var tasksService = new TasksService(sharePointToken);
            await tasksService.CompleteRepairApprovalTask(model.incidentId, result);

            if (result == ApprovalResult.Approved)
            {
                await dashboardModel.ApproveRepair(model.incidentId);

                //This is the pattern you would use to send email from O365 APIs.  These emails are sent via the mobile apps.
                //var emailService = new EmailService(sharePointToken, Server.MapPath("/"));
                //var emailMessage = await emailService.ComposeRepairCompletedEmailMessage(model.incidentId);
                //await outlookClient.Me.SendMailAsync(emailMessage, true);
            }
            return(new RedirectResult("/Dashboard/Index"));
        }
Пример #3
0
        public async Task <ActionResult> SendEmail(string outlookToken, string sharePointToken, int incidentId)
        {
            var outlookClient = await O365Util.GetOutlookClient(Capabilities.Mail);

            var service = new EmailService(sharePointToken, Server.MapPath("/"));
            var message = await service.ComposeRepairCompletedEmailMessage(incidentId);

            await outlookClient.Me.SendMailAsync(message, true);

            return(Content("Success"));
        }
        public async Task <JsonResult> GetAvailableTimeSlots(string localTimeUtc)
        {
            // Call the GetExchangeClient method, which will authenticate
            // the user and create the ExchangeClient object.
            var client = await O365Util.GetOutlookClient(Capabilities.Calendar);

            //Get the Utc time from 9 AM to 6 PM
            DateTime startLocalTimeUtc = Convert.ToDateTime(localTimeUtc).ToUniversalTime();
            var      beginTime         = startLocalTimeUtc.AddHours(9);
            var      endTime           = startLocalTimeUtc.AddHours(18);

            //Get all time slot that we need within 9AM - 6 PM
            List <TimeSlot> timeSlots = new List <TimeSlot>();

            for (var i = 9; i < 18; i++)
            {
                TimeSlot timeSlot = new TimeSlot
                {
                    Start = i,
                    Value = string.Format("{0}:00 - {1}:00", i, i + 1)
                };
                timeSlots.Add(timeSlot);
            }

            List <CalendarEvent> myEvents = new List <CalendarEvent>();

            // Use the ExchangeClient object to call the Calendar API.
            // Get all events that have an end time after now.
            var eventsResults = await(from i in client.Me.Events
                                      where ((i.Start >= beginTime && i.Start <= endTime) || (i.End >= beginTime && i.End <= endTime) || (i.Start <= beginTime && i.End >= endTime))
                                      select i).Take(10).ExecuteAsync();

            // Order the results by start time.
            var events = eventsResults.CurrentPage.OrderBy(e => e.Start);

            // Create a CalendarEvent object for each event returned
            // by the API.
            foreach (Event calendarEvent in events)
            {
                if (calendarEvent.ShowAs == FreeBusyStatus.Busy)
                {
                    var Start = calendarEvent.Start.GetValueOrDefault().DateTime;
                    var End   = calendarEvent.End.GetValueOrDefault().DateTime;

                    //Remove all time slot which is between Start and End
                    RemoveBusyTime(startLocalTimeUtc, timeSlots, Start, End);
                }
            }

            return(Json(timeSlots, JsonRequestBehavior.AllowGet));
        }
        public static async Task Create(Event newEvent)
        {
            var client = await O365Util.GetOutlookClient(Capabilities.Calendar);

            await client.Me.Events.AddEventAsync(newEvent);
        }