/// <summary> /// Fills calendar week template. /// </summary> /// <param name="calendar">Calendar.</param> private void FillWeekTemplate(T calendar) { var query = new EntitySchemaQuery(_userConnection.EntitySchemaManager, "DayInCalendar"); string dayOfWeekCode = query.AddColumn("DayOfWeek.Code").Name; string dayOfWeekNonWorking = query.AddColumn("DayType.NonWorking").Name; string dayType = query.AddColumn("DayType.Id").Name; var intervalToColumn = query.AddColumn("[WorkingTimeInterval:DayInCalendar].To"); intervalToColumn.OrderByAsc(0); var intervalFromColumn = query.AddColumn("[WorkingTimeInterval:DayInCalendar].From"); intervalFromColumn.OrderByAsc(1); string dayOfWeekFromPeriod = intervalFromColumn.Name; string dayOfWeekToPeriod = intervalToColumn.Name; query.Filters.Add( query.CreateFilterWithParameters(FilterComparisonType.Equal, "Calendar", calendar.Id)); EntityCollection collection = query.GetEntityCollection(_userConnection); foreach (var record in collection) { var start = record.GetTypedColumnValue <DateTime>(dayOfWeekFromPeriod); var end = record.GetTypedColumnValue <DateTime>(dayOfWeekToPeriod); var dayCode = record.GetTypedColumnValue <string>(dayOfWeekCode); var dayOfWeek = (DayOfWeek)Enum.Parse(typeof(DayOfWeek), dayCode); ICalendarDay day = calendar.WeekTemplate.FirstOrDefault(item => item.DayOfWeek == dayOfWeek); if (day == default(ICalendarDay)) { var isNonWorking = record.GetTypedColumnValue <bool>(dayOfWeekNonWorking); var dayTypeUId = record.GetTypedColumnValue <Guid>(dayType); day = new CalendarDay { DayOfWeek = dayOfWeek, IsNonWorking = isNonWorking, DayTypeUId = dayTypeUId }; calendar.WeekTemplate.Add(day); } if (!day.IsNonWorking) { day.WorkingIntervals.Add(new WorkingInterval(start.TimeOfDay, end.TimeOfDay)); } } }
/// <summary> /// Fills calendar day offs. /// </summary> /// <param name="calendar">Calendar.</param> private void FillDayOffInfo(T calendar) { var query = new EntitySchemaQuery(_userConnection.EntitySchemaManager, "DayOff"); string date = query.AddColumn("Date").Name; string dayType = query.AddColumn("DayType.Id").Name; string dayOffNonWorking = query.AddColumn("DayType.NonWorking").Name; string dayOffFromPeriod = query.AddColumn("[WorkingTimeInterval:DayOff].From").Name; string dayOffToPeriod = query.AddColumn("[WorkingTimeInterval:DayOff].To").Name; query.Filters.Add(query.CreateFilterWithParameters(FilterComparisonType.Equal, "Calendar", calendar.Id)); EntityCollection collection = query.GetEntityCollection(_userConnection); foreach (var record in collection) { var start = record.GetTypedColumnValue <DateTime>(dayOffFromPeriod); var end = record.GetTypedColumnValue <DateTime>(dayOffToPeriod); var dayTypeId = record.GetTypedColumnValue <Guid>(dayType); var isNonWorking = record.GetTypedColumnValue <bool>(dayOffNonWorking); if (!isNonWorking && (start == default(DateTime) || end == default(DateTime))) { continue; } var dayDate = record.GetTypedColumnValue <DateTime>(date); ICalendarDay dayOff = calendar.DayOffs.FirstOrDefault(item => item.CalendarDateTime.Date == dayDate); if (dayOff == default(ICalendarDay)) { dayOff = new CalendarDay { CalendarDateTime = dayDate, IsNonWorking = isNonWorking, DayTypeUId = dayTypeId, DayOfWeek = dayDate.DayOfWeek }; calendar.DayOffs.Add(dayOff); } if (!dayOff.IsNonWorking) { dayOff.WorkingIntervals.Add(new WorkingInterval(start.TimeOfDay, end.TimeOfDay)); } } }