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