public async Task <SyylabusForDepartmentDTo> CreateSyllabus(CreateSyllabusRequest request) { try { Check.NotNullOrEmpty(request, "request"); var users = _userRepository.GetTeacherConstraintWithLessons(request.DepartmentId); var locations = _locationRepository.GetFacultyLocations(request.FacultyId); foreach (var item in users) { var userLessons = _lessonRepository.GetLessonsForTeacher(item.UserId); item.Lessons = userLessons.Map <List <LessonDto> >(); } var lessons = _lessonRepository.GetDepartmentLessons(request.FacultyId, request.DepartmentId, request.PeriodType); var syllabusLessons = lessons.Map <List <SyllabusForLessonWithGroupListDto> >(); int toplamDersSaati = 0; foreach (var sls in syllabusLessons) { foreach (var hrp in sls.LessonGroups) { toplamDersSaati = toplamDersSaati + sls.WeeklyHour; } } toplamDersSaati = toplamDersSaati * 2; var syllabus = SyllabusDomainFactory.Create(request); while (syllabus.WeeklyHour != toplamDersSaati) { syllabus = SyllabusDomainFactory.Create(request); syllabus.AssignToLesson(lessons, request, EducationType.IOgretim); syllabus.AssignToLesson(lessons, request, EducationType.IIOgretim); syllabus.UnitLessons.RemoveAll(x => x.LessonId == 0); syllabus.HocaAta(users); syllabus.UnitLessons.RemoveAll(x => x.LessonId > 0 && x.UserId == 0); syllabus.DerslikAta(locations); syllabus.UnitLessons.RemoveAll(x => x.LessonId > 0 && x.UserId > 0 && x.LocationId == 0); syllabus.AddWeeklyHour(syllabus.UnitLessons.Count); if (syllabus.WeeklyHour != toplamDersSaati) { } } var syllabusEntity = syllabus.Map <SyllabusEntity>(); await _syllabusRepository.AddAsync(syllabusEntity); await _databaseUnitOfWork.SaveChangesAsync(); var result = await GetSyllabus(syllabusEntity.SyllabusId).ConfigureAwait(false); return(result); } catch (Exception ex) { _databaseUnitOfWork.Rollback(); throw; } }