diff --git a/include/appdaten.class.php b/include/appdaten.class.php
index fc5d910f4..d787359eb 100644
--- a/include/appdaten.class.php
+++ b/include/appdaten.class.php
@@ -96,6 +96,44 @@ class appdaten extends basis_db
return true;
}
+ /**
+ * Appdaten nach bezeichnung und version laden
+ * @param type $app
+ * @param type $bezeichnung
+ * @param type $version
+ * @return boolean true wenn keine Fehler, sonst false
+ */
+ public function getByBezeichnungVersion($app, $bezeichnung, $version)
+ {
+ $this->new = false;
+ if(!is_numeric($version))
+ {
+ $this->errormsg = 'version muss eine gueltige Zahl sein';
+ return false;
+ }
+
+ $qry = "SELECT * FROM system.tbl_appdaten "
+ . "WHERE "
+ . "app=".$this->db_add_param($app, FHC_STRING, false).' '
+ . "AND bezeichnung=".$this->db_add_param($bezeichnung, FHC_STRING, false).' '
+ . "AND version=".$this->db_add_param($version, FHC_INTEGER, false);
+
+ if($this->db_query($qry))
+ {
+ if($row = $this->db_fetch_object())
+ {
+ $this->mapRow($this, $row);
+ }
+ }
+ else
+ {
+ return false;
+ }
+
+ return true;
+ }
+
+
/**
* Laden aller Appdaten sortiert nach Bezeichnung und version
* @param string app name
@@ -143,7 +181,7 @@ class appdaten extends basis_db
$target->freigabe=$this->db_parse_bool($row->freigabe);
$target->insertamum=$row->insertamum;
$target->insertvon=$row->insertvon;
- $target->updatenamum=$row->updateamum;
+ $target->updateamum=$row->updateamum;
$target->updatevon=$row->updatevon;
}
@@ -339,6 +377,32 @@ class appdaten extends basis_db
return false;
}
}
+
+ public function deleteByBezeichnungVersion($app, $bezeichnung, $version)
+ {
+ //Pruefen ob appdaten_id eine gueltige Zahl ist
+ if(!is_numeric($version) || $version === '')
+ {
+ $this->errormsg = 'Version muss eine gültige Zahl sein'."\n";
+ return false;
+ }
+
+ //loeschen des Datensatzes
+ $qry="DELETE FROM system.tbl_appdaten "
+ . "WHERE "
+ . "app=".$this->db_add_param($app, FHC_STRING, false).' '
+ . "AND bezeichnung=".$this->db_add_param($bezeichnung, FHC_STRING, false).' '
+ . "AND version=".$this->db_add_param($version, FHC_INTEGER, false);
+
+ if($this->db_query($qry))
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
/* public function cleanResult()
{
diff --git a/include/functions.inc.php b/include/functions.inc.php
index 306df68ca..faf6d0b77 100644
--- a/include/functions.inc.php
+++ b/include/functions.inc.php
@@ -904,4 +904,43 @@ function clearHtmlTags($text)
return $text;
}
+
+/**
+ * nächstes Semester erzeugen. Bsp incSemester('SS2014') liefert 'WS2014'
+ * @param string $semester z.B. SS2014
+ * @return string nächstes semester
+ */
+function incSemester($semester)
+{
+ $result = null;
+ $jahr = intval(substr($semester,2,4));
+ if (substr($semester,0,2) === 'SS') {
+ $result = 'WS';
+ } else {
+ $result = 'SS';
+ $jahr++;
+ }
+ $result = $result.$jahr;
+ return $result;
+}
+
+/**
+ * Liste mit Semestern erzeugen
+ * @param type $semester
+ * @param type $anzahlFolgesemester
+ * @return array Semesterliste
+ */
+function generateSemesterList($semester, $anzahlFolgesemester)
+{
+ $result[] = $semester;
+ $jahr = intval(substr($semester,2,4));
+ $currentSemester = $semester;
+ for ($index = 0; $index < $anzahlFolgesemester; $index++)
+ {
+ $currentSemester = incSemester($currentSemester);
+ $result[] = $currentSemester;
+ }
+ return $result;
+}
+
?>
diff --git a/include/prestudent.class.php b/include/prestudent.class.php
index 4ecd03802..b44269540 100644
--- a/include/prestudent.class.php
+++ b/include/prestudent.class.php
@@ -1332,5 +1332,103 @@ class prestudent extends person
return false;
}
}
+
+ /**
+ * Anzahl der Abbrecher liefern.
+ * WM: Kopie von getBewerber() => @TODO: überprüfen!!!
+ * @param type $studiensemester_kurzbz
+ * @param type $studiengang_kz
+ * @param type $orgform_kurzbz
+ * @param type $ausbildungssemester
+ * @return boolean
+ */
+ public function getAnzAbbrecher($studiensemester_kurzbz, $studiengang_kz=null, $orgform_kurzbz=null, $ausbildungssemester=null)
+ {
+ $qry = "SELECT
+ count(*) as anzahl
+ FROM
+ public.tbl_prestudent
+ JOIN public.tbl_prestudentstatus USING(prestudent_id)
+ WHERE
+ tbl_prestudentstatus.status_kurzbz='Abbrecher'
+ AND tbl_prestudentstatus.studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz);
+
+ if(!is_null($studiengang_kz))
+ $qry.=" AND tbl_prestudent.studiengang_kz=".$this->db_add_param($studiengang_kz, FHC_INTEGER);
+
+ if(!is_null($orgform_kurzbz))
+ $qry.=" AND (tbl_prestudentstatus.orgform_kurzbz=".$this->db_add_param($orgform_kurzbz)." OR (tbl_prestudentstatus.orgform_kurzbz IS NULL AND EXISTS(SELECT 1 FROM public.tbl_studiengang WHERE studiengang_kz=tbl_prestudent.studiengang_kz AND orgform_kurzbz=".$this->db_add_param($orgform_kurzbz).")))";
+
+ if(!is_null($ausbildungssemester))
+ $qry.=" AND tbl_prestudentstatus.ausbildungssemester=".$this->db_add_param($ausbildungssemester);
+
+ if($result = $this->db_query($qry))
+ {
+ if($row = $this->db_fetch_object($result))
+ {
+ return $row->anzahl;
+ }
+ else
+ {
+ $this->errormsg = 'Fehler beim Laden der Daten';
+ return false;
+ }
+ }
+ else
+ {
+ $this->errormsg = 'Fehler beim Laden der Daten';
+ return false;
+ }
+ }
+
+ /**
+ * Anzahl der Studierenden liefern.
+ * WM: Kopie von getBewerber() => @TODO: überprüfen!!!
+ * @param type $studiensemester_kurzbz
+ * @param type $studiengang_kz
+ * @param type $orgform_kurzbz
+ * @param type $ausbildungssemester
+ * @return boolean
+ */
+ public function getAnzStudierende($studiensemester_kurzbz, $studiengang_kz=null, $orgform_kurzbz=null, $ausbildungssemester=null)
+ {
+ $qry = "SELECT
+ count(*) as anzahl
+ FROM
+ public.tbl_prestudent
+ JOIN public.tbl_prestudentstatus USING(prestudent_id)
+ WHERE
+ tbl_prestudentstatus.status_kurzbz='Student'
+ AND tbl_prestudentstatus.studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz);
+
+ if(!is_null($studiengang_kz))
+ $qry.=" AND tbl_prestudent.studiengang_kz=".$this->db_add_param($studiengang_kz, FHC_INTEGER);
+
+ if(!is_null($orgform_kurzbz))
+ $qry.=" AND (tbl_prestudentstatus.orgform_kurzbz=".$this->db_add_param($orgform_kurzbz)." OR (tbl_prestudentstatus.orgform_kurzbz IS NULL AND EXISTS(SELECT 1 FROM public.tbl_studiengang WHERE studiengang_kz=tbl_prestudent.studiengang_kz AND orgform_kurzbz=".$this->db_add_param($orgform_kurzbz).")))";
+
+ if(!is_null($ausbildungssemester))
+ $qry.=" AND tbl_prestudentstatus.ausbildungssemester=".$this->db_add_param($ausbildungssemester);
+
+ if($result = $this->db_query($qry))
+ {
+ if($row = $this->db_fetch_object($result))
+ {
+ return $row->anzahl;
+ }
+ else
+ {
+ $this->errormsg = 'Fehler beim Laden der Daten';
+ return false;
+ }
+ }
+ else
+ {
+ $this->errormsg = 'Fehler beim Laden der Daten';
+ return false;
+ }
+ }
+
+
}
?>
diff --git a/include/studienplatz.class.php b/include/studienplatz.class.php
index d4c9fc92a..f5ae7fc0d 100644
--- a/include/studienplatz.class.php
+++ b/include/studienplatz.class.php
@@ -10,7 +10,7 @@
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * but WITHOUT ANY WARRANTY; without even the implied warranty oferr
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
@@ -44,7 +44,7 @@ class studienplatz extends basis_db
/** @var string */
private $studiensemester_kurzbz;
/** @var integer */
- private $ausbildungssemester;
+ private $ausbildungssemester;
/** @var integer */
private $gpz;
/** @var integer */
@@ -75,11 +75,11 @@ class studienplatz extends basis_db
switch ($name)
{
case 'gpz':
- case 'npz':
- case 'ausbildungssemester':
+ case 'npz':
+ case 'ausbildungssemester':
case 'studienplatz_id':
- if (!is_numeric($value))
- throw new Exception("Attribute $name must be numeric!");
+ if ($value != null && !is_numeric($value))
+ throw new Exception("Attribute $name must be numeric! ($value)");
$this->$name=$value;
break;
default:
@@ -146,15 +146,23 @@ class studienplatz extends basis_db
$target->updatevon = $row->updatevon;
$target->insertamum = $row->insertamum;
$target->insertvon = $row->insertvon;
+ $target->new = false;
}
/**
- * Laedt alle Studienplaetze zu einem Studiengang und Semester
+ * Laedt alle Studienplaetze zu einem Studiengang und Semester. Ergebnis
+ * steht in result, wobei es nur einen Datensatz geben kann, wenn
+ * keinAusbildungssemester = true ist.
* @param integer $studiengang_kz
- * @param string$ studiensemester_kurzbz
+ * @param string studiensemester_kurzbz
+ * @param string orgform_kurzbz
+ * @param boolean Ausbildungssemester ist optional. Wenn true werden
+ * nur Datensätze geladen wo das Ausbildungssemester null ist. Wenn
+ * false werden alle geladen wo ein Ausbildungssemester eingetragen
+ * ist.
* @return true wenn ok, false im Fehlerfall
*/
- public function load_studiengang_studiensemester($studiengang_kz, $studiensemester_kurzbz)
+ public function load_studiengang_studiensemester_orgform($studiengang_kz, $studiensemester_kurzbz, $orgform, $keinAusbildungssemester = true)
{
//Pruefen ob $studiengang_kz eine gueltige Zahl ist
if(!is_numeric($studiengang_kz) || $studiengang_kz == '')
@@ -164,19 +172,24 @@ class studienplatz extends basis_db
}
//Lesen der Daten aus der Datenbank
- $qry = "SELECT * FROM lehre.tbl_studienplatz WHERE studienplatz_id=".
- $this->db_add_param($studienplatz_id, FHC_INTEGER, false).
- " AND studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz, FHC_STRING, false);
- if(!$this->db_query($qry))
- {
- $this->errormsg = 'Fehler bei einer Datenbankabfrage';
+ $qry = "SELECT * FROM lehre.tbl_studienplatz WHERE studiengang_kz=".
+ $this->db_add_param($studiengang_kz, FHC_INTEGER, false).
+ " AND studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz, FHC_STRING, false).
+ //" AND art=".$this->db_add_param($art, FHC_STRING, false).
+ " AND orgform_kurzbz=".$this->db_add_param($orgform, FHC_STRING, false).
+ " AND ausbildungssemester ".($keinAusbildungssemester ? 'is null':'is not null');
+ $this->result = array();
+ if(!$this->db_query($qry))
+ {
return false;
}
while($row = $this->db_fetch_object())
{
- $this->result[] = $this->mapRow(new studienplatz(), $row);
- }
+ $rec = new studienplatz();
+ $this->mapRow($rec, $row);
+ $this->result[] = $rec;
+ }
return true;
}
@@ -249,6 +262,7 @@ class studienplatz extends basis_db
$this->db_add_param($this->orgform_kurzbz).', '.
$this->db_add_param($this->studiensemester_kurzbz).', '.
$this->db_add_param($this->ausbildungssemester, FHC_INTEGER).', '.
+ //$this->db_add_param($this->art).', '.
$this->db_add_param($this->gpz, FHC_INTEGER).', '.
$this->db_add_param($this->npz, FHC_INTEGER).', '.
'now(), '.
@@ -269,11 +283,12 @@ class studienplatz extends basis_db
' orgform_kurzbz='.$this->db_add_param($this->orgform_kurzbz).', '.
' studiensemester_kurzbz='.$this->db_add_param($this->studiensemester_kurzbz).', '.
' ausbildungssemester='.$this->db_add_param($this->ausbildungssemester).', '.
+ //' art='.$this->db_add_param($this->art).', '.
' gpz='.$this->db_add_param($this->gpz).', '.
' npz='.$this->db_add_param($this->npz).', '.
' updateamum= now(), '.
- ' updatevon='.$this->db_add_param($this->updatevon).', '.
- 'WHERE studienplatz_id='.$this->db_add_param($this->studienplatz_id, FHC_INTEGER, false).';';
+ ' updatevon='.$this->db_add_param($this->updatevon).
+ ' WHERE studienplatz_id='.$this->db_add_param($this->studienplatz_id, FHC_INTEGER, false).';';
}
if($this->db_query($qry))
@@ -306,8 +321,7 @@ class studienplatz extends basis_db
}
else
- {
- $this->errormsg = 'Fehler beim Speichern des Studienplatz-Datensatzes';
+ {
return false;
}
return $this->studienplatz_id;
@@ -335,8 +349,7 @@ class studienplatz extends basis_db
return true;
}
else
- {
- $this->errormsg = 'Fehler beim Löschen der Daten'."\n";
+ {
return false;
}
}
diff --git a/system/UnitTests/FunctionsTest.php b/system/UnitTests/FunctionsTest.php
new file mode 100644
index 000000000..35be2cf69
--- /dev/null
+++ b/system/UnitTests/FunctionsTest.php
@@ -0,0 +1,51 @@
+,
+ */
+
+require_once('../../config/vilesci.config.inc.php');
+require_once('../../include/functions.inc.php');
+
+class FunctionsTest extends PHPUnit_Framework_TestCase
+{
+
+ public function setUp()
+ {
+ }
+
+ public function testIncSemester()
+ {
+ $this->assertEquals('WS2014',incSemester('SS2014'));
+ $this->assertEquals('SS2015',incSemester('WS2014'));
+ $this->assertEquals('WS2015',incSemester('SS2015'));
+ $this->assertEquals('SS2016',incSemester('WS2015'));
+ }
+
+ public function testGenerateSemesterList()
+ {
+ $liste = generateSemesterList('WS2013', 3);
+ $this->assertEquals(4,count($liste));
+ $this->assertEquals('WS2013',$liste[0]);
+ $this->assertEquals('SS2014',$liste[1]);
+ $this->assertEquals('WS2014',$liste[2]);
+ $this->assertEquals('SS2015',$liste[3]);
+ }
+}
+
+?>
+
diff --git a/system/UnitTests/addons/studienplatzverwaltung/studienplatzverwaltungAPITest.php b/system/UnitTests/addons/studienplatzverwaltung/StudienplatzverwaltungAPITest.php
similarity index 90%
rename from system/UnitTests/addons/studienplatzverwaltung/studienplatzverwaltungAPITest.php
rename to system/UnitTests/addons/studienplatzverwaltung/StudienplatzverwaltungAPITest.php
index 9d5ff750e..dc10f976d 100644
--- a/system/UnitTests/addons/studienplatzverwaltung/studienplatzverwaltungAPITest.php
+++ b/system/UnitTests/addons/studienplatzverwaltung/StudienplatzverwaltungAPITest.php
@@ -61,6 +61,27 @@ class StudienplatzverwaltungAPITest extends PHPUnit_Framework_TestCase
}
}
+
+ public function testParseBasisDaten() {
+ $api = StudienplatzverwaltungAPI::init();
+ $result = $api->parseBasisdatenUV('testfile.xml');
+ $this->assertTrue($result);
+ }
+
+ public function testStudiengangSPVGetAll()
+ {
+ $studiengangSPV = new studiengangSPV();
+ $this->assertTrue($studiengangSPV->getAll('2013/14',2));
+ }
+
+ public function testNewUV()
+ {
+ $api = StudienplatzverwaltungAPI::init();
+ $appdaten = $api->newUV('2013/14',2, $this->uid);
+ $this->assertNotNull($appdaten);
+ }
+
+
public function testGetMetadata() {
$sj = '2013/14';
$this->assertNotEquals($this->createAppdaten($sj, $this->createDaten($sj)), false);
diff --git a/system/UnitTests/addons/studienplatzverwaltung/testfile.xml b/system/UnitTests/addons/studienplatzverwaltung/testfile.xml
new file mode 100644
index 000000000..a88d4dced
--- /dev/null
+++ b/system/UnitTests/addons/studienplatzverwaltung/testfile.xml
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/system/checksystem.php b/system/checksystem.php
index 7f663716d..806258ab2 100644
--- a/system/checksystem.php
+++ b/system/checksystem.php
@@ -433,7 +433,7 @@ if(!$result = @$db->db_query("SELECT 1 FROM lehre.tbl_studienplatz LIMIT 1;"))
orgform_kurzbz varchar(3),
ausbildungssemester smallint,
gpz integer,
- npz integer,
+ npz integer,
insertamum timestamp,
insertvon varchar(32),
updateamum timestamp,