public void Save(IEnumerable<SubjectViewModel> subjects, Semester semester)
        {
            var originalSubjects = subjectService.All().Where(s => s.SemesterId == semester.Id);

            var modification = CollectionModificationResolver.Resolve(subjects.Where(s => IdChecker(s.Id)), originalSubjects,
                                                                      (income, viewModel) =>
                                                                      income.Id == long.Parse(viewModel.Id));

            foreach (var item in modification.Modified)
            {
                SaveSubject(item.Key, item.Value);
            }

            AddNewSubjects(semester, subjects.Where(s => !IdChecker(s.Id)));
            AddNewSubjects(semester, modification.Added);

            foreach (var subject in modification.Deleted)
            {
                subjectService.Delete(subject);
            }
        }
        public void Save(IEnumerable<SemesterViewModel> semesters, Curriculum curriculum)
        {
            var originalSemesters = semesterService.All().Where(s => s.CurriculumId == curriculum.Id);
            var modification = CollectionModificationResolver.Resolve(semesters, originalSemesters,
                (income, viewModel) => income.Id == viewModel.Id);

            foreach (var item in modification.Modified)
            {
                SaveSemester(item.Key, item.Value);
            }

            foreach (var item in modification.Added)
            {
                var semester = new Semester { Id = item.Id, Curriculum = curriculum };
                SaveSemester(item, semester);
            }

            foreach (var semester in modification.Deleted)
            {
                subjectManagementService.Delete(semester.Subjects);
                semesterService.Delete(semester);
            }
        }
 private void SaveSemester(SemesterViewModel viewModel, Semester semester)
 {
     semesterService.Save(semester);
     Mapper.Map<SemesterViewModel, Semester>(viewModel, semester);
     subjectManagementService.Save(viewModel.Subjects, semester);
 }
        private void AddNewSubjects(Semester semester, IEnumerable<SubjectViewModel> subjectViewModels)
        {
            foreach (var item in subjectViewModels)
            {
                var subject = new Subject();
                if (IdChecker(item.Id))
                {
                    var dbSubject = subjectService.CreateOrOpen(long.Parse(item.Id));
                    Mapper.Map<Subject, Subject>(dbSubject, subject);
                    subject.Id = 0;
                }
                else
                {
                    subject.Id = 0;
                    subject.Name = SubjectIdPrefixHelper.Trim(item.Id);
                }

                subject.Semester = semester;
                SaveSubject(item, subject);
            }
        }