// GET: Evaluation public ActionResult Index(int id, int?kriterij) { AHPEntities4 db = new AHPEntities4(); List <UsporedbaKriterija> criteriaComparison = new List <UsporedbaKriterija>(); Projekt project = db.Projekts.Where(x => x.id == id).SingleOrDefault(); Kriterij parent = null; if (kriterij != null) { parent = db.Kriterijs.Where(x => x.id == kriterij).SingleOrDefault(); foreach (Kriterij podkriterij in parent.Kriterij1.Where(x => x.obrisan != true).ToList()) { List <UsporedbaKriterija> a = podkriterij.UsporedbaKriterijas.Where(x => (x.Kriterij.obrisan != true && x.Kriterij3.obrisan != true)).ToList(); //Je li dovoljno jednostrano ili je potrebno obostrano?? ispitati //List<UsporedbaKriterija> b = podkriterij.UsporedbaKriterijas1.Where(x => (x.Kriterij.obrisan != true && x.Kriterij3.obrisan != true)).ToList(); criteriaComparison.AddRange(a); } } else { criteriaComparison = db.UsporedbaKriterijas.Where(x => (x.Kriterij.Projekt1.id == id && x.Kriterij3.Projekt1.id == id && x.Kriterij.Kriterij2 == null && x.Kriterij3.Kriterij2 == null && x.Kriterij.obrisan != true && x.Kriterij3.obrisan != true)).ToList(); } EvaluationCriteriaViewModel evaluationCriteriaViewModel = new EvaluationCriteriaViewModel(project, parent, criteriaComparison, GetListOfCriteria(id)); return(View(evaluationCriteriaViewModel)); }
public EvaluationCriteriaViewModel(Projekt project, Kriterij criteria, List <UsporedbaKriterija> criteriaComparison, List <Kriterij> listOfCriteria) { this.Projekt = project; this.KriterijRoditelj = criteria; this.ListaUsporedaba = criteriaComparison; this.ListaKriterija = listOfCriteria; this.ContentHeader = GetContentHeader(project.naziv, criteria.naziv); }
public static Tuple <bool, List <double?> > CreateCriteriaMatrix(List <Kriterij> primljenaListaKriterija, List <UsporedbaKriterija> usporedbe) { int brojKriterija = primljenaListaKriterija.Count(); double?[,] matricaKriterija = new double?[brojKriterija, brojKriterija]; bool matricaPotpuna = true; for (int i = 0; i < primljenaListaKriterija.Count; i++) { Kriterij kriterij1 = new Kriterij(); kriterij1 = primljenaListaKriterija[i]; for (int j = 0; j < primljenaListaKriterija.Count; j++) { if (i == j) { matricaKriterija[i, j] = 1; } else if (i < j) { Kriterij kriterij2 = new Kriterij(); kriterij2 = primljenaListaKriterija[j]; double? vrijednost; UsporedbaKriterija usp = usporedbe.Find(x => (x.kriterij1 == kriterij1.id && x.kriterij2 == kriterij2.id)); if (usp != null) { vrijednost = usp.vrijednost; matricaKriterija[j, i] = vrijednost; matricaKriterija[i, j] = 1 / vrijednost; } else { matricaPotpuna = false; break; } } } } Tuple <bool, List <double?> > konzistentnostIVrijednostiKriterija = null; if (matricaPotpuna) { konzistentnostIVrijednostiKriterija = CheckConsistencyAndGetValues(matricaKriterija); } else { konzistentnostIVrijednostiKriterija = new Tuple <bool, List <double?> >(false, null); } return(konzistentnostIVrijednostiKriterija); }
public ActionResult DeleteCriteria(int id) { AHPEntities4 db = new AHPEntities4(); Kriterij kriterij = db.Kriterijs.Where(x => x.id == id).SingleOrDefault(); kriterij.obrisan = true; if (db.SaveChanges() != 0) { UpdateProjectsCriteriaConsistency(id); UpdateProjectsAlternativesConsistency(id); return(Redirect(Url.Action("Index", "Project", new { id = kriterij.projekt }))); } else { return(null); } }
public PartialViewResult GetCriteriaAlternativesMenuFullPartialView(int id, int kriterij) { AHPEntities4 db = new AHPEntities4(); List <Kriterij> kriteriji = GetListOfCriteria(id); Projekt odabraniProjekt = db.Projekts.Where(x => x.id == id).SingleOrDefault(); List <Alternativa> alternative = db.Alternativas.Where(x => (x.projekt == id && x.obrisana != true)).ToList(); List <AlternativaKriterij> alternativaKriterij = db.AlternativaKriterijs.Where(x => (x.kriterij == kriterij && x.Alternativa1.obrisana != true)).ToList(); Kriterij odabraniKriterij = db.Kriterijs.Where(x => x.id == kriterij).SingleOrDefault(); List <AlternativesComparedViewModel> alternativesComparedViewModel = new List <AlternativesComparedViewModel>(); foreach (var alternativa1 in alternative) { foreach (var alternativa2 in alternative) { if (alternativa1.id != alternativa2.id) { if (alternativesComparedViewModel.Where(x => ((x.Alternativa1.id == alternativa1.id && x.Alternativa2.id == alternativa2.id) || (x.Alternativa2.id == alternativa1.id && x.Alternativa1.id == alternativa2.id))).Count() == 0) { alternativesComparedViewModel.Add(new AlternativesComparedViewModel(alternativa1, alternativa2)); } } } } List <UsporedbaAlternativaPremaKriteriju> usporedbaAlternativaPremaKriteriju = odabraniKriterij.UsporedbaAlternativaPremaKriterijus.Where(x => (x.Kriterij1.id == kriterij)).ToList(); EvaluationAlternativesViewModel evaluationAlternativesViewModel = new EvaluationAlternativesViewModel(); evaluationAlternativesViewModel.Projekt = odabraniProjekt; evaluationAlternativesViewModel.AlternativaKriterij = alternativaKriterij; evaluationAlternativesViewModel.Kriteriji = kriteriji; evaluationAlternativesViewModel.Kriterij = odabraniKriterij; evaluationAlternativesViewModel.Alternative = alternative; evaluationAlternativesViewModel.ListaKombinacijaAlternativa = alternativesComparedViewModel; evaluationAlternativesViewModel.UsporedbaAlternativaPremaKriteriju = usporedbaAlternativaPremaKriteriju; return(PartialView("_CriteriaMenuAlternativesPartial", evaluationAlternativesViewModel)); }
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 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--; } }
public void AddOrChangeAlternativesValuesForCriteria(Alternativa alternativa, Kriterij kriterij, string stvarnaVrijednost) { AHPEntities4 db = new AHPEntities4(); if (alternativa != null && kriterij != null) { AlternativaKriterij alternativaKriterij = db.AlternativaKriterijs.Where(x => (x.alternativa == alternativa.id && x.kriterij == kriterij.id)).SingleOrDefault(); if (alternativaKriterij != null) { alternativaKriterij.stvarnaVrijednost = stvarnaVrijednost; db.SaveChanges(); } else { AlternativaKriterij novaAlternativaKriterij = new AlternativaKriterij(); novaAlternativaKriterij.alternativa = alternativa.id; novaAlternativaKriterij.kriterij = kriterij.id; novaAlternativaKriterij.stvarnaVrijednost = stvarnaVrijednost; var alternativaKriterijList = db.Set <AlternativaKriterij>(); alternativaKriterijList.Add(novaAlternativaKriterij); int a = db.SaveChanges(); } } }
public CriteriaParentsGroupedByLevelsViewModel(int level, Kriterij roditelj) { this.Level = level; this.Roditelj = roditelj; }
static void Main(string[] args) { bool kraj = false; bool nastaviti = true; Executor executor = new Executor(); List <Kriterij> listaKriterija = new List <Kriterij>(); List <Kriterij>[] poljeListaKriterija = new List <Kriterij> [5]; Dictionary <string, double> vrijednostKriterija = new Dictionary <string, double>(); double[,] matricaKriterija; Dictionary <string, Dictionary <string, double> > popisVrijednostiKriterija = new Dictionary <string, Dictionary <string, double> >(); //while (kraj == false) //{ // Console.WriteLine("1. Unos alternative, 2. Unos kriterija, 3. Ispis kriterija, 9. Izlaz"); // switch (Console.ReadLine()) // { // case "1": // Console.WriteLine("---Odabrali ste unos alternative---"); // Console.WriteLine("Naziv alternative: "); // string alternativa = Console.ReadLine(); // executor.DodajAlternativu(alternativa); // break; // case "2": // Console.WriteLine("---Odabrali ste unos kriterija---"); // Console.WriteLine("Naziv kriterija: "); // executor.DodajKriterij(Console.ReadLine(), -1); // break; // case "3": // Console.WriteLine("---Odabrali ste ispis kriterija---"); // listaKriterija = executor.DohvatiListuKriterija(); // for (int i = 0; i < listaKriterija.Count; i++) // { // Kriterij kriterij = new Kriterij(); // kriterij = listaKriterija[i]; // if (kriterij.Roditelj != null) // { // Console.WriteLine(kriterij.Naziv + " --> " + kriterij.Id + " === " + executor.DohvatiKriterijPremaId(kriterij.Roditelj.Id).Naziv); // } // else // { // Console.WriteLine(kriterij.Naziv + " --> " + kriterij.Id + " === " + "'bez roditelja'"); // } // } // while (nastaviti == true) // { // Console.WriteLine("1 ---> Dodati podkriterij"); // Console.WriteLine("2 ---> Nastaviti bez dodavanja podkriterija"); // if (Console.ReadLine() == "1") // { // Console.WriteLine("Unesi naziv podkriterija "); // string nazivPodkriterija = Console.ReadLine(); // Console.WriteLine("Unesi id roditelja "); // int idRoditelja = Convert.ToInt32(Console.ReadLine()); // executor.DohvatiKriterijPremaId(idRoditelja); // executor.DodajKriterij(nazivPodkriterija, idRoditelja); // nastaviti = true; // } // else // { // nastaviti = false; // } // } // break; // case "9": // kraj = true; // break; // default: // Console.WriteLine("---Pogrešan unos---"); // break; // } //} //postupak usporedbe kriterija poljeListaKriterija = executor.KreirajSkupineKriterija(); for (int a = 0; a < poljeListaKriterija.Length; a++) { listaKriterija = poljeListaKriterija[a]; matricaKriterija = executor.KreirajNovuMatricuKriterija(listaKriterija); bool konzistentno = false; //listaKriterija = executor.DohvatiListuKriterija(); while (!konzistentno) { for (int i = 0; i < listaKriterija.Count; i++) { Kriterij kriterij1 = new Kriterij(); kriterij1 = listaKriterija[i]; for (int j = 0; j < listaKriterija.Count; j++) { Kriterij kriterij2 = new Kriterij(); kriterij2 = listaKriterija[j]; double vrijednost = 1; if (i < j) { Console.WriteLine(kriterij1.Naziv + " - " + kriterij2.Naziv); vrijednost = Convert.ToDouble(Console.ReadLine()); matricaKriterija[i, j] = vrijednost; matricaKriterija[j, i] = 1 / vrijednost; } else if (i == j) { matricaKriterija[i, j] = 1; } } } konzistentno = executor.ProvjeriKonzistentnost(matricaKriterija); } List <Kriterij> lisKrit = new List <Kriterij>(); string kriterijRoditeljNaziv = ""; lisKrit = poljeListaKriterija[a]; if (lisKrit[0].Roditelj != null) { kriterijRoditeljNaziv = lisKrit[0].Roditelj.Naziv; } else { kriterijRoditeljNaziv = "null"; } vrijednostKriterija = executor.IzracunajVrijednostKriterija(matricaKriterija, listaKriterija); popisVrijednostiKriterija.Add(kriterijRoditeljNaziv, vrijednostKriterija); } //kraj - postupak usporedbe kriterija //izlaz - dictionary s imenom kriterija Console.ReadLine(); }
public ActionResult Alternatives(int projekt, int kriterij) { AHPEntities4 db = new AHPEntities4(); Projekt odabraniProjekt = db.Projekts.Where(x => x.id == projekt).SingleOrDefault(); if (kriterij != -1) { List <Kriterij> kriteriji = GetListOfCriteria(projekt); List <Alternativa> alternative = db.Alternativas.Where(x => (x.projekt == projekt && x.obrisana != true)).ToList(); List <AlternativaKriterij> alternativaKriterij = db.AlternativaKriterijs.Where(x => (x.kriterij == kriterij && x.Alternativa1.obrisana != false)).ToList(); Kriterij odabraniKriterij = db.Kriterijs.Where(x => x.id == kriterij).SingleOrDefault(); List <AlternativesComparedViewModel> alternativesComparedViewModel = new List <AlternativesComparedViewModel>(); foreach (var alternativa1 in alternative) { foreach (var alternativa2 in alternative) { if (alternativa1.id != alternativa2.id) { if (alternativesComparedViewModel.Where(x => ((x.Alternativa1.id == alternativa1.id && x.Alternativa2.id == alternativa2.id) || (x.Alternativa2.id == alternativa1.id && x.Alternativa1.id == alternativa2.id))).Count() == 0) { alternativesComparedViewModel.Add(new AlternativesComparedViewModel(alternativa1, alternativa2)); } } } } List <UsporedbaAlternativaPremaKriteriju> usporedbaAlternativaPremaKriteriju = odabraniKriterij.UsporedbaAlternativaPremaKriterijus.Where(x => (x.Kriterij1.id == kriterij)).ToList(); EvaluationAlternativesViewModel evaluationAlternativesViewModel = new EvaluationAlternativesViewModel(); evaluationAlternativesViewModel.Kriterij = odabraniKriterij; evaluationAlternativesViewModel.Projekt = odabraniProjekt; evaluationAlternativesViewModel.AlternativaKriterij = alternativaKriterij; evaluationAlternativesViewModel.Kriteriji = kriteriji; evaluationAlternativesViewModel.Alternative = alternative; evaluationAlternativesViewModel.ListaKombinacijaAlternativa = alternativesComparedViewModel; evaluationAlternativesViewModel.UsporedbaAlternativaPremaKriteriju = usporedbaAlternativaPremaKriteriju; return(View(evaluationAlternativesViewModel)); } else { List <Kriterij> kriteriji = GetListOfCriteria(projekt); kriterij = kriteriji[0].id; List <Alternativa> alternative = db.Alternativas.Where(x => (x.projekt == projekt && x.obrisana != true)).ToList(); List <AlternativaKriterij> alternativaKriterij = db.AlternativaKriterijs.Where(x => (x.kriterij == kriterij && x.Alternativa1.obrisana != false)).ToList(); Kriterij odabraniKriterij = db.Kriterijs.Where(x => x.id == kriterij).SingleOrDefault(); List <AlternativesComparedViewModel> alternativesComparedViewModel = new List <AlternativesComparedViewModel>(); foreach (var alternativa1 in alternative) { foreach (var alternativa2 in alternative) { if (alternativa1.id != alternativa2.id) { if (alternativesComparedViewModel.Where(x => ((x.Alternativa1.id == alternativa1.id && x.Alternativa2.id == alternativa2.id) || (x.Alternativa2.id == alternativa1.id && x.Alternativa1.id == alternativa2.id))).Count() == 0) { alternativesComparedViewModel.Add(new AlternativesComparedViewModel(alternativa1, alternativa2)); } } } } List <UsporedbaAlternativaPremaKriteriju> usporedbaAlternativaPremaKriteriju = odabraniKriterij.UsporedbaAlternativaPremaKriterijus.Where(x => (x.Kriterij1.id == kriterij)).ToList(); EvaluationAlternativesViewModel evaluationAlternativesViewModel = new EvaluationAlternativesViewModel(); evaluationAlternativesViewModel.Kriterij = odabraniKriterij; evaluationAlternativesViewModel.Projekt = odabraniProjekt; evaluationAlternativesViewModel.AlternativaKriterij = alternativaKriterij; evaluationAlternativesViewModel.Kriteriji = kriteriji; evaluationAlternativesViewModel.Alternative = alternative; evaluationAlternativesViewModel.ListaKombinacijaAlternativa = alternativesComparedViewModel; evaluationAlternativesViewModel.UsporedbaAlternativaPremaKriteriju = usporedbaAlternativaPremaKriteriju; return(View(evaluationAlternativesViewModel)); } }