public Resultaat GetResultaatByStudentId(int id) { return(resultaatRepository.getByStudentId(id)); }
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(); } } }