Esempio n. 1
0
        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"));
            }
        }