public async Task <ActionResponse <EducationProgramDto> > Insert(EducationProgramDto entityDto) { try { using (TransactionScope scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled)) { List <ClassTypeDto> classTypes = entityDto.ClassTypes != null ? new List <ClassTypeDto>(entityDto.ClassTypes) : new List <ClassTypeDto>(); List <int> classTypeIds = entityDto.ClassTypeIds != null ? new List <int>(entityDto.ClassTypeIds) : new List <int>(); List <FileDto> files = entityDto.Files != null ? new List <FileDto>(entityDto.Files) : new List <FileDto>(); var entityToAdd = mapper.Map <EducationProgramDto, EducationProgram>(entityDto); unitOfWork.GetGenericRepository <EducationProgram>().Add(entityToAdd); unitOfWork.Save(); mapper.Map(entityToAdd, entityDto); entityDto.ClassTypeIds = classTypeIds; if ((await ModifyClassTypes(entityDto)) .IsNotSuccess(out ActionResponse <EducationProgramDto> ctResponse, out entityDto)) { return(ctResponse); } entityDto.Files = files; if ((await ModifyFiles(entityDto)) .IsNotSuccess(out ActionResponse <EducationProgramDto> fileResponse, out entityDto)) { return(fileResponse); } entityDto.Id = entityToAdd.Id; scope.Complete(); } if ((await GetById(entityDto.Id.Value)) .IsNotSuccess(out ActionResponse <EducationProgramDto> response, out entityDto)) { return(response); } return(await ActionResponse <EducationProgramDto> .ReturnSuccess(entityDto)); } catch (Exception) { return(await ActionResponse <EducationProgramDto> .ReturnError("Greška prilikom upisa programa.")); } finally { await cacheService.RefreshCache <List <EducationProgramDto> >(); } }
public async Task <ActionResponse <EducationProgramDto> > ModifyClassTypes(EducationProgramDto entityDto) { try { var entity = unitOfWork.GetGenericRepository <EducationProgram>() .FindBy(e => e.Id == entityDto.Id, includeProperties: "EducationProgramClassTypes.ClassType"); var currentClassTypes = entity.EducationProgramClassTypes.ToList(); var newClassTypes = entityDto.ClassTypeIds; var classTypesToRemove = currentClassTypes .Where(cet => !newClassTypes.Contains(cet.Id)) .Select(sf => new EducationProgramClassTypeDto { Id = sf.Id, ClassTypeId = sf.ClassTypeId, EducationProgramId = entityDto.Id }).ToList(); var classTypesToAdd = newClassTypes .Where(nt => !currentClassTypes.Select(cct => cct.Id).Contains(nt)) .Select(sf => new EducationProgramClassTypeDto { ClassTypeId = sf, EducationProgramId = entityDto.Id }).ToList(); if ((await RemoveClassTypes(classTypesToRemove)) .IsNotSuccess(out ActionResponse <List <EducationProgramClassTypeDto> > removeResponse)) { return(await ActionResponse <EducationProgramDto> .ReturnError("Neuspješno micanje tipova nastave s edukacijskog programa.")); } if ((await AddClassTypes(classTypesToAdd)).IsNotSuccess(out ActionResponse <List <EducationProgramClassTypeDto> > addResponse, out classTypesToAdd)) { return(await ActionResponse <EducationProgramDto> .ReturnError("Neuspješno dodavanje tipova nastave edukacijskom programu.")); } return(await ActionResponse <EducationProgramDto> .ReturnSuccess(entityDto, "Uspješno izmijenjeni tipovi nastave edukacijskog programa.")); } catch (Exception) { return(await ActionResponse <EducationProgramDto> .ReturnError("Greška prilikom izmjene tipova nastave edukacijskog programa.")); } }
public async Task <ActionResponse <EducationProgramDto> > ModifyFiles(EducationProgramDto entityDto) { try { var entity = unitOfWork.GetGenericRepository <EducationProgram>() .FindBy(e => e.Id == entityDto.Id, includeProperties: "Files.File"); var currentFiles = mapper.Map <List <EducationProgramFile>, List <EducationProgramFileDto> >(entity.Files.ToList()); var newFiles = entityDto.Files; var filesToRemove = currentFiles .Where(cet => !newFiles.Select(f => f.Id).Contains(cet.FileId)).ToList(); var filesToAdd = newFiles .Where(nt => !currentFiles.Select(uec => uec.FileId).Contains(nt.Id)) .Select(sf => new EducationProgramFileDto { FileId = sf.Id, EducationProgramId = entityDto.Id }) .ToList(); if ((await RemoveFiles(filesToRemove)) .IsNotSuccess(out ActionResponse <List <EducationProgramFileDto> > removeResponse)) { return(await ActionResponse <EducationProgramDto> .ReturnError("Neuspješno micanje dokumenata iz programa.")); } if ((await AddFiles(filesToAdd)).IsNotSuccess(out ActionResponse <List <EducationProgramFileDto> > addResponse, out filesToAdd)) { return(await ActionResponse <EducationProgramDto> .ReturnError("Neuspješno dodavanje dokumenata programu.")); } return(await ActionResponse <EducationProgramDto> .ReturnSuccess(entityDto, "Uspješno izmijenjeni dokumenti programa.")); } catch (Exception) { return(await ActionResponse <EducationProgramDto> .ReturnError("Greška prilikom izmjene dokumenata programa.")); } }
public async Task <ActionResponse <EducationProgramDto> > Copy([FromBody] EducationProgramDto request) { return(await educationProgramService.Copy(request)); }
public async Task <ActionResponse <EducationProgramDto> > Copy(EducationProgramDto entityDto) { try { var response = await ActionResponse <EducationProgramDto> .ReturnSuccess(entityDto, "Program uspješno kopiran."); var entityDtoNewData = new EducationProgramDto { Name = entityDto.Name, Version = entityDto.Version }; if ((await GetById(entityDto.Id.Value)) .IsNotSuccess(out response, out EducationProgramDto oldEntityDto)) { return(response); } mapper.Map(oldEntityDto, entityDto); entityDto.Id = null; entityDto.Name = entityDtoNewData.Name; entityDto.Version = entityDtoNewData.Version; Dictionary <int, int> subjectDictionary = new Dictionary <int, int>(); Dictionary <int, int> themeDictionary = new Dictionary <int, int>(); var subjectList = new List <SubjectDto>(entityDto.Subjects); var plan = entityDto.Plan; entityDto.Subjects = null; entityDto.Plan = null; using (TransactionScope scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled)) { if ((await Insert(entityDto)).IsNotSuccess(out response, out entityDto)) { return(response); } if (subjectList != null && subjectList.Count > 0) { subjectList.ForEach(async s => { var oldSubjectId = s.Id; s.Id = null; s.EducationProgramId = entityDto.Id; var themesList = new List <ThemeDto>(); if (s.Themes != null && s.Themes.Count > 0) { themesList = new List <ThemeDto>(s.Themes); } if ((await subjectService.Insert(s)) .IsNotSuccess(out ActionResponse <SubjectDto> subjectResponse, out s)) { response = await ActionResponse <EducationProgramDto> .ReturnError(subjectResponse.Message); return; } subjectDictionary.Add(oldSubjectId.Value, s.Id.Value); themesList.ForEach(async t => { var oldThemeId = t.Id; t.Id = null; t.SubjectId = s.Id; if ((await themeService.Insert(t)) .IsNotSuccess(out ActionResponse <ThemeDto> themeResponse, out t)) { response = await ActionResponse <EducationProgramDto> .ReturnError(themeResponse.Message); return; } themeDictionary.Add(oldThemeId.Value, t.Id.Value); }); if (response.IsNotSuccess()) { return; } }); if (response.IsNotSuccess()) { scope.Dispose(); return(response); } } if (plan != null) { if ((await planService.GetById(plan.Id.Value)) .IsNotSuccess(out ActionResponse <PlanDto> planResponse, out plan)) { response = await ActionResponse <EducationProgramDto> .ReturnError(planResponse.Message); scope.Dispose(); return(response); } plan.Id = null; plan.EducationProgramId = entityDto.Id; if (plan.PlanDays != null && plan.PlanDays.Count > 0) { plan.PlanDays.ForEach(pd => { pd.Id = null; pd.PlanId = null; if (pd.PlanDaySubjects != null && pd.PlanDaySubjects.Count > 0) { pd.PlanDaySubjects.ForEach(pds => { pds.Id = null; pds.PlanDayId = null; pds.SubjectId = subjectDictionary[pds.SubjectId.Value]; if (pds.PlanDaySubjectThemes != null && pds.PlanDaySubjectThemes.Count > 0) { pds.PlanDaySubjectThemes.ForEach(pdst => { pdst.Id = null; pdst.PlanDaySubjectId = null; pdst.ThemeId = themeDictionary[pdst.ThemeId.Value]; }); } }); } }); } if ((await planService.Insert(plan)).IsNotSuccess(out planResponse, out plan)) { response = await ActionResponse <EducationProgramDto> .ReturnError(planResponse.Message); scope.Dispose(); return(response); } } scope.Complete(); } return(response); } catch { return(await ActionResponse <EducationProgramDto> .ReturnError("Greška prilikom kopiranja programa.")); } finally { await cacheService.RefreshCache <List <EducationProgramDto> >(); } }