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,