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