コード例 #1
0
        public async Task <ResourceCalendarDto> GetResourceCalendar(int resourceId)
        {
            var resource = await context.Resources
                           .AsNoTracking()
                           .Include(r => r.OutOfServices)
                           .Include(r => r.ResourceShifts)
                           .ThenInclude(rs => rs.JobTask)
                           .SingleOrDefaultAsync(r => r.Id == resourceId);

            var appointments = new List <Appointment>();

            appointments.AddRange(resource.OutOfServices.Select(o => new Appointment(o)));
            appointments.AddRange(resource.ResourceShifts.Select(rs => new Appointment(rs.JobTask)));
            Conflicts.GetConflicts(appointments);

            var resourceDto = new ResourceCalendarDto
            {
                Id           = resource.Id,
                Name         = resource.Name,
                IsActive     = resource.IsActive,
                Description  = resource.Description,
                Appointments = appointments
            };

            return(resourceDto);
        }
コード例 #2
0
        public async Task <IEnumerable <ResourceCalendarDto> > GetResourcesCalendar(DateTimeRange period)
        {
            var outOfServices = await context.ResourceOutOfService
                                .AsNoTracking()
                                .Where(o => o.Period.Start < period.End && period.Start < o.Period.End)
                                .ToListAsync();

            var resourceShifts = await context.ResourceShifts
                                 .AsNoTracking()
                                 .Include(rs => rs.JobTask)
                                 .Where(rs => rs.JobTask.TaskPeriod.Start < period.End && period.Start < rs.JobTask.TaskPeriod.End)
                                 .ToListAsync();

            var resources = await context.Resources
                            .AsNoTracking()
                            .Where(r => r.IsActive)
                            .ToListAsync();

            var calendar = new List <ResourceCalendarDto>();

            foreach (var resource in resources)
            {
                var appointments = new List <Appointment>();

                var resourceOutOfServices = outOfServices
                                            .Where(o => o.ResourceId == resource.Id)
                                            .Select(o => new Appointment(o));

                var resourceJobTasks = resourceShifts.Where(rs => rs.ResourceId == resource.Id)
                                       .Select(rs => new Appointment(rs.JobTask));

                appointments.AddRange(resourceOutOfServices);
                appointments.AddRange(resourceJobTasks);
                Conflicts.GetConflicts(appointments);

                var resourceDto = new ResourceCalendarDto
                {
                    Id           = resource.Id,
                    Description  = resource.Description,
                    Name         = resource.Name,
                    IsActive     = resource.IsActive,
                    Appointments = appointments
                };

                calendar.Add(resourceDto);
            }

            return(calendar);
        }