public TestTemplateDTO GetById(int id) { var template = unitOfWork.TestTemplates.Get(id); if (template == null) { throw new EntityNotFoundException <TestTemplate>(id); } var templateDto = mapper.Map <TestTemplate, TestTemplateDTO>(template); foreach (var level in templateDto.Levels) { level.ValidTaskCount = taskSource.Filter(level.Filter).Count(); } return(templateDto); }
public void BindToTemplate(TestDTO test, int?testTemplateId) { if (test == null) { throw new ArgumentNullException(nameof(test)); } if (!testTemplateId.HasValue) { foreach (var levelToRemove in test.Levels) { levelToRemove.TemplateDeleted = true; } return; } var template = unitOfWork.TestTemplates.Get(testTemplateId.Value); if (template == null) { throw new EntityNotFoundException <TestTemplateDTO>(); } test.TestTemplateId = testTemplateId; if (string.IsNullOrEmpty(test.Title)) { var prevTestsCount = unitOfWork.Tests .Filter(v => v.TestTemplateId == testTemplateId) .Count(); test.Title = "Test #" + (prevTestsCount + 1); } foreach (var templateLevel in template.Levels) { var templateLevelDTO = mapper.Map <TestTemplateLevel, TestTemplateLevelDTO>(templateLevel); var availableTasks = taskSource.Filter(templateLevelDTO.Filter); var existedLevel = test.Levels .FirstOrDefault(l => l.TestTemplateLevelId == templateLevel.Id); if (existedLevel == null) { test.Levels.Add(new TestLevelDTO() { Description = templateLevel.Description, TestTemplateLevelId = templateLevel.Id, RequiredTasksCount = templateLevel.TasksCount, TestId = test.Id, AvailableTasks = availableTasks.ToList() }); } else { existedLevel.RequiredTasksCount = templateLevel.TasksCount; existedLevel.AvailableTasks = availableTasks.ToList(); existedLevel.TemplateModified = existedLevel.Tasks .Select(t => t.Id) .Except(availableTasks.Select(t => t.Id)) .Any(); } } var levelsToRemove = test.Levels .Where(l => template.Levels.All(tl => tl.Id != l.TestTemplateLevelId)); foreach (var levelToRemove in levelsToRemove) { levelToRemove.TemplateDeleted = true; } }