private async Task UpdateCalendar(ResourceCalendar calendar)
        {
            Cache.ClearAll();

            DjangoCalendar dc = await GetDjangoCalendar(calendar);

            foreach (var newEntry in ParseEntries(calendar))
            {
                var old = dc.Results.FirstOrDefault(row => row.Start == newEntry.Start && row.End == newEntry.End);
                if (old != null)
                {
                    old.Used = true;
                }
                else
                {
                    dc.Results.Add(newEntry);
                }
            }
            foreach (var entry in dc.Results)
            {
                if (entry.ID != null && entry.Used)
                {
                    continue;
                }
                if (entry.ID != null)
                {
                    await DeleteItem(entry.ID);
                }
                else
                {
                    await PostJson("calendarentries/", Serialize(entry));
                }
            }
        }
        private ResourceCalendar CreateEmptyResourceCalendar(string companyId, int year, int month)
        {
            var culture = GetRequestCulture();

            var resources = GetResources(companyId, year, month);

            var calendar = new ResourceCalendar();

            calendar.Year      = year;
            calendar.Month     = month;
            calendar.CompanyId = companyId;
            calendar.MonthName = GetMonthName(month, culture);

            var moment = new DateTime(year, month, 1);

            while (moment.Month == month)
            {
                var dow = moment.DayOfWeek;

                var day = new ResourceCalendarDay();
                day.Day       = moment.ToString("dd.MM.yyyy");
                day.DayNro    = moment.Day;
                day.Weekday   = GetWeekday(dow, culture);
                day.IsWeekend = dow == DayOfWeek.Saturday || dow == DayOfWeek.Sunday;
                day.Resources = Clone(resources);

                calendar.Days.Add(day);

                moment = moment.AddDays(1);
            }

            return(calendar);
        }
        private async Task <DjangoCalendar> GetDjangoCalendar(ResourceCalendar calendar)
        {
            var startTime = SearchController.ToUTC(new DateTime(calendar.Year, calendar.Month, 1), 0);
            var endTime   = SearchController.ToUTC(new DateTime(calendar.Year + (calendar.Month == 12 ? 1 : 0), calendar.Month < 12 ? calendar.Month + 1 : 1, 1), 0);
            var entries   = await GetJson($"calendarentries?company={calendar.CompanyId}&start__gt={startTime}&end__lt={endTime}&limit=100000");

            var dc = Deserialize <DjangoCalendar>(entries);

            return(dc);
        }
        private async Task FillResourceCalendar(ResourceCalendar calendar)
        {
            DjangoCalendar dc = await GetDjangoCalendar(calendar);

            foreach (var reserved in dc.Results)
            {
                reserved.Start = reserved.Start;
                reserved.End   = reserved.End;
                FillReserved(reserved, calendar);
            }
        }
 private IEnumerable <DjangoTimeEntry> ParseEntries(ResourceCalendar calendar)
 {
     foreach (var day in calendar.Days)
     {
         foreach (var res in day.Resources)
         {
             DateTime?startTime = null;
             foreach (var tick in res.Timeslots)
             {
                 if (tick.IsSelected)
                 {
                     if (!startTime.HasValue)
                     {
                         startTime = new DateTime(calendar.Year, calendar.Month, day.DayNro, tick.Minutes / 60, tick.Minutes % 60, 0, DateTimeKind.Utc);
                     }
                 }
                 else
                 {
                     if (startTime.HasValue)
                     {
                         var endTime = new DateTime(calendar.Year, calendar.Month, day.DayNro, tick.Minutes / 60, tick.Minutes % 60, 0, DateTimeKind.Utc);
                         var dc      = new DjangoTimeEntry()
                         {
                             CompanyID = calendar.CompanyId, Start = startTime.Value, End = endTime, Used = true
                         };
                         startTime = null;
                         yield return(dc);
                     }
                 }
             }
             if (startTime.HasValue)
             {
                 var endTime = new DateTime(calendar.Year, calendar.Month, day.DayNro, 23, 59, 0, DateTimeKind.Utc);
                 var dc      = new DjangoTimeEntry()
                 {
                     CompanyID = calendar.CompanyId, Start = startTime.Value, End = endTime, Used = true
                 };
                 startTime = null;
                 yield return(dc);
             }
         }
     }
 }
        private void FillReserved(DjangoTimeEntry reserved, ResourceCalendar calendar)
        {
            var dayNro   = reserved.Start.Day;
            var beginDay = new DateTime(reserved.Start.Year, reserved.Start.Month, reserved.Start.Day);
            var day      = calendar.Days.First(row => row.DayNro == dayNro);
            int startMin = (int)((reserved.Start - beginDay).TotalMinutes);
            int endMin   = (int)((reserved.End - beginDay).TotalMinutes);

            foreach (var res in day.Resources)
            {
                foreach (var ts in res.Timeslots)
                {
                    if (ts.Minutes >= startMin && ts.Minutes < endMin)
                    {
                        ts.IsSelected = true;
                    }
                }
            }
        }
Beispiel #7
0
        private void InitializeData()
        {
            #region Initialize users

            Resource davids = new Resource {
                Name = "David Smith", EmailAddress = "*****@*****.**", Id = "davids"
            };
            Resource bobbyj = new Resource {
                Name = "Bobby Jones", EmailAddress = "*****@*****.**", Id = "bobbyj"
            };
            Resource jonathanb = new Resource {
                Name = "Jonathan Barclay", EmailAddress = "*****@*****.**", Id = "jonathanb"
            };
            Resource barbarab = new Resource {
                Name = "Barbara Bailey", EmailAddress = "*****@*****.**", Id = "barbarab"
            };
            Resource maryh = new Resource {
                Name = "Mary Hernandez", EmailAddress = "*****@*****.**", Id = "maryh"
            };
            Resource conferenceRoomA = new Resource {
                Name = ResourceStrings.ConferenceRoomA_Text, EmailAddress = "*****@*****.**", Id = "conferenceRoomA"
            };
            Resource conferenceRoomB = new Resource {
                Name = ResourceStrings.ConferenceRoomB_Text, EmailAddress = "*****@*****.**", Id = "conferenceRoomB"
            };

            Resources.Add(davids);
            Resources.Add(bobbyj);
            Resources.Add(jonathanb);
            Resources.Add(barbarab);
            Resources.Add(maryh);
            Resources.Add(conferenceRoomA);
            Resources.Add(conferenceRoomB);

            #endregion // Initialize users

            #region Initialize calendars

            ResourceCalendar davidsCalendar = new ResourceCalendar {
                Name = ResourceStrings.Calendar_Text, OwningResourceId = "davids", Id = "davidsCalendar"
            };
            ResourceCalendar bobbyjCalendar = new ResourceCalendar {
                Name = "Bobby Jones", OwningResourceId = "bobbyj", Id = "bobbyjCalendar"
            };
            ResourceCalendar jonathanbCalendar = new ResourceCalendar {
                Name = "Jonathan Barclay", OwningResourceId = "jonathanb", Id = "jonathanbCalendar"
            };
            ResourceCalendar barbarabCalendar = new ResourceCalendar {
                Name = "Barbara Bailey", OwningResourceId = "barbarab", Id = "barbarabCalendar"
            };
            ResourceCalendar maryhCalendar = new ResourceCalendar {
                Name = "Mary Hernandez", OwningResourceId = "maryh", Id = "maryhCalendar"
            };

            ResourceCalendar conferenceRoomCalendar1 = new ResourceCalendar {
                Name = ResourceStrings.ConferenceRoomA_Text, Description = "A", OwningResourceId = "conferenceRoomA", Id = "confRoomACalendar"
            };
            ResourceCalendar conferenceRoomCalendar2 = new ResourceCalendar {
                Name = ResourceStrings.ConferenceRoomB_Text, Description = "B", OwningResourceId = "conferenceRoomB", Id = "confRoomBCalendar"
            };

            ResourceCalendars.Add(davidsCalendar);
            ResourceCalendars.Add(bobbyjCalendar);
            ResourceCalendars.Add(jonathanbCalendar);
            ResourceCalendars.Add(barbarabCalendar);
            ResourceCalendars.Add(maryhCalendar);
            ResourceCalendars.Add(conferenceRoomCalendar1);
            ResourceCalendars.Add(conferenceRoomCalendar2);

            var dateCreator = new DateCreator(DateTime.Now);

            #endregion //Initialize calendars

            Appointment davidsProductIncrementReview = new Appointment()
            {
                Id = "ProductIncrementReview",
                IsMeetingRequest = true,
                Location         = ServiceResources.Appt_DavidsProductIncrementReview_Location,
                OwningResourceId = "davids",
                OwningCalendarId = "davidsCalendar",
                Subject          = ServiceResources.Appt_DavidsProductIncrementReview_Subject,
            };
            davidsProductIncrementReview.To = new ObservableCollection <string> {
                "*****@*****.**", "*****@*****.**", "*****@*****.**"
            };

            davidsProductIncrementReview.Description = IgOutlook.Services.Properties.ServiceResources.ProductIncrementReviewDescription;
            davidsProductIncrementReview.Start       = dateCreator.CreateDate(0, 9, 0);
            davidsProductIncrementReview.End         = dateCreator.CreateDate(0, 10, 30);
            Appointments.Add(davidsProductIncrementReview);

            GenerateAssociatedAppointments(davidsProductIncrementReview);

            Appointment davidsLuchWithSara = new Appointment()
            {
                Id = "davidsLuchWithSara",
                IsMeetingRequest = false,
                OwningResourceId = "davids",
                OwningCalendarId = "davidsCalendar",
                Subject          = ServiceResources.Appt_DavidsLuchWithSara_Subject
            };
            davidsLuchWithSara.Start = dateCreator.CreateDate(1, 12, 0);
            davidsLuchWithSara.End   = dateCreator.CreateDate(1, 13, 0);

            Appointments.Add(davidsLuchWithSara);


            Appointment davidsCallJohn = new Appointment()
            {
                Id = "davidsCallJohn",
                IsMeetingRequest = false,
                OwningResourceId = "davids",
                OwningCalendarId = "davidsCalendar",
                Subject          = ServiceResources.Appt_DavidsCallJohn_Subject
            };
            davidsCallJohn.Start = dateCreator.CreateDate(2, 15, 0);
            davidsCallJohn.End   = dateCreator.CreateDate(2, 15, 30);

            Appointments.Add(davidsCallJohn);

            foreach (Appointment appt in Appointments)
            {
                appt.StartTimeZoneId = TimeZoneInfo.Local.Id;
                appt.EndTimeZoneId   = TimeZoneInfo.Local.Id;
            }
        }
        public async Task <ResourceCalendar> SaveResourceCalendar([FromBody] ResourceCalendar calendar)
        {
            await UpdateCalendar(calendar);

            return(await GetResourceCalendar(calendar.CompanyId, calendar.Year, calendar.Month));
        }