// 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)); }
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")); }
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); }