diff --git a/include/prestudent.class.php b/include/prestudent.class.php index 54eced00d..7e38d5702 100644 --- a/include/prestudent.class.php +++ b/include/prestudent.class.php @@ -20,6 +20,7 @@ * Rudolf Hangl . */ require_once(dirname(__FILE__).'/person.class.php'); +require_once(dirname(__FILE__).'/log.class.php'); class prestudent extends person { diff --git a/vilesci/personen/aliquote_reduktion.json.php b/vilesci/personen/aliquote_reduktion.json.php index abdc58917..7cbd7e2d3 100644 --- a/vilesci/personen/aliquote_reduktion.json.php +++ b/vilesci/personen/aliquote_reduktion.json.php @@ -81,7 +81,7 @@ switch($action) break; - case "getStudienplaene": + case "getStudienplaetze": if(!isset($_REQUEST["studiensemester_kurzbz"])) die("keine studiensemester_kurzbz erhalten"); $studiensemester_kurzbz = $_REQUEST["studiensemester_kurzbz"]; diff --git a/vilesci/personen/aliquote_reduktion.php b/vilesci/personen/aliquote_reduktion.php index 6a29e751b..6b54d209f 100644 --- a/vilesci/personen/aliquote_reduktion.php +++ b/vilesci/personen/aliquote_reduktion.php @@ -51,9 +51,9 @@ } function sortStudentenRTP(a,b) { - if (a.rt_gesamtpunkte < b.rt_gesamtpunkte) + if (b.rt_gesamtpunkte == null || parseFloat(a.rt_gesamtpunkte) > parseFloat(b.rt_gesamtpunkte)) return -1; - else if (a.rt_gesamtpunkte > b.rt_gesamtpunkte) + else if (a.rt_gesamtpunkte == null || parseFloat(a.rt_gesamtpunkte) < parseFloat(b.rt_gesamtpunkte)) return 1; else return 0; @@ -68,12 +68,12 @@ aqr.selectedStudiengang = Object(); aqr.selectedStudiengang.studiengang_kz = _GET()["studiengang_kz"]; aqr.selectedStudiensemester = ""; - aqr.selectedStudienplan = ""; + aqr.selectedStudienplatz = ""; aqr.choosenStuds = 0; aqr.studenten = []; aqr.studiengaenge = []; aqr.studiensemester = []; - aqr.studienplaene = []; + aqr.studienplaetze = []; SERVICE_TARGET = "aliquote_reduktion.json.php" if(!aqr.studiensemester_kurzbz) @@ -87,11 +87,11 @@ - //bei jeder änderung des studiensemesters, sollen die studienplaene erneut geholt werden + //bei jeder änderung des studiensemesters, sollen die studienplaetze erneut geholt werden $scope.$watch('aqr.selectedStudiengang', function (){aqr.loadStudienPlaene();},true); $scope.$watch('aqr.selectedStudiensemester', function (){aqr.loadStudienPlaene();},true); - $scope.$watch('aqr.selectedStudienplan', function (){aqr.loadStudenten();},true); + $scope.$watch('aqr.selectedStudienplatz', function (){aqr.loadStudenten();},true); AJAXCall({action:"getStudiensemester",studiengang_kz:aqr.selectedStudiengang.studiengang_kz},function(res){aqr.studiensemester=res;aqr.setStudiensemester(aqr.studiensemester_kurzbz);$scope.$apply();}); @@ -101,12 +101,12 @@ aqr.submit = function() { - if(aqr.choosenStuds < aqr.selectedStudienplan.apz) + if(aqr.choosenStuds < aqr.selectedStudienplatz.apz) { if(!confirm("Es wurden zu wenig Studenten gewählt!")) return; } - else if(aqr.choosenStuds > aqr.selectedStudienplan.apz) + else if(aqr.choosenStuds > aqr.selectedStudienplatz.apz) { if(!confirm("Es wurden zu viel Studenten gewählt!")) return; @@ -138,14 +138,17 @@ aqr.setStudiengang = function(studiengang_kz) { + var found = false; aqr.studiengaenge.forEach(function(i) { if(i.studiengang_kz == studiengang_kz) { aqr.selectedStudiengang = i; - return; + found = true; } }); + if(!found) + alert("Studiengang nicht gefunden!"); } aqr.setStudiensemester = function(studiensemester_kurzbz) @@ -164,12 +167,12 @@ { if(aqr.selectedStudiensemester != "") { - aqr.selectedStudienplan = ""; - aqr.studienplaene.clear; - AJAXCall({action:"getStudienplaene",studiengang_kz:aqr.selectedStudiengang.studiengang_kz,studiensemester_kurzbz:aqr.selectedStudiensemester.studiensemester_kurzbz},function(res) + aqr.selectedStudienplatz = ""; + aqr.studienplaetze.clear; + AJAXCall({action:"getStudienplaetze",studiengang_kz:aqr.selectedStudiengang.studiengang_kz,studiensemester_kurzbz:aqr.selectedStudiensemester.studiensemester_kurzbz},function(res) { - aqr.studienplaene=res; - aqr.selectedStudienplan=aqr.studienplaene[0]; + aqr.studienplaetze=res; + aqr.selectedStudienplatz=aqr.studienplaetze[0]; $scope.$apply(); }); } @@ -178,8 +181,8 @@ aqr.loadStudenten = function() { aqr.studenten=[]; - if(aqr.selectedStudienplan && aqr.selectedStudienplan.studienplan_id) - AJAXCall({action:"getStudenten",studiengang_kz:aqr.selectedStudiengang.studiengang_kz,studienplan_id:aqr.selectedStudienplan.studienplan_id,studiensemester_kurzbz:aqr.selectedStudiensemester.studiensemester_kurzbz},function(res) + if(aqr.selectedStudienplatz && aqr.selectedStudienplatz.studienplan_id) + AJAXCall({action:"getStudenten",studiengang_kz:aqr.selectedStudiengang.studiengang_kz,studienplan_id:aqr.selectedStudienplatz.studienplan_id,studiensemester_kurzbz:aqr.selectedStudiensemester.studiensemester_kurzbz},function(res) { aqr.studenten=res; aqr.studenten.forEach(function(i) @@ -219,11 +222,11 @@ aqr.doPreselection = function() { - if(parseInt(aqr.selectedStudienplan.apz) >= 0) + if(parseInt(aqr.selectedStudienplatz.apz) >= 0) { - aqr.studenten.sort(sortStudentenRTP); + var zgvs = aqr.getZGVArray(); - var neededStudentsCount = aqr.selectedStudienplan.apz - aqr.getAcceptedCount(); + var neededStudentsCount = aqr.selectedStudienplatz.apz - aqr.getAcceptedCount(); var perZGV = parseInt(neededStudentsCount / zgvs.length); var zgvElems = []; @@ -232,35 +235,68 @@ zgvElems.push({name:i,needed:perZGV}); }); - aqr.studenten.forEach(function(i) + aqr.studenten.sort(sortStudentenRTP); + aqr.recursiveChoose(neededStudentsCount, zgvElems); + } + } + + + aqr.recursiveChoose = function(needed, zgvElems) + { + var beginNeeded = JSON.parse(JSON.stringify(needed)); + aqr.studenten.forEach(function(i) + { + if(i.laststatus=='Wartender'||i.laststatus=='Bewerber') { - if(i.laststatus=='Wartender'||i.laststatus=='Bewerber') + zgvElems.forEach(function(j) { - zgvElems.forEach(function(j) + if(j.needed > 0 && !i.selected && i.bezeichnung == j.name) { - if(j.needed > 0 && !i.selected && i.bezeichnung == j.name) - { - i.selected = true; - j.needed --; - } - }); + i.selected = true; + j.needed --; + needed --; + } + }); + } + }); + + if(beginNeeded == needed) + { + var endless = true; + zgvElems.forEach(function(j) + { + if(j.needed < 1) + { + j.needed ++; + endless = false; } }); } + if(endless) + { + //prevent deadlock(should never happen) + alert("Die Automatische Selektierung konnte nicht abgeschlossen werden!"); + return; + } + if(needed > 0) + aqr.recursiveChoose(needed, zgvElems); + else + { + } } });
-

{{aqr.name}} {{aqr.selectedStudiengang.studiengang_kz}}

+

{{aqr.name}} {{aqr.selectedStudiengang.studiengang_kz}}/{{aqr.selectedStudienplatz.studienplatz_id}}

- Keinen Studienplan gefunden! - {{aqr.studenten.length}} Student - {{aqr.studenten.length}} Studenten - keine Student + Keinen Studienplan gefunden! + {{aqr.studenten.length}} Student + {{aqr.studenten.length}} Studenten + keine Student

Auswahl

@@ -272,8 +308,8 @@ - - + +
ZGV Gruppe RT Gesamt Status{{aqr.choosenStuds}}/{{aqr.selectedStudienplan.apz}}{{aqr.choosenStuds}}/Keine APZ{{aqr.choosenStuds}}/{{aqr.selectedStudienplatz.apz}}{{aqr.choosenStuds}}/Keine APZ