Beispiel #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"));
            }
        }
Beispiel #2
0
        private void setBGEvents(vmAppointments p_myVM, long p_WorkplaceId, long p_scheduleType)
        {
            try
            {
                //edit schedule for a workplace wpid (default scheduleType=0 Alldays)
                vmWorkplace myVM = new vmWorkplace();
                myVM.Workplace = _context.Workplaces.Where(w => w.Id == p_WorkplaceId).SingleOrDefault();
                myVM.Workplace.WorkplaceSchedules = _context.WorkplaceSchedules.Include(s => s.Schedule).Where(wps => wps.WorkplaceId == p_WorkplaceId).ToList();
                myVM.Location = _context.Locations.Include(s => s.Schedule).Where(l => l.Id == myVM.Workplace.LocationId).SingleOrDefault();

                var events  = new List <FullCalendar.rEventShow>();
                var events2 = new List <FullCalendar.rEventShow>();

                Schedule mySchedule = myVM.Workplace.ScheduleByType(p_scheduleType);
                if (mySchedule == null)
                {
                    //create default events from location schedule
                    events = FullCalendar.getWeekrEventShowFromSchedule(myVM.Location.Schedule);
                }
                else
                {
                    //create events from selected schedule type
                    if (mySchedule.EventsJson == "")
                    {
                        events = FullCalendar.getWeekrEventShowFromSchedule(mySchedule);
                    }
                    else
                    {
                        events = Newtonsoft.Json.JsonConvert.DeserializeObject <FullCalendar.rEventShow[]>(mySchedule.EventsJson).ToList();
                    }
                    myVM.ScheduleId = mySchedule.Id;
                }

                var devents  = new List <FullCalendar.rEvent>();
                var d2events = new List <FullCalendar.rEvent>();
                devents = FullCalendar.CreateREventsFromREventShow(p_scheduleType, events, "blue");

                if (p_scheduleType != 0)
                {
                    //add other schedule (odd,even)
                    long other = ((p_scheduleType == 1) ? 2 : 1);
                    mySchedule = myVM.Workplace.ScheduleByType(other);
                    if (mySchedule == null)
                    {
                        //create default events from location schedule
                        events2 = FullCalendar.getWeekrEventShowFromSchedule(myVM.Location.Schedule);
                    }
                    else
                    {
                        //create events from selected schedule type
                        if (mySchedule.EventsJson == "")
                        {
                            events2 = FullCalendar.getWeekrEventShowFromSchedule(mySchedule);
                        }
                        else
                        {
                            events2 = Newtonsoft.Json.JsonConvert.DeserializeObject <FullCalendar.rEventShow[]>(mySchedule.EventsJson).ToList();
                        }
                    }
                    d2events = FullCalendar.CreateREventsFromREventShow(other, events2, "red");
                }



                //events.AddRange(events2);
                devents.AddRange(d2events);
                //add resourceId
                foreach (var item in devents)
                {
                    item.resourceId      = p_WorkplaceId.ToString();
                    item.backgroundColor = "";
                }
                p_myVM.calBGEvents = Newtonsoft.Json.JsonConvert.SerializeObject(devents.ToArray());
                //add revents to weekdays
                WeekDay myWeekday;
                foreach (var item in devents)
                {
                    int idx = int.Parse(item.id);
                    if (myVM.WeekDays[idx] != null)
                    {
                        myWeekday = myVM.WeekDays[idx];
                        myWeekday.calEvents.Add(item);
                        myVM.WeekDays[idx] = myWeekday;
                    }
                    else
                    {
                        myWeekday = new WeekDay();
                        myWeekday.calEvents.Add(item);
                        myVM.WeekDays[idx] = myWeekday;
                    }
                }

                //set results
                resourceWD myRWD = new resourceWD();
                myRWD.resourceId = p_WorkplaceId;
                myRWD.WeekDays   = myVM.WeekDays;
                p_myVM.resourcesWD.Add(myRWD);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Error setBGEvents");
            }
        }