Ejemplo n.º 1
0
        /// <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));
                }
            }
        }
Ejemplo n.º 2
0
        /// <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));
                }
            }
        }