public ActionResult Beoordeling(BeoordelingsVM vm) { int count = beoordelingsService.getTotaalAantalDeelaspecten(vm.MatrixID, vm.Rol_ID); if (vm.Scores != null) { if (count == vm.Scores.Count) { vm.Matrix = beoordelingsService.GetMatrix(vm.MatrixID); beoordelingsService.CreateBeoordeling(vm); return(RedirectToAction("Index")); } else { vm.Scores.Clear(); } } vm.Matrix = beoordelingsService.GetMatrixForRol(vm.MatrixID, vm.Rol_ID); vm.Scores = new List <double>(); for (int i = 0; i < count; i++) { vm.Scores.Add(0); } ViewBag.Error = "Gelieve een graad voor ieder deelaspect in te vullen"; vm.Student = studentService.GetStudentByID(vm.Student.ID); vm.Resultaten = new Resultaat(); return(View(vm)); }
public ActionResult Beoordeling(string studentRol, bool cfaanwezig = false, int matrix = 0) { if (studentRol != null && !studentRol.Equals("")) { string[] parts = studentRol.Split('.'); int studentID = 0; int rolID = 0; if (parts.Length == 2) { if (int.TryParse(parts[0], out studentID) && int.TryParse(parts[1], out rolID)) { if (matrix != 0) { if (!((rolID == 2 && matrix == 2) || (rolID == 3 && matrix == 2))) { // Geen tweede lezer of kritische vriend mag tussenbeoordelingen doen BeoordelingsVM vm = new BeoordelingsVM(); //tussentijds=2, eind=1 if (matrix == 1) { Student temp = studentService.GetStudentByID(studentID); vm.MatrixID = beoordelingsService.GetMatrixIdByRichtingByType(false, temp.Opleiding); } else { Student temp = studentService.GetStudentByID(studentID); vm.MatrixID = beoordelingsService.GetMatrixIdByRichtingByType(true, temp.Opleiding); } vm.CFaanwezig = cfaanwezig; //vm.MatrixID = matrix; vm.Matrix = beoordelingsService.GetMatrixForRol(vm.MatrixID, rolID); vm.Student = studentService.GetStudentByID(studentID); vm.Rol_ID = rolID; vm.Resultaten = new Resultaat(); return(View(vm)); } } } } } return(RedirectToAction("Index")); }
public void CreateBeoordeling(BeoordelingsVM vm) { Matrix m = matrixRepository.GetByID(vm.MatrixID); int studentid = resultaatRepository.ifExistsGetStudentId(vm.Student.ID); if (studentid != 0) //bestaande record aanpassen { Resultaat exist = resultaatRepository.getByStudentId(studentid); exist.CustomFeedback = vm.feedback; if (m.Tussentijds == true) { exist.TussentijdseId = m.ID; //de bestaande lijst met deelaspectresultaten updaten we met de nieuw gekozen score //We hergebruiken de bestaande lijst zodat we zijn eigen ID waarde behouden zodat we de database niet overspoelen met onnodige records List <DeelaspectResultaat> newdeelres = FillDeelaspectResultaten(m, vm.Scores); List <DeelaspectResultaat> olddeelres = exist.DeelaspectResultaten; if (olddeelres.Count != 0) { for (int i = 0; i < newdeelres.Count(); i++) { olddeelres[i].DeelaspectId = newdeelres[i].DeelaspectId; olddeelres[i].Score = newdeelres[i].Score; } exist.DeelaspectResultaten = olddeelres; } else { List <Deelaspect> deelasp = matrixRepository.getDeelaspectenForMatrix(vm.MatrixID); for (int i = 0; i < deelasp.Count; i++) { newdeelres[i].DeelaspectId = deelasp[i].ID; } exist.DeelaspectResultaten = newdeelres; } List <double> scores = GetListDeelaspectScore(exist.DeelaspectResultaten); List <int> wegingen = GetListDeelaspectWegingen(exist.DeelaspectResultaten); exist.TotaalTussentijdResultaat = beoordelingsEngine.totaalScore(scores, wegingen); resultaatRepository.Update(exist); uow.SaveChanges(); } else { // eindscoreberekening bestaand resultaat // Ultieme eindscore kan pas berekend worden eens alle rollen de beoordeling hebben voltooid // totaalscores hoofdaspecten optellen en delen door (maximum te behalen punten / gewogen score) // de behaalde resultaten allemaal optellen en delen door 10 // Math.Ceiling voor afronding //hoofdaspectresultaten in de database steken !checken of ze al bestaan, zo ja, overschrijven! if (exist.HoofdaspectResultaten.Any(h => h.Rol.ID == vm.Rol_ID)) { exist.CFaanwezig = vm.CFaanwezig; int hoofdaspectcounter = 0; //Matrix mat = matrixRepository.GetMatrixForRol(vm.MatrixID, vm.Rol_ID); List <double> hoofdaspectScore = new List <double>(); List <int> weging = new List <int>(); foreach (HoofdaspectResultaat h in exist.HoofdaspectResultaten) { if (h.Rol.ID == vm.Rol_ID) { for (int i = 0; i < matrixRepository.GetDeelaspectenCountForHoofdaspect(h.HoofdaspectId); i++) { hoofdaspectScore.Add(vm.Scores[i]); } weging.Add(matrixRepository.GetWegingForHoofdaspect(h.HoofdaspectId)); h.Score = beoordelingsEngine.totaalScore(hoofdaspectScore, weging); hoofdaspectScore.Clear(); weging.Clear(); hoofdaspectcounter++; } } resultaatRepository.Update(exist); uow.SaveChanges(); } else //er zijn nog GEEN hoofdaspectresultaten van deze rol { List <HoofdaspectResultaat> hoofdreslist = new List <HoofdaspectResultaat>(); //Matrix mat = matrixRepository.GetMatrixForRol(m.ID, vm.Rol_ID); List <Hoofdaspect> hoofdaspecten = matrixRepository.GetHoofdaspectenForMatrix(vm.MatrixID); int counter = 0; List <double> hoofdaspectScore = new List <double>(); List <int> wegingen = new List <int>(); foreach (Hoofdaspect h in hoofdaspecten) { if (h.Rollen.Any(r => r.ID == exist.StudentId)) { HoofdaspectResultaat hoofdres = new HoofdaspectResultaat(); foreach (Deelaspect d in h.Deelaspecten) { hoofdaspectScore.Add(vm.Scores[counter]); counter++; } hoofdres.HoofdaspectId = h.ID; hoofdres.Rol = rolRepository.GetByID(vm.Rol_ID); wegingen.Add(matrixRepository.GetWegingForHoofdaspect(h.ID)); hoofdres.Score = beoordelingsEngine.totaalScore(hoofdaspectScore, wegingen); hoofdreslist.Add(hoofdres); hoofdaspectScore.Clear(); wegingen.Clear(); } } exist.CFaanwezig = vm.CFaanwezig; exist.HoofdaspectResultaten.AddRange(hoofdreslist); resultaatRepository.Update(exist); uow.SaveChanges(); } exist.EindId = m.ID; //controleren of alle rollen de beoordeling hebben voltooid List <string> namen = resultaatRepository.CheckIfRolesCompleted(vm.Student.ID); if (vm.breekpunten == false) { if (namen.Count == 3 || (namen.Count == 2 && exist.CFaanwezig == false)) { //totaalscore berekenen List <double> eindscore = new List <double>(); List <int> wegingen = new List <int>(); List <double> tussenscores = new List <double>(); List <Hoofdaspect> test = matrixRepository.GetHoofdaspectenForMatrix(vm.MatrixID); foreach (Hoofdaspect h in test) { List <double> hoofdaspectscores = resultaatRepository.GetScoresForHoofdaspect(h.ID, vm.Student.ID); double totaalaspectscore = 0; foreach (double score in hoofdaspectscores) { totaalaspectscore += score; } int aantalRollen = 0; if (exist.CFaanwezig == true) { aantalRollen = resultaatRepository.GetAantalRollenForHoofdaspect(h.ID, true); } else { aantalRollen = resultaatRepository.GetAantalRollenForHoofdaspect(h.ID, false); } double delingfactor = h.Deelaspecten.Count() * aantalRollen * 20; totaalaspectscore = totaalaspectscore / (delingfactor / h.GewogenScore); tussenscores.Add(totaalaspectscore); } double somtotaal = 0; foreach (double score in tussenscores) { somtotaal += score; } somtotaal = Math.Round(somtotaal / 10); exist.TotaalEindresultaat = somtotaal; } } else { exist.TotaalEindresultaat = 6; stuurBreekpuntMail(studentid); } vm.Matrix = matrixRepository.GetByID(vm.MatrixID); ApplicationUser admin = adminService.GetAdmin(); if (admin.MailZenden) { stuurMail(studentid); } resultaatRepository.Update(exist); uow.SaveChanges(); } } else //nieuw record in database { Resultaat newres = new Resultaat(); newres.CustomFeedback = vm.feedback; newres.StudentId = vm.Student.ID; if (m.Tussentijds == true) { newres.TussentijdseId = m.ID; newres.DeelaspectResultaten = FillDeelaspectResultaten(m, vm.Scores); List <double> scores = GetListDeelaspectScore(newres.DeelaspectResultaten); List <int> wegingen = GetListDeelaspectWegingen(newres.DeelaspectResultaten); if (vm.breekpunten == false) { newres.TotaalTussentijdResultaat = beoordelingsEngine.totaalScore(scores, wegingen); } else { newres.TotaalTussentijdResultaat = 6; //mail sturen stuurBreekpuntMail(studentid); } resultaatRepository.Insert(newres); uow.SaveChanges(); } else { newres.EindId = m.ID; List <HoofdaspectResultaat> hoofdreslist = new List <HoofdaspectResultaat>(); Matrix mat = matrixRepository.GetByID(m.ID); int counter = 0; List <double> hoofdaspectScore = new List <double>(); List <int> wegingen = new List <int>(); foreach (Hoofdaspect h in mat.Hoofdaspecten) { if (h.Rollen.Any(r => r.ID == vm.Rol_ID)) { HoofdaspectResultaat hoofdres = new HoofdaspectResultaat(); foreach (Deelaspect d in h.Deelaspecten) { hoofdaspectScore.Add(vm.Scores[counter]); counter++; } hoofdres.HoofdaspectId = h.ID; hoofdres.Rol = rolRepository.GetByID(vm.Rol_ID); wegingen.Add(matrixRepository.GetWegingForHoofdaspect(h.ID)); hoofdres.Score = beoordelingsEngine.totaalScore(hoofdaspectScore, wegingen); hoofdreslist.Add(hoofdres); wegingen.Clear(); } } newres.HoofdaspectResultaten = hoofdreslist; resultaatRepository.Insert(newres); uow.SaveChanges(); } } }