diff --git a/application/controllers/system/infocenter/InfoCenter.php b/application/controllers/system/infocenter/InfoCenter.php index cd88f814a..9e68c5cb8 100644 --- a/application/controllers/system/infocenter/InfoCenter.php +++ b/application/controllers/system/infocenter/InfoCenter.php @@ -297,6 +297,13 @@ class InfoCenter extends Auth_Controller } $persondata = $this->_loadPersonData($person_id); + + $checkPerson = $this->PersonModel->checkDuplicate($person_id); + + if (isError($checkPerson)) show_error(getError($checkPerson)); + + $duplicate = array('duplicated' => getData($checkPerson)); + $prestudentdata = $this->_loadPrestudentData($person_id); $this->DokumentModel->addOrder('bezeichnung'); @@ -305,7 +312,8 @@ class InfoCenter extends Auth_Controller $data = array_merge( $persondata, $prestudentdata, - $dokumentdata + $dokumentdata, + $duplicate ); $data[self::FHC_CONTROLLER_ID] = $this->getControllerId(); @@ -734,7 +742,7 @@ class InfoCenter extends Auth_Controller if (hasData($lastStatus) && hasData($statusgrresult)) { - //check if still Interessent + //check if still Interessent, Bewerber or Wartender if ($lastStatus->retval[0]->status_kurzbz === self::INTERESSENTSTATUS || $lastStatus->retval[0]->status_kurzbz === self::BEWERBERSTATUS || $lastStatus->retval[0]->status_kurzbz === self::WARTENDER) @@ -2134,17 +2142,18 @@ class InfoCenter extends Auth_Controller { $statusgrund = $this->input->post('statusgrund'); $studiengang = $this->input->post('studiengang'); + $abgeschickt = $this->input->post('abgeschickt'); $personen = $this->input->post('personen'); $studienSemester = $this->variablelib->getVar('infocenter_studiensemester'); - if ($statusgrund === 'null' || $studiengang === 'null' || empty($personen)) - $this->terminateWithJsonError("Bitte Statusgrund, Studiengang und Personen auswählen."); + if ($statusgrund === 'null' || $studiengang === 'null' || $abgeschickt === 'null' || empty($personen)) + $this->terminateWithJsonError("Bitte füllen Sie alle Felder aus"); foreach($personen as $person) { - $prestudent = $this->PrestudentModel->getPrestudentByStudiengangAndPerson($studiengang, $person, $studienSemester); + $prestudent = $this->PrestudentModel->getPrestudentByStudiengangAndPerson($studiengang, $person, $studienSemester, $abgeschickt); - if(!hasData($prestudent)) + if (!hasData($prestudent)) continue; $prestudentData = getData($prestudent); diff --git a/application/libraries/UDFLib.php b/application/libraries/UDFLib.php index 827bdc989..c5f0d3e98 100644 --- a/application/libraries/UDFLib.php +++ b/application/libraries/UDFLib.php @@ -312,10 +312,10 @@ class UDFLib { $resultElement->{$columnName} = $columnValue; } - } - // And finally remove the UDFs column - unset($resultElement->{self::COLUMN_NAME}); + // And finally remove the UDFs column + unset($resultElement->{self::COLUMN_NAME}); + } } /** diff --git a/application/models/crm/Prestudent_model.php b/application/models/crm/Prestudent_model.php index 4111e5f19..2d8ac4a7e 100644 --- a/application/models/crm/Prestudent_model.php +++ b/application/models/crm/Prestudent_model.php @@ -611,7 +611,7 @@ class Prestudent_model extends DB_Model )); } - public function getPrestudentByStudiengangAndPerson($studiengang, $person, $studienSemester) + public function getPrestudentByStudiengangAndPerson($studiengang, $person, $studienSemester, $abgeschickt) { $query = "SELECT ps.prestudent_id FROM public.tbl_prestudentstatus pss @@ -621,7 +621,17 @@ class Prestudent_model extends DB_Model WHERE ps.person_id = ? AND UPPER((sg.typ || sg.kurzbz) || ':' || sp.orgform_kurzbz) = ? AND pss.studiensemester_kurzbz = ? - "; + AND"; + + if ($abgeschickt === 'true') + $query .= " EXISTS"; + else + $query .= " NOT EXISTS"; + + $query .= " (SELECT 1 FROM public.tbl_prestudentstatus spss + JOIN public.tbl_prestudent sps USING(prestudent_id) + WHERE sps.prestudent_id = ps.prestudent_id + AND spss.bewerbung_abgeschicktamum IS NOT NULL)"; return $this->execQuery($query, array($person, $studiengang, $studienSemester)); } diff --git a/application/models/person/Person_model.php b/application/models/person/Person_model.php index 085c3f826..ec5522674 100644 --- a/application/models/person/Person_model.php +++ b/application/models/person/Person_model.php @@ -265,4 +265,19 @@ class Person_model extends DB_Model return success($result->vorname. ' '. $result->nachname); } + + public function checkDuplicate($person_id) + { + $qry = "SELECT sp.person_id + FROM public.tbl_person p + LEFT JOIN public.tbl_person sp ON p.vorname = sp.vorname + AND p.nachname = sp.nachname + AND p.gebdatum = sp.gebdatum + JOIN public.tbl_prestudent ps ON sp.person_id = ps.person_id + JOIN public.tbl_prestudentstatus pss ON ps.prestudent_id = pss.prestudent_id + WHERE p.person_id = ? AND sp.person_id != ? AND pss.status_kurzbz = ?"; + + + return $this->execQuery($qry, array($person_id, $person_id, 'Abbrecher')); + } } diff --git a/application/models/ressource/Betriebsmittelperson_model.php b/application/models/ressource/Betriebsmittelperson_model.php index 87915cfa8..1a97d9e38 100644 --- a/application/models/ressource/Betriebsmittelperson_model.php +++ b/application/models/ressource/Betriebsmittelperson_model.php @@ -18,7 +18,7 @@ class Betriebsmittelperson_model extends DB_Model * @param bool $isRetourniert False to retrieve only active Betriebsmittel. * @return array|bool */ - public function getBetriebsmittel($person_id, $betriebsmitteltyp = null, $isRetourniert = null) + public function getBetriebsmittel($person_id, $betriebsmitteltyp = null, $isRetourniert = null, $onlyAktiveBenutzer=false) { if (!is_numeric($person_id)) { @@ -28,8 +28,12 @@ class Betriebsmittelperson_model extends DB_Model $this->addJoin('wawi.tbl_betriebsmittel', 'betriebsmittel_id'); + if( $onlyAktiveBenutzer ) { + $this->addJoin('public.tbl_benutzer b', 'b.uid = wawi.tbl_betriebsmittelperson.uid AND b.aktiv = \'t\''); + } + $condition = ' - person_id = '. $this->escape($person_id). ' + wawi.tbl_betriebsmittelperson.person_id = '. $this->escape($person_id). ' '; if (is_string($betriebsmitteltyp)) { diff --git a/application/views/lehre/lehrauftrag/approveLehrauftragData.php b/application/views/lehre/lehrauftrag/approveLehrauftragData.php index 7c9669ae3..4d8dc36d0 100644 --- a/application/views/lehre/lehrauftrag/approveLehrauftragData.php +++ b/application/views/lehre/lehrauftrag/approveLehrauftragData.php @@ -2,7 +2,7 @@ $STUDIENSEMESTER = $studiensemester_selected; $ORGANISATIONSEINHEIT = (isset($organisationseinheit_selected) && !is_null($organisationseinheit_selected)) ? array($organisationseinheit_selected) : $organisationseinheit; -$AUSBILDUNGSSEMESTER = (isset($ausbildungssemester_selected) && !is_null($ausbildungssemester_selected)) ? $ausbildungssemester_selected : '1,2,3,4,5,6,7,8'; +$AUSBILDUNGSSEMESTER = (isset($ausbildungssemester_selected) && !is_null($ausbildungssemester_selected)) ? $ausbildungssemester_selected : '1,2,3,4,5,6,7,8,9,10'; $query = ' SELECT diff --git a/application/views/lehre/lehrauftrag/orderLehrauftrag.php b/application/views/lehre/lehrauftrag/orderLehrauftrag.php index 4498dacb4..023df1ac7 100644 --- a/application/views/lehre/lehrauftrag/orderLehrauftrag.php +++ b/application/views/lehre/lehrauftrag/orderLehrauftrag.php @@ -160,7 +160,7 @@ $this->load->view( 'Ausbildungssemester_widget', array( DropdownWidget::SELECTED_ELEMENT => $ausbildungssemester_selected, - 'number_semester' => 6 + 'number_semester' => 10 ), array( 'name' => 'ausbildungssemester', diff --git a/application/views/lehre/lehrauftrag/orderLehrauftragData.php b/application/views/lehre/lehrauftrag/orderLehrauftragData.php index 1ccfc55a4..c272c392c 100644 --- a/application/views/lehre/lehrauftrag/orderLehrauftragData.php +++ b/application/views/lehre/lehrauftrag/orderLehrauftragData.php @@ -2,7 +2,7 @@ $STUDIENSEMESTER = $studiensemester_selected; $STUDIENGANG = (isset($studiengang_selected) && !is_null($studiengang_selected)) ? array($studiengang_selected) : $studiengang; -$AUSBILDUNGSSEMESTER = (isset($ausbildungssemester_selected) && !is_null($ausbildungssemester_selected)) ? $ausbildungssemester_selected : '1,2,3,4,5,6,7,8'; +$AUSBILDUNGSSEMESTER = (isset($ausbildungssemester_selected) && !is_null($ausbildungssemester_selected)) ? $ausbildungssemester_selected : '1,2,3,4,5,6,7,8,9,10'; $query = ' SELECT diff --git a/application/views/system/infocenter/infocenterData.php b/application/views/system/infocenter/infocenterData.php index d0e0a7126..c49a1c6cc 100644 --- a/application/views/system/infocenter/infocenterData.php +++ b/application/views/system/infocenter/infocenterData.php @@ -6,7 +6,7 @@ $INTERESSENT_STATUS = '\'Interessent\''; $STUDIENGANG_TYP = '\''.$this->variablelib->getVar('infocenter_studiensgangtyp').'\''; $TAETIGKEIT_KURZBZ = '\'bewerbung\', \'kommunikation\''; - $LOGDATA_NAME = '\'Login with code\', \'Login with user\', \'New application\', \'Interessent rejected\''; + $LOGDATA_NAME = '\'Login with code\', \'Login with user\', \'Interessent rejected\''; $LOGDATA_NAME_PARKED = '\'Parked\''; $LOGDATA_NAME_ONHOLD = '\'Onhold\''; $LOGTYPE_KURZBZ = '\'Processstate\''; @@ -14,6 +14,7 @@ $ADDITIONAL_STG = $this->config->item('infocenter_studiengang_kz'); $AKTE_TYP = '\'identity\', \'zgv_bakk\''; $STUDIENSEMESTER = '\''.$this->variablelib->getVar('infocenter_studiensemester').'\''; + $ORG_NAME = '\'InfoCenter\''; $query = ' SELECT @@ -33,7 +34,7 @@ WHERE l.taetigkeit_kurzbz IN ('.$TAETIGKEIT_KURZBZ.') AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.') AND l.person_id = p.person_id - ORDER BY l.zeitpunkt DESC + ORDER BY l.log_id DESC LIMIT 1 ) AS "LastAction", ( @@ -42,7 +43,7 @@ WHERE l.taetigkeit_kurzbz IN('.$TAETIGKEIT_KURZBZ.') AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.') AND l.person_id = p.person_id - ORDER BY l.zeitpunkt DESC + ORDER BY l.log_id DESC LIMIT 1 ) AS "LastActionType", ( @@ -59,7 +60,7 @@ WHERE l.taetigkeit_kurzbz IN ('.$TAETIGKEIT_KURZBZ.') AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.') AND l.person_id = p.person_id - ORDER BY l.zeitpunkt DESC + ORDER BY l.log_id DESC LIMIT 1 ) AS "User/Operator", ( @@ -254,13 +255,14 @@ JOIN public.tbl_organisationseinheit USING(oe_kurzbz) WHERE (tbl_benutzerfunktion.datum_von IS NULL OR tbl_benutzerfunktion.datum_von <= now()) AND (tbl_benutzerfunktion.datum_bis IS NULL OR tbl_benutzerfunktion.datum_bis >= now()) + AND tbl_organisationseinheit.bezeichnung = '.$ORG_NAME.' AND tbl_benutzerfunktion.uid = ( SELECT l.insertvon FROM system.tbl_log l WHERE l.taetigkeit_kurzbz IN ('.$TAETIGKEIT_KURZBZ.') AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.') AND l.person_id = p.person_id - ORDER BY l.zeitpunkt DESC + ORDER BY l.log_id DESC LIMIT 1 ) LIMIT 1 @@ -439,13 +441,13 @@ $datasetRaw->{'ZGVMNation'} = '-'; } - if ($datasetRaw->{'InfoCenterMitarbeiter'} === 'InfoCenter') + if ($datasetRaw->{'InfoCenterMitarbeiter'} === null) { - $datasetRaw->{'InfoCenterMitarbeiter'} = 'Ja'; + $datasetRaw->{'InfoCenterMitarbeiter'} = 'Nein'; } else { - $datasetRaw->{'InfoCenterMitarbeiter'} = 'Nein'; + $datasetRaw->{'InfoCenterMitarbeiter'} = 'Ja'; } return $datasetRaw; diff --git a/application/views/system/infocenter/infocenterDetails.php b/application/views/system/infocenter/infocenterDetails.php index 30acb8617..76a371c11 100644 --- a/application/views/system/infocenter/infocenterDetails.php +++ b/application/views/system/infocenter/infocenterDetails.php @@ -101,6 +101,22 @@ + +
+

+ p->t('global', 'bewerberVorhanden') . ':'; ?> +

+
+ person_id . '
'; + } + ?> +
+ +
+
diff --git a/application/views/system/infocenter/infocenterFreigegebenData.php b/application/views/system/infocenter/infocenterFreigegebenData.php index 26c30d718..9078c13db 100644 --- a/application/views/system/infocenter/infocenterFreigegebenData.php +++ b/application/views/system/infocenter/infocenterFreigegebenData.php @@ -5,13 +5,14 @@ $INTERESSENT_STATUS = '\'Interessent\''; $STUDIENGANG_TYP = '\''.$this->variablelib->getVar('infocenter_studiensgangtyp').'\''; $TAETIGKEIT_KURZBZ = '\'bewerbung\', \'kommunikation\''; - $LOGDATA_NAME = '\'Login with code\', \'Login with user\', \'New application\''; + $LOGDATA_NAME = '\'Login with code\', \'Login with user\''; $REJECTED_STATUS = '\'Abgewiesener\''; $ADDITIONAL_STG = $this->config->item('infocenter_studiengang_kz'); $STATUS_KURZBZ = '\'Wartender\', \'Bewerber\', \'Aufgenommener\', \'Student\''; $STUDIENSEMESTER = '\''.$this->variablelib->getVar('infocenter_studiensemester').'\''; + $ORG_NAME = '\'InfoCenter\''; - $query = ' +$query = ' SELECT p.person_id AS "PersonId", p.vorname AS "Vorname", @@ -27,7 +28,7 @@ WHERE l.taetigkeit_kurzbz IN('.$TAETIGKEIT_KURZBZ.') AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.') AND l.person_id = p.person_id - ORDER BY l.zeitpunkt DESC + ORDER BY l.log_id DESC LIMIT 1 ) AS "LastAction", ( @@ -36,7 +37,7 @@ WHERE l.taetigkeit_kurzbz IN('.$TAETIGKEIT_KURZBZ.') AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.') AND l.person_id = p.person_id - ORDER BY l.zeitpunkt DESC + ORDER BY l.log_id DESC LIMIT 1 ) AS "LastActionType", ( @@ -45,7 +46,7 @@ WHERE l.taetigkeit_kurzbz IN('.$TAETIGKEIT_KURZBZ.') AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.') AND l.person_id = p.person_id - ORDER BY l.zeitpunkt DESC + ORDER BY l.log_id DESC LIMIT 1 ) AS "User/Operator", ( @@ -231,13 +232,14 @@ JOIN public.tbl_organisationseinheit USING(oe_kurzbz) WHERE (tbl_benutzerfunktion.datum_von IS NULL OR tbl_benutzerfunktion.datum_von <= now()) AND (tbl_benutzerfunktion.datum_bis IS NULL OR tbl_benutzerfunktion.datum_bis >= now()) + AND tbl_organisationseinheit.bezeichnung = '.$ORG_NAME.' AND tbl_benutzerfunktion.uid = ( SELECT l.insertvon FROM system.tbl_log l WHERE l.taetigkeit_kurzbz IN ('.$TAETIGKEIT_KURZBZ.') AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.') AND l.person_id = p.person_id - ORDER BY l.zeitpunkt DESC + ORDER BY l.log_id DESC LIMIT 1 ) LIMIT 1 @@ -410,13 +412,13 @@ $datasetRaw->{'ZGVMNation'} = '-'; } - if ($datasetRaw->{'InfoCenterMitarbeiter'} === 'InfoCenter') + if ($datasetRaw->{'InfoCenterMitarbeiter'} === null) { - $datasetRaw->{'InfoCenterMitarbeiter'} = 'Ja'; + $datasetRaw->{'InfoCenterMitarbeiter'} = 'Nein'; } else { - $datasetRaw->{'InfoCenterMitarbeiter'} = 'Nein'; + $datasetRaw->{'InfoCenterMitarbeiter'} = 'Ja'; } return $datasetRaw; diff --git a/application/views/system/infocenter/infocenterReihungstestAbsolviertData.php b/application/views/system/infocenter/infocenterReihungstestAbsolviertData.php index 81ddd2594..5aa664a97 100644 --- a/application/views/system/infocenter/infocenterReihungstestAbsolviertData.php +++ b/application/views/system/infocenter/infocenterReihungstestAbsolviertData.php @@ -5,11 +5,12 @@ $INTERESSENT_STATUS = '\'Interessent\''; $STUDIENGANG_TYP = '\''.$this->variablelib->getVar('infocenter_studiensgangtyp').'\''; $TAETIGKEIT_KURZBZ = '\'bewerbung\', \'kommunikation\''; - $LOGDATA_NAME = '\'Login with code\', \'Login with user\', \'New application\''; + $LOGDATA_NAME = '\'Login with code\', \'Login with user\''; $ADDITIONAL_STG = $this->config->item('infocenter_studiengang_kz'); $STUDIENSEMESTER = '\''.$this->variablelib->getVar('infocenter_studiensemester').'\''; + $ORG_NAME = '\'InfoCenter\''; - $query = ' +$query = ' SELECT p.person_id AS "PersonId", p.vorname AS "Vorname", @@ -25,7 +26,7 @@ WHERE l.taetigkeit_kurzbz IN('.$TAETIGKEIT_KURZBZ.') AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.') AND l.person_id = p.person_id - ORDER BY l.zeitpunkt DESC + ORDER BY l.log_id DESC LIMIT 1 ) AS "LastAction", ( @@ -34,7 +35,7 @@ WHERE l.taetigkeit_kurzbz IN('.$TAETIGKEIT_KURZBZ.') AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.') AND l.person_id = p.person_id - ORDER BY l.zeitpunkt DESC + ORDER BY l.log_id DESC LIMIT 1 ) AS "User/Operator", ( @@ -182,13 +183,14 @@ JOIN public.tbl_organisationseinheit USING(oe_kurzbz) WHERE (tbl_benutzerfunktion.datum_von IS NULL OR tbl_benutzerfunktion.datum_von <= now()) AND (tbl_benutzerfunktion.datum_bis IS NULL OR tbl_benutzerfunktion.datum_bis >= now()) + AND tbl_organisationseinheit.bezeichnung = '.$ORG_NAME.' AND tbl_benutzerfunktion.uid = ( SELECT l.insertvon FROM system.tbl_log l WHERE l.taetigkeit_kurzbz IN ('.$TAETIGKEIT_KURZBZ.') AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.') AND l.person_id = p.person_id - ORDER BY l.zeitpunkt DESC + ORDER BY l.log_id DESC LIMIT 1 ) LIMIT 1 @@ -347,13 +349,13 @@ $datasetRaw->{'ZGVMNation'} = '-'; } - if ($datasetRaw->{'InfoCenterMitarbeiter'} === 'InfoCenter') + if ($datasetRaw->{'InfoCenterMitarbeiter'} === null) { - $datasetRaw->{'InfoCenterMitarbeiter'} = 'Ja'; + $datasetRaw->{'InfoCenterMitarbeiter'} = 'Nein'; } else { - $datasetRaw->{'InfoCenterMitarbeiter'} = 'Nein'; + $datasetRaw->{'InfoCenterMitarbeiter'} = 'Ja'; } return $datasetRaw; diff --git a/cis/private/tools/zeitaufzeichnung_projektliste.php b/cis/private/tools/zeitaufzeichnung_projektliste.php index 177f1f8aa..ce00eabc1 100644 --- a/cis/private/tools/zeitaufzeichnung_projektliste.php +++ b/cis/private/tools/zeitaufzeichnung_projektliste.php @@ -750,7 +750,7 @@ foreach ($projektnames as $projektname) } $worksheet->setColumn($spalte, $spalte, $phasewidth); - $worksheet->write($zeile, $spalte++, $projekt->beschreibung, $format_cell_leftrightline); + $worksheet->writeString($zeile, $spalte++, $projekt->beschreibung, $format_cell_leftrightline); } } else diff --git a/content/lvplanung/timetable-week.xul.php b/content/lvplanung/timetable-week.xul.php index 18eaf6076..7e3a144dd 100644 --- a/content/lvplanung/timetable-week.xul.php +++ b/content/lvplanung/timetable-week.xul.php @@ -1,708 +1,735 @@ -, - * Andreas Oesterreicher and - * Rudolf Hangl . - * Gerald Simane-Sequens . - */ -header("Content-type: application/vnd.mozilla.xul+xml"); - -require_once('../../config/vilesci.config.inc.php'); -require_once('../../include/globals.inc.php'); -require_once('../../include/functions.inc.php'); -require_once('../../include/benutzerberechtigung.class.php'); -require_once('../../include/lehreinheit.class.php'); -require_once('../../include/zeitwunsch.class.php'); -require_once('../../include/wochenplan.class.php'); -require_once('../../include/reservierung.class.php'); -require_once('../../include/log.class.php'); - -echo ''; -echo ''; -$PHP_SELF = $_SERVER['PHP_SELF']; -// Startwerte setzen -$db_stpl_table=null; -$db = new basis_db(); - -echo ''; - -$uid = get_uid(); - -//Berechtigung pruefen -$rechte = new benutzerberechtigung(); -$rechte->getBerechtigungen($uid); - -if(!$rechte->isBerechtigt('lehre/lvplan')) - die('Sie haben keine Berechtigung fuer diese Seite'); - -$error_msg=''; -$kollision_msg=''; - -// Benutzerdefinierte Variablen laden -loadVariables($uid); - -if (!isset($ignore_kollision)) - $ignore_kollision=(boolean)false; -elseif ($ignore_kollision=='false') - $ignore_kollision=(boolean)false; -else - $ignore_kollision=(boolean)true; - -if (!isset($alle_unr_mitladen)) - $alle_unr_mitladen=(boolean)false; -elseif ($alle_unr_mitladen=='false') - $alle_unr_mitladen=(boolean)false; -else - $alle_unr_mitladen=(boolean)true; - -// Bezeichnungen fuer Tabellen und Views -$lva_stpl_view=VIEW_BEGIN.'lva_'.$db_stpl_table; - -// Variablen uebernehmen -if (isset($_GET['aktion'])) - $aktion=$_GET['aktion']; -else - $aktion=null; - -if (isset($_GET['semesterplan'])) - $semesterplan=$_GET['semesterplan']; -else - $semesterplan=false; -if (isset($_GET['new_stunde'])) - $new_stunde=$_GET['new_stunde']; -if (isset($_GET['new_datum'])) - $new_datum=$_GET['new_datum']; -if (isset($_GET['old_ort'])) - $old_ort=$_GET['old_ort']; -if (isset($_GET['new_ort'])) - $new_ort=$_GET['new_ort']; -if (isset($_GET['kollisionsanzahl'])) - $kollisionsanzahl=$_GET['kollisionsanzahl']; -else - $kollisionsanzahl=0; -if (isset($_GET['ort'])) - $ort=$_GET['ort']; -else - $ort=null; -if (isset($_GET['datum'])) - $datum=$_GET['datum']; -if (isset($_GET['type'])) - $type=$_GET['type']; -if (isset($_GET['stg_kz'])) - $stg_kz=$_GET['stg_kz']; -else - $stg_kz=null; -if (isset($_GET['sem'])) - $sem=$_GET['sem']; -else - $sem=null; -if (isset($_GET['ver'])) - $ver=$_GET['ver']; -else - $ver=null; -if (isset($_GET['grp'])) - $grp=$_GET['grp']; -else - $grp=null; -if (isset($_GET['pers_uid'])) - $pers_uid=$_GET['pers_uid']; -if (isset($_GET['gruppe'])) - $gruppe=$_GET['gruppe']; -else - $gruppe=null; -if (isset($_GET['semester_aktuell'])) - $semester_aktuell=$_GET['semester_aktuell']; - -if (!isset($semester_aktuell) && $semesterplan) - $error_msg.='Studien-Semester ist nicht gesetzt!'; - -if(isset($_GET['fachbereich_kurzbz'])) - $fachbereich_kurzbz = $_GET['fachbereich_kurzbz']; -else - $fachbereich_kurzbz=null; - -if (isset($_GET['new_unr'])) - $new_unr=$_GET['new_unr']; -else - $new_unr=null; - -if (isset($_GET['new_blockung'])) - $new_blockung=$_GET['new_blockung']; -else - $new_blockung=null; -?> - - - - > - - - +, + * Andreas Oesterreicher and + * Rudolf Hangl . + * Gerald Simane-Sequens . + */ +header("Content-type: application/vnd.mozilla.xul+xml"); + +require_once('../../config/vilesci.config.inc.php'); +require_once('../../include/globals.inc.php'); +require_once('../../include/functions.inc.php'); +require_once('../../include/benutzerberechtigung.class.php'); +require_once('../../include/lehreinheit.class.php'); +require_once('../../include/zeitwunsch.class.php'); +require_once('../../include/wochenplan.class.php'); +require_once('../../include/reservierung.class.php'); +require_once('../../include/log.class.php'); + +echo ''; +echo ''; +$PHP_SELF = $_SERVER['PHP_SELF']; +// Startwerte setzen +$db_stpl_table=null; +$db = new basis_db(); + +echo ''; + +$uid = get_uid(); + +//Berechtigung pruefen +$rechte = new benutzerberechtigung(); +$rechte->getBerechtigungen($uid); + +if(!$rechte->isBerechtigt('lehre/lvplan')) + die('Sie haben keine Berechtigung fuer diese Seite'); + +$error_msg=''; +$kollision_msg=''; + +// Benutzerdefinierte Variablen laden +loadVariables($uid); + +if (!isset($ignore_kollision)) + $ignore_kollision=(boolean)false; +elseif ($ignore_kollision=='false') + $ignore_kollision=(boolean)false; +else + $ignore_kollision=(boolean)true; + +if (!isset($alle_unr_mitladen)) + $alle_unr_mitladen=(boolean)false; +elseif ($alle_unr_mitladen=='false') + $alle_unr_mitladen=(boolean)false; +else + $alle_unr_mitladen=(boolean)true; + +// Bezeichnungen fuer Tabellen und Views +$lva_stpl_view=VIEW_BEGIN.'lva_'.$db_stpl_table; + +// Variablen uebernehmen +if (isset($_GET['aktion'])) + $aktion=$_GET['aktion']; +else + $aktion=null; + +if (isset($_GET['semesterplan'])) + $semesterplan=$_GET['semesterplan']; +else + $semesterplan=false; +if (isset($_GET['new_stunde'])) + $new_stunde=$_GET['new_stunde']; +if (isset($_GET['new_datum'])) + $new_datum=$_GET['new_datum']; +if (isset($_GET['old_ort'])) + $old_ort=$_GET['old_ort']; +if (isset($_GET['new_ort'])) + $new_ort=$_GET['new_ort']; +if (isset($_GET['kollisionsanzahl'])) + $kollisionsanzahl=$_GET['kollisionsanzahl']; +else + $kollisionsanzahl=0; +if (isset($_GET['ort'])) + $ort=$_GET['ort']; +else + $ort=null; +if (isset($_GET['datum'])) + $datum=$_GET['datum']; +if (isset($_GET['type'])) + $type=$_GET['type']; +if (isset($_GET['stg_kz'])) + $stg_kz=$_GET['stg_kz']; +else + $stg_kz=null; +if (isset($_GET['sem'])) + $sem=$_GET['sem']; +else + $sem=null; +if (isset($_GET['ver'])) + $ver=$_GET['ver']; +else + $ver=null; +if (isset($_GET['grp'])) + $grp=$_GET['grp']; +else + $grp=null; +if (isset($_GET['pers_uid'])) + $pers_uid=$_GET['pers_uid']; +if (isset($_GET['gruppe'])) + $gruppe=$_GET['gruppe']; +else + $gruppe=null; +if (isset($_GET['semester_aktuell'])) + $semester_aktuell=$_GET['semester_aktuell']; + +if (!isset($semester_aktuell) && $semesterplan) + $error_msg.='Studien-Semester ist nicht gesetzt!'; + +if(isset($_GET['fachbereich_kurzbz'])) + $fachbereich_kurzbz = $_GET['fachbereich_kurzbz']; +else + $fachbereich_kurzbz=null; + +if (isset($_GET['new_unr'])) + $new_unr=$_GET['new_unr']; +else + $new_unr=null; + +if (isset($_GET['new_blockung'])) + $new_blockung=$_GET['new_blockung']; +else + $new_blockung=null; +?> + + + + > + + + diff --git a/content/statistik/lvplanung.xls.php b/content/statistik/lvplanung.xls.php index 3b74992fa..970e66899 100644 --- a/content/statistik/lvplanung.xls.php +++ b/content/statistik/lvplanung.xls.php @@ -29,6 +29,7 @@ require_once('../../include/benutzer.class.php'); require_once('../../include/mitarbeiter.class.php'); require_once('../../include/organisationseinheit.class.php'); require_once('../../include/benutzerberechtigung.class.php'); +require_once('../../include/studiensemester.class.php'); $user = get_uid(); @@ -114,6 +115,9 @@ $oe_arr[''] = ''; $stg_obj = new studiengang(); $stg_obj->getAll('typ, kurzbz', false); +$stsem = new studiensemester(); + +$previousStsem = $stsem->getPreviousFrom($stsem->getPreviousFrom($studiensemester_kurzbz)); $qry = " SELECT tbl_lehrveranstaltung.bezeichnung AS lf_bezeichnung, tbl_lehrveranstaltung.studiengang_kz, @@ -124,18 +128,21 @@ SELECT tbl_lehrveranstaltung.bezeichnung AS lf_bezeichnung, tbl_lehreinheitmitarbeiter.stundensatz, tbl_lehreinheitmitarbeiter.semesterstunden lemss, tbl_lehreinheitmitarbeiter.planstunden, + tbl_lehreinheitmitarbeiter.anmerkung as mitarbeiter_anmerkung, tbl_lehreinheit.stundenblockung, tbl_lehreinheit.wochenrythmus, tbl_lehreinheit.raumtyp, tbl_lehreinheit.raumtypalternativ, - tbl_lehreinheit.anmerkung, + tbl_lehreinheit.anmerkung as lehreinheit_anmerkung, tbl_lehreinheit.studiensemester_kurzbz, + tbl_lehreinheit.start_kw, tbl_lehrveranstaltung.ects, tbl_lehrveranstaltung.semesterstunden, tbl_lehrveranstaltung.semesterstunden AS sws, tbl_lehrveranstaltung.lehrform_kurzbz, tbl_lehrveranstaltung.lehrveranstaltung_id, tbl_lehrveranstaltung.orgform_kurzbz, + tbl_lehrveranstaltung.sprache, ( SELECT nachname FROM PUBLIC.tbl_person @@ -163,6 +170,17 @@ SELECT tbl_lehrveranstaltung.bezeichnung AS lf_bezeichnung, FROM lehre.tbl_lehrform WHERE lehre.tbl_lehrform.lehrform_kurzbz = tbl_lehrveranstaltung.lehrform_kurzbz LIMIT 1 ) AS lv_type, + ( + SELECT STRING_AGG(DISTINCT (person.nachname || ' ' || person.vorname), ', ') + FROM lehre.tbl_lehrveranstaltung slv + JOIN lehre.tbl_lehreinheit sle USING (lehrveranstaltung_id) + JOIN lehre.tbl_lehreinheitmitarbeiter slema USING (lehreinheit_id) + JOIN PUBLIC.tbl_benutzer benutzer ON benutzer.uid = slema.mitarbeiter_uid + JOIN PUBLIC.tbl_person person USING (person_id) + WHERE lehre.tbl_lehreinheit.lehrveranstaltung_id = sle.lehrveranstaltung_id + AND tbl_lehrveranstaltung.lehrform_kurzbz = slv.lehrform_kurzbz + AND sle.studiensemester_kurzbz = " . $db->db_add_param($previousStsem) . " + ) AS vorjahr_lektor, tbl_lehrveranstaltung.lehrform_kurzbz FROM lehre.tbl_lehrveranstaltung JOIN lehre.tbl_lehreinheit USING (lehrveranstaltung_id) @@ -217,6 +235,10 @@ $worksheet->write($zeile,++$spalte,"LektorIn", $format_bold); $maxlength[$spalte]=6; $worksheet->write($zeile,++$spalte,"Fixangestellt", $format_bold); $maxlength[$spalte]=10; +$worksheet->write($zeile,++$spalte,"Vorjahrslektor", $format_bold); +$maxlength[$spalte]=12; +$worksheet->write($zeile,++$spalte,"Lektor*in bestätigt", $format_bold); +$maxlength[$spalte]=12; $worksheet->write($zeile,++$spalte,"Bezeichnung", $format_bold); $maxlength[$spalte]=25; $worksheet->write($zeile,++$spalte,"Semester", $format_bold); @@ -239,8 +261,12 @@ $worksheet->write($zeile,++$spalte,"Raum", $format_bold); $maxlength[$spalte]=4; $worksheet->write($zeile,++$spalte,"Raum alternativ", $format_bold); $maxlength[$spalte]=15; -$worksheet->write($zeile,++$spalte,"Anmerkung", $format_bold); -$maxlength[$spalte]=9; + +$worksheet->write($zeile,++$spalte,"Anmerkung für LV Planung", $format_bold); +$maxlength[$spalte]=25; + +$worksheet->write($zeile,++$spalte,"Anmerkung für Dpt/KF", $format_bold); +$maxlength[$spalte]=25; $worksheet->write($zeile,++$spalte,"LV-Leitung", $format_bold); $maxlength[$spalte]=9; @@ -260,6 +286,16 @@ $maxlength[$spalte]=9; $worksheet->write($zeile,++$spalte,"Organisationsform", $format_bold); $maxlength[$spalte]=15; +$worksheet->write($zeile,++$spalte,"Sprache (LV)", $format_bold); +$maxlength[$spalte]=10; + +$worksheet->write($zeile,++$spalte,"Software", $format_bold); +$maxlength[$spalte]=10; + +$worksheet->write($zeile,++$spalte,"Start in KW", $format_bold); +$maxlength[$spalte]=10; + + if($result = $db->db_query($qry)) { while($row = $db->db_fetch_object($result)) @@ -290,6 +326,10 @@ if($result = $db->db_query($qry)) if($maxlength[$spalte]fixangestellt ? 'Ja' : 'Nein')) $maxlength[$spalte]=mb_strlen($mitarbeiter->fixangestellt ? 'Ja' : 'Nein'); + $worksheet->write($zeile,++$spalte, $row->vorjahr_lektor); + + $worksheet->write($zeile,++$spalte, ''); + //Lehrfach $worksheet->write($zeile,++$spalte,$row->lf_bezeichnung); //if($maxlength[$spalte]lf_bezeichnung)) @@ -354,10 +394,12 @@ if($result = $db->db_query($qry)) $worksheet->write($zeile,++$spalte,$row->raumtypalternativ); if($maxlength[$spalte]raumtypalternativ)) $maxlength[$spalte]=mb_strlen($row->raumtypalternativ); - //Anmerkung - $worksheet->write($zeile,++$spalte,$row->anmerkung); - //if($maxlength[$spalte]anmerkung)) - //$maxlength[$spalte]=mb_strlen($row->anmerkung); + + //Anmerkung für LV Planung + $worksheet->write($zeile,++$spalte,$row->lehreinheit_anmerkung); + + //Anmerkung für Dpt/KF + $worksheet->write($zeile,++$spalte,$row->mitarbeiter_anmerkung); //LV-Leitung $worksheet->write($zeile,++$spalte,$row->lv_leitung.' '.$row->lv_leitung_vorname); @@ -394,6 +436,15 @@ if($result = $db->db_query($qry)) $worksheet->write($zeile,++$spalte,$row->orgform_kurzbz); if($maxlength[$spalte]orgform_kurzbz)) $maxlength[$spalte]=mb_strlen($row->orgform_kurzbz); + + //Sprache (LV) + $worksheet->write($zeile,++$spalte,$row->sprache); + + //Software + $worksheet->write($zeile,++$spalte,''); + + //Start in KW + $worksheet->write($zeile,++$spalte,$row->start_kw); } //Betreuungen diff --git a/content/student/studentDBDML.php b/content/student/studentDBDML.php index e411dbaad..dd3525d1d 100644 --- a/content/student/studentDBDML.php +++ b/content/student/studentDBDML.php @@ -110,10 +110,18 @@ function generateMatrikelnummer($studiengang_kz, $studiensemester_kurzbz) { $db = new basis_db(); + $studiengang_details = new studiengang(); + $studiengang_details->load($studiengang_kz); + + if (!isset($studiengang_details->studiengang_kz)) + { + return false; + } + $jahr = substr($studiensemester_kurzbz, 4); $art = substr($studiensemester_kurzbz, 0, 2); - if($studiengang_kz<0) + if (($studiengang_kz < 0) || (isset($studiengang_details->typ) && ($studiengang_details->typ == 'l'))) { $studiengang_kz=abs($studiengang_kz); //Lehrgang @@ -136,7 +144,17 @@ function generateMatrikelnummer($studiengang_kz, $studiensemester_kurzbz) } if($art=='2' || $art=='4') $jahr = $jahr-1; - $matrikelnummer = sprintf("%02d",$jahr).$art.sprintf("%04d",$studiengang_kz); + + //FH-Burgenland - weil leider die AO Studiengänge aufgeteilt sind + //(AO sind normal 9+erhalter Nummer, matrikelnr/personenkz wird auch im DVUH Extension berücksichtigt) + if ($studiengang_kz >= 90010 && $studiengang_kz <= 90019) + { + $matrikelnummer = sprintf("%02d",$jahr).$art.substr($studiengang_kz, 0, 4); + } + else + { + $matrikelnummer = sprintf("%02d",$jahr).$art.sprintf("%04d",$studiengang_kz); + } $qry = "SELECT matrikelnr FROM public.tbl_student WHERE matrikelnr LIKE '$matrikelnummer%' ORDER BY matrikelnr DESC LIMIT 1"; diff --git a/include/konto.class.php b/include/konto.class.php index c23209a06..09afa5303 100644 --- a/include/konto.class.php +++ b/include/konto.class.php @@ -713,7 +713,7 @@ class konto extends basis_db $qry = "select sum(betrag) as betrag from public.tbl_konto join public.tbl_benutzer benutzer using(person_id) where uid=".$this->db_add_param($uid)." and studiensemester_kurzbz = ".$this->db_add_param($stsem)." - and buchungstyp_kurzbz = 'Studiengebuehr' and betrag > 0"; + and buchungstyp_kurzbz in('Studiengebuehr','StudiengebuehrAnzahlung','StudiengebuehrRestzahlung') and betrag > 0"; if($studiengang_kz!= null) $qry.=" and studiengang_kz = ".$this->db_add_param($studiengang_kz, FHC_INTEGER).";"; diff --git a/include/lehrstunde.class.php b/include/lehrstunde.class.php index 87e6ca569..71dbf3319 100644 --- a/include/lehrstunde.class.php +++ b/include/lehrstunde.class.php @@ -1,1142 +1,1143 @@ -new=TRUE; - } - - /** - * @brief Einen Datensatz aus optional angegebener Stundenplan-Tabelle laden - * @param stundenplan_id ID in der Datenbank - * @param stpl_table Name der Tabelle in der DB - * @return Boolean, Fehlermeldung kommt in das Attribut errormsg - */ - public function load($stundenplan_id,$stpl_table='stundenplandev') - { - // Bezeichnung der Stundenplan-Tabelle und des Keys - $stpl_id=$stpl_table.TABLE_ID; - $stpl_view='lehre.'.VIEW_BEGIN.$stpl_table; - $stpl_table='lehre.'.TABLE_BEGIN.$stpl_table; - - $sql_query="SELECT * FROM $stpl_view WHERE $stpl_id=$stundenplan_id;"; - - //Datenbankabfrage - if (!$this->db_query($sql_query)) - { - $this->errormsg=$sql_query.$this->db_last_error(); - return false; - } - - $this->anzahl = $this->db_num_rows(); - - //Daten uebernehmen - if ($this->anzahl!=1) - { - $this->errormsg='Keinen Datensatz gefunden'; - return false; - } - else - { - $row=$this->db_fetch_object(); - $this->stundenplan_id=$row->{$stpl_id}; - $this->unr=$row->unr; - $this->lektor_uid=$row->uid; - $this->lektor_kurzbz=$row->lektor; - $this->datum=$row->datum; - $this->stunde=$row->stunde; - $this->ort_kurzbz=$row->ort_kurzbz; - $this->lehrfach=$row->lehrfach; - $this->lehrfach_bez=$row->lehrfach_bez; - $this->lehrfach_id=$row->lehrfach_id; - $this->lehrform=$row->lehrform; - $this->studiengang_kz=$row->studiengang_kz; - $this->studiengang=$row->stg_kurzbz; - $this->sem=$row->semester; - $this->ver=$row->verband; - $this->grp=$row->gruppe; - $this->gruppe_kurzbz=$row->gruppe_kurzbz; - $this->titel=$row->titel; - $this->anmerkung=$row->anmerkung; - $this->updateamum=$row->updateamum; - $this->updatevon=$row->updatevon; - $this->new=false; - } - return true; - } - - /** - * Datensatz in DB speichern - * - */ - public function save($uid, $stpl_table='stundenplandev') - { - // Parameter Checken - // Bezeichnung der Stundenplan-Tabelle und des Keys - $stpl_id=$stpl_table.TABLE_ID; - $stpl_table='lehre.'.TABLE_BEGIN.$stpl_table; - if ($this->new) - { - // insert - } - else - { - // update - $sql_query='UPDATE '.$stpl_table; - $sql_query.=" SET datum=".$this->db_add_param($this->datum).", stunde=".$this->db_add_param($this->stunde); - $sql_query.=", ort_kurzbz=".$this->db_add_param($this->ort_kurzbz).", mitarbeiter_uid=".$this->db_add_param($this->lektor_uid); - if($this->unr!='') - $sql_query.=", unr=".$this->db_add_param($this->unr); - $sql_query.=", updateamum=now(), updatevon=".$this->db_add_param($uid); - $sql_query.=" WHERE $stpl_id=".$this->db_add_param($this->stundenplan_id); - - $this->lastqry = $sql_query; - //Datenbankabfrage - if (!$this->db_query($sql_query)) - { - $this->errormsg=$sql_query.$this->db_last_error(); - return false; - } - } - - return true; - } - - /** - * Erstellt einen Undo Befehl fuer die Speichern funktion - * - * @param $stpl_table - * @return string undo - */ - public function getUndo($stpl_table='stundenplandev') - { - $stpl_id=$stpl_table.TABLE_ID; - $stpl_table='lehre.'.TABLE_BEGIN.$stpl_table; - - $sql_query='UPDATE '.$stpl_table; - $sql_query.=" SET datum=".$this->db_add_param($this->datum).", stunde=".$this->db_add_param($this->stunde); - $sql_query.=", ort_kurzbz=".$this->db_add_param($this->ort_kurzbz).", mitarbeiter_uid=".$this->db_add_param($this->lektor_uid); - $sql_query.=", updateamum=".$this->db_add_param($this->updateamum).", updatevon=".$this->db_add_param($this->updatevon); - $sql_query.=" WHERE $stpl_id=".$this->db_add_param($this->stundenplan_id).";"; - - return $sql_query; - } - - /** - * Datensatz aus DB entfernen - * @param id ID des Datensatzes in der Tabelle - * @param stpl_table Name der Tabelle - * - */ - public function delete($id, $stpl_table='stundenplandev') - { - // Parameter Checken - // Bezeichnung der Stundenplan-Tabelle und des Keys - $stpl_id=$stpl_table.TABLE_ID; - $stpl_table='lehre.'.TABLE_BEGIN.$stpl_table; - // Delete SQL vorbereiten - $sql_query='DELETE FROM '.$stpl_table; - $sql_query.=" WHERE $stpl_id=".$this->db_add_param($id); - - //Datenbankrequest - if (!$this->db_query($sql_query)) - { - $this->errormsg=$sql_query.$this->db_last_error(); - return false; - } - else - return true; - } - - /** - * Laedt Lehrstunden - * - * @param type (student, lektor, lehrverband, gruppe, ort, ....) - * @param datum_von (inklusive) Startdatum der Abfrage - * @param datum_bis (exklusive) Enddatum der Abfrage - * @param uid (des Lektors oder Studenten) kann auch NULL sein - * @param ort_kurzbz (Kurzbezeichnung des Orts) kann auch NULL sein - * @param studiengang_kz - * @param sem - * @param ver - * @param grp - * @param gruppe_kurzbz - * - */ - public function load_lehrstunden($type, $datum_von, $datum_bis, $uid, $ort_kurzbz=NULL, $studiengang_kz=NULL, $sem=NULL, $ver=NULL, $grp=NULL, $gruppe_kurzbz=NULL, $stpl_view='stundenplan', $idList=null, $fachbereich_kurzbz=null, $lva=NULL, $alle_unr_mitladen=false) - { - $num_rows_einheit=0; - // Parameter Checken - // Bezeichnung der Stundenplan-Tabelle und des Keys - $stpl_id=$stpl_view.TABLE_ID; - $stpl_view_ohneschema=VIEW_BEGIN.$stpl_view; - $stpl_view='lehre.'.VIEW_BEGIN.$stpl_view; - - - // Datum im Format YYYY-MM-TT ? - if (!preg_match("/([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})/",$datum_von) ) - { - $this->errormsg='Fehler: Startdatum hat falsches Format!'; - return -1; - } - if ($datum_bis!=null) - { - if (!preg_match("/([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})/",$datum_bis) ) - { - $this->errormsg='Fehler: Enddatum hat falsches Format!'; - return -1; - } - } - else - $datum_bis=$datum_von; - - // Person - if (($type=='student' || $type=='lektor') && $uid==NULL) - { - $this->errormsg='Fehler: uid der Person ist nicht gesetzt'; - return -1; - } - // Ort - if ($type=='ort' && $ort_kurzbz==NULL) - { - $this->errormsg='Fehler: Kurzbezeichnung des Orts ist nicht gesetzt'; - return -1; - } - // Gruppe - if ($type=='gruppe' && $gruppe_kurzbz==NULL) - { - $this->errormsg='Fehler: Kurzbezeichnung der Gruppe ist nicht gesetzt'; - return -1; - } - // Verband - if ($type=='verband' && ($studiengang_kz==NULL || !is_numeric($studiengang_kz))) - { - $this->errormsg='Fehler: Studiengang ist nicht gesetzt'; - return -1; - } - // LVA - if ($type=='lva' && $lva==NULL) - { - $this->errormsg='Fehler: LVA-ID ist nicht gesetzt'; - return -1; - } - if ($type=='lva' && !is_numeric($lva)) - { - $this->errormsg='Fehler: LVA-ID ist ungueltig'; - return -1; - } - // Type - if ($type==null) - { - $this->errormsg='Fehler: Type in "lehrstunde->load_lehrstunde" ist nicht gesetzt!'; - return -1; - } - - // Zusaetzliche Daten ermitteln - // Personendaten - if ($type=='student') - { - if(defined('LVPLAN_LOAD_UEBER_SEMESTERHAELFTE') && LVPLAN_LOAD_UEBER_SEMESTERHAELFTE === true) - $lvplan_load_ueber_semesterhaelfte = true; - else - $lvplan_load_ueber_semesterhaelfte = false; - // Bei Studierenden wird das passende Studiensemester ermittelt und das dazupassende - // naechstliegende Dadurch wird sichergestellt, dass Einheiten aus den Vorsemestern - // zB fuer Nachpruefungen oder Einheiten aus den Folgesemestern die vorgezogen werden - // auch im Plan sichtbar sind. - if (is_null($this->ss)) - { - $studiensemester_obj = new studiensemester(); - $this->ss = $studiensemester_obj->getSemesterFromDatum($datum_von,true); - - if($lvplan_load_ueber_semesterhaelfte) - { - $this->ssnext = $studiensemester_obj->getNextFrom($this->ss); - $this->ssprev = $studiensemester_obj->getPreviousFrom($this->ss); - } - else - $this->ssnext = $studiensemester_obj->getNearestTo($this->ss,$datum_von); - } - if(!isset($this->ssnext)) - $this->ssnext = $this->ss; - - if($lvplan_load_ueber_semesterhaelfte) - { - $sql_query="SELECT studiengang_kz, semester, verband, gruppe - FROM - public.tbl_studentlehrverband - JOIN public.tbl_studiensemester USING(studiensemester_kurzbz) - WHERE student_uid=".$this->db_add_param($uid)." - AND studiensemester_kurzbz in(".$this->db_add_param($this->ss).",".$this->db_add_param($this->ssnext).",".$this->db_add_param($this->ssprev).") - ORDER BY start desc LIMIT 2"; - } - else - { - // Lehrverbandszuordnungen der betreffenden Studiensemester laden - $sql_query="SELECT studiengang_kz, semester, verband, gruppe - FROM public.tbl_studentlehrverband - WHERE student_uid=".$this->db_add_param($uid)." - AND studiensemester_kurzbz in(".$this->db_add_param($this->ss).",".$this->db_add_param($this->ssnext).")"; - } - - $verbaende=array(); - if($this->db_query($sql_query)) - { - $num_rows=$this->db_num_rows(); - if ($num_rows>0) - { - while($row = $this->db_fetch_object()) - { - $verbaende[] = array('studiengang_kz'=>$row->studiengang_kz, - 'sem'=>$row->semester, - 'ver'=>$row->verband, - 'grp'=>$row->gruppe); - } - } - } - else - { - $this->errormsg = 'Fehler beim Laden der Verbaende'; - return -2; - } - // Spezialgruppen ermitteln zu denen die Person zugeteilt ist - if($lvplan_load_ueber_semesterhaelfte) - { - $sql_query="SELECT - gruppe_kurzbz - FROM - public.tbl_benutzergruppe - WHERE - uid=".$this->db_add_param($uid)." - AND (studiensemester_kurzbz=".$this->db_add_param($this->ss)." - OR studiensemester_kurzbz=".$this->db_add_param($this->ssnext)." - OR studiensemester_kurzbz=".$this->db_add_param($this->ssprev)." - OR studiensemester_kurzbz IS NULL)"; - } - else - { - $sql_query="SELECT - gruppe_kurzbz - FROM - public.tbl_benutzergruppe - WHERE - uid=".$this->db_add_param($uid)." - AND (studiensemester_kurzbz=".$this->db_add_param($this->ss)." - OR studiensemester_kurzbz=".$this->db_add_param($this->ssnext)." - OR studiensemester_kurzbz IS NULL)"; - } - - if (!$result_einheit=$this->db_query($sql_query)) - { - $this->errormsg= 'Fehler beim Laden der Gruppen'; - return false; - } - else - $num_rows_einheit=$this->db_num_rows($result_einheit); - } - // Bei Lektoren auch Spezialgruppen wegen Reservierungen abfragen - if ($type == 'lektor') - { - if (is_null($this->ss)) - { - $studiensemester_obj = new studiensemester(); - $this->ss = $studiensemester_obj->getSemesterFromDatum($datum_von,true); - $this->ssnext = $studiensemester_obj->getNearestTo($this->ss,$datum_von); - } - if(!isset($this->ssnext)) - $this->ssnext = $this->ss; - // Spezialgruppen ermitteln zu denen die Person zugeteilt ist - $sql_query="SELECT - gruppe_kurzbz - FROM - public.tbl_benutzergruppe - WHERE - uid=".$this->db_add_param($uid)." - AND (studiensemester_kurzbz=".$this->db_add_param($this->ss)." - OR studiensemester_kurzbz=".$this->db_add_param($this->ssnext)." - OR studiensemester_kurzbz IS NULL)"; - - if (!$result_einheit=$this->db_query($sql_query)) - { - $this->errormsg='Fehler beim Laden der Gruppen'; - return false; - } - else - $num_rows_einheit=$this->db_num_rows($result_einheit); - } - - // Stundenplandaten ermitteln - // Abfrage generieren - - if ($type!='idList') - { - if($alle_unr_mitladen) - $sql_query_stdplan='SELECT '.$stpl_id.', datum, stunde, unr FROM '.$stpl_view.' stplvw'; - else - $sql_query_stdplan='SELECT * FROM '.$stpl_view.' stplvw'; - $sql_query_lva=""; - $sql_query=" WHERE datum>=".$this->db_add_param($datum_von)." AND datum<".$this->db_add_param($datum_bis); - if ($type == 'lva') - $sql_query_lva=" AND lehrveranstaltung_id=".$this->db_add_param($lva); - elseif ($type=='lektor') - { - $sql_query.=" AND ("; - $sql_query.=" uid=".$this->db_add_param($uid); - //Reservierungen mit Spezialgruppen laden - for ($i=0;$i<$num_rows_einheit;$i++) - { - $row=$this->db_fetch_object($result_einheit,$i); - $sql_query.=" OR gruppe_kurzbz=".$this->db_add_param($row->gruppe_kurzbz); - } - $sql_query.=')'; - } - elseif ($type=='ort' && $ort_kurzbz != 'all') - $sql_query.=" AND ort_kurzbz=".$this->db_add_param($ort_kurzbz); - elseif ($type=='ort' && $ort_kurzbz == 'all') - $sql_query.=" AND ort_kurzbz IS NOT NULL AND ort_kurzbz !='Dummy'"; - elseif ($type=='gruppe') - $sql_query.=" AND gruppe_kurzbz=".$this->db_add_param($gruppe_kurzbz); - elseif($type=='fachbereich') - $sql_query.=" AND fachbereich_kurzbz=".$this->db_add_param($fachbereich_kurzbz); - elseif($type=='student') - { - $sql_query.=" AND ("; - if(is_array($verbaende) && count($verbaende)>0) - { - foreach($verbaende as $row_verbaende) - { - $studiengang_kz = $row_verbaende['studiengang_kz']; - $ver = $row_verbaende['ver']; - $sem = $row_verbaende['sem']; - $grp = $row_verbaende['grp']; - - $sql_query.=" (studiengang_kz=".$this->db_add_param($studiengang_kz, FHC_INTEGER); - if ($sem!=null && $sem>=0 && $sem!='') - $sql_query.=" AND (semester=".$this->db_add_param($sem)." OR semester IS NULL)"; - if ($ver!='0' && $ver!=null && $ver!='') - $sql_query.=" AND (verband=".$this->db_add_param($ver)." OR verband IS NULL OR verband='0' OR verband='')"; - if ($grp!='0' && $grp!=null && $grp!='') - $sql_query.=" AND (gruppe=".$this->db_add_param($grp)." OR gruppe IS NULL OR gruppe='0' OR gruppe='')"; - $sql_query.=" AND gruppe_kurzbz is null"; - $sql_query.=") OR "; - } - } - - $sql_query.=" 1!=1"; - for ($i=0;$i<$num_rows_einheit;$i++) - { - $row=$this->db_fetch_object($result_einheit,$i); - $sql_query.=" OR gruppe_kurzbz=".$this->db_add_param($row->gruppe_kurzbz); - } - $sql_query.=')'; - } - else - { - $sql_query.=" AND ( (studiengang_kz=".$this->db_add_param($studiengang_kz, FHC_INTEGER); - if ($sem!=null && $sem>=0 && $sem!='') - $sql_query.=" AND (semester=".$this->db_add_param($sem)." OR semester IS NULL)"; - if ($ver!='0' && $ver!=null && $ver!='') - $sql_query.=" AND (verband=".$this->db_add_param($ver)." OR verband IS NULL OR verband='0' OR verband='')"; - if ($grp!='0' && $grp!=null && $grp!='') - $sql_query.=" AND (gruppe=".$this->db_add_param($grp)." OR gruppe IS NULL OR gruppe='0' OR gruppe='')"; - - // Direkte Gruppen werden ausgenommen da sonst Stunden von Verband A in der Ansicht für Verband B - // mit angezeigt werden weil die direkte Gruppe geladen wird. - $sql_query.=' AND - ( - gruppe_kurzbz is null - OR - EXISTS( - SELECT 1 FROM public.tbl_gruppe - WHERE - gruppe_kurzbz = stplvw.gruppe_kurzbz - AND direktinskription=false - ) - )'; - - $sql_query.=' )'; - - for ($i=0;$i<$num_rows_einheit;$i++) - { - $row=$this->db_fetch_object($result_einheit,$i); - $sql_query.=" OR gruppe_kurzbz=".$this->db_add_param($row->gruppe_kurzbz); - } - $sql_query.=')'; - } - $sql_query_orderby=' ORDER BY datum, stunde, studiengang_kz, semester, verband, gruppe, gruppe_kurzbz, uid'; - $sql_query_stdplan.=$sql_query . $sql_query_lva . $sql_query_orderby; - - // Wenn aktiviert, werden alle Stunden mit der gleichen UNR geladen die zur selben Zeit stattfinden - if($alle_unr_mitladen) - { - $sql_query_stdplan=" - WITH lvplan(id, datum, stunde, unr) as - ( - $sql_query_stdplan - ) - SELECT - distinct $stpl_view_ohneschema.* - FROM - ".$stpl_view.", lvplan - WHERE - $stpl_view_ohneschema.datum=lvplan.datum - AND $stpl_view_ohneschema.stunde=lvplan.stunde - AND $stpl_view_ohneschema.unr=lvplan.unr - ORDER BY datum, stunde, studiengang_kz, semester, verband, gruppe, gruppe_kurzbz, uid - "; - } - } - else - { - $sql_query_stdplan='SELECT * FROM '.$stpl_view; - $sql_query=''; - foreach ($idList as $id) - $sql_query.=" OR ".$stpl_id."=".$this->db_add_param($id); - $sql_query=mb_substr($sql_query,3); - $sql_query_stdplan.=' WHERE'.$sql_query; - } - - //Datenbankabfrage - if (!$this->db_query($sql_query_stdplan)) - { - $this->errormsg = 'Fehler beim Laden der Stundenplandaten'; - return -2; - } - $stpl_tbl = $this->db_result; - $num_rows = $this->db_num_rows($stpl_tbl); - $this->anzahl=$num_rows; - //Daten uebernehmen - for ($i=0;$i<$num_rows;$i++) - { - $row=$this->db_fetch_object($stpl_tbl, $i); - - $stunde=new lehrstunde(); - $stunde->stundenplan_id=$row->{$stpl_id}; - $stunde->lehreinheit_id=$row->lehreinheit_id; - $stunde->unr=$row->unr; - $stunde->lektor_uid=$row->uid; - $stunde->lektor_kurzbz=$row->lektor; - $stunde->datum=$row->datum; - $stunde->stunde=$row->stunde; - $stunde->ort_kurzbz=$row->ort_kurzbz; - $stunde->lehrfach=$row->lehrfach; - $stunde->lehrfach_bez=$row->lehrfach_bez; - $stunde->lehrfach_id=$row->lehrfach_id; - $stunde->lehrform=$row->lehrform; - if ($row->farbe!=' ' && $row->farbe!=null) - $stunde->farbe=$row->farbe; - else - $stunde->farbe='FFFFFF'; - $stunde->studiengang_kz=$row->studiengang_kz; - $stunde->studiengang=mb_strtoupper($row->stg_typ.$row->stg_kurzbz); - $stunde->sem=$row->semester; - $stunde->ver=$row->verband; - $stunde->grp=$row->gruppe; - $stunde->gruppe_kurzbz=$row->gruppe_kurzbz; - $stunde->titel=$row->titel; - $stunde->anmerkung=$row->anmerkung; - $stunde->anmerkung_lehreinheit=$row->anmerkung_lehreinheit; - $stunde->updateamum=$row->updateamum; - $stunde->updatevon=$row->updatevon; - $stunde->reservierung=false; - $this->lehrstunden[$i]=$stunde; - - } - - // Reservierungsdaten ermitteln - if ($type!='idList' && $type!='fachbereich' && $type!='lva') - { - // Datenbankabfrage generieren - $sql_query_reservierung='SELECT * FROM campus.vw_reservierung stplvw'; - $sql_query_reservierung.=$sql_query . $sql_query_orderby; - - //Datenbankabfrage - if (!$this->db_query($sql_query_reservierung)) - { - $this->errormsg = 'Fehler beim Laden der Reservierungen'; - return -2; - } - $stpl_tbl = $this->db_result; - $num_rows=$this->db_num_rows($stpl_tbl); - $this->anzahl+=$num_rows; - - //Daten uebernehmen - for ($i=0;$i<$num_rows;$i++) - { - $row = $this->db_fetch_object($stpl_tbl, $i); - - $stunde=new lehrstunde(); - $stunde->reservierung=true; - $stunde->stundenplan_id=$row->reservierung_id; - $stunde->unr=0; - $stunde->lektor_uid=$row->uid; - $stunde->lektor_kurzbz=$row->uid; - $stunde->datum=$row->datum; - $stunde->stunde=$row->stunde; - $stunde->ort_kurzbz=$row->ort_kurzbz; - //$stunde->lehrfach_id=$row->lehrfach_id; - $stunde->lehrfach=$row->titel; - $stunde->lehrfach_bez=$row->beschreibung; - $stunde->studiengang_kz=$row->studiengang_kz; - $stunde->studiengang=$row->stg_kurzbz; - $stunde->sem=$row->semester; - $stunde->ver=$row->verband; - $stunde->grp=$row->gruppe; - $stunde->gruppe_kurzbz=$row->gruppe_kurzbz; - $stunde->titel=$row->titel; - $stunde->anmerkung=$row->beschreibung; - $stunde->anmerkung_lehreinheit=$row->beschreibung; - $stunde->farbe=''; - $this->lehrstunden[]=$stunde; - } - } - return $this->anzahl; - } - - /** - * @param lehreinheit_id - * @param uid (mitarbeiter) - * - */ - public function load_lehrstunden_le($lehreinheit_id, $uid=null, $stpl_table='stundenplandev') - { - // Bezeichnung der Stundenplan-Tabelle und des Keys - $stpl_id=$stpl_table.TABLE_ID; - $stpl_table='lehre.'.TABLE_BEGIN.$stpl_table; - - // Stundenplandaten ermitteln - // Abfrage generieren - $sql="SELECT * FROM ".$stpl_table." WHERE lehreinheit_id=".$this->db_add_param($lehreinheit_id, FHC_INTEGER); - if ($uid!=null && !is_null($uid)) - $sql.=" AND mitarbeiter_uid=".$this->db_add_param($uid); - - //Datenbankabfrage - if (!$this->db_query($sql)) - { - $this->errormsg=$this->db_last_error(); - return -1; - } - $num_rows=$this->db_num_rows(); - $this->anzahl=$num_rows; - //Daten uebernehmen - for ($i=0;$i<$num_rows;$i++) - { - $row=$this->db_fetch_object(null, $i); - - $stunde=new lehrstunde(); - $stunde->stundenplan_id=$row->{$stpl_id}; - $stunde->lehreinheit_id=$row->lehreinheit_id; - $stunde->unr=$row->unr; - $stunde->studiengang_kz=$row->studiengang_kz; - $stunde->sem=$row->semester; - $stunde->ver=$row->verband; - $stunde->grp=$row->gruppe; - $stunde->gruppe_kurzbz=$row->gruppe_kurzbz; - $stunde->lektor_uid=$row->mitarbeiter_uid; - $stunde->ort_kurzbz=$row->ort_kurzbz; - $stunde->datum=$row->datum; - $stunde->stunde=$row->stunde; - $stunde->titel=$row->titel; - $stunde->anmerkung=$row->anmerkung; - $stunde->fix=$row->fix; - $stunde->insertamum=$row->insertamum; - $stunde->insertvon=$row->insertvon; - $stunde->updateamum=$row->updateamum; - $stunde->updatevon=$row->updatevon; - $stunde->reservierung=false; - $this->lehrstunden[$i]=$stunde; - } - return $this->anzahl; - } - - - /** - * Prueft die geladene Lehrveranstaltung auf Kollisionen im Stundenplan. - * Bei einer Kollision steht der Grund der Kollision in '$this->errormsg'. - * @param string db_stpl_table Tabllenname des Stundenplans im DBMS - * @return boolean true=kollision, false=keine kollision - */ - public function kollision($stpl_table='stundenplandev') - { - $variablen_obj = new variable(); - $variablen_obj->loadVariables(get_uid()); - - $kollision_student = $variablen_obj->variable->kollision_student; - $ignore_reservierung = $variablen_obj->variable->ignore_reservierung; - $ignore_zeitsperre = $variablen_obj->variable->ignore_zeitsperre; - - //Kollisionspruefung auf Studentenebene - if($kollision_student=='true' && $this->kollision_student($stpl_table)) - return true; - - // Parameter Checken - // Bezeichnung der Stundenplan-Tabelle und des Keys - $stpl_id=$stpl_table.TABLE_ID; - $stpl_table='lehre.'.VIEW_BEGIN.$stpl_table; - - // Datenbank abfragen - $sql_query="SELECT $stpl_id AS id, lektor, stg_kurzbz, ort_kurzbz, semester, verband, gruppe, gruppe_kurzbz, datum, stunde FROM $stpl_table - WHERE datum=".$this->db_add_param($this->datum)." AND stunde=".$this->db_add_param($this->stunde); - - // Direkte Lehreinheitsgruppen kollidieren nicht - $sql_query.=" AND NOT EXISTS(SELECT 1 FROM public.tbl_gruppe WHERE gruppe_kurzbz = ".$stpl_table.".gruppe_kurzbz AND direktinskription=true)"; - - $sql_query.= " AND (ort_kurzbz=".$this->db_add_param($this->ort_kurzbz)." "; - - if (!in_array($this->lektor_uid,unserialize(KOLLISIONSFREIE_USER))) - $sql_query.=" OR (uid=".$this->db_add_param($this->lektor_uid)." AND uid not in (".$this->db_implode4SQL(unserialize(KOLLISIONSFREIE_USER))."))"; - - //Wenn eine Kollisionspruefung auf Studentenebene durchgefuehrt wird, werden die LVB nicht gecheckt - if($kollision_student=='false') - { - // Direkte Gruppen kollidieren nicht - $direktgruppe = false; - if($this->gruppe_kurzbz!=null && $this->gruppe_kurzbz!='' && $this->gruppe_kurzbz!=' ') - { - $grp_obj = new gruppe(); - $grp_obj->load($this->gruppe_kurzbz); - if($grp_obj->direktinskription) - { - $direktgruppe = true; - } - } - if(!$direktgruppe) - { - $sql_query.=" OR (studiengang_kz=".$this->db_add_param($this->studiengang_kz)." AND semester=".$this->db_add_param($this->sem); - if($this->gruppe_kurzbz!=null && $this->gruppe_kurzbz!='' && $this->gruppe_kurzbz!=' ') - { - $sql_query.=" OR (gruppe_kurzbz=".$this->db_add_param($this->gruppe_kurzbz).")"; - } - else - { - if ($this->ver!=null && $this->ver!='' && $this->ver!=' ') - $sql_query.=" AND (verband=".$this->db_add_param($this->ver)." OR verband IS NULL OR verband='' OR verband=' ')"; - if ($this->grp!=null && $this->grp!='' && $this->grp!=' ') - $sql_query.=" AND (gruppe=".$this->db_add_param($this->grp)." OR gruppe IS NULL OR gruppe='' OR gruppe=' ')"; - } - - $sql_query.=")"; - } - } - $sql_query.=") AND unr!=".$this->db_add_param($this->unr); - - if (!$erg_stpl = $this->db_query($sql_query)) - { - $this->errormsg=$sql_query.$this->db_last_error(); - return true; - } - - $anz=$this->db_num_rows($erg_stpl); - if ($anz==0) - { - // Zeitsperren pruefen - if($ignore_zeitsperre=='false' && !in_array($this->lektor_uid,unserialize(KOLLISIONSFREIE_USER)) && $this->kollision_zeitsperre()) - return true; - - // Reservierungen pruefen - if ($ignore_reservierung=='false' && $this->kollision_reservierung()) - return true; - - if($this->kollision_ressource()) - return true; - return false; - } - else - { - $row = $this->db_fetch_object($erg_stpl); - $this->errormsg="Kollision ($stpl_table): $row->id|$row->lektor|$row->ort_kurzbz|$row->stg_kurzbz-$row->semester$row->verband$row->gruppe$row->gruppe_kurzbz - $row->datum/$row->stunde\n"; //\n".$sql_query - return true; - } - } - - /** - * Prueft ob eine Kollision mit den zugeteilten Ressourcen vorhanden ist - * - * @return boolean true=kollision, false=keine kollision - */ - public function kollision_ressource() - { - $qry = "SELECT - tbl_betriebsmittel.beschreibung, tbl_stundenplandev.ort_kurzbz - FROM - lehre.tbl_stundenplan_betriebsmittel - JOIN lehre.tbl_stundenplandev USING(stundenplandev_id) - JOIN wawi.tbl_betriebsmittel USING(betriebsmittel_id) - WHERE - tbl_stundenplandev.datum=".$this->db_add_param($this->datum)." - AND tbl_stundenplandev.stunde=".$this->db_add_param($this->stunde)." - AND betriebsmittel_id IN(SELECT betriebsmittel_id FROM lehre.tbl_stundenplan_betriebsmittel WHERE stundenplandev_id=".$this->db_add_param($this->stundenplan_id).") - AND tbl_stundenplandev.stundenplandev_id<>".$this->db_add_param($this->stundenplan_id); - - if($result = $this->db_query($qry)) - { - if($row = $this->db_fetch_object($result)) - { - $this->errormsg='Kollision (Ressource)'.$row->beschreibung.'|'.$row->ort_kurzbz; - return true; - } - return false; - } - return false; - } - - /** - * Prueft ob eine Kollision mit den Zeitsperren vorhanden ist - * - * @return boolean true=kollision, false=keine kollision - */ - public function kollision_zeitsperre() - { - $sql_query="SELECT - zeitsperre_id,zeitsperretyp_kurzbz,mitarbeiter_uid AS lektor,vondatum,vonstunde,bisdatum,bisstunde - FROM campus.tbl_zeitsperre - WHERE mitarbeiter_uid=".$this->db_add_param($this->lektor_uid)." - AND (vondatum<".$this->db_add_param($this->datum)." OR (vondatum=".$this->db_add_param($this->datum)." AND (vonstunde<=".$this->db_add_param($this->stunde)." OR vonstunde IS NULL))) - AND (bisdatum>".$this->db_add_param($this->datum)." OR (bisdatum=".$this->db_add_param($this->datum)." AND (bisstunde>=".$this->db_add_param($this->stunde)." OR bisstunde IS NULL)));"; - - if (!$erg_zs = $this->db_query($sql_query)) - { - $this->errormsg=$sql_query.$this->db_last_error(); - return true; - } - - $anz_zs=$this->db_num_rows($erg_zs); - if ($anz_zs!=0) - { - $row = $this->db_fetch_object($erg_zs); - $this->errormsg="Kollision (Zeitsperre): $row->zeitsperre_id|$row->lektor|$row->zeitsperretyp_kurzbz - $row->vondatum/$row->vonstunde|$row->bisdatum/$row->bisstunde"; - return true; - } - return false; - } - - /** - * Prueft ob eine LV-Plan Kollision mit den Reservierungen besteht - * - * @return boolean true=kollision, false=keine kollision - */ - public function kollision_reservierung() - { - $sql_query="SELECT - reservierung_id AS id, uid AS lektor, stg_kurzbz, ort_kurzbz, - semester, verband, gruppe, gruppe_kurzbz, datum, stunde - FROM lehre.vw_reservierung - WHERE - datum=".$this->db_add_param($this->datum)." AND - stunde=".$this->db_add_param($this->stunde)." AND - (ort_kurzbz=".$this->db_add_param($this->ort_kurzbz)." OR "; - - if (!in_array($this->lektor_uid, unserialize(KOLLISIONSFREIE_USER))) - $sql_query.="(uid=".$this->db_add_param($this->lektor_uid)." AND uid not in(".$this->db_implode4SQL(unserialize(KOLLISIONSFREIE_USER)).")) OR "; - - $sql_query.="(studiengang_kz=".$this->db_add_param($this->studiengang_kz)." AND semester=".$this->db_add_param($this->sem); - if ($this->ver!=null && $this->ver!='' && $this->ver!=' ') - $sql_query.=" AND (verband=".$this->db_add_param($this->ver)." OR verband IS NULL OR verband='' OR verband=' ')"; - if ($this->grp!=null && $this->grp!='' && $this->grp!=' ') - $sql_query.=" AND (gruppe=".$this->db_add_param($this->grp)." OR gruppe IS NULL OR gruppe='' OR gruppe=' ')"; - if ($this->gruppe_kurzbz!=null && $this->gruppe_kurzbz!='' && $this->gruppe_kurzbz!=' ') - $sql_query.=" AND (gruppe_kurzbz=".$this->db_add_param($this->gruppe_kurzbz).")"; - $sql_query.="))"; - - if (!$erg_res = $this->db_query($sql_query)) - { - $this->errormsg=$sql_query.$this->db_last_error(); - return true; - } - $anz_res = $this->db_num_rows($erg_res); - - if ($anz_res!=0) - { - $row = $this->db_fetch_object($erg_res); - $this->errormsg="Kollision (Reservierung): $row->id|$row->lektor|$row->ort_kurzbz|$row->stg_kurzbz-$row->semester$row->verband$row->gruppe$row->gruppe_kurzbz - $row->datum/$row->stunde"; - return true; - } - return false; - } - - /** - * Prueft eine Kollision auf Studentenebene - * Es werden nur die Kollisionen der Studenten abgefragt - * Raum, Lektor, Reservierung, Zeitsperren, etc werden hier nicht geprueft - * - * @param $stpl_table - * @return boolean true=kollision, false=keine kollision - */ - public function kollision_student($stpl_table='stundenplandev') - { - // Parameter Checken - // Bezeichnung der Stundenplan-Tabelle - $stpl_table='lehre.'.VIEW_BEGIN.$stpl_table; - - $sql_query = "SELECT * - FROM ".$stpl_table."_student_unr - WHERE datum=".$this->db_add_param($this->datum)." AND stunde=".$this->db_add_param($this->stunde)." AND student_uid IN( - SELECT uid FROM public.vw_gruppen WHERE - - "; - $sql_query.="(studiengang_kz=".$this->db_add_param($this->studiengang_kz)." AND semester=".$this->db_add_param($this->sem)." - AND studiensemester_kurzbz=( - SELECT tbl_studiensemester.studiensemester_kurzbz - FROM - public.tbl_studiensemester - WHERE - tbl_studiensemester.ende >= ".$this->db_add_param($this->datum)." - AND tbl_studiensemester.start <=".$this->db_add_param($this->datum)." LIMIT 1)"; - if ($this->gruppe_kurzbz!=null && $this->gruppe_kurzbz!='' && $this->gruppe_kurzbz!=' ') - $sql_query.=" AND (gruppe_kurzbz=".$this->db_add_param($this->gruppe_kurzbz).")"; - else - { - if ($this->ver!=null && $this->ver!='' && $this->ver!=' ') - $sql_query.=" AND (verband=".$this->db_add_param($this->ver).")"; - else - $sql_query.=" AND (verband IS NULL OR verband='' OR verband=' ')"; - if ($this->grp!=null && $this->grp!='' && $this->grp!=' ') - $sql_query.=" AND (gruppe=".$this->db_add_param($this->grp).")"; - else - $sql_query.=" AND (gruppe IS NULL OR gruppe='' OR gruppe=' ')"; - } - - - $sql_query.=")) AND unr!=".$this->db_add_param($this->unr); - - if (!$erg_stpl=$this->db_query($sql_query)) - { - $this->errormsg=$sql_query.$this->db_last_error(); - return true; - } - - $anz=$this->db_num_rows($erg_stpl); - - if ($anz>0) - { - $row = $this->db_fetch_object($erg_stpl); - $this->errormsg="Kollision Student ($stpl_table): $row->student_uid $row->datum/$row->stunde "; - return true; - } - else - { - return false; - } - } - - /** - * Gruppiert die einzelnen Lehrstunden zusammen - */ - public function getLehrstundenGruppiert() - { - $result = array(); - - foreach($this->lehrstunden as $row_lehrstunde) - { - $found=false; - //Pruefen ob bereits ein Eintrag vorhanden ist - //zu dem dazugruppiert werden kann - - /* - Kriterien fuer Gruppierung - - gleiches Datum - - gleiche Stunde - - gleiche UNR - */ - foreach($result as $key=>$row_result) - { - if($row_result->unr==$row_lehrstunde->unr - && $row_result->datum==$row_lehrstunde->datum - && $row_result->stunde==$row_lehrstunde->stunde) - { - $found=true; - //gleicher Eintrag gefunden - $grpidx = count($result[$key]->gruppen); - $result[$key]->gruppen[$grpidx]->studiengang_kz=$row_lehrstunde->studiengang_kz; - $result[$key]->gruppen[$grpidx]->sem=$row_lehrstunde->sem; - $result[$key]->gruppen[$grpidx]->ver=$row_lehrstunde->ver; - $result[$key]->gruppen[$grpidx]->grp=$row_lehrstunde->grp; - $result[$key]->gruppen[$grpidx]->gruppe_kurzbz=$row_lehrstunde->gruppe_kurzbz; - if(!in_array($row_lehrstunde->lektor_uid, $result[$key]->lektor_uid)) - $result[$key]->lektor_uid[]=$row_lehrstunde->lektor_uid; - if(!in_array($row_lehrstunde->ort_kurzbz, $result[$key]->ort_kurzbz)) - $result[$key]->ort_kurzbz[]=$row_lehrstunde->ort_kurzbz; - break; - } - } - - if(!$found) - { - // Wenn kein passender Eintrag vorhanden ist, - // wird ein neuer angelegt - $stunde=new lehrstunde(); - $stunde->stundenplan_id=$row_lehrstunde->stundenplan_id; - $stunde->lehreinheit_id=$row_lehrstunde->lehreinheit_id; - $stunde->farbe = (isset($row_lehrstunde->farbe)?$row_lehrstunde->farbe:'FFFFFF'); - $stunde->unr=$row_lehrstunde->unr; - $stunde->gruppen[0]->studiengang_kz=$row_lehrstunde->studiengang_kz; - $stunde->gruppen[0]->sem=$row_lehrstunde->sem; - $stunde->gruppen[0]->ver=$row_lehrstunde->ver; - $stunde->gruppen[0]->grp=$row_lehrstunde->grp; - $stunde->gruppen[0]->gruppe_kurzbz=$row_lehrstunde->gruppe_kurzbz; - $stunde->lektor_uid[]=$row_lehrstunde->lektor_uid; - $stunde->ort_kurzbz[]=$row_lehrstunde->ort_kurzbz; - $stunde->datum=$row_lehrstunde->datum; - $stunde->stunde=$row_lehrstunde->stunde; - $stunde->titel=$row_lehrstunde->titel; - $stunde->anmerkung=$row_lehrstunde->anmerkung; - $stunde->fix=$row_lehrstunde->fix; - $stunde->reservierung=$row_lehrstunde->reservierung; - $result[]=$stunde; - } - } - return $result; - } - - public function getStundenplanData($db_stpl_table, $lehrveranstaltung_id=null, $studiensemester_kurzbz=null, $lehreinheit_id=null, $mitarbeiter_uid=null, $student_uid=null) - { - - $qry = "SELECT - stpl.datum, min(stpl.stunde) as stundevon, max(stpl.stunde) as stundebis, - stpl.lehreinheit_id, lehrfach.bezeichnung as lehrfach_bezeichnung, - array_agg( - CASE WHEN gruppe_kurzbz is not null THEN gruppe_kurzbz - ELSE (SELECT UPPER(typ || kurzbz) FROM public.tbl_studiengang WHERE studiengang_kz=stpl.studiengang_kz) || COALESCE(stpl.semester,'0') || COALESCE(stpl.verband,'') || COALESCE(stpl.gruppe,'') - END) as gruppen, array_agg(mitarbeiter_uid) as lektoren, - array_agg(ort_kurzbz) as orte, - array_agg(titel) as titel - FROM - lehre.tbl_".$db_stpl_table." as stpl - JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) - JOIN lehre.tbl_lehrveranstaltung as lehrfach ON(tbl_lehreinheit.lehrfach_id=lehrfach.lehrveranstaltung_id) - WHERE "; - - if($lehrveranstaltung_id!='') - { - $qry.=" lehreinheit_id in(SELECT lehreinheit_id FROM lehre.tbl_lehreinheit - WHERE lehrveranstaltung_id=".$this->db_add_param($lehrveranstaltung_id)." - AND studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz).")"; - - } - elseif($lehreinheit_id!='') - { - $qry.=" lehreinheit_id=".$this->db_add_param($lehreinheit_id); - } - elseif($mitarbeiter_uid!='') - { - $qry.=" mitarbeiter_uid=".$this->db_add_param($mitarbeiter_uid)." AND lehreinheit_id IN( - SELECT - lehreinheit_id - FROM - lehre.tbl_lehreinheitmitarbeiter - JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) - WHERE mitarbeiter_uid=".$this->db_add_param($mitarbeiter_uid)." AND studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz).")"; - } - elseif($student_uid!='') - { - $qry.=" lehreinheit_id in ( - SELECT - lehreinheit_id - FROM - campus.vw_student_lehrveranstaltung - WHERE - uid=".$this->db_add_param($student_uid)." AND studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz).")"; - } - else - return false; - - $qry.="GROUP BY stpl.datum, stpl.unr, stpl.lehreinheit_id, lehrfach.bezeichnung - ORDER BY stpl.datum, min(stpl.stunde), stpl.unr, stpl.lehreinheit_id"; - - if($result = $this->db_query($qry)) - { - while($row = $this->db_fetch_object($result)) - { - $obj = new stdClass(); - - $obj->datum = $row->datum; - $obj->stundevon = $row->stundevon; - $obj->stundebis = $row->stundebis; - $obj->gruppen = array_unique($this->db_parse_array($row->gruppen)); - $obj->lektoren = array_unique($this->db_parse_array($row->lektoren)); - $obj->orte = array_unique($this->db_parse_array($row->orte)); - $obj->titel = array_filter(array_unique($this->db_parse_array($row->titel))); - $obj->lehrfach_bezeichnung = $row->lehrfach_bezeichnung; - $obj->lehreinheit_id = $row->lehreinheit_id; - - $this->result[] = $obj; - } - return true; - } - else - return false; - } -} - -?> +new=TRUE; + } + + /** + * @brief Einen Datensatz aus optional angegebener Stundenplan-Tabelle laden + * @param stundenplan_id ID in der Datenbank + * @param stpl_table Name der Tabelle in der DB + * @return Boolean, Fehlermeldung kommt in das Attribut errormsg + */ + public function load($stundenplan_id,$stpl_table='stundenplandev') + { + // Bezeichnung der Stundenplan-Tabelle und des Keys + $stpl_id=$stpl_table.TABLE_ID; + $stpl_view='lehre.'.VIEW_BEGIN.$stpl_table; + $stpl_table='lehre.'.TABLE_BEGIN.$stpl_table; + + $sql_query="SELECT * FROM $stpl_view WHERE $stpl_id=$stundenplan_id;"; + + //Datenbankabfrage + if (!$this->db_query($sql_query)) + { + $this->errormsg=$sql_query.$this->db_last_error(); + return false; + } + + $this->anzahl = $this->db_num_rows(); + + //Daten uebernehmen + if ($this->anzahl!=1) + { + $this->errormsg='Keinen Datensatz gefunden'; + return false; + } + else + { + $row=$this->db_fetch_object(); + $this->stundenplan_id=$row->{$stpl_id}; + $this->unr=$row->unr; + $this->lektor_uid=$row->uid; + $this->lektor_kurzbz=$row->lektor; + $this->datum=$row->datum; + $this->stunde=$row->stunde; + $this->ort_kurzbz=$row->ort_kurzbz; + $this->lehrfach=$row->lehrfach; + $this->lehrfach_bez=$row->lehrfach_bez; + $this->lehrfach_id=$row->lehrfach_id; + $this->lehrform=$row->lehrform; + $this->studiengang_kz=$row->studiengang_kz; + $this->studiengang=$row->stg_kurzbz; + $this->sem=$row->semester; + $this->ver=$row->verband; + $this->grp=$row->gruppe; + $this->gruppe_kurzbz=$row->gruppe_kurzbz; + $this->titel=$row->titel; + $this->anmerkung=$row->anmerkung; + $this->updateamum=$row->updateamum; + $this->updatevon=$row->updatevon; + $this->new=false; + } + return true; + } + + /** + * Datensatz in DB speichern + * + */ + public function save($uid, $stpl_table='stundenplandev') + { + // Parameter Checken + // Bezeichnung der Stundenplan-Tabelle und des Keys + $stpl_id=$stpl_table.TABLE_ID; + $stpl_table='lehre.'.TABLE_BEGIN.$stpl_table; + if ($this->new) + { + // insert + } + else + { + // update + $sql_query='UPDATE '.$stpl_table; + $sql_query.=" SET datum=".$this->db_add_param($this->datum).", stunde=".$this->db_add_param($this->stunde); + $sql_query.=", ort_kurzbz=".$this->db_add_param($this->ort_kurzbz).", mitarbeiter_uid=".$this->db_add_param($this->lektor_uid); + if($this->unr!='') + $sql_query.=", unr=".$this->db_add_param($this->unr); + $sql_query.=", updateamum=now(), updatevon=".$this->db_add_param($uid); + $sql_query.=" WHERE $stpl_id=".$this->db_add_param($this->stundenplan_id); + + $this->lastqry = $sql_query; + //Datenbankabfrage + if (!$this->db_query($sql_query)) + { + $this->errormsg=$sql_query.$this->db_last_error(); + return false; + } + } + + return true; + } + + /** + * Erstellt einen Undo Befehl fuer die Speichern funktion + * + * @param $stpl_table + * @return string undo + */ + public function getUndo($stpl_table='stundenplandev') + { + $stpl_id=$stpl_table.TABLE_ID; + $stpl_table='lehre.'.TABLE_BEGIN.$stpl_table; + + $sql_query='UPDATE '.$stpl_table; + $sql_query.=" SET datum=".$this->db_add_param($this->datum).", stunde=".$this->db_add_param($this->stunde); + $sql_query.=", ort_kurzbz=".$this->db_add_param($this->ort_kurzbz).", mitarbeiter_uid=".$this->db_add_param($this->lektor_uid); + $sql_query.=", updateamum=".$this->db_add_param($this->updateamum).", updatevon=".$this->db_add_param($this->updatevon); + $sql_query.=" WHERE $stpl_id=".$this->db_add_param($this->stundenplan_id).";"; + + return $sql_query; + } + + /** + * Datensatz aus DB entfernen + * @param id ID des Datensatzes in der Tabelle + * @param stpl_table Name der Tabelle + * + */ + public function delete($id, $stpl_table='stundenplandev') + { + // Parameter Checken + // Bezeichnung der Stundenplan-Tabelle und des Keys + $stpl_id=$stpl_table.TABLE_ID; + $stpl_table='lehre.'.TABLE_BEGIN.$stpl_table; + // Delete SQL vorbereiten + $sql_query='DELETE FROM '.$stpl_table; + $sql_query.=" WHERE $stpl_id=".$this->db_add_param($id); + + $this->lastqry = $sql_query; + //Datenbankrequest + if (!$this->db_query($sql_query)) + { + $this->errormsg=$sql_query.$this->db_last_error(); + return false; + } + else + return true; + } + + /** + * Laedt Lehrstunden + * + * @param type (student, lektor, lehrverband, gruppe, ort, ....) + * @param datum_von (inklusive) Startdatum der Abfrage + * @param datum_bis (exklusive) Enddatum der Abfrage + * @param uid (des Lektors oder Studenten) kann auch NULL sein + * @param ort_kurzbz (Kurzbezeichnung des Orts) kann auch NULL sein + * @param studiengang_kz + * @param sem + * @param ver + * @param grp + * @param gruppe_kurzbz + * + */ + public function load_lehrstunden($type, $datum_von, $datum_bis, $uid, $ort_kurzbz=NULL, $studiengang_kz=NULL, $sem=NULL, $ver=NULL, $grp=NULL, $gruppe_kurzbz=NULL, $stpl_view='stundenplan', $idList=null, $fachbereich_kurzbz=null, $lva=NULL, $alle_unr_mitladen=false) + { + $num_rows_einheit=0; + // Parameter Checken + // Bezeichnung der Stundenplan-Tabelle und des Keys + $stpl_id=$stpl_view.TABLE_ID; + $stpl_view_ohneschema=VIEW_BEGIN.$stpl_view; + $stpl_view='lehre.'.VIEW_BEGIN.$stpl_view; + + + // Datum im Format YYYY-MM-TT ? + if (!preg_match("/([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})/",$datum_von) ) + { + $this->errormsg='Fehler: Startdatum hat falsches Format!'; + return -1; + } + if ($datum_bis!=null) + { + if (!preg_match("/([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})/",$datum_bis) ) + { + $this->errormsg='Fehler: Enddatum hat falsches Format!'; + return -1; + } + } + else + $datum_bis=$datum_von; + + // Person + if (($type=='student' || $type=='lektor') && $uid==NULL) + { + $this->errormsg='Fehler: uid der Person ist nicht gesetzt'; + return -1; + } + // Ort + if ($type=='ort' && $ort_kurzbz==NULL) + { + $this->errormsg='Fehler: Kurzbezeichnung des Orts ist nicht gesetzt'; + return -1; + } + // Gruppe + if ($type=='gruppe' && $gruppe_kurzbz==NULL) + { + $this->errormsg='Fehler: Kurzbezeichnung der Gruppe ist nicht gesetzt'; + return -1; + } + // Verband + if ($type=='verband' && ($studiengang_kz==NULL || !is_numeric($studiengang_kz))) + { + $this->errormsg='Fehler: Studiengang ist nicht gesetzt'; + return -1; + } + // LVA + if ($type=='lva' && $lva==NULL) + { + $this->errormsg='Fehler: LVA-ID ist nicht gesetzt'; + return -1; + } + if ($type=='lva' && !is_numeric($lva)) + { + $this->errormsg='Fehler: LVA-ID ist ungueltig'; + return -1; + } + // Type + if ($type==null) + { + $this->errormsg='Fehler: Type in "lehrstunde->load_lehrstunde" ist nicht gesetzt!'; + return -1; + } + + // Zusaetzliche Daten ermitteln + // Personendaten + if ($type=='student') + { + if(defined('LVPLAN_LOAD_UEBER_SEMESTERHAELFTE') && LVPLAN_LOAD_UEBER_SEMESTERHAELFTE === true) + $lvplan_load_ueber_semesterhaelfte = true; + else + $lvplan_load_ueber_semesterhaelfte = false; + // Bei Studierenden wird das passende Studiensemester ermittelt und das dazupassende + // naechstliegende Dadurch wird sichergestellt, dass Einheiten aus den Vorsemestern + // zB fuer Nachpruefungen oder Einheiten aus den Folgesemestern die vorgezogen werden + // auch im Plan sichtbar sind. + if (is_null($this->ss)) + { + $studiensemester_obj = new studiensemester(); + $this->ss = $studiensemester_obj->getSemesterFromDatum($datum_von,true); + + if($lvplan_load_ueber_semesterhaelfte) + { + $this->ssnext = $studiensemester_obj->getNextFrom($this->ss); + $this->ssprev = $studiensemester_obj->getPreviousFrom($this->ss); + } + else + $this->ssnext = $studiensemester_obj->getNearestTo($this->ss,$datum_von); + } + if(!isset($this->ssnext)) + $this->ssnext = $this->ss; + + if($lvplan_load_ueber_semesterhaelfte) + { + $sql_query="SELECT studiengang_kz, semester, verband, gruppe + FROM + public.tbl_studentlehrverband + JOIN public.tbl_studiensemester USING(studiensemester_kurzbz) + WHERE student_uid=".$this->db_add_param($uid)." + AND studiensemester_kurzbz in(".$this->db_add_param($this->ss).",".$this->db_add_param($this->ssnext).",".$this->db_add_param($this->ssprev).") + ORDER BY start desc LIMIT 2"; + } + else + { + // Lehrverbandszuordnungen der betreffenden Studiensemester laden + $sql_query="SELECT studiengang_kz, semester, verband, gruppe + FROM public.tbl_studentlehrverband + WHERE student_uid=".$this->db_add_param($uid)." + AND studiensemester_kurzbz in(".$this->db_add_param($this->ss).",".$this->db_add_param($this->ssnext).")"; + } + + $verbaende=array(); + if($this->db_query($sql_query)) + { + $num_rows=$this->db_num_rows(); + if ($num_rows>0) + { + while($row = $this->db_fetch_object()) + { + $verbaende[] = array('studiengang_kz'=>$row->studiengang_kz, + 'sem'=>$row->semester, + 'ver'=>$row->verband, + 'grp'=>$row->gruppe); + } + } + } + else + { + $this->errormsg = 'Fehler beim Laden der Verbaende'; + return -2; + } + // Spezialgruppen ermitteln zu denen die Person zugeteilt ist + if($lvplan_load_ueber_semesterhaelfte) + { + $sql_query="SELECT + gruppe_kurzbz + FROM + public.tbl_benutzergruppe + WHERE + uid=".$this->db_add_param($uid)." + AND (studiensemester_kurzbz=".$this->db_add_param($this->ss)." + OR studiensemester_kurzbz=".$this->db_add_param($this->ssnext)." + OR studiensemester_kurzbz=".$this->db_add_param($this->ssprev)." + OR studiensemester_kurzbz IS NULL)"; + } + else + { + $sql_query="SELECT + gruppe_kurzbz + FROM + public.tbl_benutzergruppe + WHERE + uid=".$this->db_add_param($uid)." + AND (studiensemester_kurzbz=".$this->db_add_param($this->ss)." + OR studiensemester_kurzbz=".$this->db_add_param($this->ssnext)." + OR studiensemester_kurzbz IS NULL)"; + } + + if (!$result_einheit=$this->db_query($sql_query)) + { + $this->errormsg= 'Fehler beim Laden der Gruppen'; + return false; + } + else + $num_rows_einheit=$this->db_num_rows($result_einheit); + } + // Bei Lektoren auch Spezialgruppen wegen Reservierungen abfragen + if ($type == 'lektor') + { + if (is_null($this->ss)) + { + $studiensemester_obj = new studiensemester(); + $this->ss = $studiensemester_obj->getSemesterFromDatum($datum_von,true); + $this->ssnext = $studiensemester_obj->getNearestTo($this->ss,$datum_von); + } + if(!isset($this->ssnext)) + $this->ssnext = $this->ss; + // Spezialgruppen ermitteln zu denen die Person zugeteilt ist + $sql_query="SELECT + gruppe_kurzbz + FROM + public.tbl_benutzergruppe + WHERE + uid=".$this->db_add_param($uid)." + AND (studiensemester_kurzbz=".$this->db_add_param($this->ss)." + OR studiensemester_kurzbz=".$this->db_add_param($this->ssnext)." + OR studiensemester_kurzbz IS NULL)"; + + if (!$result_einheit=$this->db_query($sql_query)) + { + $this->errormsg='Fehler beim Laden der Gruppen'; + return false; + } + else + $num_rows_einheit=$this->db_num_rows($result_einheit); + } + + // Stundenplandaten ermitteln + // Abfrage generieren + + if ($type!='idList') + { + if($alle_unr_mitladen) + $sql_query_stdplan='SELECT '.$stpl_id.', datum, stunde, unr FROM '.$stpl_view.' stplvw'; + else + $sql_query_stdplan='SELECT * FROM '.$stpl_view.' stplvw'; + $sql_query_lva=""; + $sql_query=" WHERE datum>=".$this->db_add_param($datum_von)." AND datum<".$this->db_add_param($datum_bis); + if ($type == 'lva') + $sql_query_lva=" AND lehrveranstaltung_id=".$this->db_add_param($lva); + elseif ($type=='lektor') + { + $sql_query.=" AND ("; + $sql_query.=" uid=".$this->db_add_param($uid); + //Reservierungen mit Spezialgruppen laden + for ($i=0;$i<$num_rows_einheit;$i++) + { + $row=$this->db_fetch_object($result_einheit,$i); + $sql_query.=" OR gruppe_kurzbz=".$this->db_add_param($row->gruppe_kurzbz); + } + $sql_query.=')'; + } + elseif ($type=='ort' && $ort_kurzbz != 'all') + $sql_query.=" AND ort_kurzbz=".$this->db_add_param($ort_kurzbz); + elseif ($type=='ort' && $ort_kurzbz == 'all') + $sql_query.=" AND ort_kurzbz IS NOT NULL AND ort_kurzbz !='Dummy'"; + elseif ($type=='gruppe') + $sql_query.=" AND gruppe_kurzbz=".$this->db_add_param($gruppe_kurzbz); + elseif($type=='fachbereich') + $sql_query.=" AND fachbereich_kurzbz=".$this->db_add_param($fachbereich_kurzbz); + elseif($type=='student') + { + $sql_query.=" AND ("; + if(is_array($verbaende) && count($verbaende)>0) + { + foreach($verbaende as $row_verbaende) + { + $studiengang_kz = $row_verbaende['studiengang_kz']; + $ver = $row_verbaende['ver']; + $sem = $row_verbaende['sem']; + $grp = $row_verbaende['grp']; + + $sql_query.=" (studiengang_kz=".$this->db_add_param($studiengang_kz, FHC_INTEGER); + if ($sem!=null && $sem>=0 && $sem!='') + $sql_query.=" AND (semester=".$this->db_add_param($sem)." OR semester IS NULL)"; + if ($ver!='0' && $ver!=null && $ver!='') + $sql_query.=" AND (verband=".$this->db_add_param($ver)." OR verband IS NULL OR verband='0' OR verband='')"; + if ($grp!='0' && $grp!=null && $grp!='') + $sql_query.=" AND (gruppe=".$this->db_add_param($grp)." OR gruppe IS NULL OR gruppe='0' OR gruppe='')"; + $sql_query.=" AND gruppe_kurzbz is null"; + $sql_query.=") OR "; + } + } + + $sql_query.=" 1!=1"; + for ($i=0;$i<$num_rows_einheit;$i++) + { + $row=$this->db_fetch_object($result_einheit,$i); + $sql_query.=" OR gruppe_kurzbz=".$this->db_add_param($row->gruppe_kurzbz); + } + $sql_query.=')'; + } + else + { + $sql_query.=" AND ( (studiengang_kz=".$this->db_add_param($studiengang_kz, FHC_INTEGER); + if ($sem!=null && $sem>=0 && $sem!='') + $sql_query.=" AND (semester=".$this->db_add_param($sem)." OR semester IS NULL)"; + if ($ver!='0' && $ver!=null && $ver!='') + $sql_query.=" AND (verband=".$this->db_add_param($ver)." OR verband IS NULL OR verband='0' OR verband='')"; + if ($grp!='0' && $grp!=null && $grp!='') + $sql_query.=" AND (gruppe=".$this->db_add_param($grp)." OR gruppe IS NULL OR gruppe='0' OR gruppe='')"; + + // Direkte Gruppen werden ausgenommen da sonst Stunden von Verband A in der Ansicht für Verband B + // mit angezeigt werden weil die direkte Gruppe geladen wird. + $sql_query.=' AND + ( + gruppe_kurzbz is null + OR + EXISTS( + SELECT 1 FROM public.tbl_gruppe + WHERE + gruppe_kurzbz = stplvw.gruppe_kurzbz + AND direktinskription=false + ) + )'; + + $sql_query.=' )'; + + for ($i=0;$i<$num_rows_einheit;$i++) + { + $row=$this->db_fetch_object($result_einheit,$i); + $sql_query.=" OR gruppe_kurzbz=".$this->db_add_param($row->gruppe_kurzbz); + } + $sql_query.=')'; + } + $sql_query_orderby=' ORDER BY datum, stunde, studiengang_kz, semester, verband, gruppe, gruppe_kurzbz, uid'; + $sql_query_stdplan.=$sql_query . $sql_query_lva . $sql_query_orderby; + + // Wenn aktiviert, werden alle Stunden mit der gleichen UNR geladen die zur selben Zeit stattfinden + if($alle_unr_mitladen) + { + $sql_query_stdplan=" + WITH lvplan(id, datum, stunde, unr) as + ( + $sql_query_stdplan + ) + SELECT + distinct $stpl_view_ohneschema.* + FROM + ".$stpl_view.", lvplan + WHERE + $stpl_view_ohneschema.datum=lvplan.datum + AND $stpl_view_ohneschema.stunde=lvplan.stunde + AND $stpl_view_ohneschema.unr=lvplan.unr + ORDER BY datum, stunde, studiengang_kz, semester, verband, gruppe, gruppe_kurzbz, uid + "; + } + } + else + { + $sql_query_stdplan='SELECT * FROM '.$stpl_view; + $sql_query=''; + foreach ($idList as $id) + $sql_query.=" OR ".$stpl_id."=".$this->db_add_param($id); + $sql_query=mb_substr($sql_query,3); + $sql_query_stdplan.=' WHERE'.$sql_query; + } + + //Datenbankabfrage + if (!$this->db_query($sql_query_stdplan)) + { + $this->errormsg = 'Fehler beim Laden der Stundenplandaten'; + return -2; + } + $stpl_tbl = $this->db_result; + $num_rows = $this->db_num_rows($stpl_tbl); + $this->anzahl=$num_rows; + //Daten uebernehmen + for ($i=0;$i<$num_rows;$i++) + { + $row=$this->db_fetch_object($stpl_tbl, $i); + + $stunde=new lehrstunde(); + $stunde->stundenplan_id=$row->{$stpl_id}; + $stunde->lehreinheit_id=$row->lehreinheit_id; + $stunde->unr=$row->unr; + $stunde->lektor_uid=$row->uid; + $stunde->lektor_kurzbz=$row->lektor; + $stunde->datum=$row->datum; + $stunde->stunde=$row->stunde; + $stunde->ort_kurzbz=$row->ort_kurzbz; + $stunde->lehrfach=$row->lehrfach; + $stunde->lehrfach_bez=$row->lehrfach_bez; + $stunde->lehrfach_id=$row->lehrfach_id; + $stunde->lehrform=$row->lehrform; + if ($row->farbe!=' ' && $row->farbe!=null) + $stunde->farbe=$row->farbe; + else + $stunde->farbe='FFFFFF'; + $stunde->studiengang_kz=$row->studiengang_kz; + $stunde->studiengang=mb_strtoupper($row->stg_typ.$row->stg_kurzbz); + $stunde->sem=$row->semester; + $stunde->ver=$row->verband; + $stunde->grp=$row->gruppe; + $stunde->gruppe_kurzbz=$row->gruppe_kurzbz; + $stunde->titel=$row->titel; + $stunde->anmerkung=$row->anmerkung; + $stunde->anmerkung_lehreinheit=$row->anmerkung_lehreinheit; + $stunde->updateamum=$row->updateamum; + $stunde->updatevon=$row->updatevon; + $stunde->reservierung=false; + $this->lehrstunden[$i]=$stunde; + + } + + // Reservierungsdaten ermitteln + if ($type!='idList' && $type!='fachbereich' && $type!='lva') + { + // Datenbankabfrage generieren + $sql_query_reservierung='SELECT * FROM campus.vw_reservierung stplvw'; + $sql_query_reservierung.=$sql_query . $sql_query_orderby; + + //Datenbankabfrage + if (!$this->db_query($sql_query_reservierung)) + { + $this->errormsg = 'Fehler beim Laden der Reservierungen'; + return -2; + } + $stpl_tbl = $this->db_result; + $num_rows=$this->db_num_rows($stpl_tbl); + $this->anzahl+=$num_rows; + + //Daten uebernehmen + for ($i=0;$i<$num_rows;$i++) + { + $row = $this->db_fetch_object($stpl_tbl, $i); + + $stunde=new lehrstunde(); + $stunde->reservierung=true; + $stunde->stundenplan_id=$row->reservierung_id; + $stunde->unr=0; + $stunde->lektor_uid=$row->uid; + $stunde->lektor_kurzbz=$row->uid; + $stunde->datum=$row->datum; + $stunde->stunde=$row->stunde; + $stunde->ort_kurzbz=$row->ort_kurzbz; + //$stunde->lehrfach_id=$row->lehrfach_id; + $stunde->lehrfach=$row->titel; + $stunde->lehrfach_bez=$row->beschreibung; + $stunde->studiengang_kz=$row->studiengang_kz; + $stunde->studiengang=$row->stg_kurzbz; + $stunde->sem=$row->semester; + $stunde->ver=$row->verband; + $stunde->grp=$row->gruppe; + $stunde->gruppe_kurzbz=$row->gruppe_kurzbz; + $stunde->titel=$row->titel; + $stunde->anmerkung=$row->beschreibung; + $stunde->anmerkung_lehreinheit=$row->beschreibung; + $stunde->farbe=''; + $this->lehrstunden[]=$stunde; + } + } + return $this->anzahl; + } + + /** + * @param lehreinheit_id + * @param uid (mitarbeiter) + * + */ + public function load_lehrstunden_le($lehreinheit_id, $uid=null, $stpl_table='stundenplandev') + { + // Bezeichnung der Stundenplan-Tabelle und des Keys + $stpl_id=$stpl_table.TABLE_ID; + $stpl_table='lehre.'.TABLE_BEGIN.$stpl_table; + + // Stundenplandaten ermitteln + // Abfrage generieren + $sql="SELECT * FROM ".$stpl_table." WHERE lehreinheit_id=".$this->db_add_param($lehreinheit_id, FHC_INTEGER); + if ($uid!=null && !is_null($uid)) + $sql.=" AND mitarbeiter_uid=".$this->db_add_param($uid); + + //Datenbankabfrage + if (!$this->db_query($sql)) + { + $this->errormsg=$this->db_last_error(); + return -1; + } + $num_rows=$this->db_num_rows(); + $this->anzahl=$num_rows; + //Daten uebernehmen + for ($i=0;$i<$num_rows;$i++) + { + $row=$this->db_fetch_object(null, $i); + + $stunde=new lehrstunde(); + $stunde->stundenplan_id=$row->{$stpl_id}; + $stunde->lehreinheit_id=$row->lehreinheit_id; + $stunde->unr=$row->unr; + $stunde->studiengang_kz=$row->studiengang_kz; + $stunde->sem=$row->semester; + $stunde->ver=$row->verband; + $stunde->grp=$row->gruppe; + $stunde->gruppe_kurzbz=$row->gruppe_kurzbz; + $stunde->lektor_uid=$row->mitarbeiter_uid; + $stunde->ort_kurzbz=$row->ort_kurzbz; + $stunde->datum=$row->datum; + $stunde->stunde=$row->stunde; + $stunde->titel=$row->titel; + $stunde->anmerkung=$row->anmerkung; + $stunde->fix=$row->fix; + $stunde->insertamum=$row->insertamum; + $stunde->insertvon=$row->insertvon; + $stunde->updateamum=$row->updateamum; + $stunde->updatevon=$row->updatevon; + $stunde->reservierung=false; + $this->lehrstunden[$i]=$stunde; + } + return $this->anzahl; + } + + + /** + * Prueft die geladene Lehrveranstaltung auf Kollisionen im Stundenplan. + * Bei einer Kollision steht der Grund der Kollision in '$this->errormsg'. + * @param string db_stpl_table Tabllenname des Stundenplans im DBMS + * @return boolean true=kollision, false=keine kollision + */ + public function kollision($stpl_table='stundenplandev') + { + $variablen_obj = new variable(); + $variablen_obj->loadVariables(get_uid()); + + $kollision_student = $variablen_obj->variable->kollision_student; + $ignore_reservierung = $variablen_obj->variable->ignore_reservierung; + $ignore_zeitsperre = $variablen_obj->variable->ignore_zeitsperre; + + //Kollisionspruefung auf Studentenebene + if($kollision_student=='true' && $this->kollision_student($stpl_table)) + return true; + + // Parameter Checken + // Bezeichnung der Stundenplan-Tabelle und des Keys + $stpl_id=$stpl_table.TABLE_ID; + $stpl_table='lehre.'.VIEW_BEGIN.$stpl_table; + + // Datenbank abfragen + $sql_query="SELECT $stpl_id AS id, lektor, stg_kurzbz, ort_kurzbz, semester, verband, gruppe, gruppe_kurzbz, datum, stunde FROM $stpl_table + WHERE datum=".$this->db_add_param($this->datum)." AND stunde=".$this->db_add_param($this->stunde); + + // Direkte Lehreinheitsgruppen kollidieren nicht + $sql_query.=" AND NOT EXISTS(SELECT 1 FROM public.tbl_gruppe WHERE gruppe_kurzbz = ".$stpl_table.".gruppe_kurzbz AND direktinskription=true)"; + + $sql_query.= " AND (ort_kurzbz=".$this->db_add_param($this->ort_kurzbz)." "; + + if (!in_array($this->lektor_uid,unserialize(KOLLISIONSFREIE_USER))) + $sql_query.=" OR (uid=".$this->db_add_param($this->lektor_uid)." AND uid not in (".$this->db_implode4SQL(unserialize(KOLLISIONSFREIE_USER))."))"; + + //Wenn eine Kollisionspruefung auf Studentenebene durchgefuehrt wird, werden die LVB nicht gecheckt + if($kollision_student=='false') + { + // Direkte Gruppen kollidieren nicht + $direktgruppe = false; + if($this->gruppe_kurzbz!=null && $this->gruppe_kurzbz!='' && $this->gruppe_kurzbz!=' ') + { + $grp_obj = new gruppe(); + $grp_obj->load($this->gruppe_kurzbz); + if($grp_obj->direktinskription) + { + $direktgruppe = true; + } + } + if(!$direktgruppe) + { + $sql_query.=" OR (studiengang_kz=".$this->db_add_param($this->studiengang_kz)." AND semester=".$this->db_add_param($this->sem); + if($this->gruppe_kurzbz!=null && $this->gruppe_kurzbz!='' && $this->gruppe_kurzbz!=' ') + { + $sql_query.=" OR (gruppe_kurzbz=".$this->db_add_param($this->gruppe_kurzbz).")"; + } + else + { + if ($this->ver!=null && $this->ver!='' && $this->ver!=' ') + $sql_query.=" AND (verband=".$this->db_add_param($this->ver)." OR verband IS NULL OR verband='' OR verband=' ')"; + if ($this->grp!=null && $this->grp!='' && $this->grp!=' ') + $sql_query.=" AND (gruppe=".$this->db_add_param($this->grp)." OR gruppe IS NULL OR gruppe='' OR gruppe=' ')"; + } + + $sql_query.=")"; + } + } + $sql_query.=") AND unr!=".$this->db_add_param($this->unr); + + if (!$erg_stpl = $this->db_query($sql_query)) + { + $this->errormsg=$sql_query.$this->db_last_error(); + return true; + } + + $anz=$this->db_num_rows($erg_stpl); + if ($anz==0) + { + // Zeitsperren pruefen + if($ignore_zeitsperre=='false' && !in_array($this->lektor_uid,unserialize(KOLLISIONSFREIE_USER)) && $this->kollision_zeitsperre()) + return true; + + // Reservierungen pruefen + if ($ignore_reservierung=='false' && $this->kollision_reservierung()) + return true; + + if($this->kollision_ressource()) + return true; + return false; + } + else + { + $row = $this->db_fetch_object($erg_stpl); + $this->errormsg="Kollision ($stpl_table): $row->id|$row->lektor|$row->ort_kurzbz|$row->stg_kurzbz-$row->semester$row->verband$row->gruppe$row->gruppe_kurzbz - $row->datum/$row->stunde\n"; //\n".$sql_query + return true; + } + } + + /** + * Prueft ob eine Kollision mit den zugeteilten Ressourcen vorhanden ist + * + * @return boolean true=kollision, false=keine kollision + */ + public function kollision_ressource() + { + $qry = "SELECT + tbl_betriebsmittel.beschreibung, tbl_stundenplandev.ort_kurzbz + FROM + lehre.tbl_stundenplan_betriebsmittel + JOIN lehre.tbl_stundenplandev USING(stundenplandev_id) + JOIN wawi.tbl_betriebsmittel USING(betriebsmittel_id) + WHERE + tbl_stundenplandev.datum=".$this->db_add_param($this->datum)." + AND tbl_stundenplandev.stunde=".$this->db_add_param($this->stunde)." + AND betriebsmittel_id IN(SELECT betriebsmittel_id FROM lehre.tbl_stundenplan_betriebsmittel WHERE stundenplandev_id=".$this->db_add_param($this->stundenplan_id).") + AND tbl_stundenplandev.stundenplandev_id<>".$this->db_add_param($this->stundenplan_id); + + if($result = $this->db_query($qry)) + { + if($row = $this->db_fetch_object($result)) + { + $this->errormsg='Kollision (Ressource)'.$row->beschreibung.'|'.$row->ort_kurzbz; + return true; + } + return false; + } + return false; + } + + /** + * Prueft ob eine Kollision mit den Zeitsperren vorhanden ist + * + * @return boolean true=kollision, false=keine kollision + */ + public function kollision_zeitsperre() + { + $sql_query="SELECT + zeitsperre_id,zeitsperretyp_kurzbz,mitarbeiter_uid AS lektor,vondatum,vonstunde,bisdatum,bisstunde + FROM campus.tbl_zeitsperre + WHERE mitarbeiter_uid=".$this->db_add_param($this->lektor_uid)." + AND (vondatum<".$this->db_add_param($this->datum)." OR (vondatum=".$this->db_add_param($this->datum)." AND (vonstunde<=".$this->db_add_param($this->stunde)." OR vonstunde IS NULL))) + AND (bisdatum>".$this->db_add_param($this->datum)." OR (bisdatum=".$this->db_add_param($this->datum)." AND (bisstunde>=".$this->db_add_param($this->stunde)." OR bisstunde IS NULL)));"; + + if (!$erg_zs = $this->db_query($sql_query)) + { + $this->errormsg=$sql_query.$this->db_last_error(); + return true; + } + + $anz_zs=$this->db_num_rows($erg_zs); + if ($anz_zs!=0) + { + $row = $this->db_fetch_object($erg_zs); + $this->errormsg="Kollision (Zeitsperre): $row->zeitsperre_id|$row->lektor|$row->zeitsperretyp_kurzbz - $row->vondatum/$row->vonstunde|$row->bisdatum/$row->bisstunde"; + return true; + } + return false; + } + + /** + * Prueft ob eine LV-Plan Kollision mit den Reservierungen besteht + * + * @return boolean true=kollision, false=keine kollision + */ + public function kollision_reservierung() + { + $sql_query="SELECT + reservierung_id AS id, uid AS lektor, stg_kurzbz, ort_kurzbz, + semester, verband, gruppe, gruppe_kurzbz, datum, stunde + FROM lehre.vw_reservierung + WHERE + datum=".$this->db_add_param($this->datum)." AND + stunde=".$this->db_add_param($this->stunde)." AND + (ort_kurzbz=".$this->db_add_param($this->ort_kurzbz)." OR "; + + if (!in_array($this->lektor_uid, unserialize(KOLLISIONSFREIE_USER))) + $sql_query.="(uid=".$this->db_add_param($this->lektor_uid)." AND uid not in(".$this->db_implode4SQL(unserialize(KOLLISIONSFREIE_USER)).")) OR "; + + $sql_query.="(studiengang_kz=".$this->db_add_param($this->studiengang_kz)." AND semester=".$this->db_add_param($this->sem); + if ($this->ver!=null && $this->ver!='' && $this->ver!=' ') + $sql_query.=" AND (verband=".$this->db_add_param($this->ver)." OR verband IS NULL OR verband='' OR verband=' ')"; + if ($this->grp!=null && $this->grp!='' && $this->grp!=' ') + $sql_query.=" AND (gruppe=".$this->db_add_param($this->grp)." OR gruppe IS NULL OR gruppe='' OR gruppe=' ')"; + if ($this->gruppe_kurzbz!=null && $this->gruppe_kurzbz!='' && $this->gruppe_kurzbz!=' ') + $sql_query.=" AND (gruppe_kurzbz=".$this->db_add_param($this->gruppe_kurzbz).")"; + $sql_query.="))"; + + if (!$erg_res = $this->db_query($sql_query)) + { + $this->errormsg=$sql_query.$this->db_last_error(); + return true; + } + $anz_res = $this->db_num_rows($erg_res); + + if ($anz_res!=0) + { + $row = $this->db_fetch_object($erg_res); + $this->errormsg="Kollision (Reservierung): $row->id|$row->lektor|$row->ort_kurzbz|$row->stg_kurzbz-$row->semester$row->verband$row->gruppe$row->gruppe_kurzbz - $row->datum/$row->stunde"; + return true; + } + return false; + } + + /** + * Prueft eine Kollision auf Studentenebene + * Es werden nur die Kollisionen der Studenten abgefragt + * Raum, Lektor, Reservierung, Zeitsperren, etc werden hier nicht geprueft + * + * @param $stpl_table + * @return boolean true=kollision, false=keine kollision + */ + public function kollision_student($stpl_table='stundenplandev') + { + // Parameter Checken + // Bezeichnung der Stundenplan-Tabelle + $stpl_table='lehre.'.VIEW_BEGIN.$stpl_table; + + $sql_query = "SELECT * + FROM ".$stpl_table."_student_unr + WHERE datum=".$this->db_add_param($this->datum)." AND stunde=".$this->db_add_param($this->stunde)." AND student_uid IN( + SELECT uid FROM public.vw_gruppen WHERE + + "; + $sql_query.="(studiengang_kz=".$this->db_add_param($this->studiengang_kz)." AND semester=".$this->db_add_param($this->sem)." + AND studiensemester_kurzbz=( + SELECT tbl_studiensemester.studiensemester_kurzbz + FROM + public.tbl_studiensemester + WHERE + tbl_studiensemester.ende >= ".$this->db_add_param($this->datum)." + AND tbl_studiensemester.start <=".$this->db_add_param($this->datum)." LIMIT 1)"; + if ($this->gruppe_kurzbz!=null && $this->gruppe_kurzbz!='' && $this->gruppe_kurzbz!=' ') + $sql_query.=" AND (gruppe_kurzbz=".$this->db_add_param($this->gruppe_kurzbz).")"; + else + { + if ($this->ver!=null && $this->ver!='' && $this->ver!=' ') + $sql_query.=" AND (verband=".$this->db_add_param($this->ver).")"; + else + $sql_query.=" AND (verband IS NULL OR verband='' OR verband=' ')"; + if ($this->grp!=null && $this->grp!='' && $this->grp!=' ') + $sql_query.=" AND (gruppe=".$this->db_add_param($this->grp).")"; + else + $sql_query.=" AND (gruppe IS NULL OR gruppe='' OR gruppe=' ')"; + } + + + $sql_query.=")) AND unr!=".$this->db_add_param($this->unr); + + if (!$erg_stpl=$this->db_query($sql_query)) + { + $this->errormsg=$sql_query.$this->db_last_error(); + return true; + } + + $anz=$this->db_num_rows($erg_stpl); + + if ($anz>0) + { + $row = $this->db_fetch_object($erg_stpl); + $this->errormsg="Kollision Student ($stpl_table): $row->student_uid $row->datum/$row->stunde "; + return true; + } + else + { + return false; + } + } + + /** + * Gruppiert die einzelnen Lehrstunden zusammen + */ + public function getLehrstundenGruppiert() + { + $result = array(); + + foreach($this->lehrstunden as $row_lehrstunde) + { + $found=false; + //Pruefen ob bereits ein Eintrag vorhanden ist + //zu dem dazugruppiert werden kann + + /* + Kriterien fuer Gruppierung + - gleiches Datum + - gleiche Stunde + - gleiche UNR + */ + foreach($result as $key=>$row_result) + { + if($row_result->unr==$row_lehrstunde->unr + && $row_result->datum==$row_lehrstunde->datum + && $row_result->stunde==$row_lehrstunde->stunde) + { + $found=true; + //gleicher Eintrag gefunden + $grpidx = count($result[$key]->gruppen); + $result[$key]->gruppen[$grpidx]->studiengang_kz=$row_lehrstunde->studiengang_kz; + $result[$key]->gruppen[$grpidx]->sem=$row_lehrstunde->sem; + $result[$key]->gruppen[$grpidx]->ver=$row_lehrstunde->ver; + $result[$key]->gruppen[$grpidx]->grp=$row_lehrstunde->grp; + $result[$key]->gruppen[$grpidx]->gruppe_kurzbz=$row_lehrstunde->gruppe_kurzbz; + if(!in_array($row_lehrstunde->lektor_uid, $result[$key]->lektor_uid)) + $result[$key]->lektor_uid[]=$row_lehrstunde->lektor_uid; + if(!in_array($row_lehrstunde->ort_kurzbz, $result[$key]->ort_kurzbz)) + $result[$key]->ort_kurzbz[]=$row_lehrstunde->ort_kurzbz; + break; + } + } + + if(!$found) + { + // Wenn kein passender Eintrag vorhanden ist, + // wird ein neuer angelegt + $stunde=new lehrstunde(); + $stunde->stundenplan_id=$row_lehrstunde->stundenplan_id; + $stunde->lehreinheit_id=$row_lehrstunde->lehreinheit_id; + $stunde->farbe = (isset($row_lehrstunde->farbe)?$row_lehrstunde->farbe:'FFFFFF'); + $stunde->unr=$row_lehrstunde->unr; + $stunde->gruppen[0]->studiengang_kz=$row_lehrstunde->studiengang_kz; + $stunde->gruppen[0]->sem=$row_lehrstunde->sem; + $stunde->gruppen[0]->ver=$row_lehrstunde->ver; + $stunde->gruppen[0]->grp=$row_lehrstunde->grp; + $stunde->gruppen[0]->gruppe_kurzbz=$row_lehrstunde->gruppe_kurzbz; + $stunde->lektor_uid[]=$row_lehrstunde->lektor_uid; + $stunde->ort_kurzbz[]=$row_lehrstunde->ort_kurzbz; + $stunde->datum=$row_lehrstunde->datum; + $stunde->stunde=$row_lehrstunde->stunde; + $stunde->titel=$row_lehrstunde->titel; + $stunde->anmerkung=$row_lehrstunde->anmerkung; + $stunde->fix=$row_lehrstunde->fix; + $stunde->reservierung=$row_lehrstunde->reservierung; + $result[]=$stunde; + } + } + return $result; + } + + public function getStundenplanData($db_stpl_table, $lehrveranstaltung_id=null, $studiensemester_kurzbz=null, $lehreinheit_id=null, $mitarbeiter_uid=null, $student_uid=null) + { + + $qry = "SELECT + stpl.datum, min(stpl.stunde) as stundevon, max(stpl.stunde) as stundebis, + stpl.lehreinheit_id, lehrfach.bezeichnung as lehrfach_bezeichnung, + array_agg( + CASE WHEN gruppe_kurzbz is not null THEN gruppe_kurzbz + ELSE (SELECT UPPER(typ || kurzbz) FROM public.tbl_studiengang WHERE studiengang_kz=stpl.studiengang_kz) || COALESCE(stpl.semester,'0') || COALESCE(stpl.verband,'') || COALESCE(stpl.gruppe,'') + END) as gruppen, array_agg(mitarbeiter_uid) as lektoren, + array_agg(ort_kurzbz) as orte, + array_agg(titel) as titel + FROM + lehre.tbl_".$db_stpl_table." as stpl + JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) + JOIN lehre.tbl_lehrveranstaltung as lehrfach ON(tbl_lehreinheit.lehrfach_id=lehrfach.lehrveranstaltung_id) + WHERE "; + + if($lehrveranstaltung_id!='') + { + $qry.=" lehreinheit_id in(SELECT lehreinheit_id FROM lehre.tbl_lehreinheit + WHERE lehrveranstaltung_id=".$this->db_add_param($lehrveranstaltung_id)." + AND studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz).")"; + + } + elseif($lehreinheit_id!='') + { + $qry.=" lehreinheit_id=".$this->db_add_param($lehreinheit_id); + } + elseif($mitarbeiter_uid!='') + { + $qry.=" mitarbeiter_uid=".$this->db_add_param($mitarbeiter_uid)." AND lehreinheit_id IN( + SELECT + lehreinheit_id + FROM + lehre.tbl_lehreinheitmitarbeiter + JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) + WHERE mitarbeiter_uid=".$this->db_add_param($mitarbeiter_uid)." AND studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz).")"; + } + elseif($student_uid!='') + { + $qry.=" lehreinheit_id in ( + SELECT + lehreinheit_id + FROM + campus.vw_student_lehrveranstaltung + WHERE + uid=".$this->db_add_param($student_uid)." AND studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz).")"; + } + else + return false; + + $qry.="GROUP BY stpl.datum, stpl.unr, stpl.lehreinheit_id, lehrfach.bezeichnung + ORDER BY stpl.datum, min(stpl.stunde), stpl.unr, stpl.lehreinheit_id"; + + if($result = $this->db_query($qry)) + { + while($row = $this->db_fetch_object($result)) + { + $obj = new stdClass(); + + $obj->datum = $row->datum; + $obj->stundevon = $row->stundevon; + $obj->stundebis = $row->stundebis; + $obj->gruppen = array_unique($this->db_parse_array($row->gruppen)); + $obj->lektoren = array_unique($this->db_parse_array($row->lektoren)); + $obj->orte = array_unique($this->db_parse_array($row->orte)); + $obj->titel = array_filter(array_unique($this->db_parse_array($row->titel))); + $obj->lehrfach_bezeichnung = $row->lehrfach_bezeichnung; + $obj->lehreinheit_id = $row->lehreinheit_id; + + $this->result[] = $obj; + } + return true; + } + else + return false; + } +} + +?> diff --git a/include/lehrveranstaltung.class.php b/include/lehrveranstaltung.class.php index c8154691d..6cff4c75f 100644 --- a/include/lehrveranstaltung.class.php +++ b/include/lehrveranstaltung.class.php @@ -1,5 +1,5 @@ , - * Andreas Oesterreicher and - * Rudolf Hangl . - * Stefan Puraner + * Andreas Oesterreicher , + * Rudolf Hangl , + * Stefan Puraner and + * Manuela Thamer */ require_once(dirname(__FILE__) . '/basis_db.class.php'); require_once(dirname(__FILE__) . '/functions.inc.php'); @@ -2458,6 +2459,44 @@ class lehrveranstaltung extends basis_db } } + /** + * Laedt den LV-Leiter einer Lehrveranstaltung + * ist keiner der Lektoren als LV-Leitung eingetragen, wird Null zurückgegeben + * @param int $lehrveranstaltung_id ID der Lehrveranstaltung. + * @param char $studiensemester_kurzbz Studiensemester. + * @return char $mitarbeiter_uid UID des Mitarbeiters oder NULL, wenn keine LV-Leitung vorhanden + */ + public function getEingetrageneLVLeitung($lehrveranstaltung_id, $studiensemester_kurzbz) + { + $qry = "SELECT + mitarbeiter_uid + FROM + lehre.tbl_lehreinheit + JOIN lehre.tbl_lehreinheitmitarbeiter USING(lehreinheit_id) + WHERE + tbl_lehreinheit.lehrveranstaltung_id=".$this->db_add_param($lehrveranstaltung_id)." + AND tbl_lehreinheit.studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz)." + AND lehrfunktion_kurzbz='LV-Leitung';"; + + if($result = $this->db_query($qry)) + { + if($row = $this->db_fetch_object($result)) + { + return $row->mitarbeiter_uid; + } + else + { + $this->errormsg = 'Keine Eintrag gefunden'; + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + } + /** * Liefert den Koordinator einer Lehrveranstaltung * @param $lehrveranstaltung_id diff --git a/include/statistik.class.php b/include/statistik.class.php index 7d34a04a0..3075250b5 100644 --- a/include/statistik.class.php +++ b/include/statistik.class.php @@ -510,7 +510,7 @@ class statistik extends basis_db $this->html=''; $this->csv=''; $this->json=array(); - set_time_limit(60); + set_time_limit(120); if($this->sql!='') { diff --git a/include/studiengang.class.php b/include/studiengang.class.php index 08d6e1f13..530b072c0 100644 --- a/include/studiengang.class.php +++ b/include/studiengang.class.php @@ -500,7 +500,8 @@ class studiengang extends basis_db $qry = 'INSERT INTO public.tbl_studiengang (studiengang_kz, kurzbz, kurzbzlang, bezeichnung, english, typ, farbe, email, telefon, max_verband, max_semester, max_gruppe, erhalter_kz, bescheid, bescheidbgbl1, bescheidbgbl2, bescheidgz, bescheidvom, titelbescheidvom, aktiv, onlinebewerbung, orgform_kurzbz, zusatzinfo_html, - oe_kurzbz, moodle, sprache, testtool_sprachwahl, studienplaetze, lgartcode, mischform,projektarbeit_note_anzeige) VALUES ('. + oe_kurzbz, moodle, sprache, testtool_sprachwahl, studienplaetze, lgartcode, mischform,projektarbeit_note_anzeige, + melderelevant, foerderrelevant, standort_code) VALUES ('. $this->db_add_param($this->studiengang_kz, FHC_INTEGER).', '. $this->db_add_param($this->kurzbz).', '. $this->db_add_param($this->kurzbzlang).', '. @@ -1103,7 +1104,7 @@ class studiengang extends basis_db return false; } } - + /** * Laedt die Studiengänge die vom übergeben Typ sind * @param string $typ @@ -1118,13 +1119,13 @@ class studiengang extends basis_db tbl_studiengang.typ=".$this->db_add_param($typ)." ORDER BY kurzbz"; - + if($this->db_query($qry)) { while($row = $this->db_fetch_object()) { $obj = new studiengang(); - + $obj->studiengang_kz = $row->studiengang_kz; $obj->kurzbz = $row->kurzbz; $obj->kurzbzlang = $row->kurzbzlang; @@ -1160,10 +1161,10 @@ class studiengang extends basis_db $obj->melderelevant = $this->db_parse_bool($row->melderelevant); $obj->foerderrelevant = $this->db_parse_bool($row->foerderrelevant); $obj->standort_code = $row->standort_code; - + $obj->bezeichnung_arr['German'] = $obj->bezeichnung; $obj->bezeichnung_arr['English'] = $obj->english; - + $this->result[] = $obj; } return true; diff --git a/include/tw/vilesci_menu_main.inc.php b/include/tw/vilesci_menu_main.inc.php index d465eba28..34f44ec66 100644 --- a/include/tw/vilesci_menu_main.inc.php +++ b/include/tw/vilesci_menu_main.inc.php @@ -190,6 +190,7 @@ $menu=array 'StudienplanZuteilung'=>array('name'=>'Studienplan Zuteilung', 'link'=>'lehre/studienplan_zuteilung.php', 'target'=>'main','permissions'=>array('assistenz')), 'lv_merge'=>array('name'=>'LVs zusammenlegen', 'link'=>'lehre/lv_merge.php', 'target'=>'main','permissions'=>array('lehre/lehrveranstaltung')), 'akteupdate'=>array('name'=>'Akten überschreiben', 'link'=>'personen/akteupdate.php', 'target'=>'main','permissions'=>array('admin')), + 'gemeindeupdate'=>array('name'=>'Gemeinden aktualisieren', 'link'=>'stammdaten/set_gemeinde.php', 'target'=>'main','permissions'=>array('basis/gemeinde')), ), 'Auswertung'=> array ( diff --git a/locale/de-AT/lehre.php b/locale/de-AT/lehre.php index fb938322f..c5be73401 100644 --- a/locale/de-AT/lehre.php +++ b/locale/de-AT/lehre.php @@ -2,7 +2,8 @@ $this->phrasen['lehre/keineLektorenZugeordnet']='Derzeit sind keine Lektoren für dieses Fach zugeteilt'; $this->phrasen['lehre/lehrveranstaltungsinformation']='Lehrveranstaltungsinformation'; -$this->phrasen['lehre/lehrbeauftragter']='Lehrbeauftragte(r)'; +$this->phrasen['lehre/lehrbeauftragter']='Lehrbeauftragte*r'; +$this->phrasen['lehre/lvleitung']='LV-Leiter*in'; $this->phrasen['lehre/lvInfoBearbeiten']='Bearbeiten'; $this->phrasen['lehre/semesterplan']='Semesterplan'; diff --git a/locale/en-US/lehre.php b/locale/en-US/lehre.php index 1fd41700f..e8a78c38b 100644 --- a/locale/en-US/lehre.php +++ b/locale/en-US/lehre.php @@ -3,6 +3,7 @@ $this->phrasen['lehre/keineLektorenZugeordnet']='Currently there are no lecturer $this->phrasen['lehre/lehrveranstaltungsinformation']='Course Information'; $this->phrasen['lehre/lehrbeauftragter']='Lecturer(s)'; +$this->phrasen['lehre/lvleitung']='Head of Course'; $this->phrasen['lehre/lvInfoBearbeiten']='Edit'; $this->phrasen['lehre/semesterplan']='Semesterplan'; diff --git a/public/js/infocenter/infocenterPersonDataset.js b/public/js/infocenter/infocenterPersonDataset.js index 252f6ac1f..bdeed1770 100644 --- a/public/js/infocenter/infocenterPersonDataset.js +++ b/public/js/infocenter/infocenterPersonDataset.js @@ -49,6 +49,11 @@ var InfocenterPersonDataset = { '' + + '' + ''; InfocenterPersonDataset.getAbsageData(); @@ -327,6 +332,7 @@ var InfocenterPersonDataset = { var statusgrund = $('.absgstatusgrund').val(); var studiengang = $('.auswahlAbsageStg').val(); + var abgeschickt = $('.auswahlAbsageAbgeschickt').val(); var personen = []; @@ -340,7 +346,8 @@ var InfocenterPersonDataset = { { 'statusgrund': statusgrund, 'studiengang': studiengang, - 'personen' : personen + 'personen' : personen, + 'abgeschickt' : abgeschickt }, { successCallback: function(data, textStatus, jqXHR) { diff --git a/rdf/organisationseinheit.rdf.php b/rdf/organisationseinheit.rdf.php index f31d542ce..ee66697a9 100644 --- a/rdf/organisationseinheit.rdf.php +++ b/rdf/organisationseinheit.rdf.php @@ -35,7 +35,7 @@ require_once('../include/organisationseinheit.class.php'); // raumtypen holen $org=new organisationseinheit(); -$org->getAll(); +$org->getAll(null, null, 'organisationseinheittyp_kurzbz, bezeichnung'); $rdf_url='http://www.technikum-wien.at/organisationseinheit'; @@ -64,4 +64,4 @@ foreach ($org->result as $oe) ?> - \ No newline at end of file + diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php index 6652da78e..bb8f250fd 100644 --- a/system/dbupdate_3.3.php +++ b/system/dbupdate_3.3.php @@ -1725,6 +1725,20 @@ if($result = @$db->db_query("SELECT * FROM information_schema.role_table_grants } } +// UPDATE Berechtigungen fuer vilesci User erteilen fuer tbl_person_lock +if ($result = @$db->db_query("SELECT * FROM information_schema.role_table_grants WHERE table_name='tbl_person_lock' AND table_schema='system' AND grantee='vilesci' AND privilege_type='UPDATE'")) +{ + if ($db->db_num_rows($result) === 0) + { + $qry = "GRANT UPDATE ON system.tbl_person_lock TO vilesci;"; + + if(!$db->db_query($qry)) + echo 'system.tbl_person_lock Berechtigungen: '.$db->db_last_error().'
'; + else + echo 'UPDATE Recht fuer system.tbl_person_lock fuer vilesci user gesetzt '; + } +} + /** * Kommentare fuer Datenbanktabellen @@ -4955,6 +4969,20 @@ if(!@$db->db_query("SELECT statusgrund_kurzbz FROM public.tbl_status_grund LIMIT echo '
Neue Spalte statusgrund_kurzbz zu Tabelle public.tbl_status_grund hinzugefügt'; } +// Add permission to set gemeinde +if($result = @$db->db_query("SELECT 1 FROM system.tbl_berechtigung WHERE berechtigung_kurzbz = 'basis/gemeinde';")) +{ + if($db->db_num_rows($result) == 0) + { + $qry = "INSERT INTO system.tbl_berechtigung(berechtigung_kurzbz, beschreibung) VALUES('basis/gemeinde', 'Gemeindedaten pflegen');"; + + if(!$db->db_query($qry)) + echo 'bis.tbl_bisverwendung: '.$db->db_last_error().'
'; + else + echo ' system.tbl_berechtigung: Added permission for basis/gemeinde
'; + } +} + // Add column homeoffice to bis.tbl_bisverwendung if (!$result = @$db->db_query("SELECT homeoffice FROM bis.tbl_bisverwendung LIMIT 1")) { @@ -5216,9 +5244,9 @@ if(!$result = @$db->db_query("SELECT 1 FROM system.tbl_issue_status LIMIT 1;")) ); COMMENT ON TABLE system.tbl_issue_status IS 'Tabelle zur Pflege von Bearbeitungsstatus von issues.'; - + ALTER TABLE system.tbl_issue_status ADD CONSTRAINT pk_tbl_issue_status PRIMARY KEY (status_kurzbz); - + INSERT INTO system.tbl_issue_status (status_kurzbz, bezeichnung_mehrsprachig) VALUES('new', '{\"neu\",\"new\"}'); INSERT INTO system.tbl_issue_status (status_kurzbz, bezeichnung_mehrsprachig) VALUES('inProgress', '{\"in Bearbeitung\",\"in progress\"}'); INSERT INTO system.tbl_issue_status (status_kurzbz, bezeichnung_mehrsprachig) VALUES('resolved', '{\"behoben\",\"resolved\"}');"; @@ -5250,11 +5278,11 @@ if(!$result = @$db->db_query("SELECT 1 FROM system.tbl_fehlertyp LIMIT 1;")) fehlertyp_kurzbz character varying(32), bezeichnung_mehrsprachig varchar(32)[] ); - + COMMENT ON TABLE system.tbl_fehlertyp IS 'Tabelle mit fehlertyp für tbl_fehler'; ALTER TABLE system.tbl_fehlertyp ADD CONSTRAINT pk_tbl_fehlertyp PRIMARY KEY (fehlertyp_kurzbz); - + INSERT INTO system.tbl_fehlertyp (fehlertyp_kurzbz, bezeichnung_mehrsprachig) VALUES('warning', '{\"warnung\",\"warning\"}'); INSERT INTO system.tbl_fehlertyp (fehlertyp_kurzbz, bezeichnung_mehrsprachig) VALUES('error', '{\"fehler\",\"error\"}'); INSERT INTO system.tbl_fehlertyp (fehlertyp_kurzbz, bezeichnung_mehrsprachig) VALUES('info', '{\"info\",\"info\"}');"; @@ -5290,7 +5318,7 @@ if(!$result = @$db->db_query("SELECT 1 FROM system.tbl_fehler LIMIT 1;")) fehlertyp_kurzbz character varying(32) NOT NULL, app character varying(32) NOT NULL ); - + COMMENT ON TABLE system.tbl_fehler IS 'Tabelle zur Pflege von Fehlerfällen'; COMMENT ON COLUMN system.tbl_fehler.fehlercode IS 'Eindeutiger interner Fehlercode'; COMMENT ON COLUMN system.tbl_fehler.fehler_kurzbz IS 'Eindeutige Kurzbezeichnung für den Fehler'; @@ -5298,13 +5326,13 @@ if(!$result = @$db->db_query("SELECT 1 FROM system.tbl_fehler LIMIT 1;")) COMMENT ON COLUMN system.tbl_fehler.fehlertext IS 'Interner, eigens definierter Fehlertext mit Platzhaltern für Parameter'; COMMENT ON COLUMN system.tbl_fehler.fehlertyp_kurzbz IS 'Typ bzw Schweregrad (z.B. warnung, fehler)'; COMMENT ON COLUMN system.tbl_fehler.app IS 'Ursprungsapp des Fehlers'; - - ALTER TABLE system.tbl_fehler ADD CONSTRAINT pk_tbl_fehler PRIMARY KEY (fehlercode); + + ALTER TABLE system.tbl_fehler ADD CONSTRAINT pk_tbl_fehler PRIMARY KEY (fehlercode); ALTER TABLE system.tbl_fehler ADD CONSTRAINT fk_tbl_fehler_fehlertyp_kurzbz FOREIGN KEY (fehlertyp_kurzbz) REFERENCES system.tbl_fehlertyp(fehlertyp_kurzbz) ON UPDATE CASCADE ON DELETE RESTRICT; ALTER TABLE system.tbl_fehler ADD CONSTRAINT fk_tbl_fehler_app FOREIGN KEY (app) REFERENCES system.tbl_app(app) ON UPDATE CASCADE ON DELETE RESTRICT; ALTER TABLE system.tbl_fehler ADD CONSTRAINT uk_tbl_fehler_fehlercode_fehler_kurzbz UNIQUE (fehlercode, fehler_kurzbz); -- for upsert ON CONFLICT ALTER TABLE system.tbl_fehler ADD CONSTRAINT uk_tbl_fehler_fehlercode_extern_app UNIQUE (fehlercode_extern, app); -- for recognizing external errors - + INSERT INTO system.tbl_fehler (fehlercode, fehlertext, fehlertyp_kurzbz, app) VALUES ('UNKNOWN_ERROR', 'Fehler ist aufgetreten', 'error', 'core'); "; @@ -5339,31 +5367,31 @@ if(!$result = @$db->db_query("SELECT 1 FROM system.tbl_fehler_zustaendigkeiten L oe_kurzbz character varying(32), funktion_kurzbz character varying(16) ); - + COMMENT ON TABLE system.tbl_fehler_zustaendigkeiten IS 'Tabelle zum Hinzufügen für Zuständigkeiten für einzelne Fehler'; COMMENT ON COLUMN system.tbl_fehler_zustaendigkeiten.fehlercode IS 'Eindeutiger interner Fehlercode'; COMMENT ON COLUMN system.tbl_fehler_zustaendigkeiten.person_id IS 'person_id der zuständigen Person'; COMMENT ON COLUMN system.tbl_fehler_zustaendigkeiten.oe_kurzbz IS 'Zuständigkeit für einen fehlercode für eine ganze OE'; COMMENT ON COLUMN system.tbl_fehler_zustaendigkeiten.funktion_kurzbz IS 'Zusätzliche Einschränkung der OE Zuständigkeit nach funktion'; - + CREATE SEQUENCE system.seq_fehlerzustaendigkeiten_id START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; - + ALTER TABLE ONLY system.tbl_fehler_zustaendigkeiten ALTER COLUMN fehlerzustaendigkeiten_id SET DEFAULT nextval('system.seq_fehlerzustaendigkeiten_id'::regclass); - + GRANT SELECT, UPDATE ON SEQUENCE system.seq_fehlerzustaendigkeiten_id TO vilesci; GRANT SELECT, UPDATE ON SEQUENCE system.seq_fehlerzustaendigkeiten_id TO fhcomplete; - ALTER TABLE system.tbl_fehler_zustaendigkeiten ADD CONSTRAINT pk_tbl_fehler_zustaendigkeiten PRIMARY KEY (fehlerzustaendigkeiten_id); + ALTER TABLE system.tbl_fehler_zustaendigkeiten ADD CONSTRAINT pk_tbl_fehler_zustaendigkeiten PRIMARY KEY (fehlerzustaendigkeiten_id); ALTER TABLE system.tbl_fehler_zustaendigkeiten ADD CONSTRAINT fk_tbl_fehler_zustaendigkeiten_fehlercode FOREIGN KEY (fehlercode) REFERENCES system.tbl_fehler(fehlercode) ON UPDATE CASCADE ON DELETE RESTRICT; ALTER TABLE system.tbl_fehler_zustaendigkeiten ADD CONSTRAINT fk_tbl_fehler_zustaendigkeiten_person_id FOREIGN KEY (person_id) REFERENCES public.tbl_person(person_id) ON UPDATE CASCADE ON DELETE RESTRICT; ALTER TABLE system.tbl_fehler_zustaendigkeiten ADD CONSTRAINT fk_tbl_fehler_zustaendigkeiten_oe_kurzbz FOREIGN KEY (oe_kurzbz) REFERENCES public.tbl_organisationseinheit(oe_kurzbz) ON UPDATE CASCADE ON DELETE RESTRICT; ALTER TABLE system.tbl_fehler_zustaendigkeiten ADD CONSTRAINT fk_tbl_fehler_zustaendigkeiten_funktion_kurzbz FOREIGN KEY (funktion_kurzbz) REFERENCES public.tbl_funktion(funktion_kurzbz) ON UPDATE CASCADE ON DELETE RESTRICT; - + ALTER TABLE system.tbl_fehler_zustaendigkeiten ADD CONSTRAINT uk_tbl_fehler_zustaendigkeiten_fehlercode_person_id UNIQUE (fehlercode, person_id); ALTER TABLE system.tbl_fehler_zustaendigkeiten ADD CONSTRAINT uk_tbl_fehler_zustaendigkeiten_fehlercode_oe_kurzbz_funktion_kurzbz UNIQUE (fehlercode, oe_kurzbz, funktion_kurzbz);"; @@ -5407,7 +5435,7 @@ if(!$result = @$db->db_query("SELECT 1 FROM system.tbl_issue LIMIT 1;")) updatevon character varying(32), updateamum timestamp without time zone ); - + COMMENT ON TABLE system.tbl_issue IS 'Tabelle zur Verfolgung von Problemen/Fehlern von verschiedenen Systemen'; COMMENT ON COLUMN system.tbl_issue.issue_id IS 'Primärschlüssel'; COMMENT ON COLUMN system.tbl_issue.fehlercode IS 'Identifikationscode des Problems/Fehlers, kann von anderem System kommen oder eigens definiert sein'; @@ -5420,26 +5448,26 @@ if(!$result = @$db->db_query("SELECT 1 FROM system.tbl_issue LIMIT 1;")) COMMENT ON COLUMN system.tbl_issue.person_id IS 'Id der Person, für welche das issue besteht'; COMMENT ON COLUMN system.tbl_issue.oe_kurzbz IS 'Betroffene Organisationseinheit'; COMMENT ON COLUMN system.tbl_issue.status_kurzbz IS 'Verarbeitsungsstatus'; - + CREATE SEQUENCE system.seq_issue_id START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; - + ALTER TABLE ONLY system.tbl_issue ALTER COLUMN issue_id SET DEFAULT nextval('system.seq_issue_id'::regclass); - + GRANT SELECT, UPDATE ON SEQUENCE system.seq_issue_id TO vilesci; GRANT SELECT, UPDATE ON SEQUENCE system.seq_issue_id TO fhcomplete; - + ALTER TABLE system.tbl_issue ADD CONSTRAINT pk_tbl_issue PRIMARY KEY (issue_id); - + ALTER TABLE system.tbl_issue ADD CONSTRAINT fk_tbl_issue_fehlercode FOREIGN KEY (fehlercode) REFERENCES system.tbl_fehler(fehlercode) ON UPDATE CASCADE ON DELETE RESTRICT; ALTER TABLE system.tbl_issue ADD CONSTRAINT fk_tbl_issue_verarbeitetvon FOREIGN KEY (verarbeitetvon) REFERENCES public.tbl_benutzer(uid) ON UPDATE CASCADE ON DELETE RESTRICT; ALTER TABLE system.tbl_issue ADD CONSTRAINT fk_tbl_issue_person_id FOREIGN KEY (person_id) REFERENCES public.tbl_person(person_id) ON UPDATE CASCADE ON DELETE RESTRICT; ALTER TABLE system.tbl_issue ADD CONSTRAINT fk_tbl_issue_oe_kurzbz FOREIGN KEY (oe_kurzbz) REFERENCES public.tbl_organisationseinheit(oe_kurzbz) ON UPDATE CASCADE ON DELETE RESTRICT; - + ALTER TABLE system.tbl_issue ADD CONSTRAINT chk_tbl_issue_person_id_oe_kurzbz CHECK (person_id IS NOT NULL OR oe_kurzbz IS NOT NULL); CREATE INDEX idx_tbl_issue_person_id ON system.tbl_issue USING btree (person_id); diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index 005d1a8a4..17befb2fb 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -888,6 +888,26 @@ $phrases = array( ) ) ), + array( + 'app' => 'core', + 'category' => 'global', + 'phrase' => 'bewerberVorhanden', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'BewerberIn bereits vorhanden', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Applicant already available', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), array( 'app' => 'core', 'category' => 'global', @@ -12560,13 +12580,13 @@ array( 'phrases' => array( array( 'sprache' => 'German', - 'text' => "Zertifikat als PDF hochladen", + 'text' => "Zertifikat als PDF hochladen (nur mit QR-Code, kein gescanntes Zertifikat)", 'description' => '', 'insertvon' => 'system' ), array( 'sprache' => 'English', - 'text' => "upload certificate pdf", + 'text' => "upload certificate pdf (only with qrcode, no scanned certificate)", 'description' => '', 'insertvon' => 'system' ) @@ -12580,13 +12600,13 @@ array( 'phrases' => array( array( 'sprache' => 'German', - 'text' => "Validierungsergebnis / aktuelles Gültigkeitsdatum", + 'text' => "Validierungsergebnis / gespeichertes Gültigkeitsdatum", 'description' => '', 'insertvon' => 'system' ), array( 'sprache' => 'English', - 'text' => "validation result / current valid date", + 'text' => "validation result / stored valid date", 'description' => '', 'insertvon' => 'system' ) @@ -12680,13 +12700,13 @@ array( 'phrases' => array( array( 'sprache' => 'German', - 'text' => "Das Zertifikat konnte nicht verifiziert werden.", + 'text' => "Das Zertifikat konnte nicht verifiziert werden. Stellen Sie bitte sicher, dass ein QR-Code enthalten ist.", 'description' => '', 'insertvon' => 'system' ), array( 'sprache' => 'English', - 'text' => "certificate could not be verified.", + 'text' => "certificate could not be verified. Please make sure it contains a qr-code.", 'description' => '', 'insertvon' => 'system' ) @@ -12772,6 +12792,106 @@ array( ) ) ), + array( + 'app' => 'core', + 'category' => 'eucovidqr', + 'phrase' => 'UploadSuccessful', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => "Das Gültigkeitsdatum wurde erfolgreich gespeichert.", + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => "validity date has been successfully stored.", + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'eucovidqr', + 'phrase' => 'UploadFailed', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => "Es wurde kein Gültigkeitsdatum gespeichert.", + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => "validity date has not been stored.", + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'eucovidqr', + 'phrase' => 'uploadbeschreibung', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => "Hier kann ein Digitales COVID-Zertifikat der EU mit QR-Code selbst erfasst werden.", + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => "an EU Digital COVID Certificate with QR code can be self registered here.", + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'eucovidqr', + 'phrase' => 'manualbeschreibung', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => "Falls das Zertifikat keinen QR-Code enthält oder die Selbst-Erfassung fehlschlägt, kann das Zertifkat beim Empfang manuell erfasst werden.", + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => "if the certificate does not contain a QR code or self registration fails, the certificate can be manually registered at the front desk.", + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'eucovidqr', + 'phrase' => 'supportbeschreibung', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => "Bei technischen Problemen kontaktieren Sie bitte: ", + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => "in case of technical issues please contact: ", + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), ); diff --git a/vilesci/bis/lehrgangsmeldung.php b/vilesci/bis/lehrgangsmeldung.php index 9cc560d32..b9d6a2526 100644 --- a/vilesci/bis/lehrgangsmeldung.php +++ b/vilesci/bis/lehrgangsmeldung.php @@ -242,29 +242,37 @@ if($result = $db->db_query($qry)) $zustell_strasse = $rowzustelladr->strasse; $zustell_nation = $rowzustelladr->nation; } - - // eMail-Adresse - $qry_mail = " + + // FH eMail-Adresse FH aus UID@Domain + $email = ''; + if ($row->student_uid != '') + { + $email = $row->student_uid. '@'. DOMAIN; + } + + // private eMail-Adresse + $email_privat = ''; + $qry_privmail = " SELECT kontakt FROM public.tbl_kontakt - WHERE kontakttyp = 'email' - AND zustellung = TRUE - AND person_id = ". $db->db_add_param($row->pers_id). " - ORDER BY insertamum DESC LIMIT 1; + WHERE zustellung = TRUE + AND kontakttyp = 'email' + AND person_id=". $db->db_add_param($row->pers_id). " + ORDER BY insertamum DESC + LIMIT 1; "; - - $email = ''; - if ($result_email = $db->db_query($qry_mail)) + + if ($privmail_result = $db->db_query($qry_privmail)) { - if($db->db_num_rows($result_email) == 1) + if($db->db_num_rows($privmail_result) == 1) { - if($row_mail = $db->db_fetch_object($result_email)) + if ($row_privmail = $db->db_fetch_object($privmail_result)) { - $email = $row_mail->kontakt; + $email_privat = $row_privmail->kontakt; } } } - + if($row->gebdatum<'1920-01-01' OR $row->gebdatum==null OR $row->gebdatum=='') { $error_log.=(!empty($error_log)?', ':'')."Geburtsdatum ('".$row->gebdatum."')"; @@ -620,7 +628,8 @@ if($result = $db->db_query($qry)) $datei.=" ".$row->svnr.""; } - if($row->ersatzkennzeichen!='') + // Ersatzkennzeichen nur inkludieren wenn svnr nicht gesetzt + if($row->ersatzkennzeichen!='' && $row->svnr == null) { $datei.=" ".$row->ersatzkennzeichen.""; @@ -648,7 +657,8 @@ if($result = $db->db_query($qry)) } $datei.=" - ". $email. " + ". $email_privat. " + ". $email. " ".$row->zgv_code." ".date("dmY", $datumobj->mktime_fromdate($row->zgvdatum)).""; diff --git a/vilesci/bis/studentenmeldung.php b/vilesci/bis/studentenmeldung.php index dceb4d30c..901181a24 100644 --- a/vilesci/bis/studentenmeldung.php +++ b/vilesci/bis/studentenmeldung.php @@ -758,6 +758,29 @@ function GenerateXMLStudentBlock($row) $email = $row->student_uid. '@'. DOMAIN; } + // private eMail-Adresse + $email_privat = ''; + $qry_privmail = " + SELECT kontakt + FROM public.tbl_kontakt + WHERE zustellung = TRUE + AND kontakttyp = 'email' + AND person_id=". $db->db_add_param($row->pers_id). " + ORDER BY insertamum DESC + LIMIT 1; + "; + + if ($privmail_result = $db->db_query($qry_privmail)) + { + if($db->db_num_rows($privmail_result) == 1) + { + if ($row_privmail = $db->db_fetch_object($privmail_result)) + { + $email_privat = $row_privmail->kontakt; + } + } + } + if($row->gebdatum<'1920-01-01' OR $row->gebdatum==null OR $row->gebdatum=='') { $error_log.=(!empty($error_log)?', ':'')."Geburtsdatum ('".$row->gebdatum."')"; @@ -1263,7 +1286,9 @@ function GenerateXMLStudentBlock($row) $datei .= " " . $row->svnr . ""; } - if ($row->ersatzkennzeichen != '') + + // Ersatzkennzeichen nur inkludieren wenn svnr nicht gesetzt + if ($row->ersatzkennzeichen != '' && $row->svnr == null) { $datei .= " " . $row->ersatzkennzeichen . ""; @@ -1296,11 +1321,16 @@ function GenerateXMLStudentBlock($row) "; } + if ($email_privat != '') + { + $datei .= " + " . $email_privat . ""; + } + if ($email != '') { $datei .= " - " . $email . " - "; + " . $email . ""; } if(!$ausserordentlich) @@ -1531,12 +1561,12 @@ function GenerateXMLStudentBlock($row) if ($aktstatus != 'Incoming' && $rowio->ects_erworben != '') { $datei.=" - ".$rowio->ects_erworben.""; + ".round($rowio->ects_erworben).""; } if ($aktstatus != 'Incoming' && $rowio->ects_angerechnet != '') { $datei.=" - ".$rowio->ects_angerechnet.""; + ".round($rowio->ects_angerechnet).""; } foreach ($aufenthaltfoerderung_code_arr as $aufenthaltfoerderung_code) { diff --git a/vilesci/stammdaten/set_gemeinde.php b/vilesci/stammdaten/set_gemeinde.php new file mode 100644 index 000000000..075f2c910 --- /dev/null +++ b/vilesci/stammdaten/set_gemeinde.php @@ -0,0 +1,159 @@ + delete from bis.tbl_gemeinde; +Skript aufrufen, csv auswählen und hochladen. +Datei wird eingelesen und in die DB gespeichert. +*/ +require_once('../../config/system.config.inc.php'); +require_once(dirname(__FILE__).'/../../include/functions.inc.php'); +require_once(dirname(__FILE__).'/../../include/benutzerberechtigung.class.php'); +require_once(dirname(__FILE__).'/../../include/gemeinde.class.php'); +require_once(dirname(__FILE__).'/../../include/benutzerberechtigung.class.php'); + +$user = get_uid(); + +$rechte = new benutzerberechtigung(); +$rechte->getBerechtigungen($user); + +if (!$rechte->isBerechtigt('basis/gemeinde')) +{ + die('Sie haben keine Berechtigung fuer diese Seite'); +} + +$tmp_gemeinde_ar = array(); + +if (isset($_FILES['parsefile']) && $_FILES['parsefile']['error'] == 0) +{ + + $rows = array_map('str_getcsv', file( $_FILES['parsefile']['tmp_name'] )); + $header = array_shift($rows); + $data = array(); + foreach ($rows as $row) + { + $data[] = array_combine($header, $row); + } + + foreach ($data as $gemeinde_details) + { + + //Wenn nicht gültig dann überspringen + if ($gemeinde_details['Gültig'] == 'Nein') continue; + + //es können mehrere plz in einer zeile stehen + $plzs = explode(' ', trim($gemeinde_details['PLZ'])); + + foreach ($plzs as $plz) + { + $tmp_obj_gemeinde = null; + $tmp_obj_gemeinde = new gemeinde(); + $tmp_obj_gemeinde->plz = $plz; + $tmp_obj_gemeinde->name = $gemeinde_details['Gemeindename']; + $tmp_obj_gemeinde->ortschaftskennziffer = $gemeinde_details['Ortschaftskennziffer']; + $tmp_obj_gemeinde->ortschaftsname = $gemeinde_details['Ortschaftsname']; + $tmp_obj_gemeinde->bulacode = $gemeinde_details['BULA_Code']; + $tmp_obj_gemeinde->bulabez = $gemeinde_details['BULA_Bez']; + $tmp_obj_gemeinde->kennziffer = $gemeinde_details['Gemeindekennziffer']; + + $tmp_obj_gemeinde->save(); + $tmp_gemeinde_ar[] = $tmp_obj_gemeinde; + } + } +} +?> + + + + + Set Gemeinde + + + +

Gemeinden aktualisieren

+ Diese Seite dient dazu die Gemeinde Kodex Tabelle zu aktualisieren.

+ Die Gemeinde Tabelle muss zuvor manuell geleert werden
+ Filesyntax:(Standard xlsx-File von https://www.bis.ac.at/BISSuite, gespeichert als csv! erste Zeile ist Header (alles was oberhalb ist kann entfernt werden) -> dann Daten) +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GemeindekennzifferGemeindenameOrtschaftskennzifferOrtschaftsnamePLZBULA_CodeBULA_BezGültig
10101Eisenstadt1Eisenstadt70001BGLDJa
10101Eisenstadt2Kleinhöflein im Burgenland7000 7001 70021BGLDJa
........................
+
+
+
PLZ Kodextabelle + +
+
+
+
+				
+			
+
+ + diff --git a/vilesci/stammdaten/statistik_details.php b/vilesci/stammdaten/statistik_details.php index 4480de955..1ba840c02 100644 --- a/vilesci/stammdaten/statistik_details.php +++ b/vilesci/stammdaten/statistik_details.php @@ -223,7 +223,7 @@ EOT; SQL - + @@ -234,7 +234,7 @@ EOT; Preferences - +