public IActionResult Index() { try { if (User.Identity.IsAuthenticated) { if (LocationIsMine(DefaultLocationId())) { const long scheduletype = 0; try { vmAppointments myVM = new vmAppointments(); myVM.Location = _context.Locations.Include(s => s.Schedule).Include(w => w.Workplaces).FirstOrDefault(x => x.Id == DefaultLocationId()); if (myVM.Location != null) { var gt = _CurrentUserGooToken(); if (gt != null) { var events = new List <FullCalendar.Event>(); using (GoogleService service = new GoogleService(gt)) { var cals = service.getCalendars().Items; for (int i = myVM.Location.Workplaces.Count - 1; i >= 0; i--) { var item = myVM.Location.Workplaces.ElementAt(i); if (item.GoogleCalendarID != null) { myVM.GoogleCalendars.Add(item.GoogleCalendarID, item.Name); //get calendar events Events calEvents = service.GetEvents(item.GoogleCalendarID); foreach (var calEvent in calEvents.Items) { var start = calEvent.Start.DateTime.Value; var end = calEvent.End.DateTime.Value; var newEvent = new FullCalendar.Event() { id = calEvent.Id, resourceId = item.Id.ToString(), title = calEvent.Summary, start = start.ToString("yyyy-MM-ddTHH:mm:ss"), end = end.ToString("yyyy-MM-ddTHH:mm:ss"), allDay = false }; if (calEvent.ExtendedProperties != null) { newEvent.extendedProps = (Dictionary <string, string>)calEvent.ExtendedProperties.Private__; if (newEvent.extendedProps.ContainsKey("client")) { var client = newEvent.extendedProps["client"]; try { dynamic myClient = JsonConvert.DeserializeObject <dynamic>(client); newEvent.title = myClient.label; if (myClient.mobile.ToString().Length > 0) { newEvent.title = newEvent.title + " (" + myClient.mobile + ")"; } } catch (Exception ex) { newEvent.title = client; } } if (newEvent.extendedProps.ContainsKey("notes")) { try { newEvent.title = newEvent.title + "\r\n" + JsonConvert.DeserializeObject <string>(newEvent.extendedProps["notes"]); } catch (Exception) { newEvent.title = newEvent.title + "\r\n" + newEvent.extendedProps["notes"]; } } } events.Add(newEvent); } //get schedule bgEvents setBGEvents(myVM, item.Id, scheduletype); myVM.AddcalEvents(myVM.calBGEvents); } else { myVM.Location.Workplaces.Remove(item); } //get calendar color foreach (var cal in cals) { if (cal.Id == item.GoogleCalendarID) { item.GoogleCalendarColor = cal.BackgroundColor; } } } } myVM.AddcalEvents(Newtonsoft.Json.JsonConvert.SerializeObject(events.ToArray())); //myVM.calEvents = Newtonsoft.Json.JsonConvert.SerializeObject(events.ToArray()); } myVM.ClientsJson = Newtonsoft.Json.JsonConvert.SerializeObject(_context.Clients.Where(c => c.CompanyId == _CurrentUserCompanyID() && c.LocationId == DefaultLocationId()).OrderBy(o => o.FirstName).ThenBy(o => o.LastName).Select(p => new { value = p.Id, label = p.FullName, mobile = p.Mobile }).ToList()).Replace(@"\", @"\\"); myVM.Token = _GetToken(); return(View(myVM)); } else { return(new NotFoundResult()); } } catch (Exception ex) { //TODO:expired google credentials _logger.LogError(ex, "Error /home/"); throw; } } else { return(NotFound()); } } else { return(Redirect("~/LandingPage/index.html")); } } catch (Exception ex) { _logger.LogError(ex, "Error /Appointments/index"); return(Redirect("~/Home/index")); } }