public ActionResult AddCriteria(int projectId, int?parentId, string name, string info) { AHPEntities4 db = new AHPEntities4(); Kriterij kriterij = new Kriterij { naziv = name, opis = info, projekt = projectId, idRoditelja = parentId, konzistentno = true, obrisan = false }; var kriteriji = db.Set <Kriterij>(); kriteriji.Add(kriterij); if (db.SaveChanges() != 0) { List <Alternativa> alternative = db.Alternativas.Where(x => (x.projekt == projectId && x.obrisana != true)).ToList(); foreach (Alternativa alternativa in alternative) { AddOrChangeAlternativesValuesForCriteria(alternativa, kriterij, null); } Projekt projekt = db.Projekts.Where(x => x.id == projectId).SingleOrDefault(); projekt.konzistentno = false; if (parentId != null) { Kriterij roditelj = db.Kriterijs.Where(x => x.id == parentId).SingleOrDefault(); roditelj.konzistentno = false; } db.SaveChanges(); DBOperationsHelper.AddNewCriteriaComparisons(projectId); UpdateProjectsCriteriaConsistency(projectId); UpdateProjectsAlternativesConsistency(projectId); return(Redirect(Url.Action("Index", "Project", new { id = projectId }))); } return(Redirect(Url.Action("Index", "Project", new { id = projectId }))); }
public void UpdateProjectsAlternativesConsistency(int id) { AHPEntities4 db = new AHPEntities4(); List <Kriterij> kriteriji = db.Kriterijs.Where(x => (x.projekt == id && x.obrisan != true && x.Kriterij2.obrisan != true && x.Kriterij1.Count() == 0)).ToList(); List <Alternativa> alternative = db.Alternativas.Where(x => (x.projekt == id && x.obrisana != true)).ToList(); List <UsporedbaAlternativaPremaKriteriju> usporedbe = db.UsporedbaAlternativaPremaKriterijus.Where(x => (x.Kriterij1.projekt == id && x.Alternativa.obrisana != true && x.Alternativa3.obrisana != true)).ToList(); foreach (var kriterij in kriteriji) { int a = 0; List <UsporedbaAlternativaPremaKriteriju> usporedbeAlternativaPremaKriteriju = usporedbe.Where(x => x.kriterij == kriterij.id).ToList(); foreach (var alternativa in alternative) { int broj = usporedbe.Where(x => (x.kriterij == kriterij.id && (x.alternativa1 == alternativa.id || x.alternativa2 == alternativa.id))).Count(); if (broj != alternative.Count() - 1) { kriterij.konzistentneAlternative = false; db.SaveChanges(); a = 1; break; } } if (a == 1) { foreach (var alternativa1 in alternative) { alternativa1.vrijednost = null; db.SaveChanges(); } } else if (a == 0) { Tuple <bool, List <double?> > konzistentnostIVrijednost = DBOperationsHelper.GetAlternativesConsistencyFactorAndValues(alternative, usporedbeAlternativaPremaKriteriju, kriterij.id); for (int i = 0; i < alternative.Count(); i++) { if (konzistentnostIVrijednost.Item2 != null) { int b = alternative[i].id; List <AlternativaKriterij> alternativaKriterij = db.AlternativaKriterijs.Where(x => x.alternativa == b && x.kriterij == kriterij.id).ToList(); if (alternativaKriterij != null) { if (alternativaKriterij[0].izracunataVrijednost != konzistentnostIVrijednost.Item2[i]) { alternativaKriterij[0].izracunataVrijednost = konzistentnostIVrijednost.Item2[i].Value; db.SaveChanges(); } } else { AlternativaKriterij alternativariterijNova = new AlternativaKriterij(); alternativariterijNova.alternativa = alternative[i].id; alternativariterijNova.kriterij = kriterij.id; alternativariterijNova.izracunataVrijednost = konzistentnostIVrijednost.Item2[i].Value; var alternativeKriteriji = db.Set <AlternativaKriterij>(); alternativeKriteriji.Add(alternativariterijNova); db.SaveChanges(); } } else { if (alternative[i].vrijednost != null) { alternative[i].vrijednost = null; db.SaveChanges(); } } } kriterij.konzistentneAlternative = konzistentnostIVrijednost.Item1; db.SaveChanges(); } } }
public void UpdateProjectsCriteriaConsistency(int id) { AHPEntities4 db = new AHPEntities4(); int maxLevel = 0; List <Kriterij> listaRoditelja = db.Kriterijs.Where(x => x.projekt == id && x.Kriterij2.obrisan != true).Select(x => x.Kriterij2).Distinct().ToList(); List <CriteriaParentsGroupedByLevelsViewModel> listOfCriteriaParentsGroupedByLevels = new List <CriteriaParentsGroupedByLevelsViewModel>(); foreach (Kriterij roditelj in listaRoditelja) { int razina = 0; CriteriaParentsGroupedByLevelsViewModel criteriaParentsGroupedByLevelsViewModel = null; if (roditelj == null) { Kriterij kr = new Kriterij(); kr.Kriterij1 = db.Kriterijs.Where(x => (x.Kriterij2 == null && x.projekt == id)).ToList(); criteriaParentsGroupedByLevelsViewModel = new CriteriaParentsGroupedByLevelsViewModel(razina, kr); } else { Kriterij rod = roditelj.Kriterij2; razina++; if (rod == null) { criteriaParentsGroupedByLevelsViewModel = new CriteriaParentsGroupedByLevelsViewModel(razina, roditelj); if (razina > maxLevel) { maxLevel = razina; } } else { while (rod != null) { razina++; rod = rod.Kriterij2; if (rod == null) { criteriaParentsGroupedByLevelsViewModel = new CriteriaParentsGroupedByLevelsViewModel(razina, roditelj); if (razina > maxLevel) { maxLevel = razina; } break; } } } } listOfCriteriaParentsGroupedByLevels.Add(criteriaParentsGroupedByLevelsViewModel); } int lev = maxLevel; while (lev >= 0) { List <Kriterij> listaRoditeljaPremaLevelima = listOfCriteriaParentsGroupedByLevels.Where(x => x.Level == lev).Select(x => x.Roditelj).ToList(); foreach (Kriterij roditelj in listaRoditeljaPremaLevelima) { List <Kriterij> listaKriterijaRoditelja = roditelj.Kriterij1.Where(x => x.obrisan != true).ToList(); Tuple <bool, List <double?> > konzistentnostIVrijednostKriterija = DBOperationsHelper.GetConsistencyFactorAndCriteriaValues(listaKriterijaRoditelja, roditelj.id, id); if (roditelj.id == 0) { Projekt projekt = db.Projekts.Where(x => x.id == id).SingleOrDefault(); if (projekt.konzistentno != konzistentnostIVrijednostKriterija.Item1) { projekt.konzistentno = konzistentnostIVrijednostKriterija.Item1; db.SaveChanges(); } } else { Kriterij kriterijZaUpdate = db.Kriterijs.Where(x => x.id == roditelj.id).SingleOrDefault(); if (kriterijZaUpdate.konzistentno != konzistentnostIVrijednostKriterija.Item1) { kriterijZaUpdate.konzistentno = konzistentnostIVrijednostKriterija.Item1; db.SaveChanges(); } } for (int i = 0; i < listaKriterijaRoditelja.Count(); i++) { if (konzistentnostIVrijednostKriterija.Item2 != null) { if (listaKriterijaRoditelja[i].vrijednost != konzistentnostIVrijednostKriterija.Item2[i]) { listaKriterijaRoditelja[i].vrijednost = konzistentnostIVrijednostKriterija.Item2[i].Value; db.SaveChanges(); } } else { if (listaKriterijaRoditelja[i].vrijednost != null) { listaKriterijaRoditelja[i].vrijednost = null; db.SaveChanges(); } } } } lev--; } }