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;
-?>
-
-
-
- >
-
-
-
-
-
-
-';
-else
- echo '';
-?>
-
-
-
-
-
-
-db_query("SET datestyle TO ISO;"))
-// $error_msg=$db->db_last_error();
-
-// ****************************************************************************
-// Variablen fuer Aktionen setzen
-if ($aktion=='lva_single_search' || $aktion=='lva_single_set'
- || $aktion=='lva_multi_search' || $aktion=='lva_multi_set'
- || $aktion=='lva_stpl_del_multi' || $aktion=='lva_stpl_del_single')
-{
- $i=0;
- $name_lva_id='lva_id'.$i;
- while ($i<100 && isset($_GET[$name_lva_id]))
- {
- $lva_id[$i]=$_GET[$name_lva_id];
- //$error_msg.=$lva_id[$i];
- $name_lva_id='lva_id'.++$i;
- }
- $lva_id=array_unique($lva_id);
-}
-if ($aktion=='stpl_move' || $aktion=='stpl_single_search' || $aktion=='stpl_set' || $aktion=='stpl_delete_single')
-{
- $i=0;
- $name_stpl_id='stundenplan_id'.$i;
- while ($i<100 && isset($_GET[$name_stpl_id]))
- {
- $stpl_id[]=$_GET[$name_stpl_id];
- //echo $stpl_id[$i];
- $name_stpl_id='stundenplan_id'.++$i;
- }
- // Mehrfachauswahl uebernehmen
- $j=0;
- $name_stpl_idx='x'.$j.'stundenplan_id0';
- while ($j<100 && isset($_GET[$name_stpl_idx]))
- {
- $i=0;
- $name_stpl_id='x'.$j.'stundenplan_id'.$i;
- while ($i<100 && isset($_GET[$name_stpl_id]))
- {
- $stpl_idx[]=$_GET[$name_stpl_id];
- $name_stpl_id='x'.$j.'stundenplan_id'.++$i;
- }
- $name_stpl_idx='x'.++$j.'stundenplan_id0';
- }
-
- //ReservierungsIDs
- $i=0;
- $name_res_id='reservierung_id'.$i;
- while ($i<100 && isset($_GET[$name_res_id]))
- {
- $res_id[]=$_GET[$name_res_id];
- $name_res_id='reservierung_id'.++$i;
- }
-
- // Mehrfachauswahl uebernehmen
- $j=0;
- $name_res_idx='x'.$j.'reservierung_id0';
- while ($j<100 && isset($_GET[$name_res_idx]))
- {
- $i=0;
- $name_res_id='x'.$j.'reservierung_id'.$i;
- while ($i<100 && isset($_GET[$name_res_id]))
- {
- $res_idx[]=$_GET[$name_res_id];
- $name_res_id='x'.$j.'reservierung_id'.++$i;
- }
- $name_res_idx='x'.++$j.'reservierung_id0';
- }
-}
-
-// ****************************************************************************
-// Aktionen durchfuehren
-$db->db_query('BEGIN;');
-// *************** Stunden verschieben ****************************************
-if ($aktion=='stpl_move' || $aktion=='stpl_set')
-{
- $undo='';
- $sql='';
- $moved=array();
-
- foreach ($stpl_id as $stundenplan_id)
- {
- $moved[]=$stundenplan_id;
- $lehrstunde=new lehrstunde();
- $lehrstunde->load($stundenplan_id,$db_stpl_table);
- if($rechte->isBerechtigt('lehre/lvplan',$lehrstunde->studiengang_kz,'ui'))
- {
- $undo.=$lehrstunde->getUndo($db_stpl_table);
- $diffStunde=$new_stunde-$lehrstunde->stunde;
- $lehrstunde->datum=$new_datum;
- $lehrstunde->stunde=$new_stunde;
- if ($ort!=$old_ort)
- $lehrstunde->ort_kurzbz=$ort;
- if ($aktion=='stpl_set')
- $lehrstunde->ort_kurzbz=$new_ort;
-
- if($new_unr!='')
- $lehrstunde->unr = $new_unr;
-
- $kollision=$lehrstunde->kollision($db_stpl_table);
- if ($kollision && !$ignore_kollision)
- $kollision_msg.=$lehrstunde->errormsg;
- if (!$kollision || $ignore_kollision || $kollisionsanzahl>0)
- {
- if(!$lehrstunde->save($uid,$db_stpl_table))
- $error_msg.=$lehrstunde->errormsg;
- $sql.=$lehrstunde->lastqry;
- }
- }
- else
- {
- $error_msg.="Sie haben keine Berechtigung zur Verschiebung von Stunden des Studienganges ".$lehrstunde->studiengang;
- }
- }
- // Mehrfachauswahl
- if (isset($stpl_idx))
- {
- foreach ($stpl_idx as $stundenplan_id)
- {
- if(!in_array($stundenplan_id, $moved))
- {
- $lehrstunde=new lehrstunde();
- $lehrstunde->load($stundenplan_id,$db_stpl_table);
- if($rechte->isBerechtigt('lehre/lvplan',$lehrstunde->studiengang_kz,'ui'))
- {
- $undo.=$lehrstunde->getUndo($db_stpl_table);
- $lehrstunde->datum=$new_datum;
- $lehrstunde->stunde+=$diffStunde;
- if ($ort!=$old_ort)
- $lehrstunde->ort_kurzbz=$ort;
- if ($aktion=='stpl_set')
- $lehrstunde->ort_kurzbz=$new_ort;
- if($new_unr!='')
- $lehrstunde->unr = $new_unr;
-
- $kollision=$lehrstunde->kollision($db_stpl_table);
- if ($kollision && !$ignore_kollision)
- $kollision_msg.=$lehrstunde->errormsg;
- if (!$kollision || $ignore_kollision || $kollisionsanzahl>0)
- {
- if(!$lehrstunde->save($uid,$db_stpl_table))
- $error_msg.=$lehrstunde->errormsg;
- $sql.=$lehrstunde->lastqry;
- }
- }
- else
- {
- $error_msg.="Sie haben keine Berechtigung zur Verschiebung von Stunden des Studienganges ".$lehrstunde->studiengang;
- }
- }
- }
- }
-
- //UNDO Befehl schreiben
- if($undo!='' && $error_msg=='' && $sql!='' && $kollision_msg=='')
- {
- $log = new log();
- $log->executetime = date('Y-m-d H:i:s');
- $log->sqlundo = $undo;
- $log->sql = $sql;
- $log->beschreibung = 'Stundenverschiebung '.$new_datum.'('.$new_stunde.') '.$ort;
- $log->mitarbeiter_uid = $uid;
- if(!$log->save(true))
- $error_msg.='Fehler: '.$log->errormsg;
-
- }
-}
-// ****************** STPL Delete *******************************
-elseif ($aktion=='stpl_delete_single' || $aktion=='stpl_delete_block')
-{
- $lehrstunde=new lehrstunde();
-
- if($rechte->isBerechtigt('lehre/lvplan',null,'uid'))
- {
- //Einzelne Stunden entfernen
- if(isset($stpl_id))
- {
- foreach ($stpl_id as $stundenplan_id)
- {
- $lehrstunde->delete($stundenplan_id,$db_stpl_table);
- $error_msg.=$lehrstunde->errormsg;
- }
- }
-
- //Loeschen von mehreren Stunden
- if(isset($stpl_idx))
- {
- foreach ($stpl_idx as $stundenplan_id)
- {
- $lehrstunde->delete($stundenplan_id,$db_stpl_table);
- $error_msg.=$lehrstunde->errormsg;
- }
- }
-
- if(isset($res_id))
- {
- foreach ($res_id as $reservierung_id)
- {
- $reservierung = new reservierung();
- $reservierung->load($reservierung_id);
- $logdata_reservierung = (array)$reservierung;
- $logdata = var_export($logdata_reservierung, true);
- $reservierung->delete($reservierung_id);
- $error_msg.=$reservierung->errormsg;
- }
- }
-
- //Loeschen von mehreren Reservierungen
- if(isset($res_idx))
- {
- foreach ($res_idx as $reservierung_id)
- {
- $reservierung = new reservierung();
- $reservierung->load($reservierung_id);
- $logdata_reservierung = (array)$reservierung;
- $logdata = var_export($logdata_reservierung, true);
- $reservierung->delete($reservierung_id);
- $error_msg.=$reservierung->errormsg;
- }
- }
- }
- else
- {
- $error_msg.="Sie haben keine Berechtigung fuer diese Aktion";
- }
-}
-// ******************** Lehrveranstaltung setzen ******************************
-elseif ($aktion=='lva_single_set')
-{
- if($rechte->isBerechtigt('lehre/lvplan',null,'ui'))
- {
- $z=0;
- foreach ($lva_id AS $le_id)
- {
- $lva[$z]=new lehreinheit();
- $lva[$z]->loadLE($le_id);
-
- if($new_unr!='')
- $lva[$z]->unr=$new_unr;
- if($new_blockung!='')
- $lva[$z]->stundenblockung=$new_blockung;
-
- //$error_msg.='test'.$le_id.($lva[$i]->errormsg).($lva[$i]->stundenblockung);
- for ($j=0;$j<$lva[$z]->stundenblockung && $error_msg=='';$j++)
- if (!$lva[$z]->check_lva($new_datum,$new_stunde+$j,$new_ort,$db_stpl_table) && !$ignore_kollision)
- $kollision_msg.=$lva[$z]->errormsg."\n";
- $z++;
- }
- for ($i=0;$i<$z && $error_msg=='';$i++)
- {
- if($new_unr!='')
- $lva[$i]->unr=$new_unr;
- if($new_blockung!='')
- $lva[$i]->stundenblockung=$new_blockung;
-
- for ($j=0;$j<$lva[$i]->stundenblockung;$j++)
- {
-
- if (!$lva[$i]->save_stpl($new_datum,$new_stunde+$j,$new_ort,$db_stpl_table,$uid))
- $error_msg.='Error: '.$lva[$i]->errormsg;
- }
- }
- }
- else
- {
- $error_msg.="Sie haben keine Berechtigung fuer diese Aktion";
- }
-}
-//******************* Multi Verplanung ***************
-elseif ($aktion=='lva_multi_set')
-{
- if($rechte->isBerechtigt('lehre/lvplan',null,'ui'))
- {
- // Ferien holen
- $ferien=new ferien();
- if ($type=='verband')
- $ferien->getAll($stg_kz);
- else
- $ferien->getAll(0);
-
- // Ende holen
- if (!$result_semester=$db->db_query("SELECT * FROM public.tbl_studiensemester WHERE studiensemester_kurzbz=".$db->db_add_param($semester_aktuell).";"))
- die ($db->db_last_error());
- if ($db->db_num_rows()>0)
- {
- $row = $db->db_fetch_object();
- $ende = $row->ende;
- }
- else
- $error_msg.="Fatal Error: Ende Datum ist nicht gesetzt ($semester_aktuell)!";
-
- $ende=mktime(0,0,1,substr($ende,5,2),substr($ende,8,2),substr($ende,0,4));
- $anz_lvas=count($lva_id);
- // Arrays intitialisieren
- $wochenrythmus=array();
- $verplant=array();
- $block=array();
- $wochenrythmus=array();
- $semesterstunden=array();
- $planstunden=array();
- $offenestunden=array();
- // LVAs holen
- $sql_query='SELECT * FROM lehre.'.$lva_stpl_view.' WHERE';
- $lvas='';
- foreach ($lva_id as $id)
- $lvas.=' OR lehreinheit_id='.$id;
- $lvas=substr($lvas,3);
- $sql_query.=$lvas;
-
- if(!$result_lva = $db->db_query($sql_query))
- $error_msg.=$db->db_last_error();
- $num_rows_lva=$db->db_num_rows($result_lva);
- // Daten aufbereiten
- for ($i=0;$i<$num_rows_lva;$i++)
- {
- $row=$db->db_fetch_object($result_lva,$i);
- $verplant[]=$row->verplant;
- $block[]=$row->stundenblockung;
- $wochenrythmus[]=$row->wochenrythmus;
- $semesterstunden[]=$row->semesterstunden;
- $planstunden[]=$row->planstunden;
- $offenestunden[]=$row->planstunden-$row->verplant;
- }
- // Variablen eindeutig?
- // Offene Stunden
- $os=$offenestunden[0];
- $offenestunden=array_unique($offenestunden);
- if (count($offenestunden)==1)
- $offenestunden=$os;
- else
- $error_msg.='Offene Stunden sind nicht eindeutig!';
-
- //Blockung
- $blk=$block[0];
- $block=array_unique($block);
- if (count($block)==1)
- $block=$blk;
- else
- $error_msg.='Blockung ist nicht eindeutig!';
- //Wochenrythmus
- $wr=$wochenrythmus[0];
- $wochenrythmus=array_unique($wochenrythmus);
- if (count($wochenrythmus)==1)
- $wochenrythmus=$wr;
- else
- $error_msg.='Wochenrhythmus ist nicht eindeutig!';
- $count=0;
- $rest=$offenestunden;
- if ($rest<=0)
- $error_msg.='Es sind bereits alle Stunden verplant!'.$rest;
- if ($error_msg=='')
- {
- $d=mktime(0,0,1,substr($new_datum,5,2),substr($new_datum,8),substr($new_datum,0,4));
- while ($rest>0 && $d<$ende)
- {
- if ($rest<$block && $rest>0)
- $block=$rest;
- //LVAs holen und pruefen ob moeglich
- for ($i=0;$i<$anz_lvas;$i++)
- {
- $lva[$i]=new lehreinheit();
- $lva[$i]->loadLE($lva_id[$i]);
- for ($j=0;$j<$block;$j++)
- if (!$lva[$i]->check_lva($new_datum,$new_stunde+$j,$new_ort,$db_stpl_table) && !$ignore_kollision)
- $kollision_msg.=$lva[$i]->errormsg;
- }
- // LVAs setzen
- for ($i=0;$i<$anz_lvas && $error_msg=='';$i++)
- for ($j=0;$j<$block;$j++)
- if (!$lva[$i]->save_stpl($new_datum,$new_stunde+$j,$new_ort,$db_stpl_table,$uid))
- $error_msg.=$lva[$i]->errormsg;
- $d=jump_week($d,$wochenrythmus);
- while ($ferien->isferien($d))
- $d=jump_week($d,$wochenrythmus);
- // Es kann sein, dass die Zeitumstellung (1 Stunde) Probleme macht
- // Falls 23 Uhr eine Stunde nach vor
- $new_datum=date('Y-m-d',$d);
- $rest-=$block;
- }
- }
- }
- else
- {
- $error_msg.="Sie haben keine Berechtigung fuer diese Aktion";
- }
-}
-// Lehrveranstaltungen aus dem Stundenplan loeschen
-elseif ($aktion=='lva_stpl_del_multi' || $aktion=='lva_stpl_del_single')
-{
- if($rechte->isBerechtigt('lehre/lvplan',null,'uid'))
- {
- $result_semester = $db->db_query("SELECT start,ende FROM public.tbl_studiensemester WHERE studiensemester_kurzbz=".$db->db_add_param($semester_aktuell).";");
- if ($db->db_num_rows()>0)
- {
- $start=date('Y-m-d',$datum);
- if ($aktion=='lva_stpl_del_multi')
- {
- $row = $db->db_fetch_object($result_semester);
- $ende = $row->ende;
- }
- else
- $ende=date('Y-m-d',jump_week($datum,1));
- $anz_lvas=count($lva_id);
- $sql_query_lvaid='';
- $sql_query='DELETE FROM lehre.'.TABLE_BEGIN.$db_stpl_table.' WHERE (';
- for ($i=0;$i<$anz_lvas;$i++)
- $sql_query_lvaid.=' OR lehreinheit_id='.$lva_id[$i];
- $sql_query_lvaid=substr($sql_query_lvaid,3);
- $sql_query.=$sql_query_lvaid;
- $sql_query.=") AND datum>='$start' AND datum<'$ende'";
- if(!$result_lva_del=$db->db_query($sql_query))
- $error_msg.=$db->db_last_error();
- }
- else
- $error_msg.='Studiensemester '.$semester_aktuell.' konnte nicht gefunden werden!';
- }
- else
- $error_msg.="Sie haben keine Berechtigung fuer diese Aktion";
-}
-
-if ($error_msg=='' && ($kollision_msg=='' || $kollisionsanzahl>0))
-{
- $db->db_query('COMMIT;');
- if($kollisionsanzahl>0)
- $error_msg.="\nStunden wurden verplant\n";
-}
-else
- $db->db_query('ROLLBACK;');
-
-$error_msg.=$kollision_msg;
-
-// Stundenplan erstellen
-$stdplan=new wochenplan($type);
-if (!isset($datum))
- $datum=time();
-if (!isset($semesterplan) || !$semesterplan)
- $begin=$ende=$datum;
-else
-{
- $db->db_query("SELECT start,ende FROM public.tbl_studiensemester WHERE studiensemester_kurzbz=".$db->db_add_param($semester_aktuell).";");
- if ($db->db_num_rows()>0)
- {
- $row = $db->db_fetch_object();
- $begin=strtotime($row->start);
- $ende=strtotime($row->ende);
- }
- else
- $error_msg.='Studiensemester '.$semester_aktuell.' konnte nicht gefunden werden!';
-}
-
-// Benutzergruppe
-$stdplan->user=$user;
-// aktueller Benutzer
-$stdplan->user_uid=$uid;
-
-// Zusaetzliche Daten laden
-if (! $stdplan->load_data($type,$pers_uid,$ort,$stg_kz,$sem,$ver,$grp,$gruppe,$fachbereich_kurzbz) && $error_msg!='')
- $error_msg.=$stdplan->errormsg;
-
-// Stundenplan einer Woche laden
-//if (! $stdplan->load_week($datum,$db_stpl_table))
-// $error_msg.=$stdplan->errormsg;
-while ($begin<=$ende)
-{
- $stdplan->init_stdplan();
- $datum=$begin;
- $begin=strtotime("+1 week",$begin);
-
- // Zeitwuensche laden falls benoetigt
- $zeitwunsch=null;
- if ($type=='lektor' || $aktion=='lva_single_search' || $aktion=='lva_multi_search')
- {
- $wunsch=new zeitwunsch();
- if ($type=='lektor')
- if ($wunsch->loadPerson($pers_uid,$datum))
- $zeitwunsch=$wunsch->zeitwunsch;
- else
- $error_msg.=$wunsch->errormsg;
- if ($aktion=='lva_single_search' || $aktion=='lva_multi_search')
- if ($wunsch->loadZwLE($lva_id,$datum))
- $zeitwunsch=$wunsch->zeitwunsch;
- else
- $error_msg.=$wunsch->errormsg;
- }
-
- // Stundenplan einer Woche laden
- if (! $stdplan->load_week($datum,$db_stpl_table, $alle_unr_mitladen))
- $error_msg.=$stdplan->errormsg;
-
- //Raumvorschlag setzen
-
- if ($aktion=='lva_single_search' || $aktion=='lva_multi_search')
- if (! $stdplan->load_lva_search($datum,$lva_id,$db_stpl_table, $aktion))
- $error_msg.=$stdplan->errormsg;
-
- if ($aktion=='stpl_single_search')
- {
- if(isset($stpl_id))
- {
- if (! $stdplan->load_stpl_search($datum,$stpl_id,$db_stpl_table))
- $error_msg.=$stdplan->errormsg;
- }
- else
- $error_msg.='Derzeit gibt es keinen Raumvorschlag fuer Reservierungen';
- }
-
- // Stundenplan der Woche drucken
- $stdplan->draw_week_xul($semesterplan,$uid,$zeitwunsch, $ignore_kollision, $kollision_student, $max_kollision);
-
-}
-
-?>
-
-
-
-
-
-
-
+,
+ * 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;
+?>
+
+
+
+ >
+
+
+
+
+
+
+';
+else
+ echo '';
+?>
+
+
+
+
+
+
+db_query("SET datestyle TO ISO;"))
+// $error_msg=$db->db_last_error();
+
+// ****************************************************************************
+// Variablen fuer Aktionen setzen
+if ($aktion=='lva_single_search' || $aktion=='lva_single_set'
+ || $aktion=='lva_multi_search' || $aktion=='lva_multi_set'
+ || $aktion=='lva_stpl_del_multi' || $aktion=='lva_stpl_del_single')
+{
+ $i=0;
+ $name_lva_id='lva_id'.$i;
+ while ($i<100 && isset($_GET[$name_lva_id]))
+ {
+ $lva_id[$i]=$_GET[$name_lva_id];
+ //$error_msg.=$lva_id[$i];
+ $name_lva_id='lva_id'.++$i;
+ }
+ $lva_id=array_unique($lva_id);
+}
+if ($aktion=='stpl_move' || $aktion=='stpl_single_search' || $aktion=='stpl_set' || $aktion=='stpl_delete_single')
+{
+ $i=0;
+ $name_stpl_id='stundenplan_id'.$i;
+ while ($i<100 && isset($_GET[$name_stpl_id]))
+ {
+ $stpl_id[]=$_GET[$name_stpl_id];
+ //echo $stpl_id[$i];
+ $name_stpl_id='stundenplan_id'.++$i;
+ }
+ // Mehrfachauswahl uebernehmen
+ $j=0;
+ $name_stpl_idx='x'.$j.'stundenplan_id0';
+ while ($j<100 && isset($_GET[$name_stpl_idx]))
+ {
+ $i=0;
+ $name_stpl_id='x'.$j.'stundenplan_id'.$i;
+ while ($i<100 && isset($_GET[$name_stpl_id]))
+ {
+ $stpl_idx[]=$_GET[$name_stpl_id];
+ $name_stpl_id='x'.$j.'stundenplan_id'.++$i;
+ }
+ $name_stpl_idx='x'.++$j.'stundenplan_id0';
+ }
+
+ //ReservierungsIDs
+ $i=0;
+ $name_res_id='reservierung_id'.$i;
+ while ($i<100 && isset($_GET[$name_res_id]))
+ {
+ $res_id[]=$_GET[$name_res_id];
+ $name_res_id='reservierung_id'.++$i;
+ }
+
+ // Mehrfachauswahl uebernehmen
+ $j=0;
+ $name_res_idx='x'.$j.'reservierung_id0';
+ while ($j<100 && isset($_GET[$name_res_idx]))
+ {
+ $i=0;
+ $name_res_id='x'.$j.'reservierung_id'.$i;
+ while ($i<100 && isset($_GET[$name_res_id]))
+ {
+ $res_idx[]=$_GET[$name_res_id];
+ $name_res_id='x'.$j.'reservierung_id'.++$i;
+ }
+ $name_res_idx='x'.++$j.'reservierung_id0';
+ }
+}
+
+// ****************************************************************************
+// Aktionen durchfuehren
+$db->db_query('BEGIN;');
+// *************** Stunden verschieben ****************************************
+if ($aktion=='stpl_move' || $aktion=='stpl_set')
+{
+ $undo='';
+ $sql='';
+ $moved=array();
+
+ foreach ($stpl_id as $stundenplan_id)
+ {
+ $moved[]=$stundenplan_id;
+ $lehrstunde=new lehrstunde();
+ $lehrstunde->load($stundenplan_id,$db_stpl_table);
+ if($rechte->isBerechtigt('lehre/lvplan',$lehrstunde->studiengang_kz,'ui'))
+ {
+ $undo.=$lehrstunde->getUndo($db_stpl_table);
+ $diffStunde=$new_stunde-$lehrstunde->stunde;
+ $lehrstunde->datum=$new_datum;
+ $lehrstunde->stunde=$new_stunde;
+ if ($ort!=$old_ort)
+ $lehrstunde->ort_kurzbz=$ort;
+ if ($aktion=='stpl_set')
+ $lehrstunde->ort_kurzbz=$new_ort;
+
+ if($new_unr!='')
+ $lehrstunde->unr = $new_unr;
+
+ $kollision=$lehrstunde->kollision($db_stpl_table);
+ if ($kollision && !$ignore_kollision)
+ $kollision_msg.=$lehrstunde->errormsg;
+ if (!$kollision || $ignore_kollision || $kollisionsanzahl>0)
+ {
+ if(!$lehrstunde->save($uid,$db_stpl_table))
+ $error_msg.=$lehrstunde->errormsg;
+ $sql.=$lehrstunde->lastqry;
+ }
+ }
+ else
+ {
+ $error_msg.="Sie haben keine Berechtigung zur Verschiebung von Stunden des Studienganges ".$lehrstunde->studiengang;
+ }
+ }
+ // Mehrfachauswahl
+ if (isset($stpl_idx))
+ {
+ foreach ($stpl_idx as $stundenplan_id)
+ {
+ if(!in_array($stundenplan_id, $moved))
+ {
+ $lehrstunde=new lehrstunde();
+ $lehrstunde->load($stundenplan_id,$db_stpl_table);
+ if($rechte->isBerechtigt('lehre/lvplan',$lehrstunde->studiengang_kz,'ui'))
+ {
+ $undo.=$lehrstunde->getUndo($db_stpl_table);
+ $lehrstunde->datum=$new_datum;
+ $lehrstunde->stunde+=$diffStunde;
+ if ($ort!=$old_ort)
+ $lehrstunde->ort_kurzbz=$ort;
+ if ($aktion=='stpl_set')
+ $lehrstunde->ort_kurzbz=$new_ort;
+ if($new_unr!='')
+ $lehrstunde->unr = $new_unr;
+
+ $kollision=$lehrstunde->kollision($db_stpl_table);
+ if ($kollision && !$ignore_kollision)
+ $kollision_msg.=$lehrstunde->errormsg;
+ if (!$kollision || $ignore_kollision || $kollisionsanzahl>0)
+ {
+ if(!$lehrstunde->save($uid,$db_stpl_table))
+ $error_msg.=$lehrstunde->errormsg;
+ $sql.=$lehrstunde->lastqry;
+ }
+ }
+ else
+ {
+ $error_msg.="Sie haben keine Berechtigung zur Verschiebung von Stunden des Studienganges ".$lehrstunde->studiengang;
+ }
+ }
+ }
+ }
+
+ //UNDO Befehl schreiben
+ if($undo!='' && $error_msg=='' && $sql!='' && $kollision_msg=='')
+ {
+ $log = new log();
+ $log->executetime = date('Y-m-d H:i:s');
+ $log->sqlundo = $undo;
+ $log->sql = $sql;
+ $log->beschreibung = 'Stundenverschiebung '.$new_datum.'('.$new_stunde.') '.$ort;
+ $log->mitarbeiter_uid = $uid;
+ if(!$log->save(true))
+ $error_msg.='Fehler: '.$log->errormsg;
+
+ }
+}
+// ****************** STPL Delete *******************************
+elseif ($aktion=='stpl_delete_single' || $aktion=='stpl_delete_block')
+{
+ $lehrstunde=new lehrstunde();
+ $sql='';
+ $geloeschteDaten = '';
+
+ if($rechte->isBerechtigt('lehre/lvplan',null,'uid'))
+ {
+ //Einzelne Stunden entfernen
+ if(isset($stpl_id))
+ {
+ foreach ($stpl_id as $stundenplan_id)
+ {
+ $lehrstunde->load($stundenplan_id,$db_stpl_table);
+ $geloeschteDaten .= 'Lektor: '.$lehrstunde->lektor_uid.', Datum: '.
+ $lehrstunde->datum.', Stunde: '.$lehrstunde->stunde.', Ort: '.
+ $lehrstunde->ort_kurzbz.', Verband: '.strtoupper($lehrstunde->studiengang).'-'.
+ $lehrstunde->sem.$lehrstunde->ver.$lehrstunde->grp.', Spezialgruppe: '.$lehrstunde->gruppe_kurzbz.'; ';
+ $lehrstunde->delete($stundenplan_id,$db_stpl_table);
+ $error_msg.=$lehrstunde->errormsg;
+ $sql.=$lehrstunde->lastqry.'; ';
+ }
+ }
+
+ //Loeschen von mehreren Stunden
+ if(isset($stpl_idx))
+ {
+ foreach ($stpl_idx as $stundenplan_id)
+ {
+ $lehrstunde->load($stundenplan_id,$db_stpl_table);
+ $geloeschteDaten .= 'Lektor: '.$lehrstunde->lektor_uid.', Datum: '.
+ $lehrstunde->datum.', Stunde: '.$lehrstunde->stunde.', Ort: '.
+ $lehrstunde->ort_kurzbz.', Verband: '.strtoupper($lehrstunde->studiengang).'-'.
+ $lehrstunde->sem.$lehrstunde->ver.$lehrstunde->grp.', Spezialgruppe: '.$lehrstunde->gruppe_kurzbz.'; ';
+ $lehrstunde->delete($stundenplan_id,$db_stpl_table);
+ $error_msg.=$lehrstunde->errormsg;
+ $sql.=$lehrstunde->lastqry.'; ';
+ }
+ }
+
+ if(isset($res_id))
+ {
+ foreach ($res_id as $reservierung_id)
+ {
+ $reservierung = new reservierung();
+ $reservierung->load($reservierung_id);
+ $logdata_reservierung = (array)$reservierung;
+ $logdata = var_export($logdata_reservierung, true);
+ $reservierung->delete($reservierung_id);
+ $error_msg.=$reservierung->errormsg;
+ }
+ }
+
+ //Loeschen von mehreren Reservierungen
+ if(isset($res_idx))
+ {
+ foreach ($res_idx as $reservierung_id)
+ {
+ $reservierung = new reservierung();
+ $reservierung->load($reservierung_id);
+ $logdata_reservierung = (array)$reservierung;
+ $logdata = var_export($logdata_reservierung, true);
+ $reservierung->delete($reservierung_id);
+ $error_msg.=$reservierung->errormsg;
+ }
+ }
+
+ //UNDO Befehl schreiben
+ if($error_msg=='' && $sql!='')
+ {
+ $log = new log();
+ $log->executetime = date('Y-m-d H:i:s');
+ $log->sqlundo = NULL;
+ $log->sql = $sql.' /* Geloeschte Daten: '.$geloeschteDaten.'*/';
+ $log->beschreibung = 'Stundenloeschung';
+ $log->mitarbeiter_uid = $uid;
+ if(!$log->save(true))
+ $error_msg.='Fehler: '.$log->errormsg;
+ }
+ }
+ else
+ {
+ $error_msg.="Sie haben keine Berechtigung fuer diese Aktion";
+ }
+}
+// ******************** Lehrveranstaltung setzen ******************************
+elseif ($aktion=='lva_single_set')
+{
+ if($rechte->isBerechtigt('lehre/lvplan',null,'ui'))
+ {
+ $z=0;
+ foreach ($lva_id AS $le_id)
+ {
+ $lva[$z]=new lehreinheit();
+ $lva[$z]->loadLE($le_id);
+
+ if($new_unr!='')
+ $lva[$z]->unr=$new_unr;
+ if($new_blockung!='')
+ $lva[$z]->stundenblockung=$new_blockung;
+
+ //$error_msg.='test'.$le_id.($lva[$i]->errormsg).($lva[$i]->stundenblockung);
+ for ($j=0;$j<$lva[$z]->stundenblockung && $error_msg=='';$j++)
+ if (!$lva[$z]->check_lva($new_datum,$new_stunde+$j,$new_ort,$db_stpl_table) && !$ignore_kollision)
+ $kollision_msg.=$lva[$z]->errormsg."\n";
+ $z++;
+ }
+ for ($i=0;$i<$z && $error_msg=='';$i++)
+ {
+ if($new_unr!='')
+ $lva[$i]->unr=$new_unr;
+ if($new_blockung!='')
+ $lva[$i]->stundenblockung=$new_blockung;
+
+ for ($j=0;$j<$lva[$i]->stundenblockung;$j++)
+ {
+
+ if (!$lva[$i]->save_stpl($new_datum,$new_stunde+$j,$new_ort,$db_stpl_table,$uid))
+ $error_msg.='Error: '.$lva[$i]->errormsg;
+ }
+ }
+ }
+ else
+ {
+ $error_msg.="Sie haben keine Berechtigung fuer diese Aktion";
+ }
+}
+//******************* Multi Verplanung ***************
+elseif ($aktion=='lva_multi_set')
+{
+ if($rechte->isBerechtigt('lehre/lvplan',null,'ui'))
+ {
+ // Ferien holen
+ $ferien=new ferien();
+ if ($type=='verband')
+ $ferien->getAll($stg_kz);
+ else
+ $ferien->getAll(0);
+
+ // Ende holen
+ if (!$result_semester=$db->db_query("SELECT * FROM public.tbl_studiensemester WHERE studiensemester_kurzbz=".$db->db_add_param($semester_aktuell).";"))
+ die ($db->db_last_error());
+ if ($db->db_num_rows()>0)
+ {
+ $row = $db->db_fetch_object();
+ $ende = $row->ende;
+ }
+ else
+ $error_msg.="Fatal Error: Ende Datum ist nicht gesetzt ($semester_aktuell)!";
+
+ $ende=mktime(0,0,1,substr($ende,5,2),substr($ende,8,2),substr($ende,0,4));
+ $anz_lvas=count($lva_id);
+ // Arrays intitialisieren
+ $wochenrythmus=array();
+ $verplant=array();
+ $block=array();
+ $wochenrythmus=array();
+ $semesterstunden=array();
+ $planstunden=array();
+ $offenestunden=array();
+ // LVAs holen
+ $sql_query='SELECT * FROM lehre.'.$lva_stpl_view.' WHERE';
+ $lvas='';
+ foreach ($lva_id as $id)
+ $lvas.=' OR lehreinheit_id='.$id;
+ $lvas=substr($lvas,3);
+ $sql_query.=$lvas;
+
+ if(!$result_lva = $db->db_query($sql_query))
+ $error_msg.=$db->db_last_error();
+ $num_rows_lva=$db->db_num_rows($result_lva);
+ // Daten aufbereiten
+ for ($i=0;$i<$num_rows_lva;$i++)
+ {
+ $row=$db->db_fetch_object($result_lva,$i);
+ $verplant[]=$row->verplant;
+ $block[]=$row->stundenblockung;
+ $wochenrythmus[]=$row->wochenrythmus;
+ $semesterstunden[]=$row->semesterstunden;
+ $planstunden[]=$row->planstunden;
+ $offenestunden[]=$row->planstunden-$row->verplant;
+ }
+ // Variablen eindeutig?
+ // Offene Stunden
+ $os=$offenestunden[0];
+ $offenestunden=array_unique($offenestunden);
+ if (count($offenestunden)==1)
+ $offenestunden=$os;
+ else
+ $error_msg.='Offene Stunden sind nicht eindeutig!';
+
+ //Blockung
+ $blk=$block[0];
+ $block=array_unique($block);
+ if (count($block)==1)
+ $block=$blk;
+ else
+ $error_msg.='Blockung ist nicht eindeutig!';
+ //Wochenrythmus
+ $wr=$wochenrythmus[0];
+ $wochenrythmus=array_unique($wochenrythmus);
+ if (count($wochenrythmus)==1)
+ $wochenrythmus=$wr;
+ else
+ $error_msg.='Wochenrhythmus ist nicht eindeutig!';
+ $count=0;
+ $rest=$offenestunden;
+ if ($rest<=0)
+ $error_msg.='Es sind bereits alle Stunden verplant!'.$rest;
+ if ($error_msg=='')
+ {
+ $d=mktime(0,0,1,substr($new_datum,5,2),substr($new_datum,8),substr($new_datum,0,4));
+ while ($rest>0 && $d<$ende)
+ {
+ if ($rest<$block && $rest>0)
+ $block=$rest;
+ //LVAs holen und pruefen ob moeglich
+ for ($i=0;$i<$anz_lvas;$i++)
+ {
+ $lva[$i]=new lehreinheit();
+ $lva[$i]->loadLE($lva_id[$i]);
+ for ($j=0;$j<$block;$j++)
+ if (!$lva[$i]->check_lva($new_datum,$new_stunde+$j,$new_ort,$db_stpl_table) && !$ignore_kollision)
+ $kollision_msg.=$lva[$i]->errormsg;
+ }
+ // LVAs setzen
+ for ($i=0;$i<$anz_lvas && $error_msg=='';$i++)
+ for ($j=0;$j<$block;$j++)
+ if (!$lva[$i]->save_stpl($new_datum,$new_stunde+$j,$new_ort,$db_stpl_table,$uid))
+ $error_msg.=$lva[$i]->errormsg;
+ $d=jump_week($d,$wochenrythmus);
+ while ($ferien->isferien($d))
+ $d=jump_week($d,$wochenrythmus);
+ // Es kann sein, dass die Zeitumstellung (1 Stunde) Probleme macht
+ // Falls 23 Uhr eine Stunde nach vor
+ $new_datum=date('Y-m-d',$d);
+ $rest-=$block;
+ }
+ }
+ }
+ else
+ {
+ $error_msg.="Sie haben keine Berechtigung fuer diese Aktion";
+ }
+}
+// Lehrveranstaltungen aus dem Stundenplan loeschen
+elseif ($aktion=='lva_stpl_del_multi' || $aktion=='lva_stpl_del_single')
+{
+ if($rechte->isBerechtigt('lehre/lvplan',null,'uid'))
+ {
+ $result_semester = $db->db_query("SELECT start,ende FROM public.tbl_studiensemester WHERE studiensemester_kurzbz=".$db->db_add_param($semester_aktuell).";");
+ if ($db->db_num_rows()>0)
+ {
+ $start=date('Y-m-d',$datum);
+ if ($aktion=='lva_stpl_del_multi')
+ {
+ $row = $db->db_fetch_object($result_semester);
+ $ende = $row->ende;
+ }
+ else
+ $ende=date('Y-m-d',jump_week($datum,1));
+ $anz_lvas=count($lva_id);
+ $sql_query_lvaid='';
+ $sql_query='DELETE FROM lehre.'.TABLE_BEGIN.$db_stpl_table.' WHERE (';
+ for ($i=0;$i<$anz_lvas;$i++)
+ $sql_query_lvaid.=' OR lehreinheit_id='.$lva_id[$i];
+ $sql_query_lvaid=substr($sql_query_lvaid,3);
+ $sql_query.=$sql_query_lvaid;
+ $sql_query.=") AND datum>='$start' AND datum<'$ende'";
+ if(!$result_lva_del=$db->db_query($sql_query))
+ $error_msg.=$db->db_last_error();
+ }
+ else
+ $error_msg.='Studiensemester '.$semester_aktuell.' konnte nicht gefunden werden!';
+ }
+ else
+ $error_msg.="Sie haben keine Berechtigung fuer diese Aktion";
+}
+
+if ($error_msg=='' && ($kollision_msg=='' || $kollisionsanzahl>0))
+{
+ $db->db_query('COMMIT;');
+ if($kollisionsanzahl>0)
+ $error_msg.="\nStunden wurden verplant\n";
+}
+else
+ $db->db_query('ROLLBACK;');
+
+$error_msg.=$kollision_msg;
+
+// Stundenplan erstellen
+$stdplan=new wochenplan($type);
+if (!isset($datum))
+ $datum=time();
+if (!isset($semesterplan) || !$semesterplan)
+ $begin=$ende=$datum;
+else
+{
+ $db->db_query("SELECT start,ende FROM public.tbl_studiensemester WHERE studiensemester_kurzbz=".$db->db_add_param($semester_aktuell).";");
+ if ($db->db_num_rows()>0)
+ {
+ $row = $db->db_fetch_object();
+ $begin=strtotime($row->start);
+ $ende=strtotime($row->ende);
+ }
+ else
+ $error_msg.='Studiensemester '.$semester_aktuell.' konnte nicht gefunden werden!';
+}
+
+// Benutzergruppe
+$stdplan->user=$user;
+// aktueller Benutzer
+$stdplan->user_uid=$uid;
+
+// Zusaetzliche Daten laden
+if (! $stdplan->load_data($type,$pers_uid,$ort,$stg_kz,$sem,$ver,$grp,$gruppe,$fachbereich_kurzbz) && $error_msg!='')
+ $error_msg.=$stdplan->errormsg;
+
+// Stundenplan einer Woche laden
+//if (! $stdplan->load_week($datum,$db_stpl_table))
+// $error_msg.=$stdplan->errormsg;
+while ($begin<=$ende)
+{
+ $stdplan->init_stdplan();
+ $datum=$begin;
+ $begin=strtotime("+1 week",$begin);
+
+ // Zeitwuensche laden falls benoetigt
+ $zeitwunsch=null;
+ if ($type=='lektor' || $aktion=='lva_single_search' || $aktion=='lva_multi_search')
+ {
+ $wunsch=new zeitwunsch();
+ if ($type=='lektor')
+ if ($wunsch->loadPerson($pers_uid,$datum))
+ $zeitwunsch=$wunsch->zeitwunsch;
+ else
+ $error_msg.=$wunsch->errormsg;
+ if ($aktion=='lva_single_search' || $aktion=='lva_multi_search')
+ if ($wunsch->loadZwLE($lva_id,$datum))
+ $zeitwunsch=$wunsch->zeitwunsch;
+ else
+ $error_msg.=$wunsch->errormsg;
+ }
+
+ // Stundenplan einer Woche laden
+ if (! $stdplan->load_week($datum,$db_stpl_table, $alle_unr_mitladen))
+ $error_msg.=$stdplan->errormsg;
+
+ //Raumvorschlag setzen
+
+ if ($aktion=='lva_single_search' || $aktion=='lva_multi_search')
+ if (! $stdplan->load_lva_search($datum,$lva_id,$db_stpl_table, $aktion))
+ $error_msg.=$stdplan->errormsg;
+
+ if ($aktion=='stpl_single_search')
+ {
+ if(isset($stpl_id))
+ {
+ if (! $stdplan->load_stpl_search($datum,$stpl_id,$db_stpl_table))
+ $error_msg.=$stdplan->errormsg;
+ }
+ else
+ $error_msg.='Derzeit gibt es keinen Raumvorschlag fuer Reservierungen';
+ }
+
+ // Stundenplan der Woche drucken
+ $stdplan->draw_week_xul($semesterplan,$uid,$zeitwunsch, $ignore_kollision, $kollision_student, $max_kollision);
+
+}
+
+?>
+
+
+
+
+
+
+
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)
+