moved credit points check from cours registration to exam registration

This commit is contained in:
Stefan Puraner
2016-10-06 17:04:52 +02:00
parent 7269672b2d
commit e1c19fa4de
3 changed files with 237 additions and 184 deletions
@@ -67,20 +67,19 @@ switch($method)
$data = loadTermine(); $data = loadTermine();
break; break;
case 'saveAnmeldung': case 'saveAnmeldung':
$student_uid = filter_input(INPUT_POST,"uid"); $student_uid = filter_input(INPUT_POST,"uid");
if($student_uid !== "" && !is_null($student_uid)) if($student_uid !== "" && !is_null($student_uid))
{ {
$uid = $student_uid; $uid = $student_uid;
} }
if($student_uid === "")
{
$data['result']="";
$data['error']='true';
$data['errormsg']='Studenten UID fehlt.';
break;
}
if($student_uid === "")
{
$data['result']="";
$data['error']='true';
$data['errormsg']='Studenten UID fehlt.';
break;
}
$data = saveAnmeldung($aktStudiensemester, $uid); $data = saveAnmeldung($aktStudiensemester, $uid);
break; break;
case 'getAllPruefungen': case 'getAllPruefungen':
@@ -142,60 +141,60 @@ function getPruefungByLv($aktStudiensemester = null, $uid = null)
$lvIds = array(); $lvIds = array();
foreach($lehrveranstaltungen->lehrveranstaltungen as $lvs) foreach($lehrveranstaltungen->lehrveranstaltungen as $lvs)
{ {
array_push($lvIds, $lvs->lehrveranstaltung_id); array_push($lvIds, $lvs->lehrveranstaltung_id);
} }
$lehrveranstaltungen=$lvIds; $lehrveranstaltungen=$lvIds;
$pruefung = new pruefungCis(); $pruefung = new pruefungCis();
if($pruefung->getPruefungByLv($lehrveranstaltungen)) if($pruefung->getPruefungByLv($lehrveranstaltungen))
{ {
$pruefungen = array(); $pruefungen = array();
foreach($pruefung->lehrveranstaltungen as $key=>$lv) foreach($pruefung->lehrveranstaltungen as $key=>$lv)
{ {
$lehrveranstaltung = new lehrveranstaltung($lv->lehrveranstaltung_id); $lehrveranstaltung = new lehrveranstaltung($lv->lehrveranstaltung_id);
$lehrveranstaltung = $lehrveranstaltung->cleanResult(); $lehrveranstaltung = $lehrveranstaltung->cleanResult();
$lehreinheit = new lehreinheit(); $lehreinheit = new lehreinheit();
$lehreinheit->load_lehreinheiten($lehrveranstaltung[0]->lehrveranstaltung_id, $aktStudiensemester); $lehreinheit->load_lehreinheiten($lehrveranstaltung[0]->lehrveranstaltung_id, $aktStudiensemester);
$lehreinheiten = $lehreinheit->lehreinheiten; $lehreinheiten = $lehreinheit->lehreinheiten;
$prf = new stdClass(); $prf = new stdClass();
$temp = new pruefungCis($lv->pruefung_id); $temp = new pruefungCis($lv->pruefung_id);
$temp->getTermineByPruefung($lv->pruefung_id); $temp->getTermineByPruefung($lv->pruefung_id);
for($i=0; $i < sizeof($temp->termine); $i++) for($i=0; $i < sizeof($temp->termine); $i++)
{ {
$termin = new pruefungstermin($temp->termine[$i]->pruefungstermin_id); $termin = new pruefungstermin($temp->termine[$i]->pruefungstermin_id);
$temp->termine[$i]->teilnehmer = $termin->getNumberOfParticipants(); $temp->termine[$i]->teilnehmer = $termin->getNumberOfParticipants();
} }
$prf->pruefung = $temp; $prf->pruefung = $temp;
$prf->lehrveranstaltung = $lehrveranstaltung; $prf->lehrveranstaltung = $lehrveranstaltung;
if(!empty($lehreinheiten)) if(!empty($lehreinheiten))
{ {
$lveranstaltung = new lehrveranstaltung($lehreinheiten[0]->lehrfach_id); $lveranstaltung = new lehrveranstaltung($lehreinheiten[0]->lehrfach_id);
$oe = new organisationseinheit($lveranstaltung->oe_kurzbz); $oe = new organisationseinheit($lveranstaltung->oe_kurzbz);
$prf->organisationseinheit = $oe->bezeichnung; $prf->organisationseinheit = $oe->bezeichnung;
array_push($pruefungen, $prf); array_push($pruefungen, $prf);
} }
} }
$anmeldung = new pruefungsanmeldung(); $anmeldung = new pruefungsanmeldung();
$anmeldungen = $anmeldung->getAnmeldungenByStudent($uid, $aktStudiensemester); $anmeldungen = $anmeldung->getAnmeldungenByStudent($uid, $aktStudiensemester);
$anmeldungsIds = array(); $anmeldungsIds = array();
foreach($anmeldungen as $anm) foreach($anmeldungen as $anm)
{ {
$a = new stdClass(); $a = new stdClass();
$a->pruefungsanmeldung_id = $anm->pruefungsanmeldung_id; $a->pruefungsanmeldung_id = $anm->pruefungsanmeldung_id;
$a->pruefungstermin_id = $anm->pruefungstermin_id; $a->pruefungstermin_id = $anm->pruefungstermin_id;
$a->lehrveranstaltung_id = $anm->lehrveranstaltung_id; $a->lehrveranstaltung_id = $anm->lehrveranstaltung_id;
array_push($anmeldungsIds, $a); array_push($anmeldungsIds, $a);
} }
$return = new stdClass(); $return = new stdClass();
$return->pruefungen = $pruefungen; $return->pruefungen = $pruefungen;
$return->anmeldungen = $anmeldungsIds; $return->anmeldungen = $anmeldungsIds;
$data['result']=$return; $data['result']=$return;
$data['error']='false'; $data['error']='false';
$data['errormsg']=''; $data['errormsg']='';
} }
else else
{ {
$data['error']='true'; $data['error']='true';
$data['errormsg']=$pruefung->errormsg; $data['errormsg']=$pruefung->errormsg;
} }
return $data; return $data;
} }
@@ -387,26 +386,26 @@ function saveAnmeldung($aktStudiensemester = null, $uid = null)
$addon = new addon(); $addon = new addon();
foreach ($addon->aktive_addons as $a) foreach ($addon->aktive_addons as $a)
{ {
if($a === "ku") if($a === "ku")
{ {
require '../../../../addons/'.$a.'/cis/prfVerwaltung_array.php'; require '../../../../addons/'.$a.'/cis/prfVerwaltung_array.php';
switch($lehrveranstaltung->oe_kurzbz) switch($lehrveranstaltung->oe_kurzbz)
{ {
case $fakultaeten[0]["fakultaet"]: case $fakultaeten[0]["fakultaet"]:
$semCounter = $fakultaeten[0]["sem"]; $semCounter = $fakultaeten[0]["sem"];
break; break;
case $fakultaeten[1]["fakultaet"]: case $fakultaeten[1]["fakultaet"]:
$semCounter = $fakultaeten[1]["sem"]; $semCounter = $fakultaeten[1]["sem"];
break; break;
default: default:
$semCounter = 2; $semCounter = 2;
break; break;
} }
} }
else else
{ {
$semCounter = 99; $semCounter = 99;
} }
} }
$i=0; $i=0;
$stdsem_lv_besuch = null; $stdsem_lv_besuch = null;
@@ -442,107 +441,132 @@ function saveAnmeldung($aktStudiensemester = null, $uid = null)
// Defaulteinstellung für Prüfungstypen - schauen, ob bereits aus KTU-Addon geladen // Defaulteinstellung für Prüfungstypen - schauen, ob bereits aus KTU-Addon geladen
if(!isset($pruefungstyp_kurzbzArray)) if(!isset($pruefungstyp_kurzbzArray))
$pruefungstyp_kurzbzArray = array("Termin1","Termin2","kommPruef"); $pruefungstyp_kurzbzArray = array("Termin1","Termin2","kommPruef");
if(isset($pruefungstyp_kurzbzArray)) if(isset($pruefungstyp_kurzbzArray))
{ {
if($anzahlPruefungen < count($pruefungstyp_kurzbzArray)) if($anzahlPruefungen < count($pruefungstyp_kurzbzArray))
{ {
$pruefungstyp_kurzbz = $pruefungstyp_kurzbzArray[$anzahlPruefungen]; $pruefungstyp_kurzbz = $pruefungstyp_kurzbzArray[$anzahlPruefungen];
} }
} }
else else
{ {
$pruefungstyp_kurzbz = null; $pruefungstyp_kurzbz = null;
} }
foreach($pruefung->result as $prf) foreach($pruefung->result as $prf)
{ {
$note = new note($prf->note); $note = new note($prf->note);
if($note->note === $noteCode_uef) if($note->note === $noteCode_uef)
{
$pruefungsanmeldung = new pruefungsanmeldung($prf->pruefungsanmeldung_id);
$pruefungstermin = new pruefungstermin($pruefungsanmeldung->pruefungstermin_id);
$pf = new pruefungCis($pruefungstermin->pruefung_id);
$pruefungsfenster = new pruefungsfenster($pf->pruefungsfenster_id);
$studiensemester = new studiensemester();
$stdsem = $studiensemester->getaktorNext();
$i=0;
while($i<2)
{
if($stdsem === $pruefungsfenster->studiensemester_kurzbz)
{ {
$anmeldung_moeglich = false; $pruefungsanmeldung = new pruefungsanmeldung($prf->pruefungsanmeldung_id);
$pruefungstermin = new pruefungstermin($pruefungsanmeldung->pruefungstermin_id);
$pf = new pruefungCis($pruefungstermin->pruefung_id);
$pruefungsfenster = new pruefungsfenster($pf->pruefungsfenster_id);
$studiensemester = new studiensemester();
$stdsem = $studiensemester->getaktorNext();
$i=0;
while($i<2)
{
if($stdsem === $pruefungsfenster->studiensemester_kurzbz)
{
$anmeldung_moeglich = false;
}
$stdsem = $studiensemester->getPreviousFrom($stdsem);
$i++;
}
}
else
{
if($note->positiv === FALSE && $anzahlPruefungen >= $maxAnzahlVersuche)
{
$anmeldung_moeglich = false;
}
} }
$stdsem = $studiensemester->getPreviousFrom($stdsem);
$i++;
}
}
else
{
if($note->positiv === FALSE && $anzahlPruefungen >= $maxAnzahlVersuche)
{
$anmeldung_moeglich = false;
}
}
} }
if($anmeldung_moeglich) if($anmeldung_moeglich)
{ {
if($termin->teilnehmer_max > $termin->getNumberOfParticipants() || $termin->teilnehmer_max == NULL) if($termin->teilnehmer_max > $termin->getNumberOfParticipants() || $termin->teilnehmer_max == NULL)
{
$pruefung = new pruefungCis();
$reihung = $pruefung->getLastOfReihung($_REQUEST["termin_id"]);
$anmeldung = new pruefungsanmeldung();
$anmeldung->lehrveranstaltung_id = $_REQUEST["lehrveranstaltung_id"];
$anmeldung->pruefungstermin_id = $_REQUEST["termin_id"];
$anmeldung->wuensche = $_REQUEST["bemerkung"];
$anmeldung->uid = $uid;
$anmeldung->reihung = $reihung+1;
$anmeldung->status_kurzbz = "angemeldet";
$anmeldung->pruefungstyp_kurzbz = $pruefungstyp_kurzbz;
$lehrveranstaltung = new lehrveranstaltung($_REQUEST["lehrveranstaltung_id"]);
$konto = new konto();
$creditpoints = $konto->getCreditPoints($uid, $aktStudiensemester);
if($creditpoints !== false)
{
if($creditpoints < $lehrveranstaltung->ects)
{ {
$data['error'] = 'true'; $pruefung = new pruefungCis();
$data['errormsg'] = $p->t('pruefung/zuWenigeCreditPoints'); $reihung = $pruefung->getLastOfReihung($_REQUEST["termin_id"]);
return $data; $anmeldung = new pruefungsanmeldung();
} $anmeldung->lehrveranstaltung_id = $_REQUEST["lehrveranstaltung_id"];
} $anmeldung->pruefungstermin_id = $_REQUEST["termin_id"];
$anmeldung->wuensche = $_REQUEST["bemerkung"];
$anmeldung->uid = $uid;
$anmeldung->reihung = $reihung+1;
$anmeldung->status_kurzbz = "angemeldet";
$anmeldung->pruefungstyp_kurzbz = $pruefungstyp_kurzbz;
$lehrveranstaltung = new lehrveranstaltung($_REQUEST["lehrveranstaltung_id"]);
//Kollisionsprüfung // $konto = new konto();
$anmeldungen = $anmeldung->getAnmeldungenByStudent($uid, $aktStudiensemester); // $creditpoints = $konto->getCreditPoints($uid, $aktStudiensemester);
foreach($anmeldungen as $temp) //
{ // if($creditpoints !== false)
$datum = new datum(); // {
if(($datum->between($termin->von, $termin->bis, $temp->von)) || ($datum->between($termin->von, $termin->bis, $temp->bis))) // if($creditpoints <= $lehrveranstaltung->ects)
{ // {
$data['result'][$temp->pruefungstermin_id] = "true"; // $data['error'] = 'true';
$data['error'] = 'true'; // $data['errormsg'] = $p->t('pruefung/zuWenigeCreditPoints');
$data['errormsg'] = $p->t('pruefung/kollisionMitAndererAnmeldung'); // return $data;
// }
// }
//Kollisionsprüfung und Prüfung auf ausreichen Creditpoints
$anmeldungen = $anmeldung->getAnmeldungenByStudent($uid, $aktStudiensemester);
if($anmeldungen !== false)
{
$ects = 0;
foreach($anmeldungen as $temp)
{
$lehrveranstaltung = new lehrveranstaltung($temp->lehrveranstaltung_id);
$ects += $lehrveranstaltung->ects;
$datum = new datum();
if(($datum->between($termin->von, $termin->bis, $temp->von)) || ($datum->between($termin->von, $termin->bis, $temp->bis)))
{
$data['result'][$temp->pruefungstermin_id] = "true";
$data['error'] = 'true';
$data['errormsg'] = $p->t('pruefung/kollisionMitAndererAnmeldung');
}
}
$konto = new konto();
$creditPoints = $konto->getCreditPointsOfStudiensemester($uid, $aktStudiensemester);
if(($creditPoints != false) && ($ects >= ($creditPoints - $ects)))
{
$data['error'] = 'true';
$data['errormsg'] = $p->t('pruefung/zuWenigeCreditPoints');
return $data;
}
if(isset($data['error']) && $data['error'] = 'true')
{
return $data;
}
}
else
{
$data['error'] = 'true';
$data['errormsg'] = $anmeldung->errormsg;
return $data;
}
}
else
{
$data['error']='true';
$data['errormsg']=$p->t('pruefung/keineFreienPlaetzeVorhanden');
return $data;
} }
}
if(isset($data['error']) && $data['error'] = 'true')
{
return $data;
}
}
else
{
$data['error']='true';
$data['errormsg']=$p->t('pruefung/keineFreienPlaetzeVorhanden');
return $data;
}
} }
else else
{ {
$data['error']='true'; $data['error']='true';
$data['errormsg']=$p->t('pruefung/anmeldungAufgrundVonSperreNichtMoeglich'); $data['errormsg']=$p->t('pruefung/anmeldungAufgrundVonSperreNichtMoeglich');
return $data; return $data;
} }
$anrechnung = new anrechnung(); $anrechnung = new anrechnung();
+9 -25
View File
@@ -102,14 +102,7 @@ if(isset($_GET['getAnmeldung']))
if(!$bngruppe->load($uid, $lvangebot->result[0]->gruppe_kurzbz, $stsem)) if(!$bngruppe->load($uid, $lvangebot->result[0]->gruppe_kurzbz, $stsem))
{ {
// User ist noch nicht angemeldet // User ist noch nicht angemeldet
//Pruefen ob genug Credit Points zur Verfuegung stehen zur Anmeldung echo '<br><input type="radio" value="'.$lvid.'" name="lv"/>'.$lv->bezeichnung.' (Anmeldung bis '.$datum->formatDatum($angebot->anmeldefenster_ende,"d.m.Y").')';
$konto = new konto();
$cp = $konto->getCreditPoints($uid, $stsem);
if($cp===false || $cp>=$lv->ects)
echo '<br><input type="radio" value="'.$lvid.'" name="lv"/>'.$lv->bezeichnung.' (Anmeldung bis '.$datum->formatDatum($angebot->anmeldefenster_ende,"d.m.Y").')';
else
echo '<br><input type="radio" disabled="true" value="'.$lvid.'" name="lv" /><span style="color:gray;">'.$lv->bezeichnung.'</span><img src="../../../skin/images/information.png" title="'.$p->t('studienplan/zuWenigCP').'" />';
} }
else else
{ {
@@ -201,25 +194,16 @@ if(isset($_POST['action']) && $_POST['action']=='anmeldung')
if(!$bngruppe->load($uid, $lvangebot->result[0]->gruppe_kurzbz, $stsem)) if(!$bngruppe->load($uid, $lvangebot->result[0]->gruppe_kurzbz, $stsem))
{ {
$bngruppe->uid = $uid;
// Pruefen ob genug CP zur Verfuegung stehen falls diese reduziert sind $bngruppe->gruppe_kurzbz = $lvangebot->result[0]->gruppe_kurzbz;
$konto = new konto(); $bngruppe->studiensemester_kurzbz = $stsem;
$cp = $konto->getCreditPoints($uid, $stsem); $bngruppe->new=true;
if($cp===false || $cp>=$lv->ects) if($bngruppe->save())
{ {
$bngruppe->uid = $uid; echo '<span class="ok">'.$p->t('studienplan/einschreibungErfolgreich').'</span>';
$bngruppe->gruppe_kurzbz = $lvangebot->result[0]->gruppe_kurzbz; // Menue neu Laden damit die LV unter Meine LV gleich angezeigt wird
$bngruppe->studiensemester_kurzbz = $stsem; echo '<script>window.parent.menu.location.reload();</script>';
$bngruppe->new=true;
if($bngruppe->save())
{
echo '<span class="ok">'.$p->t('studienplan/einschreibungErfolgreich').'</span>';
// Menue neu Laden damit die LV unter Meine LV gleich angezeigt wird
echo '<script>window.parent.menu.location.reload();</script>';
}
} }
else
echo '<span class="error">'.$p->t('studienplan/zuWenigCP').'</span>';
} }
else else
{ {
+45
View File
@@ -801,6 +801,51 @@ class konto extends basis_db
} }
} }
/**
* Liefert die CreditPoints die ein Studierender für ein Studiensemester zur Verfügung hat
* falls dieser einschraenkungen eingetragen hat. Wenn keine Einschraenkung vorhanden ist,
* wird false zurueckgeliefert. Es werden die Creditpoint der Belastungen herangezogen.
* Die Gegenbuchung wird nicht beruecksichtigt.
* @return Anzahl der gekauften CreditPoints oder false falls unbeschraenkt
*/
public function getCreditPointsOfStudiensemester($uid, $studiensemester_kurzbz)
{
$qry = "SELECT sum(credit_points) as cp
FROM
public.tbl_konto
JOIN public.tbl_benutzer USING(person_id)
WHERE
uid=".$this->db_add_param($uid)."
AND studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz)."
AND buchungsnr_verweis is null
AND credit_points is not null";
if($result = $this->db_query($qry))
{
if($row = $this->db_fetch_object($result))
{
$creditpoints = $row->cp;
if($creditpoints!='')
{
return $creditpoints;
}
else
return false;
}
else
{
// keine Einschraenkung vorhanden
return false;
}
}
else
{
$this->errormsg = 'Fehler beim Laden der Daten';
return false;
}
}
/** /**
* Fügt zur erstellten Buchung eine Zahlungsreferenz hinzu * Fügt zur erstellten Buchung eine Zahlungsreferenz hinzu
* @param $buchungsnr Die ID der erstellten Buchung in der Datenbank * @param $buchungsnr Die ID der erstellten Buchung in der Datenbank