Merge branch 'master' into feature-245/LvTeilKopieren

This commit is contained in:
Manfred
2022-04-19 18:50:23 +02:00
385 changed files with 5534 additions and 12122 deletions
+10
View File
@@ -71,6 +71,16 @@ $config['navigation_header'] = array(
'lehre/lehrauftrag_erteilen:r'
)
),
'zverfueg' => array(
'link' => site_url('lehre/lvplanung/AdminZeitverfuegbarkeit'),
'description' => 'Zeitverfügbarkeit',
'expand' => true,
'sort' => 45,
'requiredPermissions' => array(
'lehre/zeitverfuegbarkeit:rw',
'lehre/zeitverfuegbarkeit:rw'
)
),
'zgvueberpruefung' => array(
'link' => site_url('system/infocenter/ZGVUeberpruefung'),
'description' => 'ZGV Überprüfung',
+310 -1
View File
@@ -19,7 +19,7 @@
*/
if (!defined('BASEPATH')) exit('No direct script access allowed');
class LVPlanJob extends CLI_Controller
class LVPlanJob extends JOB_Controller
{
/**
* Initialize LVPlanJob Class
@@ -149,4 +149,313 @@ class LVPlanJob extends CLI_Controller
echo "Failed ".$fail."\n";
}
}
/**
* Send Mail to STGL, Kompetenzfeld and LV Planung about todays updated Zeitwuensche.
* STGL gets list only of lectors who updated future assigend courses concerning their STG.
* Kompetenzleitung gets list only of lectors who updated future assigend courses concerning their KF.
* LVPlanung gets list of lectors who updated future assigend courses.
*/
public function mailUpdatedZeitwuensche()
{
// Load models
$this->load->model('ressource/Stundenplandev_model', 'StundenplandevModel');
$this->load->model('organisation/Studiensemester_model', 'StundiensemesterModel');
$this->load->model('education/Lehreinheit_model', 'LehreinheitModel');
$this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
$this->load->model('person/Person_model', 'PersonModel');
// Load libs
$this->load->library('MailLib');
// Load helpers
$this->load->helper('hlp_sancho_helper');
// Start Log Message
$this->logInfo('Mail updated Zeitwuensche started.');
// Get all lectors, who updated their Zeitwunsch today
$db = new DB_Model();
$result = $db->execReadOnlyQuery('
SELECT
zwg.mitarbeiter_uid, tbl_lehrveranstaltung.studiengang_kz, tbl_lehrveranstaltung.oe_kurzbz
FROM
campus.tbl_zeitwunsch_gueltigkeit zwg
JOIN lehre.tbl_stundenplandev stpl
ON(
stpl.mitarbeiter_uid=zwg.mitarbeiter_uid
AND stpl.datum BETWEEN zwg.von AND COALESCE(zwg.bis, \'2999-12-31\')
AND (zwg.insertamum::date = (NOW()-\'1 days\'::interval)::date
OR
zwg.updateamum::date = (NOW()-\'1 days\'::interval)::date)
AND stpl.datum > now()
)
JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
GROUP BY
zwg.mitarbeiter_uid, tbl_lehrveranstaltung.studiengang_kz, tbl_lehrveranstaltung.oe_kurzbz
');
if (!hasData($result))
{
return; // No updated Zeitwuensche today
}
$uidByStg_arr = array(); // Mail data for Studiengang
$uidByOe_arr = array(); // Mail data for Kompetenzfeld
$uid_arr = array(); // Mail data for Kompetenzfeld
// Loop through lectors, who updated their Zeitwunsch today
$changed_arr = getData($result);
foreach ($changed_arr as $row)
{
// Add unique lector array
if (!in_array($row->mitarbeiter_uid, $uid_arr))
{
$uid_arr[]= $row->mitarbeiter_uid;
}
// Build unique Studiengang array
if (!array_key_exists($row->studiengang_kz, $uidByStg_arr))
{
$uidByStg_arr[$row->studiengang_kz] = array($row->mitarbeiter_uid);
}
elseif (!in_array($row->mitarbeiter_uid, $uidByStg_arr[$row->studiengang_kz]))
{
$uidByStg_arr[$row->studiengang_kz][]= $row->mitarbeiter_uid;
}
// Build unique Kompetenzfeld array
if (!array_key_exists($row->oe_kurzbz, $uidByOe_arr))
{
$uidByOe_arr[$row->oe_kurzbz] = array($row->mitarbeiter_uid);
}
elseif (!in_array($row->mitarbeiter_uid, $uidByOe_arr[$row->oe_kurzbz]))
{
$uidByOe_arr[$row->oe_kurzbz][]= $row->mitarbeiter_uid;
}
}
// Send mail to STG Assistenz
$result = $this->_sendMailToStg($uidByStg_arr);
if (isError($result))
{
$this->logError(getError($result));
}
// Send mail to Kompetenzfeld Leitung
$result = $this->_sendMailToKF($uidByOe_arr);
if (isError($result))
{
$this->logError(getError($result));
}
// Send mail to LV Planung
$result = $this->_sendMailToLvPlanung($uid_arr);
if (isError($result))
{
$this->logError(getError($result));
}
// End Log Message
$this->logInfo('Mail updated Zeitwuensche ended.');
}
/**
* Send Mail to STGL Assistance about lectors, who teach LV assigend to the STG, and who updated Zeitwuensche.
*
* @param $data_arr
* @param $stg_bezeichnung
*/
private function _sendMailToStg($data_arr)
{
foreach ($data_arr as $stg_kurzbz => $uid_arr)
{
// Get STG eMail
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
$result = $this->StudiengangModel->load($stg_kurzbz);
$stgMail = $result->retval[0]->email;
$lektorenTabelle = '
<table><thead>
<tr>
<th style="text-align:left">Name</th>
<th style="text-align:left">UID</th>
</tr>
</thead><tbody>
';
foreach($uid_arr as $uid)
{
$person = $this->PersonModel->getByUid($uid);
$lektorenTabelle.= '
<tr>
<td style="text-align:left">'. getData($person)[0]->vorname. ' '. getData($person)[0]->nachname. '</td>
<td style="text-align:left">['. $uid. ']</td>
</tr>
';
}
$lektorenTabelle.= '</tbody></table>';
$contentData_arr = array(
'datentabelle' => $lektorenTabelle
);
// Send mail
if (!sendSanchoMail(
'ZeitwunschUpdateMail',
$contentData_arr,
$stgMail,
'Änderung von Zeitwünschen',
'sancho_header_min_bw.jpg',
'sancho_footer_min_bw.jpg'
))
{
$errorReceiverUid_arr[]= $stgMail;
}
}
if (isset($errorReceiverUid_arr))
{
return error('Mail updated Zeitwuensche could not be sent to :'. implode($errorReceiverUid_arr, ','));
}
return success();
}
/**
* Send Mail to Kompetenzfeld about lectors, who teach LV assigend to the Kompetenzfeld, and who updated Zeitwuensche.
*
* @param $data_arr
* @param $stg_bezeichnung
*/
private function _sendMailToKF($data_arr)
{
// Send mail to Komepetenzfeld Leitung
foreach ($data_arr as $oe_kurzbz => $uid_arr)
{
// Get KF Leitung eMail
$this->load->model('person/Benutzerfunktion_model', 'BenutzerfunktionModel');
$result = $this->BenutzerfunktionModel->getBenutzerFunktionen(
'Leitung',
$oe_kurzbz,
$activeoeonly = true,
$activebenonly = true
);
if(isSuccess($result) && hasData($result))
{
$empfaenger = array();
foreach(getData($result) as $row)
$empfaenger[] = $row->uid. '@'. DOMAIN;
$kfMail = implode(',',$empfaenger);
$lektorenTabelle = '
<table><thead>
<tr>
<th style="text-align:left">Name</th>
<th style="text-align:left">UID</th>
</tr>
</thead><tbody>
';
foreach($uid_arr as $uid)
{
$person = $this->PersonModel->getByUid($uid);
$lektorenTabelle.= '
<tr>
<td style="text-align:left">'. getData($person)[0]->vorname. ' '. getData($person)[0]->nachname. '</td>
<td style="text-align:left">['. $uid. ']</td>
</tr>
';
}
$lektorenTabelle.= '</tbody></table>';
$contentData_arr = array(
'datentabelle' => $lektorenTabelle
);
// Send mail
if (!sendSanchoMail(
'ZeitwunschUpdateMail',
$contentData_arr,
$kfMail,
'Änderung von Zeitwünschen',
'sancho_header_min_bw.jpg',
'sancho_footer_min_bw.jpg'
))
{
$errorReceiverUid_arr[]= $kfMail;
}
}
}
if (isset($errorReceiverUid_arr))
{
return error('Mail updated Zeitwuensche could not be sent to :'. implode($errorReceiverUid_arr, ','));
}
return success();
}
/**
* Send Mail to LV Planung about all lectors who updated Zeitwuensche.
*
* @param $data_arr
* @param $stg_bezeichnung
*/
private function _sendMailToLvPlanung($data_arr)
{
$lektorenTabelle = '
<table><thead>
<tr>
<th style="text-align:left">Name</th>
<th style="text-align:left">UID</th>
</tr>
</thead><tbody>
';
foreach($data_arr as $lector)
{
$person = $this->PersonModel->getByUid($lector);
$lektorenTabelle.= '
<tr>
<td style="text-align:left">'. getData($person)[0]->vorname. ' '. getData($person)[0]->nachname. '</td>
<td style="text-align:left">['. $lector. ']</td>
</tr>
';
}
$lektorenTabelle.= '</tbody></table>';
$contentData_arr = array(
'datentabelle' => $lektorenTabelle
);
// Send mail
if (!sendSanchoMail(
'ZeitwunschUpdateMail',
$contentData_arr,
MAIL_LVPLAN,
'Änderung von Zeitwünschen',
'sancho_header_min_bw.jpg',
'sancho_footer_min_bw.jpg'
))
{
$errorReceiver = MAIL_LVPLAN;
}
if (isset($errorReceiver))
{
return error('Mail updated Zeitwuensche could not be sent to :'. $errorReceiver);
}
return success();
}
}
@@ -119,7 +119,7 @@ class requestAnrechnung extends Auth_Controller
// Validate data
if (empty($_FILES['uploadfile']['name']))
{
return $this->outputJsonError($this->p->t('ui', 'errorUploadFehlt'));
return $this->outputJsonError($this->p->t('ui', 'errorUploadFehltOderZuGross'));
}
if (isEmptyString($begruendung_id) ||
@@ -0,0 +1,310 @@
<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');
/**
*
*/
class AdminZeitverfuegbarkeit extends Auth_Controller
{
const BERECHTIGUNG_ZEITVERFUEGBARKEIT = 'lehre/zeitverfuegbarkeit';
private $_uid; // uid of the logged user
public function __construct()
{
// Set required permissions
parent::__construct(
array(
'index' => 'lehre/zeitverfuegbarkeit:rw',
'saveZeitverfuegbarkeit' => 'lehre/zeitverfuegbarkeit:rw',
'deleteZeitverfuegbarkeit' => 'lehre/zeitverfuegbarkeit:rw'
)
);
// Load models
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
$this->load->model('person/Benutzer_model', 'BenutzerModel');
$this->load->model('person/Person_model', 'PersonModel');
$this->load->model('ressource/Zeitsperre_model', 'ZeitsperreModel');
// Load libraries
$this->load->library('PermissionLib');
$this->load->library('AuthLib');
$this->load->library('WidgetLib');
// Load helpers
$this->load->helper('array');
// Load language phrases
$this->loadPhrases(
array(
'global',
'ui',
'lehre'
)
);
$this->_setAuthUID(); // sets property uid
$this->setControllerId(); // sets the controller id
}
// -----------------------------------------------------------------------------------------------------------------
// Public methods
public function index()
{
// Get Studiengaenge the user is entitled for
$result = $this->permissionlib->getSTG_isEntitledFor(self::BERECHTIGUNG_ZEITVERFUEGBARKEIT);
$studiengang_kz_arr = !isEmptyArray($result) ? $result : array();
// Get lectors of that Studiengaenge
$result = $this->_getLehreinheitmitarbeiterByStg($studiengang_kz_arr);
$lektor_arr = hasData($result) ? getData($result) : array();
// Get available Stundenplan Stunden
$result = $this->_getStunden();
$stunde_arr = hasData($result) ? getData($result) : array();
// Get actual Studiensemester to set min-limit Datepicker
$result = $this->StudiensemesterModel->getAkt();
$studsemStart = hasData($result) ? getData($result)[0]->start : '';
$view_data = array(
'studiengang_kz_arr' => $studiengang_kz_arr,
'lektor_arr' => $lektor_arr,
'stunde_arr' => $stunde_arr,
'studsemStart' => $studsemStart
);
$this->load->view('lehre/lvplanung/adminZeitverfuegbarkeit.php', $view_data);
}
/**
* Save or update Zeitverfuegbarkeit.
*/
public function saveZeitverfuegbarkeit()
{
$zeitsperre_id = $this->input->post('zeitsperre_id');
$mitarbeiter_uid = $this->input->post('mitarbeiter_uid');
$zeitsperretyp_kurzbz = $this->input->post('zeitsperretyp_kurzbz');
$bezeichnung = $this->input->post('bezeichnung');
$vonDatum = $this->input->post('vondatum');
$vonStunde = isEmptyString($this->input->post('vonstunde')) ? null : $this->input->post('vonstunde');
$bisDatum = $this->input->post('bisdatum');
$bisStunde = isEmptyString($this->input->post('bisstunde')) ? null : $this->input->post('bisstunde');
$result = $this->_validate($this->input->post());
if (isSuccess($result))
{
if (is_numeric($zeitsperre_id))
{
$result = $this->ZeitsperreModel->update(
$zeitsperre_id,
array(
'vondatum' => $vonDatum,
'vonstunde' => $vonStunde,
'bisdatum' => $bisDatum,
'bisstunde' => $bisStunde,
'bezeichnung' => $bezeichnung
)
);
}
else
{
$result = $this->ZeitsperreModel->save(
$zeitsperretyp_kurzbz,
$mitarbeiter_uid,
$vonDatum,
$bisDatum,
$vonStunde,
$bisStunde,
$bezeichnung
);
}
}
if (isError($result))
{
$this->terminateWithJsonError(getError($result));
}
$zeitsperre_id = getData($result);
// Success response to AJAX
$this->outputJsonSuccess(array(
'zeitsperre_id' => $zeitsperre_id,
'msg' => $this->p->t('ui', 'gespeichert')
));
}
/**
* Delete Zeitverfuegbarkeit.
*/
public function deleteZeitverfuegbarkeit()
{
$zeitsperre_id = $this->input->post('zeitsperre_id');
if (!is_numeric($zeitsperre_id))
{
$this->terminateWithJsonError('Wählen Sie einen Lehrenden aus der Zeitverfügbarkeit-Tabelle aus.');
}
// Load Zeitsperre
$result = $this->ZeitsperreModel->load($zeitsperre_id);
$delZsp = getData($result)[0];
// Delete
$result = $this->ZeitsperreModel->delete($zeitsperre_id);
if (isError($result))
{
$this->terminateWithJsonError(getError($result));
}
// Store Deletion query
$delQry = $this->db->last_query();
// Log deletion
$this->_logDeletion($delZsp, $delQry);
$this->outputJsonSuccess(array('msg' => $this->p->t('ui', 'geloescht')));
}
// -----------------------------------------------------------------------------------------------------------------
// Private methods
/**
* Retrieve the UID of the logged user and checks if it is valid
*/
private function _setAuthUID()
{
$this->_uid = getAuthUID();
if (!$this->_uid) show_error('User authentification failed');
}
/**
* Get all lectors that are assigend to Lehreinheiten in actual or future semester.
*
* @param $studiengang_kz_arr Restrict only to given stg-
* @return mixed
*/
private function _getLehreinheitmitarbeiterByStg($studiengang_kz_arr)
{
$this->MitarbeiterModel->addSelect('lema.mitarbeiter_uid, nachname, vorname');
$this->MitarbeiterModel->addDistinct('lema.mitarbeiter_uid');
$this->MitarbeiterModel->addJoin('lehre.tbl_lehreinheitmitarbeiter lema', 'tbl_mitarbeiter.mitarbeiter_uid = lema.mitarbeiter_uid');
$this->MitarbeiterModel->addJoin('public.tbl_benutzer b', 'lema.mitarbeiter_uid = b.uid');
$this->MitarbeiterModel->addJoin('public.tbl_person p', 'person_id');
$this->MitarbeiterModel->addJoin('lehre.tbl_lehreinheit le', 'lehreinheit_id');
$this->MitarbeiterModel->addJoin('lehre.tbl_lehrveranstaltung lv', 'lehrveranstaltung_id');
$this->MitarbeiterModel->addJoin('public.tbl_studiensemester ss', 'studiensemester_kurzbz');
$this->MitarbeiterModel->addOrder('lema.mitarbeiter_uid');
// Return lektoren assigned to actual or future lehreinheiten
return $this->MitarbeiterModel->loadWhere('
lv.studiengang_kz IN (' . implode(', ', $studiengang_kz_arr) . ')
AND b.aktiv
AND personalnummer > 0
AND NOW() <= ss.ende'
);
}
/**
* Get all available Stunden of Stundentabelle.
*
* @return mixed
*/
private function _getStunden()
{
$this->load->model('ressource/Stunde_model', 'StundeModel');
$this->StundeModel->addOrder('stunde');
return $this->StundeModel->load();
}
/**
* Validaton checks performed on post data.
*
* @param $post
* @return array|stdClass
* @throws Exception
*/
private function _validate($post)
{
if (isEmptyString($post['mitarbeiter_uid']))
{
return (error('LektorIn fehlt'));
}
if (isEmptyString($post['bezeichnung']))
{
return (error('Notiz fehlt'));
}
if (isEmptyString($post['vondatum']))
{
return error('Startdatum fehlt');
}
if (isEmptyString($post['bisdatum']))
{
return error('Endedatum fehlt');
}
if (new DateTime($post['bisdatum']) < new DateTime($post['vondatum']))
{
return error('Endedatum darf nicht VOR dem Startdatum liegen');
}
// Check bisstunde not after vonstunde within same day
if (new DateTime($post['bisdatum']) == new DateTime($post['vondatum']))
{
if (is_numeric($post['vonstunde']) && is_numeric($post['bisstunde'])
&& $post['bisstunde'] < $post['vonstunde'])
{
return error('Am gleichen Tag darf Endstunde nicht VOR der Startstunde liegen');
}
}
// Check dates are > then start of actual Studiensemester
$result = $this->StudiensemesterModel->getAkt();
$studsemStart = hasData($result) ? getData($result)[0]->start : '';
if (new DateTime($post['vondatum']) < new DateTime($studsemStart) ||
new DateTime($post['bisdatum']) < new DateTime($studsemStart))
{
return error('Start- und Endedatum können nur für das aktuelle oder künftige Studiensemester geplant werden');
}
return success();
}
/**
* Log information of deleted Zeitsperre into log table.
*
* @param $delZsp object of deleted Zeitsperre
* @param $delQry string of performed delete query
* @return mixed
* @throws Exception
*/
private function _logDeletion($delZsp, $delQry)
{
$beschreibung = 'Zeitverfügbarkeitlöschung '
. $delZsp->mitarbeiter_uid. ' '
. (new DateTime($delZsp->vondatum))->format('d.m.Y')
. (is_null($delZsp->vonstunde) ? '(*)' : '('. $delZsp->vonstunde. ')')
. '-'
. (new DateTime($delZsp->bisdatum))->format('d.m.Y')
. (is_null($delZsp->bisstunde) ? '(*)' : '('. $delZsp->bisstunde. ')')
. '';
$this->load->model('system/Log_model', 'LogModel');
return $this->LogModel->insert(array(
'mitarbeiter_uid' => $this->_uid,
'beschreibung' => substr($beschreibung, 0, 64),
'sql' => $delQry
));
}
}
+1 -1
View File
@@ -74,7 +74,7 @@ function sendSanchoMail($vorlage_kurzbz, $vorlage_data, $to, $subject, $headerIm
$body = _parseMailContent('Sancho_Mail_Template', $layout);
// Send mail
$ci->maillib->send($from, $to, $subject, $body, $alias = '', $cc, $bcc, $altMessage = '', $bulk = true, $autogenerated = true);
return $ci->maillib->send($from, $to, $subject, $body, $alias = '', $cc, $bcc, $altMessage = '', $bulk = true, $autogenerated = true);
}
/**
+3 -2
View File
@@ -560,7 +560,7 @@ class Prestudent_model extends DB_Model
o.bezeichnung,
(CASE
WHEN sg.typ = \'b\' THEN ps.prestudent_id
WHEN sg.typ = \'m\' THEN p.prestudent_id
WHEN sg.typ = \'m\' THEN ps.prestudent_id
ELSE NULL
END) AS prestudent_id
FROM public.tbl_prestudent p
@@ -618,8 +618,9 @@ class Prestudent_model extends DB_Model
JOIN public.tbl_prestudent ps USING(prestudent_id)
JOIN public.tbl_studiengang sg USING(studiengang_kz)
JOIN lehre.tbl_studienplan sp USING(studienplan_id)
JOIN lehre.tbl_studienordnung so USING(studienordnung_id)
WHERE ps.person_id = ?
AND UPPER((sg.typ || sg.kurzbz) || ':' || sp.orgform_kurzbz) = ?
AND UPPER(so.studiengangkurzbzlang || ':' || sp.orgform_kurzbz) = ?
AND pss.studiensemester_kurzbz = ?
AND";
@@ -495,11 +495,12 @@ class Studiengang_model extends DB_Model
public function getStudiengaengeWithOrgForm($typ, $semester)
{
$query = "SELECT DISTINCT (UPPER(sg.typ || sg.kurzbz || ':' || sp.orgform_kurzbz)) AS Studiengang
$query = "SELECT DISTINCT (UPPER(so.studiengangkurzbzlang || ':' || sp.orgform_kurzbz)) AS Studiengang
FROM public.tbl_studiengang sg
JOIN lehre.tbl_studienordnung USING (studiengang_kz)
JOIN lehre.tbl_studienplan sp USING (studienordnung_id)
JOIN lehre.tbl_studienplan_semester spsem USING (studienplan_id)
JOIN lehre.tbl_studienordnung so USING(studienordnung_id)
WHERE sp.aktiv = TRUE AND sg.aktiv = TRUE AND sg.typ IN ?
AND spsem.studiensemester_kurzbz = ?
ORDER BY Studiengang";
@@ -13,6 +13,20 @@ class Studiensemester_model extends DB_Model
$this->hasSequence = false;
}
/**
* Get actual Studiensemester.
*
* @return array
*/
public function getAkt()
{
return $this->loadWhere(array(
'start <= ' => 'NOW()',
'ende >= ' => 'NOW()'
)
);
}
// Get next study semester
public function getNext()
{
@@ -167,15 +181,13 @@ class Studiensemester_model extends DB_Model
if (date_format(date_create($from), 'Y-m-d') > (date_format(date_create($to), 'Y-m-d')))
return success(array());
$query = "SELECT *
$query = "
SELECT *
FROM public.tbl_studiensemester
WHERE
(ende > ?::date AND start < ?::date)
OR start = ?::date
OR ende = ?::date
WHERE ( ?::date < ende AND ?::date > start )
ORDER BY start DESC";
return $this->execQuery($query, array($from, $to, $from, $to));
return $this->execQuery($query, array($from, $to));
}
/**
@@ -61,4 +61,98 @@ class Stundenplandev_model extends DB_Model
return $this->execQuery($qry, $parametersArray);
}
/**
* Get Stundenplan data.
*
* @param null $lehrveranstaltung_id
* @param null $studiensemester_kurzbz
* @param null $lehreinheit_id
* @param null $mitarbeiter_uid
* @param null $student_uid
* @param false $nurBevorstehende If true, only future data is retrieved.
* @return array|false|stdClass|null
*/
public function getStundenplanData($lehrveranstaltung_id=null, $studiensemester_kurzbz=null, $lehreinheit_id=null, $mitarbeiter_uid=null, $student_uid=null, $nurBevorstehende = false)
{
$params = array();
$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_stundenplandev 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 = ?
AND studiensemester_kurzbz = ?
)";
$params[]= $lehrveranstaltung_id;
$params[]= $studiensemester_kurzbz;
}
elseif ($lehreinheit_id!='')
{
$qry.=" lehreinheit_id = ?";
$params[]= $lehreinheit_id;
}
elseif ($mitarbeiter_uid != '')
{
$qry.= "
mitarbeiter_uid = ?
AND lehreinheit_id IN (
SELECT lehreinheit_id
FROM lehre.tbl_lehreinheitmitarbeiter
JOIN lehre.tbl_lehreinheit USING (lehreinheit_id)
WHERE mitarbeiter_uid = ?
AND studiensemester_kurzbz IN ( ? )
)";
$params[] = $mitarbeiter_uid;
$params[] = $mitarbeiter_uid;
$params[] = $studiensemester_kurzbz;
}
elseif ($student_uid != '')
{
$qry.="
lehreinheit_id IN (
SELECT lehreinheit_id
FROM campus.vw_student_lehrveranstaltung
WHERE uid = ?
AND studiensemester_kurzbz = ?
)";
$params[] = $student_uid;
$params[] = $studiensemester_kurzbz;
}
else
return false;
if($nurBevorstehende)
{
$qry.= " AND stpl.datum >= NOW()::date ";
}
$qry.= "
GROUP BY stpl.datum, stpl.unr, stpl.lehreinheit_id, lehrfach.bezeichnung
ORDER BY stpl.datum, min(stpl.stunde), stpl.unr, stpl.lehreinheit_id
";
return $this->execQuery($qry, $params);
}
}
@@ -12,6 +12,47 @@ class Zeitsperre_model extends DB_Model
$this->pk = 'zeitsperre_id';
}
/**
* Save or update Zeitsperre.
*
* @param $zeitsperretyp_kurzbz
* @param $mitarbeiter_uid
* @param $vonDatum
* @param $bisDatum
* @param null $vonStunde
* @param null $bisStunde
* @param null $bezeichnung
* @param null $vertretung_uid
* @param null $erreichbarkeit_kurzbz
* @param null $freigabeamum
* @param null $freigabevon
* @return array
*/
public function save($zeitsperretyp_kurzbz, $mitarbeiter_uid, $vonDatum, $bisDatum,
$vonStunde = null, $bisStunde = null, $bezeichnung = null, $vertretung_uid = null,
$erreichbarkeit_kurzbz = null, $freigabeamum = null, $freigabevon = null)
{
return $this->insert(array(
'zeitsperretyp_kurzbz' => $zeitsperretyp_kurzbz,
'mitarbeiter_uid' => $mitarbeiter_uid,
'vondatum' => $vonDatum,
'bisdatum' => $bisDatum,
'vonstunde' => $vonStunde,
'bisstunde' => $bisStunde,
'bezeichnung' => $bezeichnung,
'vertretung_uid' => $vertretung_uid,
'insertvon' => getAuthUID(),
'insertamum' => (new DateTime())->format('Y-m-d H:i:s'),
'erreichbarkeit_kurzbz' => $erreichbarkeit_kurzbz,
'freigabeamum' => $freigabeamum,
'freigabevon' => $freigabevon
));
}
/**
* Delete Zeitsperre.
* @return array|stdClass|null
*/
public function deleteEntriesForCurrentDay()
{
$today = date('Y-m-d');
@@ -0,0 +1,14 @@
<?php
class Zeitwunsch_gueltigkeit_model extends DB_Model
{
/**
* Constructor
*/
public function __construct()
{
parent::__construct();
$this->dbTable = 'campus.tbl_zeitwunsch_gueltigkeit';
$this->pk = 'zeitwunsch_gueltigkeit_id';
}
}
@@ -26,7 +26,8 @@ $this->load->view(
'neu',
'maxZeichen',
'errorBestaetigungFehlt',
'systemfehler'
'systemfehler',
'errorDokumentZuGross'
),
'anrechnung' => array(
'deadlineUeberschritten',
@@ -179,7 +180,7 @@ $this->load->view(
<div class="form-inline panel-body">
<div class="form-group">
<input type="file" id="requestAnrechnung-uploadfile"
name="uploadfile" accept=".pdf" size="50"
name="uploadfile" accept=".pdf" size="50" data-maxsize="<?php echo (int)ini_get('upload_max_filesize') * 1024 ?>"
required>
</div>
<span id="requestAnrechnung-uploadTooltip" data-toggle="tooltip" data-placement="right"
@@ -0,0 +1,166 @@
<?php
$this->load->view(
'templates/FHC-Header',
array(
'title' => 'Zeitverfuegbarkeit verwalten',
'jquery' => true,
'jqueryui' => true,
'bootstrap' => true,
'fontawesome' => true,
'momentjs' => true,
'ajaxlib' => true,
'tabulator' => true,
'tablewidget' => true,
'navigationwidget' => true,
'sbadmintemplate' => true,
'phrases' => array(
'global' => array(
'bis',
'notiz'
),
'ui' => array(
'systemfehler',
'keineDatenVorhanden',
'von',
'bitteWaehlen',
'speichern',
'loeschen',
'abbrechen'
),
'lehre' => array(
'lektor'
)
),
'widgets' => true,
'dialoglib' => true,
'customJSs' => array(
'public/js/bootstrapper.js',
'public/js/lehre/lvplanung/zverfueg.js'
)
)
);
?>
<body>
<?php echo $this->widgetlib->widget('NavigationWidget'); ?>
<div id="page-wrapper">
<div class="container-fluid">
<!-- title -->
<div class="row">
<div class="col-lg-12 page-header">
<h3>Zeitverf&uuml;gbarkeiten verwalten<small> | Punktuelle Zeitverfügbarkeiten von Lehrenden für die LV-Planung verwalten</small></h3>
</div>
</div>
<!-- form -->
<div class="row">
<div class="col-lg-12">
<form id="form-zeitverfuegbarkeit" class="form-horizontal">
<input type="hidden" id="studsemStart" value="<?php echo $studsemStart ?>">
<input type="hidden" id="zeitsperre_id" name="zeitsperre_id" value="">
<div class="form-group">
<label for="mitarbeiter_uid" class="col-sm-1 control-label">LektorIn: </label>
<div class="col-sm-3">
<select id="mitarbeiter_uid" name="mitarbeiter_uid" class="form-control select-w500" required>
<option value="" >
<?php echo $this->p->t('ui', 'bitteWaehlen'); ?>
</option>
<?php foreach ($lektor_arr as $lektor) : ?>
<option value="<?php echo $lektor->mitarbeiter_uid ?>">
<?php echo $lektor->nachname. ' '. $lektor->vorname ?>
</option>
<?php endforeach; ?>
</select>
</div>
</div>
<div class="form-group">
<label for="zverfueg" class="col-sm-1 control-label">Grund: </label>
<div class="col-sm-3">
<input type="text" id="zeitsperretyp_kurzbz" value="Zeitverf&uuml;gbarkeit" name="zeitsperretyp_kurzbz" readonly />
</div>
</div>
<div class="form-group">
<label for="bezeichnung" class="col-sm-1 control-label">Notiz: </label>
<div class="col-sm-3">
<textarea type="" id="bezeichnung" name="bezeichnung" value="" required></textarea>
</div>
</div>
<div class="form-group">
<label for="vondatum" class="col-sm-1 control-label">Von: </label>
<div class="col-sm-3">
<input type="date" id="vondatum" name="vondatum" class="form-control zverfueg-datepicker" required>
</div>
<label for="vonstunde" class="col-sm-1 control-label">Stunde (inkl.): </label>
<div class="col-sm-3">
<select id="vonstunde" name="vonstunde" class="form-control select-w500">
<option value="" >*</option>
<?php foreach ($stunde_arr as $stunde) : ?>
<option value="<?php echo $stunde->stunde ?>">
<?php echo $stunde->stunde.
' ['.
(new DateTime($stunde->beginn))->format('H:i'). ' - '.
(new DateTime($stunde->ende))->format('H:i').
']' ?>
</option>
<?php endforeach; ?>
</select>
</div>
</div>
<div class="form-group">
<label for="bisdatum" class="col-sm-1 control-label">Bis: </label>
<div class="col-sm-3">
<input type="date" id="bisdatum" name="bisdatum" class="form-control zverfueg-datepicker" required>
</div>
<label for="bisstunde" class="col-sm-1 control-label">Stunde (inkl.): </label>
<div class="col-sm-3">
<select id="bisstunde" name="bisstunde" class="form-control select-w500">
<option value="" >*</option>
<?php foreach ($stunde_arr as $stunde) : ?>
<option value="<?php echo $stunde->stunde ?>">
<?php echo $stunde->stunde.
' ['.
(new DateTime($stunde->beginn))->format('H:i'). ' - '.
(new DateTime($stunde->ende))->format('H:i').
']' ?>
</option>
<?php endforeach; ?>
</select>
</div>
</div>
<div class="col-sm-8">
<button type="submit" id="btn-save" class="btn btn-primary btn-w200 pull-right">
<?php echo ucfirst($this->p->t('ui', 'speichern')); ?>
</button>
<button type="button" id="btn-delete" class="btn btn-danger btn-w200 btn-mr5 pull-right" disabled
data-toggle="tooltip" data-placement="right"
title="Zum Löschen LektorIn aus Tabelle wählen">
<?php echo ucfirst($this->p->t('ui', 'loeschen')); ?>
</button>
<button type="reset" id="btn-break" class="btn btn-default btn-w200 btn-mr5 pull-right">
<?php echo ucfirst($this->p->t('ui', 'abbrechen')); ?>
</button>
</div>
</form>
</div>
</div>
<!-- data table -->
<div class="row">
<div class="col-lg-12">
<?php $this->load->view('lehre/lvplanung/adminZeitverfuegbarkeitData.php'); ?>
</div>
</div>
</div><!-- end container -->
</div><!-- end page-wrapper -->
<br>
</body>
<?php $this->load->view('templates/FHC-Footer'); ?>
@@ -0,0 +1,70 @@
<?php
$STUDIENGANG_KZ_ARR = $studiengang_kz_arr; // stg the user is entitled to administrate
$qry = '
SELECT * FROM (
SELECT DISTINCT ON (zeitsperre_id, zsp.mitarbeiter_uid) zeitsperre_id, zsp.mitarbeiter_uid,
concat_ws(\' \', nachname, vorname) AS "lektor",
vondatum, vonstunde, bisdatum, bisstunde, zsp.bezeichnung
FROM public.tbl_person
JOIN public.tbl_benutzer b USING (person_id)
JOIN public.tbl_mitarbeiter ma ON (ma.mitarbeiter_uid = b.uid)
JOIN lehre.tbl_lehreinheitmitarbeiter lema ON (lema.mitarbeiter_uid = b.uid)
JOIN lehre.tbl_lehreinheit le USING (lehreinheit_id)
JOIN lehre.tbl_lehrveranstaltung lv USING (lehrveranstaltung_id)
JOIN public.tbl_studiensemester ss USING (studiensemester_kurzbz)
JOIN campus.tbl_zeitsperre zsp ON zsp.mitarbeiter_uid = lema.mitarbeiter_uid
WHERE lv.studiengang_kz IN ('. implode (',', $STUDIENGANG_KZ_ARR). ')
AND b.aktiv
AND zsp.vondatum >= ss.start
AND zeitsperretyp_kurzbz = \'ZVerfueg\'
ORDER BY zeitsperre_id, zsp.mitarbeiter_uid
) as tmp
ORDER BY vondatum DESC
';
$filterWidgetArray = array(
'query' => $qry,
'tableUniqueId' => 'adminZeitverfuegbarkeit',
'requiredPermissions' => 'lehre/zeitverfuegbarkeit',
'datasetRepresentation' => 'tabulator',
'columnsAliases' => array(
'ZeitsperreID',
'UID',
ucfirst($this->p->t('lehre', 'lektor')),
ucfirst($this->p->t('ui', 'von')),
'VonStunde',
ucfirst($this->p->t('global', 'bis')),
'BisStunde',
ucfirst($this->p->t('global', 'notiz'))
),
'datasetRepOptions' => '{
layout: "fitColumns", // fit columns to width of table
autoResize: false, // prevent auto resizing of table (false to allow adapting table size when cols are (de-)activated
headerFilterPlaceholder: " ",
index: "zeitsperre_id", // assign specific column as unique id (important for row indexing)
selectable: 1, // allow row selection
tableWidgetHeader: false,
rowSelected: function(row) {
func_rowSelected(row);
},
rowDeselected: function(row) {
func_rowDeselected(row);
}
}', // tabulator properties
'datasetRepFieldsDefs' => '{
zeitsperre_id: {visible:false},
mitarbeiter_uid: {visible: true, headerFilter:"input"},
lektor: {visible: true, headerFilter:"input"},
vondatum: {visible: true, headerFilter:"input"},
vonstunde: {visible: true, headerFilter:"input"},
bisdatum: {visible: true, headerFilter:"input"},
bisstunde: {visible: true, headerFilter:"input"},
bezeichnung: {visible: true, headerFilter:"input"}
}', // col properties
);
echo $this->widgetlib->widget('TableWidget', $filterWidgetArray);
?>
@@ -65,7 +65,7 @@
if (!isset($formalReadonly)) :
?>
<td>
<input type="checkbox" class="form-check-input prchbox"
<input type="checkbox" class="form-check-input prchbox" autocomplete="off"
id="prchkbx_<?php echo $dokument->akte_id ?>" <?php echo $geprueft ?>>
<span id="formalgeprueftam_<?php echo $dokument->akte_id ?>">
<?php echo isset($dokument->formal_geprueft_amum) ? date_format(date_create($dokument->formal_geprueft_amum), 'd.m.Y') : ''; ?>
@@ -14,7 +14,7 @@ $query = '
ps.prestudent_id AS "PreStudentID",
p.vorname AS "Vorname",
p.nachname AS "Nachname",
sg.kurzbzlang as "Studiengang",
so.studiengangkurzbzlang as "Studiengang",
pss.insertamum AS "AbgewiesenAm",
(
SELECT l.zeitpunkt
@@ -43,6 +43,8 @@ $query = '
JOIN public.tbl_prestudent ps USING(prestudent_id)
JOIN public.tbl_person p USING(person_id)
JOIN public.tbl_studiengang sg USING(studiengang_kz)
JOIN lehre.tbl_studienplan sp USING(studienplan_id)
JOIN lehre.tbl_studienordnung so USING(studienordnung_id)
WHERE pss.status_kurzbz = '. $ABGEWIESENEN_STATUS .'
AND pss.studiensemester_kurzbz = '. $STUDIENSEMESTER .'
AND (sg.typ IN ('. $STUDIENGANG_TYP .')
@@ -137,11 +137,12 @@
LIMIT 1
) AS "AnzahlAbgeschickt",
(
SELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT UPPER(sg.typ || sg.kurzbz) || \':\' || sp.orgform_kurzbz), \', \')
SELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT UPPER(so.studiengangkurzbzlang) || \':\' || sp.orgform_kurzbz), \', \')
FROM public.tbl_prestudentstatus pss
JOIN public.tbl_prestudent ps USING(prestudent_id)
JOIN public.tbl_studiengang sg USING(studiengang_kz)
JOIN lehre.tbl_studienplan sp USING(studienplan_id)
JOIN lehre.tbl_studienordnung so USING(studienordnung_id)
WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.'
AND pss.bewerbung_abgeschicktamum IS NOT NULL
-- AND pss.bestaetigtam IS NULL
@@ -162,11 +163,12 @@
LIMIT 1
) AS "StgAbgeschickt",
(
SELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT UPPER(sg.typ || sg.kurzbz) || \':\' || sp.orgform_kurzbz), \', \')
SELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT UPPER(so.studiengangkurzbzlang) || \':\' || sp.orgform_kurzbz), \', \')
FROM public.tbl_prestudentstatus pss
JOIN public.tbl_prestudent ps USING(prestudent_id)
JOIN public.tbl_studiengang sg USING(studiengang_kz)
JOIN lehre.tbl_studienplan sp USING(studienplan_id)
JOIN lehre.tbl_studienordnung so USING(studienordnung_id)
WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.'
AND pss.bewerbung_abgeschicktamum IS NULL
AND pss.bestaetigtam IS NULL
@@ -214,11 +216,12 @@
LIMIT 1
) AS "AnzahlStgNichtAbgeschickt",
(
SELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT UPPER(sg.typ || sg.kurzbz) || \':\' || sp.orgform_kurzbz), \', \')
SELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT UPPER(so.studiengangkurzbzlang) || \':\' || sp.orgform_kurzbz), \', \')
FROM public.tbl_prestudentstatus pss
JOIN public.tbl_prestudent ps USING(prestudent_id)
JOIN public.tbl_studiengang sg USING(studiengang_kz)
JOIN lehre.tbl_studienplan sp USING(studienplan_id)
JOIN lehre.tbl_studienordnung so USING(studienordnung_id)
WHERE pss.status_kurzbz IN ('.$STATUS_KURZBZ.')
AND pss.bewerbung_abgeschicktamum IS NULL
AND ps.person_id = p.person_id
@@ -106,11 +106,12 @@ $query = '
LIMIT 1
) AS "AnzahlAbgeschickt",
(
SELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT UPPER(sg.typ || sg.kurzbz || \':\' || sp.orgform_kurzbz)), \', \')
SELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT UPPER(so.studiengangkurzbzlang) || \':\' || sp.orgform_kurzbz), \', \')
FROM public.tbl_prestudentstatus pss
JOIN public.tbl_prestudent ps USING(prestudent_id)
JOIN public.tbl_studiengang sg USING(studiengang_kz)
JOIN lehre.tbl_studienplan sp USING(studienplan_id)
JOIN lehre.tbl_studienordnung so USING(studienordnung_id)
WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.'
AND pss.bewerbung_abgeschicktamum IS NOT NULL
AND ps.person_id = p.person_id
@@ -128,11 +129,12 @@ $query = '
LIMIT 1
) AS "StgAbgeschickt",
(
SELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT UPPER(sg.typ || sg.kurzbz) || \':\' || sp.orgform_kurzbz), \', \')
SELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT UPPER(so.studiengangkurzbzlang) || \':\' || sp.orgform_kurzbz), \', \')
FROM public.tbl_prestudentstatus pss
JOIN public.tbl_prestudent ps USING(prestudent_id)
JOIN public.tbl_studiengang sg USING(studiengang_kz)
JOIN lehre.tbl_studienplan sp USING(studienplan_id)
JOIN lehre.tbl_studienordnung so USING(studienordnung_id)
WHERE pss.status_kurzbz IN ('.$STATUS_KURZBZ.')
AND ps.person_id = p.person_id
@@ -85,11 +85,12 @@ $query = '
LIMIT 1
) AS "AnzahlAbgeschickt",
(
SELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT UPPER(sg.typ || sg.kurzbz || \':\' || sp.orgform_kurzbz)), \', \')
SELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT UPPER(so.studiengangkurzbzlang) || \':\' || sp.orgform_kurzbz), \', \')
FROM public.tbl_prestudentstatus pss
JOIN public.tbl_prestudent ps USING(prestudent_id)
JOIN public.tbl_studiengang sg USING(studiengang_kz)
JOIN lehre.tbl_studienplan sp USING(studienplan_id)
JOIN lehre.tbl_studienordnung so USING(studienordnung_id)
WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.'
AND pss.bewerbung_abgeschicktamum IS NOT NULL
AND ps.person_id = p.person_id
+3 -2
View File
@@ -224,8 +224,9 @@ if ($result = $db->db_query($qry)) {
else
$zusatz = '';
if ($row->bisio_id != '' && $row->status != 'Incoming' && ($row->bis > $stsemdatumvon || $row->bis == '') && $row->von < $stsemdatumbis) //Outgoing
$zusatz .= '(o)(ab ' . $datum->formatDatum($row->von, 'd.m.Y') . ')';
if ($row->bisio_id != '' && $row->status != 'Incoming' && ($row->bis > $stsemdatumvon || $row->bis == '') && $row->von < $stsemdatumbis
&& (anzahlTage($row->von, $row->bis) >= 30)) //Outgoing
$zusatz .= '(o)(ab '. $datum->formatDatum($row->von, 'd.m.Y'). ')';
if ($row->note == 6) //angerechnet
$zusatz .= '(ar)';
+29 -12
View File
@@ -38,6 +38,8 @@ require_once('../../../include/phrasen.class.php');
$uid = get_uid();
$sprache = getSprache();
$p = new phrasen($sprache);
@@ -112,6 +114,12 @@ else
$format_highlight->setBorder(1);
$format_highlight->setBorderColor('white');
$format_highlightright=& $workbook->addFormat();
$format_highlightright->setFgColor(15);
$format_highlightright->setBorder(1);
$format_highlightright->setBorderColor('white');
$format_highlightright->setAlign('right');
$format_border_bottom =& $workbook->addFormat();
$format_border_bottom ->setBottom(2);
$format_border_bottom->setBold();
@@ -200,8 +208,10 @@ else
$stsemdatumvon = $stsem_obj->start;
$stsemdatumbis = $stsem_obj->ende;
$qry = "SELECT
distinct on(nachname, vorname, person_id) vorname, nachname, matrikelnr, person_id, tbl_student.student_uid as uid,
$qry = "
SELECT
distinct on(nachname, vorname, person_id)
vorname, nachname, matrikelnr, person_id, tbl_student.student_uid as uid,
tbl_studentlehrverband.semester, tbl_studentlehrverband.verband, tbl_studentlehrverband.gruppe,
(SELECT status_kurzbz
FROM public.tbl_prestudentstatus
@@ -209,8 +219,10 @@ else
ORDER BY datum DESC, insertamum DESC, ext_id DESC LIMIT 1) as status,
tbl_bisio.bisio_id, tbl_bisio.bis, tbl_bisio.von,
tbl_zeugnisnote.note,tbl_mobilitaet.mobilitaetstyp_kurzbz,
(CASE WHEN bis.tbl_mobilitaet.studiensemester_kurzbz = vw_student_lehrveranstaltung.studiensemester_kurzbz THEN '1' ELSE '' END) as doubledegree
FROM campus.vw_student_lehrveranstaltung JOIN public.tbl_benutzer USING(uid)
(CASE WHEN bis.tbl_mobilitaet.studiensemester_kurzbz = vw_student_lehrveranstaltung.studiensemester_kurzbz THEN '1' ELSE '' END) as doubledegree,
tbl_note.lkt_ueberschreibbar, tbl_note.anmerkung
FROM
campus.vw_student_lehrveranstaltung JOIN public.tbl_benutzer USING(uid)
JOIN public.tbl_person USING(person_id) JOIN public.tbl_student ON(uid=student_uid)
LEFT JOIN public.tbl_studentlehrverband USING(student_uid,studiensemester_kurzbz)
LEFT JOIN lehre.tbl_zeugnisnote on(vw_student_lehrveranstaltung.lehrveranstaltung_id=tbl_zeugnisnote.lehrveranstaltung_id
@@ -218,9 +230,10 @@ else
AND tbl_zeugnisnote.studiensemester_kurzbz=tbl_studentlehrverband.studiensemester_kurzbz)
LEFT JOIN bis.tbl_bisio ON(uid=tbl_bisio.student_uid)
LEFT JOIN bis.tbl_mobilitaet USING(prestudent_id)
LEFT JOIN lehre.tbl_note USING(note)
WHERE
vw_student_lehrveranstaltung.lehrveranstaltung_id=".$db->db_add_param($lvid, FHC_INTEGER)." AND
vw_student_lehrveranstaltung.studiensemester_kurzbz=".$db->db_add_param($stsem);";";
vw_student_lehrveranstaltung.lehrveranstaltung_id=".$db->db_add_param($lvid, FHC_INTEGER)."
AND vw_student_lehrveranstaltung.studiensemester_kurzbz=".$db->db_add_param($stsem);";";
if($lehreinheit_id!='')
$qry.=" AND vw_student_lehrveranstaltung.lehreinheit_id=".$db->db_add_param($lehreinheit_id, FHC_INTEGER);
@@ -243,18 +256,22 @@ else
$inc=' (i)';
else
$inc='';
if($elem->bisio_id!='' && $elem->status!='Incoming' && ($elem->bis > $stsemdatumvon || $elem->bis=='') && $elem->von < $stsemdatumbis) //Outgoing
if($elem->bisio_id != '' && $elem->status != 'Incoming' && ($elem->bis > $stsemdatumvon || $elem->bis == '')
&& $elem->von < $stsemdatumbis && (anzahlTage($elem->von, $elem->bis) >= 30))
$inc.=' (o)';
if($elem->note==6) //angerechnet
$note = $elem->note;
if($elem->lkt_ueberschreibbar == 'f') // angerechnet / intern angerechnet / nicht zugelassen
{
$inc.=' (ar)';
$note='ar';
$inc.= '('. $elem->anmerkung. ')';
$note = $elem->anmerkung;
}
if ($elem->mobilitaetstyp_kurzbz !='' && $elem->doubledegree == 1) //dd-Program
{
$inc.=' (d.d.)';
$inc .=' (d.d.)';
}
$worksheet->write($lines,1,$elem->uid);
@@ -262,7 +279,7 @@ else
$worksheet->write($lines,3,$elem->vorname);
$worksheet->write($lines,4,'="'.$elem->semester.$elem->verband.$elem->gruppe.'"');
$worksheet->write($lines,5,'="'.trim($elem->matrikelnr).'"',$format_highlight);
$worksheet->write($lines,6,$note,$format_highlight);
$worksheet->write($lines,6, $note, $format_highlightright);
$i++;
$lines++;
}
+15 -10
View File
@@ -266,14 +266,14 @@ function showHideBezeichnungDropDown()
if (dd.options[dd.selectedIndex].value == 'DienstV')
{
var str = '<select name="bezeichnung" class="dd_breit">';
str += '<option value="Eheschließung">a) Eigene Eheschließung</option>';
str += '<option value="Geburt eigenes Kind">b) Geburt eines Kindes der Ehefrau/Lebensgefährtin</option>';
str += '<option value="Heirat Kind/Geschwister">c) Eheschließung eines Kindes/eigener Geschwister</option>';
str += '<option value="Eigene Sponsion/Promotion">d) Teilnahme an eigener Sponsion/Promotion</option>';
str += '<option value="Lebensbedr. Erkrankung P/K/E">e) Lebensbedrohliche Erkrankung Partner/Kinder/Eltern</option>';
str += '<option value="Ableben P/K/E">f) Ableben Partner/Kinder/Elternteil</option>';
str += '<option value="Bestattung G/S/G">g) Teilnahme an Bestattung Geschwister/Schwiegereltern/eigener Großeltern</option>';
str += '<option value="Wohnungswechsel">h) Wohnungswechsel in eigenen Haushalt</option>';
str += '<option value="Eheschließung">a) Eigene Eheschließung (3 Tage)</option>';
str += '<option value="Geburt eigenes Kind">b) Geburt eines Kindes der Ehefrau/Lebensgefährtin (2 Tage)</option>';
str += '<option value="Heirat Kind/Geschwister">c) Eheschließung eines Kindes/eigener Geschwister (1 Tag)</option>';
str += '<option value="Eigene Sponsion/Promotion">d) Teilnahme an eigener Sponsion/Promotion (1 Tag)</option>';
str += '<option value="Lebensbedr. Erkrankung P/K/E">e) Lebensbedrohliche Erkrankung Partner/Kinder/Eltern (3 Tage)</option>';
str += '<option value="Ableben P/K/E">f) Ableben Partner/Kinder/Elternteil (3 Tage)</option>';
str += '<option value="Bestattung G/S/G">g) Teilnahme an Bestattung Geschwister/Schwiegereltern/eigener Großeltern (1 Tag)</option>';
str += '<option value="Wohnungswechsel">h) Wohnungswechsel in eigenen Haushalt (2 Tage)</option>';
str += '<option value="Bundesheer">i) Einberufung Bundesheer</option>';
str += '</select>';
@@ -690,7 +690,7 @@ if(count($zeit->result)>0)
<td>".(isset($row_vertretung->kurzbz)?$row_vertretung->kurzbz:'')."</td>
<td>".(isset($erreichbarkeit_arr[$row->erreichbarkeit])?$erreichbarkeit_arr[$row->erreichbarkeit]:'')."</td>
<td align='center'>".($row->freigabeamum!=''?'Ja':'')."</td>";
if ($row->zeitsperretyp_kurzbz == 'DienstV')
if ($row->zeitsperretyp_kurzbz == 'DienstV' || $row->zeitsperretyp_kurzbz == 'ZVerfueg')
$content_table .= '<td>&nbsp;</td>';
else if ($row->vondatum < $gesperrt_bis AND in_array($row->zeitsperretyp_kurzbz,$typen_arr))
$content_table .= '<td>&nbsp;</td>';
@@ -702,7 +702,7 @@ if(count($zeit->result)>0)
{
$content_table.="\n<td><a href='$PHP_SELF?type=delete_sperre&id=$row->zeitsperre_id&informSupervisor=True' onclick='return conf_del()' class='Item'>".$p->t('zeitsperre/loeschen')."</a></td>";
}
elseif($row->zeitsperretyp_kurzbz!='Urlaub')
elseif($row->zeitsperretyp_kurzbz!='Urlaub' && $row->zeitsperretyp_kurzbz != 'ZVerfueg')
{
$content_table.="\n<td><a href='$PHP_SELF?type=delete_sperre&id=$row->zeitsperre_id' onclick='return conf_del()' class='Item'>".$p->t('zeitsperre/loeschen')."</a></td>";
}
@@ -762,6 +762,11 @@ if($result = $db->db_query($qry))
{
while($row=$db->db_fetch_object($result))
{
if ($row->zeitsperretyp_kurzbz === 'ZVerfueg')
{
continue;
}
if($zeitsperre->zeitsperretyp_kurzbz == $row->zeitsperretyp_kurzbz)
$content_form.= "<OPTION value='$row->zeitsperretyp_kurzbz' selected>$row->beschreibung</OPTION>";
else
+572 -121
View File
@@ -18,6 +18,7 @@
* Authors: Christian Paminger <christian.paminger@technikum-wien.at>,
* Andreas Oesterreicher <andreas.oesterreicher@technikum-wien.at> and
* Rudolf Hangl <rudolf.hangl@technikum-wien.at>.
* Cristina Hainberger <hainberg@technikum-wien.at>
*/
/**
* @brief bietet die Moeglichkeit zur Anzeige und
@@ -29,10 +30,15 @@ require_once('../../../include/globals.inc.php');
require_once('../../../include/functions.inc.php');
require_once('../../../include/datum.class.php');
require_once('../../../include/zeitwunsch.class.php');
require_once('../../../include/zeitwunsch_gueltigkeit.class.php');
require_once('../../../include/studiensemester.class.php');
require_once('../../../include/studiengang.class.php');
require_once('../../../include/zeitaufzeichnung_gd.class.php');
require_once('../../../include/benutzer.class.php');
require_once('../../../include/mitarbeiter.class.php');
require_once('../../../include/lehrveranstaltung.class.php');
require_once('../../../include/lehreinheit.class.php');
require_once('../../../include/lehrstunde.class.php');
require_once('../../../include/phrasen.class.php');
require_once('../../../include/sprache.class.php');
@@ -49,22 +55,185 @@ $uid = get_uid();
if(!check_lektor($uid))
die($p->t('global/keineBerechtigungFuerDieseSeite'));
$PHP_SELF = $_SERVER['PHP_SELF'];
if(isset($_GET['type']))
$type=$_GET['type'];
$datum_obj = new datum();
// Nächstes Studiensemester
$next_ss = new Studiensemester();
$next_ss->getNextStudiensemester();
// Aktuelles Studiensemester
$akt_ss = new Studiensemester();
$akt_ss->load($akt_ss->getAkt());
// Dropdown: Aktuelles/naechstes Studiensemester zum Bearbeiten
$selected_ss = (isset($_GET['stsem']) && is_string($_GET['stsem'])) ? $_GET['stsem'] : $next_ss->studiensemester_kurzbz; // Default: Nächstes Studiensemester
// Dropdown: Vergangene Studiensemester zum Kopieren
$selected_past_ss = (isset($_GET['pastStsem']) && is_string($_GET['pastStsem'])) ? $_GET['pastStsem'] : null; // Default: null
//Stundentabelleholen
if(! $result_stunde=$db->db_query('SELECT * FROM lehre.tbl_stunde ORDER BY stunde'))
die($db->db_last_error());
$num_rows_stunde=$db->db_num_rows($result_stunde);
// Zeitwuensche speichern
if (isset($type) && $type=='save')
// Personendaten
$person = new benutzer();
if(!$person->load($uid))
die($person->errormsg);
$ma = new mitarbeiter($uid);
$fixangestellt = $ma->fixangestellt;
// Check, ob Bearbeitung des ZW gesperrt ist.
// Gesperrt, wenn Lektor bereits zugewiesene LVs hat.
// Sperre in jeden Fall aufgehoben, wenn ein ZW kopiert wird. (denn ist eine eventuelle Sperre bereits manuell aufgehoben worden)
$isGesperrt = checkIsVerplant($uid, $selected_ss) && is_null($selected_past_ss); // boolean
// Erklärung zu Pausen bei geteilten Arbeitszeiten speichern
if (isset($_GET['selbstverwaltete-pause-akt']) && !empty($_GET['submit-akt']))
{
$selbstverwaltete_pause = ($_GET['selbstverwaltete-pause-akt'] == 'yes') ? true : false;
$zeitaufzeichnung_gd = new Zeitaufzeichnung_gd();
$zeitaufzeichnung_gd->uid = $uid;
$zeitaufzeichnung_gd->studiensemester_kurzbz = $akt_ss->studiensemester_kurzbz;
$zeitaufzeichnung_gd->selbstverwaltete_pause = $selbstverwaltete_pause;
$za_gd = new Zeitaufzeichnung_gd();
$za_gd->load($uid, $akt_ss->studiensemester_kurzbz);
if ($za_gd->uid)
{
echo 'Bereits eingetragen';
}
else if (!$zeitaufzeichnung_gd->save())
{
echo $zeitaufzeichnung_gd->errormsg;
}
}
if (isset($_GET['selbstverwaltete-pause']) && !empty($_GET['submit']))
{
$selbstverwaltete_pause = ($_GET['selbstverwaltete-pause'] == 'yes') ? true : false;
$zeitaufzeichnung_gd = new Zeitaufzeichnung_gd();
$zeitaufzeichnung_gd->uid = $uid;
$zeitaufzeichnung_gd->studiensemester_kurzbz = $next_ss->studiensemester_kurzbz;
$zeitaufzeichnung_gd->selbstverwaltete_pause = $selbstverwaltete_pause;
$za_gd = new Zeitaufzeichnung_gd();
$za_gd->load($uid, $next_ss->studiensemester_kurzbz);
if ($za_gd->uid)
{
echo 'Bereits eingetragen';
}
else if (!$zeitaufzeichnung_gd->save())
{
echo $zeitaufzeichnung_gd->errormsg;
}
}
// Zeitwuensche speichern
if (isset($_GET['type']) && $_GET['type'] == 'save')
{
// Letzte Zeitwunschgueltigkeit (ZWG) holen
$zwg = new Zeitwunsch_gueltigkeit();
$zwg->getByUID($uid, 1);
$lastZwg = !empty($zwg->result) ? $zwg->result[0] : null;
// Check, ob letzte ZWG im nächsten Studiensemester startet. D.h. es existiert ein neuer Zeitwunsch in der Zukunft
$lastZwgStartsNextSemester = (!is_null($lastZwg) && $lastZwg->von >= $next_ss->start) ? true : false;
$zw_zwg_id = null; // ZWG ID, die zum Speichern / Updaten des Zeitwunsches uebergeben wird
// Wenn allererster Zeitwunsch, also noch keine ZWG vorhanden
if (is_null($lastZwg))
{
// Wenn ZW fuer naechstes Studiensemester ist
if ($selected_ss == $next_ss->studiensemester_kurzbz)
{
// Neue ZWG setzen: von = Start nächstes Studiensemester, bis offen lassen
$zw_zwg_id = insertZWG($uid, $next_ss->start, null);
}
// Wenn Zeitwunsch fuer aktuelles Studiensemester ist
if ($selected_ss == $akt_ss->studiensemester_kurzbz)
{
// Neue ZWG setzen: von = now(), bis offen lassen
$zw_zwg_id = insertZWG($uid, (new DateTime())->format('Y-m-d H:i:s'), null);
}
}
// Wenn mindestens eine ZWG vorhanden
if (!is_null($lastZwg))
{
// Wenn Zeitwunsch fuer naechstes Studiensemester ist
if ($selected_ss == $next_ss->studiensemester_kurzbz)
{
// Wenn naechstes Studiensemester schon eine eigene ZWG hat
if ($lastZwgStartsNextSemester)
{
// Nur Zeitwunsch dieser ZWG updaten
$zw_zwg_id = $lastZwg->zeitwunsch_gueltigkeit_id;
}
// Wenn naechstes Studiensemester keine eigene ZWG hat
if (!$lastZwgStartsNextSemester)
{
// Fuer bisher letzte ZWG ein Endedatum setzen: bis = Ende aktuelles Studiensemester
updateZWG($uid, $lastZwg->zeitwunsch_gueltigkeit_id, $akt_ss->ende);
// Neue ZWG setzen: von = Start nächstes Studiensemester, bis offen lassen
$zw_zwg_id = insertZWG($uid, $next_ss->start, null);
}
}
// Wenn Zeitwunsch fuer aktuelles Studiensemester ist
if ($selected_ss == $akt_ss->studiensemester_kurzbz)
{
/**
* Check, ob aktuelles Studiensemester eine ZWG hat.
* Wenn die allererste ZWG fuer das naechste Studiensemester erstellt wurde, dann hat das
* aktuelle Studiensemester noch keine ZWG.
* */
$zwg = new Zeitwunsch_gueltigkeit();
$zwg->getByStudiensemester($uid, $akt_ss->studiensemester_kurzbz);
$akt_ss_zwg = !empty($zwg->result) ? $zwg->result[0] : null;
// Keine ZWG fuer aktuelles Studiensemester vorhanden.
// Da eine ZWG ID aber schon vorhanden: USER HAT ERSTMALIG MIT NAECHSTEM STUDIENSEMESTER EINTRAG BEGONNEN
if (is_null($akt_ss_zwg))
{
// Neue ZWG setzen: von = now(), ende = Ende aktuelles Studiensemester
$zw_zwg_id = insertZWG($uid, (new DateTime())->format('Y-m-d H:i:s'), $akt_ss->ende);
}
// ZWG für aktuelles Studiensemester ist vorhanden --> SPLIT AKTUELLE STUDIENSEMESTER
if ((!is_null($akt_ss_zwg)))
{
// Wenn am selben Tag schon neue ZWG gespeichert wurde, keine neue ZWG anlegen, sondern diese nur updaten
// Verhindert mehrfache Eintraege, wenn oefters zwischengespeichert wird.
if ((new DateTime($akt_ss_zwg->von))->format('Y-m-d') == (new Datetime())->format('Y-m-d'))
{
updateZWG($uid, $akt_ss_zwg->zeitwunsch_gueltigkeit_id, $akt_ss_zwg->bis);
$zw_zwg_id = $akt_ss_zwg->zeitwunsch_gueltigkeit_id;
}
else
{
// Neue ZWG setzen: von = now(), bis = Bis von ZWG des aktuellen Studiensemesters uebernehmen:
// -> bis ist entweder Ende aktuelles Studiensemester (wenn ZWG für nächstes Studiensemester vorhanden ist)
// -> sonst ist bis null
$zw_zwg_id = insertZWG($uid, (new DateTime())->format('Y-m-d H:i:s'), $akt_ss_zwg->bis);
// Fuer bisher letzte ZWG das Endedatum auf gestern setzen: bis = gestern
// NOTE: MUSS nach dem insert sein
updateZWG($uid, $akt_ss_zwg->zeitwunsch_gueltigkeit_id, (new DateTime('yesterday'))->format('Y-m-d H:i:s'));
}
}
}
}
// Insert Zeitwunsch mit Zeitwunsch ZWG ID
if (is_numeric($zw_zwg_id))
{
$zw = new zeitwunsch();
for ($t=1;$t<7;$t++)
@@ -83,83 +252,169 @@ if (isset($type) && $type=='save')
$zw->gewicht = $gewicht;
$zw->updateamum = date('Y-m-d H:i:s');
$zw->updatevon = $uid;
$zw->zeitwunsch_gueltigkeit_id = $zw_zwg_id;
if (!$zw->exists($uid, $stunde, $t))
if (!$zw->exists($uid, $zw_zwg_id, $stunde, $t))
{
$zw->new = true;
$zw->insertamum = date('Y-m-d H:i:s');
$zw->insertvon = $uid;
}
else
{
$zw->new = false;
}
if(!$zw->save())
echo $zw->errormsg;
}
}
}
// Wenn speichern möglich ist, dann hat der Lektor entweder keine LVs zugeteilt oder hat aktiv die Bearbeitungssperre
// deaktiviert. Bearbeitungssperre wird gesetzt, wenn isGesperrt true ist. Deshalb hier mit false überschreiben.
$isGesperrt = false;
}
$zw = new zeitwunsch();
if(!$zw->loadPerson($uid))
die($zw->errormsg);
/**
* Zeitwunschgueltigkeit fuer Tabelle holen.
* Der Zeitwunsch wird anhand der Zeitwunschgueltigkeit (ZWG) des gewaehlten Studiensemesters ermittelt.
* Das Studiensemester wird, je nach Vorhandensein, in dieser Reihenfolge herangezogen:
* 1. Wenn in Dropdown ausgewaehlt: Vergangenes Studiensemester (zum Kopieren von Zeitwunsch)
* 2. Wenn in Dropdown ausgewaehlt: Aktuelles Studiensemester
* 3: Default: Nächstes Studiensemesters
*/
$zwg = new zeitwunsch_gueltigkeit();
$tmp_ss = is_null($selected_past_ss) ? $selected_ss : $selected_past_ss;
$zwg->getByStudiensemester($uid, $tmp_ss);
$zwg_id = !empty($zwg->result[0]) ? $zwg->result[0]->zeitwunsch_gueltigkeit_id : null; //null, wenn noch kein ZW
/**
* Zeitwunsch fuer Tabelle holen
* Wenn noch kein Zeitwunsch vorhanden, bleibt die Zeitwunsch Instanz leer
* */
$zw = new zeitwunsch();
if (!$zw->loadByZWG($uid, $zwg_id))
{
die($zw->errormsg);
}
$wunsch = $zw->zeitwunsch;
// Personendaten
$person = new benutzer();
if(!$person->load($uid))
die($person->errormsg);
$ma = new mitarbeiter($uid);
$fixangestellt = $ma->fixangestellt;
// Nächstes Studiensemester
$ss = new Studiensemester();
$ss->getNextStudiensemester();
$next_ss = $ss->studiensemester_kurzbz;
$current_ss = $ss->getakt();
// Erklärung zu Pausen bei geteilten Arbeitszeiten speichern
if (isset($_GET['selbstverwaltete-pause-akt']) && !empty($_GET['submit-akt']))
/**
* Init ZWG Objekt zum Erstellen einer neuen ZWG
*/
function insertZWG($uid, $von, $bis)
{
$selbstverwaltete_pause = ($_GET['selbstverwaltete-pause-akt'] == 'yes') ? true : false;
$zeitaufzeichnung_gd = new Zeitaufzeichnung_gd();
$zeitaufzeichnung_gd->uid = $uid;
$zeitaufzeichnung_gd->studiensemester_kurzbz = $current_ss;
$zeitaufzeichnung_gd->selbstverwaltete_pause = $selbstverwaltete_pause;
$za_gd = new Zeitaufzeichnung_gd();
$za_gd->load($uid, $current_ss);
if ($za_gd->uid)
$zwg = new Zeitwunsch_gueltigkeit();
$zwg->new = true;
$zwg->mitarbeiter_uid = $uid;
$zwg->von = $von;
$zwg->bis = $bis;
$zwg->insertvon = $uid;
if ($zwg->save())
{
echo 'Bereits eingetragen';
return $zwg->zeitwunsch_gueltigkeit_id;
}
else if (!$zeitaufzeichnung_gd->save())
else
{
echo $zeitaufzeichnung_gd->errormsg;
die($zwg->errormsg);
}
}
if (isset($_GET['selbstverwaltete-pause']) && !empty($_GET['submit']))
/**
* Init ZWG Objekt zum Updaten einer bestehenden ZWG
*/
function updateZWG($uid, $zwg_id, $bis)
{
$selbstverwaltete_pause = ($_GET['selbstverwaltete-pause'] == 'yes') ? true : false;
$zwg = new Zeitwunsch_gueltigkeit();
$zwg->new = false;
$zwg->zeitwunsch_gueltigkeit_id = $zwg_id;
$zwg->mitarbeiter_uid = $uid;
$zwg->bis = $bis;
$zwg->updatevon = $uid;
$zeitaufzeichnung_gd = new Zeitaufzeichnung_gd();
$zeitaufzeichnung_gd->uid = $uid;
$zeitaufzeichnung_gd->studiensemester_kurzbz = $next_ss;
$zeitaufzeichnung_gd->selbstverwaltete_pause = $selbstverwaltete_pause;
$za_gd = new Zeitaufzeichnung_gd();
$za_gd->load($uid, $next_ss);
if ($za_gd->uid)
if (!$zwg->save())
{
echo 'Bereits eingetragen';
}
else if (!$zeitaufzeichnung_gd->save())
{
echo $zeitaufzeichnung_gd->errormsg;
die($zwg->errormsg);
}
return;
}
/**
* Check, ob Lektor bereits zugewiesene LVs hat
* @param $uid
* @param $studiensemester_kurzbz
* @return bool|void
*/
function checkIsVerplant($uid, $studiensemester_kurzbz)
{
$lstd = new Lehrstunde();
if (!$lstd->getStundenplanData('stundenplandev', null, $studiensemester_kurzbz, null, $uid, null, true))
{
die($lstd->errormsg);
}
return empty($lstd->result) ? false : true;
}
/**
* Get Studiengaenge of STG assigend to LVs, to which lector is alredy assigend in
* the given Studiensemester.
*
* @param $uid
* @param $studiensemester_kurzbz
* @return array|void
*/
function getStgOfVerplant($uid, $studiensemester_kurzbz)
{
$stg_arr = array(); // Mail data for Studiengang
// Get Stundenplan entries of lector of Studiensemester concerned by Zeitwunschgueltigkeit
$lstd = new Lehrstunde();
if (!$lstd->getStundenplanData(
'stundenplandev',
null,
$studiensemester_kurzbz,
null,
$uid,
null,
true)) //...but only from now on
{
die($lstd->errormsg);
}
// Loop through Stundenplan entries
foreach ($lstd->result as $row)
{
// Get LE of Stundenplan entry
$le = new Lehreinheit($row->lehreinheit_id);
// GET LV by LE of Stundenplan entry
$lv = new Lehrveranstaltung($le->lehrveranstaltung_id);
// Build Studiengang array
$stg_arr[] = $lv->studiengang_kz;
}
// Make Studiengang array unique
return array_unique($stg_arr);
}
/**
* Get Studiengang eMail Addresses.
* @param $stgKz_arr // Studiengang Kennzeichen Array
* @return array
*/
function getStgMail($stgKz_arr)
{
$stgMail_arr = array();
foreach($stgKz_arr as $stgKz)
{
$stg = new Studiengang($stgKz);
$stgMail_arr[]= $stg->email;
}
return $stgMail_arr;
}
?>
@@ -168,8 +423,10 @@ if (isset($_GET['selbstverwaltete-pause']) && !empty($_GET['submit']))
<head>
<title><?php echo $p->t('zeitwunsch/zeitwunsch');?></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="../../../skin/style.css.php" type="text/css">
<link href="../../../skin/flexcrollstyles.css" rel="stylesheet" type="text/css" />
<link rel="stylesheet" href="../../../vendor/twbs/bootstrap/dist/css/bootstrap.min.css" type="text/css">
<script type="text/javascript" src="../../../vendor/jquery/jqueryV1/jquery-1.12.4.min.js"></script>
<script type="text/javascript" src="../../../vendor/twbs/bootstrap/dist/js/bootstrap.min.js"></script>
<script type="text/javascript">
// Pruefen ob nur die erlaubten Werte verwendet wurden
function checkvalues()
@@ -194,78 +451,178 @@ if (isset($_GET['selbstverwaltete-pause']) && !empty($_GET['submit']))
else
return true;
}
$(function() {
// Bearbeitung deaktivieren, wenn Lektor zugewiesene LV im Studiensemester hat
const isGesperrt = $('input[name=isGesperrt]').val();
if (isGesperrt == 'true')
{
$('input[name=radioZWG]').attr("disabled", true);
$('input[name=submit]').attr("disabled", true);
}
// Bearbeitung aktivieren, wenn Lektor Aktivierungslink klickt
$('#bearbeitung-aktivieren').click(function(){
$('input[name=radioZWG]').attr("disabled", false);
$('input[name=submit]').attr("disabled", false);
$('#divChangeZWG').removeClass('hidden');
$('#divisGesperrt').addClass('hidden');
});
// Bei Wechsel von Studiensemester die Seite mit GET params neu laden
$('#stsem').change(function(){
let studiensemester = $('option:selected', this).val();
window.location = '?stsem=' + studiensemester;
});
// Bei Wechsel zwischen Zeitwunsch aendern / kopieren
$("input[name='radioZWG']").change(function(){
if ($(this).val() == 'copy')
{
$('#divCopyZWG').removeClass('hidden');
$('#divChangeZWG').addClass('hidden');
}
else
{
$('#divCopyZWG').addClass('hidden');
$('#divChangeZWG').removeClass('hidden');
}
});
// Bei Wahl von vergangenem Studiensemester die Seite mit GET params neu laden
$('#pastStsem').change(function(){
let stsem = $('#stsem option:selected').val()
let pastStsem = $('option:selected', this).val();
window.location = '?stsem='+ stsem + '&pastStsem=' + pastStsem;
});
// Alle Werte ind Zeitwunschtabelle auf 1 setzen
$('#empty-table').click(function(){
$('#table-zeitwunsch tr td input').each(function() {
$(this)
.val(1)
.parent().css('background-color', '#CCFFCC');
});
})
// Aenderungen in Zeitwunschtabelle zurücknehmen -> Seite neu laden
$('#reload-table').click(function(){
let studiensemester = $('option:selected', '#stsem').val();
window.location = '?stsem=' + studiensemester;
})
});
</script>
</head>
<body>
<div class="flexcroll" style="outline: none;">
<table>
<table class="table">
<?php if($fixangestellt && (defined('CIS_ZEITWUNSCH_GD') && CIS_ZEITWUNSCH_GD)): ?>
<!--Erklärung zu Pausen bei geteilten Arbeitszeiten-->
<tr>
<td>
<h1>Zustimmung zur Verplanung in geteilter Arbeitszeit</h1>
<h3>Zustimmung zur Verplanung in geteilter Arbeitszeit</h3>
<form action="">
<p>
<?php
echo $p->t('zeitwunsch/geteilteArbeitszeit');
echo '<br><br>';
$gd = new zeitaufzeichnung_gd();
$gd->load($uid, $current_ss);
$gd->load($uid, $akt_ss->studiensemester_kurzbz);
if ( ! $gd->uid )
{
echo '<br><br><h3>Zustimmung für '.$current_ss.': ';
echo '<div class="row">';
echo '<div class="col-lg-3 col-md-4 col-xs-4">';
echo '<div class="radio">';
echo '<b>Zustimmung für '.$akt_ss->studiensemester_kurzbz.': ';
echo '<label class="radio-inline">';
echo '<input type="radio" name="selbstverwaltete-pause-akt" value="yes">ja';
echo '</label>';
echo '<label class="radio-inline">';
echo '<input type="radio" name="selbstverwaltete-pause-akt" value="no">nein';
echo '</h3><br><br><input type="submit" name="submit-akt" value="'.$p->t('global/speichern').'" style="float: right"><br>';
echo '</label>';
echo '</div>';
echo '</div>';
echo '<div class="col-lg-2 col-md-3 col-xs-4">';
echo '</b><input type="submit" class="btn btn-default btn-block" name="submit-akt" value="'.$p->t('global/speichern').'" style="float: right"><br>';
echo '</div>';
echo '<div class="col-lg-7 col-md-5 col-xs-4">';
echo '</div>';
echo '</div>';
}
else
{
$zustimmung = ($gd->selbstverwaltete_pause) ? ' erteilt' : 'abgelehnt';
echo '<br><br><h3>Zustimmung für '.$current_ss.': '.$zustimmung.' am '.$datum_obj->formatDatum($gd->insertamum,'d.m.Y H:i:s').'</h3>';
echo '<br><br><b>Zustimmung für '.$akt_ss->studiensemester_kurzbz.': '.$zustimmung.' am '.$datum_obj->formatDatum($gd->insertamum,'d.m.Y H:i:s').'</b>';
}
$gd = new zeitaufzeichnung_gd();
$gd->load($uid, $next_ss);
$gd->load($uid, $next_ss->studiensemester_kurzbz);
if ( ! $gd->uid )
{
echo '<h3>Zustimmung für '.$next_ss.': ';
echo '<div class="row">';
echo '<div class="col-lg-3 col-md-4 col-xs-4">';
echo '<div class="radio">';
echo '<b>Zustimmung für '.$next_ss->studiensemester_kurzbz.': ';
echo '<label class="radio-inline">';
echo '<input type="radio" name="selbstverwaltete-pause" value="yes">ja';
echo '</label>';
echo '<label class="radio-inline">';
echo '<input type="radio" name="selbstverwaltete-pause" value="no">nein';
echo '</h3><br><br><input type="submit" name="submit" value="'.$p->t('global/speichern').'" style="float: right"><br>';
echo '</label>';
echo '</div>';
echo '</div>';
echo '<div class="col-lg-2 col-md-3 col-xs-4">';
echo '</b><input type="submit" class="btn btn-default btn-block" name="submit" value="'.$p->t('global/speichern').'" style="float: right">';
echo '</div>';
echo '<div class="col-lg-7 col-md-5 col-xs-4">';
echo '</div>';
echo '</div>';
}
else
{
$zustimmung = ($gd->selbstverwaltete_pause) ? ' erteilt' : 'abgelehnt';
echo '<h3>Zustimmung für '.$next_ss.': '.$zustimmung.' am '.$datum_obj->formatDatum($gd->insertamum,'d.m.Y H:i:s').'</h3>';
echo '<br><b>Zustimmung für '.$next_ss->studiensemester_kurzbz.': '.$zustimmung.' am '.$datum_obj->formatDatum($gd->insertamum,'d.m.Y H:i:s').'</b>';
}
//var_dump($gd);
?>
</p>
</form>
<br><hr>
</td>
</tr>
<?php endif; ?>
<tr>
<td>
<h1><?php echo $p->t('zeitwunsch/zeitwunsch');?></h1>
<!--Auskommentiert von Kindl, da sich der Hilfetext nicht vom Anleitungtext auf der Seite unterscheidet
<td class="ContentHeader" align="right">
<A onclick="window.open('zeitwunsch_help.php','Hilfe', 'height=320,width=480,left=0,top=0,hotkeys=0,resizable=yes,status=no,scrollbars=yes,toolbar=no,location=no,menubar=no,dependent=yes');" class="hilfe" target="_blank">
<font class="ContentHeader">
<?php echo $p->t('zeitwunsch/help')?>&nbsp;
</font>
</A>
</td>-->
<?php
echo "<h2>".$p->t('zeitwunsch/zeitwunschVon')." $person->titelpre $person->vorname $person->nachname $person->titelpost<br/></h2>";
echo $p->t('zeitwunsch/tragenSieInDiesesNormwochenraster')."<br/><br/>";
echo '<FORM name="zeitwunsch" method="post" action="zeitwunsch.php?type=save" onsubmit="return checkvalues()">
<TABLE>
<TR>';
// FORM Begin
echo '<form name="zeitwunsch" method="post" action="zeitwunsch.php?stsem='. $selected_ss. '&type=save" onsubmit="return checkvalues()">';
echo '<input type="hidden" name="uid" value="'. $uid. '">';
echo '<input type="hidden" name="isGesperrt" value="'. json_encode($isGesperrt). '">';
// Mein Zeitwunsch-Semesterplan Dropdown, Default = naechstes Studiensemester
$next_ss_selected = $next_ss->studiensemester_kurzbz == $selected_ss ? 'selected' : '';
$akt_ss_selected = $akt_ss->studiensemester_kurzbz == $selected_ss ? 'selected' : '';
echo '<h3>'. $p->t('zeitwunsch/gueltigIm');
echo '<SELECT name="stsem" id="stsem">';
echo '<OPTION value="'.$next_ss->studiensemester_kurzbz.'"'. $next_ss_selected. '>'. $next_ss->studiensemester_kurzbz.'</OPTION>';
echo '<OPTION value="'.$akt_ss->studiensemester_kurzbz.'"'. $akt_ss_selected. '>'. $akt_ss->studiensemester_kurzbz.'</OPTION>';
echo '</SELECT>';
echo '</h3><br>';
// Tabelle Zeitwunsch-Semesterplan
echo '<table id="table-zeitwunsch" class="table table-default table-condensed table-bordered">';
// Tabelle Kopfzeile
echo '<tr>';
echo '<th>'.$p->t('global/stunde').'<br>'.$p->t('global/beginn').'<br>'.$p->t('global/ende').'</th>';
for ($i=0;$i<$num_rows_stunde; $i++)
{
@@ -276,9 +633,8 @@ if (isset($_GET['selbstverwaltete-pause']) && !empty($_GET['submit']))
$stunde=$db->db_result($result_stunde,$i,'"stunde"');
echo "<th><div align=\"center\">$stunde<br>$beginn<br>$ende</div></th>";
}
echo '</TR>';
echo '</tr>';
// Tabelle Zellen
for ($j=1; $j<7; $j++)
{
echo '<TR><TD>'.$tagbez[$lang->index][$j].'</TD>';
@@ -287,41 +643,129 @@ if (isset($_GET['selbstverwaltete-pause']) && !empty($_GET['submit']))
if (isset($wunsch[$j][$i+1]))
$index=$wunsch[$j][$i+1];
else
$index=1;
//$id='bgcolor';
//$id.=$index+3;
$index=1; // Defaultwert, wenn kein Zeitwunsch vorhanden
$bgcolor=$cfgStdBgcolor[$index+3];
echo '<TD style="padding-left: 5px; padding-right:5px;" align="center" bgcolor="'.$bgcolor.'"><INPUT align="right" type="text" name="wunsch'.$j.'_'.$i.'" size="1" maxlength="2" value="'.$index.'"></TD>';
}
echo '</TR>';
}
echo '</table>';
echo '
</TABLE><br>
<INPUT type="hidden" name="uid" value="'.$uid.'">
<INPUT type="submit" name="Abschicken" value="'.$p->t('global/speichern').'">
';
// Zeitwunsch aendern / kopieren
echo '<div class="row">';
echo '<div class="col-xs-12">';
echo '<span>'. $p->t('zeitwunsch/erklaerungstext'). '</span><br>';
echo '<hr>';
echo '</div>'; // end col-xs-12
echo '</div>'; // end row
if($zw->updateamum!='')
echo '<div class="row">';
echo '<div class="col-xs-9">';
// Radiobuttons aendern / kopieren
$radioChangeChecked = is_null($selected_past_ss) ? 'checked' : '';
$radioCopyChecked = !is_null($selected_past_ss) ? 'checked' : '';
echo '<div class="radio">';
echo '<span class="text-uppercase"><b>'.$p->t('zeitwunsch/fuer', array($selected_ss)). '</b></span>';
echo '<label class="radio-inline">';
echo '<b><input type="radio" name="radioZWG" id="radioChangeZWG" value="change" '. $radioChangeChecked. '> '. $p->t('zeitwunsch/kopieren'). '</b>';
echo '</label>';
echo '<label class="radio-inline">';
echo '<b><input type="radio" name="radioZWG" id="radioCopyZWG" value="copy" '. $radioCopyChecked. '> '. $p->t('zeitwunsch/aendern'). '</b>';
echo '</label>';
if ($isGesperrt)
{
echo '<font size="x-small">'.$p->t('zeitwunsch/letzteAenderung').': '.$datum_obj->formatDatum($zw->updateamum,'d.m.Y H:i:s').' '.$p->t('zeitwunsch/von').' '.$zw->updatevon.'</font>';
echo '<span class="label label-danger valign-top">'.$p->t('zeitwunsch/stundenBereitsVerplant', array($selected_ss)). '</span>';
}
echo '</div>';
echo '</div>'; // end col-xs-9
echo '<div class="col-xs-3" class="pull-left">';
echo '<span><small><a id="empty-table" style="cursor: pointer">'. $p->t('zeitwunsch/werteAuf1setzen'). '</a></small></span><br>';
echo '<span><small><a id="reload-table" style="cursor: pointer">'. $p->t('global/aenderungenZuruecksetzen'). '</a></small></span><br><br>';
echo '</div>'; // end col-xs-3
$divChangeHidden = !is_null($selected_past_ss) || $isGesperrt ? 'hidden' : '';
$divCopyHidden = is_null($selected_past_ss) || $isGesperrt ? 'hidden' : '';
$divisGesperrtHidden = $isGesperrt ? '' : 'hidden';
echo '<div id="divChangeZWG" class="'. $divChangeHidden . '">';
echo '<div class="col-xs-8 col-lg-7">';
echo '<span>' . $p->t('zeitwunsch/tragenSieInDiesesNormwochenraster') .'</span>';
echo '</div>'; // end col
echo '<div class="col-xs-1 col-lg-2">';
// BLANK
echo '</div>'; // end col
echo '</div>'; // end divChangeZWG
echo '<div id="divCopyZWG" class="'. $divCopyHidden . '">';
echo '<div class="col-xs-7">';
echo '<span>' . $p->t('zeitwunsch/kopierenText') .'</span>';
echo '</div>'; // end col
$studiensemester = new Studiensemester();
$tmp_ss = $selected_ss == $akt_ss->studiensemester_kurzbz ? $studiensemester->getPrevious() : $akt_ss->studiensemester_kurzbz;
$studiensemester->load($tmp_ss);
$zwg = new Zeitwunsch_gueltigkeit();
$zwg->getByUID($uid, 4, true, $studiensemester->ende);
$past_zwg_arr = $zwg->result;
echo '<div class="col-xs-2">';
echo '<select name="pastStsem" id="pastStsem" class="form form-control">';
echo '<OPTION value="">-- '. $p->t("global/bitteWaehlen").' --</OPTION>';
foreach($past_zwg_arr as $row)
{
$selected = $row->studiensemester_kurzbz == $selected_past_ss ? 'selected' : '';
echo '<option value="'. $row->studiensemester_kurzbz. '" '. $selected. '>'. $row->studiensemester_kurzbz. '</option>';
}
echo '</select>';
echo '</div>'; // end col
echo '</div>'; // end divCopyZWG
echo '<div id="divisGesperrt" class="'. $divisGesperrtHidden . '">';
// Mail Adressen der Studiengaenge, wo Lektor ueber eine LV bereits verplant ist
$stgKzOfVerplant_arr = getStgOfVerplant($uid, $selected_ss);
$stgMail_arr = getStgMail($stgKzOfVerplant_arr);
echo '<div class="col-xs-9">';
echo '<div class="panel panel-danger">';
echo '<div class="panel-body">';
echo '<span class="text-danger"><b>'. $p->t("zeitwunsch/bearbeitungDeaktiviert"). ': </b></span>';
echo $p->t("zeitwunsch/bearbeitungDeaktiviertText", array($selected_ss, implode($stgMail_arr, '; '))). '
<a id="bearbeitung-aktivieren" style="cursor:pointer;">'. $p->t("zeitwunsch/bearbeitungAktivieren"). '</a><br>
<span><b>'. $p->t("zeitwunsch/kompetenzfeldWirdInformiert") . '</b></span>
</span>';
echo '</div>'; // end panel heading
echo '</div>'; // end panel
echo '</div>'; // end col
echo '</div>'; // end divisGesperrt
// Speichern - Button
echo '<div class="col-xs-3">';
echo '<input class="btn btn-default" style="width: 200px;" type="submit" name="submit" value="'.$p->t('global/speichern').'">';
echo '</div>';
echo '</div>'; // end row
echo '<hr>';
?>
</form>
</FORM>
<!-- Zeitwunsch Erklaerung -->
<div class="row">
<div class="col-xs-9">
<span><b><?php echo $p->t('zeitwunsch/folgendePunkteSindZuBeachten');?>:</b></span>
<UL class="unordered-list">
<LI><?php echo $p->t('zeitwunsch/verwendenSieDenWertNur');?></LI>
<LI><?php echo $p->t('zeitwunsch/sperrenSieNurTermine');?></LI>
<LI><?php echo $p->t('zeitwunsch/esSolltenFuerJedeStunde');?></LI>
</UL><br>
</div>
<div class="col-xs-3">
<br>
<h2><?php echo $p->t('zeitwunsch/erklärung');?>:</h2>
<?php
$href = "<a href='zeitsperre_resturlaub.php' class='Item'>";
echo $p->t('zeitwunsch/formularZumEintragenDerZeitsperren', array($href));
?>
</a>
<P><?php echo $p->t('zeitwunsch/kontrollierenSieIhreZeitwuensche');?>!<BR><BR>
</P>
<TABLE align=center>
<TABLE class="table table-condensed table-default table-bordered" align=center>
<TR>
<TH><B><?php echo $p->t('zeitwunsch/wert');?></B></TH>
<TH>
@@ -329,13 +773,13 @@ if (isset($_GET['selbstverwaltete-pause']) && !empty($_GET['submit']))
</TH>
</TR>
<TR>
<TD>
<TD style="background-color: <?php echo $cfgStdBgcolor[5]; ?>">
<DIV align="right">2</DIV>
</TD>
<TD>&nbsp;&nbsp;<?php echo $p->t('zeitwunsch/hierMoechteIchUnterrichten');?></TD>
</TR>
<TR>
<TD>
<TD style="background-color: <?php echo $cfgStdBgcolor[6]; ?>">
<DIV align="right">1</DIV>
</TD>
<TD>&nbsp;&nbsp;<?php echo $p->t('zeitwunsch/hierKannIchUnterrichten');?></TD>
@@ -347,28 +791,35 @@ if (isset($_GET['selbstverwaltete-pause']) && !empty($_GET['submit']))
<TD>keine Bedeutung</TD>
</TR>-->
<TR>
<TD>
<TD style="background-color: <?php echo $cfgStdBgcolor[2]; ?>">
<DIV align="right">-1</DIV>
</TD>
<TD>&nbsp;&nbsp;<?php echo $p->t('zeitwunsch/nurInNotfaellen');?></TD>
</TR>
<TR>
<TD>
<TD style="background-color: <?php echo $cfgStdBgcolor[1]; ?>">
<DIV align="right">-2</DIV>
</TD>
<TD>&nbsp;&nbsp;<?php echo $p->t('zeitwunsch/hierAufGarKeinenFall');?></TD>
</TR>
</TABLE>
<h2><?php echo $p->t('zeitwunsch/folgendePunkteSindZuBeachten');?>:</h2>
<OL>
<LI><?php echo $p->t('zeitwunsch/verwendenSieDenWertNur');?></LI>
<LI><?php echo $p->t('zeitwunsch/sperrenSieNurTermine');?></LI>
<LI><?php echo $p->t('zeitwunsch/esSolltenFuerJedeStunde');?></LI>
</OL>
<P><?php echo $p->t('lvplan/fehlerUndFeedback');?> <A class="Item" href="mailto:<?php echo MAIL_LVPLAN;?>"><?php echo $p->t('lvplan/lvKoordinationsstelle');?></A>.</P>
</div>
</div>
<!-- Zeitsperre -->
<div class="row">
<div class="col-xs-12">
<h4><?php echo $p->t('zeitsperre/zeitsperren');?>:</h4>
<?php
$href = "<a href='zeitsperre_resturlaub.php' class='Item'>";
echo $p->t('zeitwunsch/formularZumEintragenDerZeitsperren', array($href));
?></a>
</div>
</div>
</td>
</tr>
</table>
</table>
</div>
</body>
</html>
+7
View File
@@ -313,5 +313,12 @@
},
"config": {
"bin-dir": "vendor/bin"
},
"require-dev": {
"squizlabs/php_codesniffer": "3.6.*",
"phpmd/phpmd": "2.*",
"phpmetrics/phpmetrics": "2.*",
"sebastian/phpcpd": "3.*"
}
}
Generated
+1112 -8
View File
File diff suppressed because it is too large Load Diff
+9
View File
@@ -254,4 +254,13 @@ define('BIS_STANDORTCODE_LEHRGAENGE', '0');
// bPk Abfrage
define('BPK_FUER_ALLE_BENUTZER_ABFRAGEN', false);
// Bei folgenden Buchungstypen wird ein Anlegen geprüft ob bereits ein Eintrag für diesen Typ vorhanden ist im selben
// Semester und ggf ein Hinweis ausgegeben
define('FAS_DOPPELTE_BUCHUNGSTYPEN_CHECK', serialize(
array('StudiengebuehrAnzahlung', 'Studiengebuehr', 'StudiengebuehrRestzahlung', 'OEH')
));
// Spezialnoten die am Zeunigs und Diplomasupplement ignoriert werden
define('ZEUGNISNOTE_NICHT_ANZEIGEN',serialize(array('iar', 'nz')));
?>
+4 -1
View File
@@ -239,7 +239,7 @@ foreach($addon_obj->result as $addon)
<menupopup id="menu-properties-popup">
<?php
$stsemobj = new studiensemester();
$stsemobj->getAll();
$stsemobj->getAll('desc');
foreach ($stsemobj->studiensemester as $stsem)
{
echo "
@@ -934,6 +934,9 @@ foreach($addon_obj->result as $addon)
oncommand="studiensemesterChange('', 1)"
/>
</statusbarpanel>
<statusbarpanel>
<toolbarbutton id="statusbarpanel-semester-aktuell" label="Aktuelles Studiensemester" oncommand="getStudiensemesterAktuell()"/>
</statusbarpanel>
<statusbarpanel id="statusbarpanel-db_table" label="<?php echo DB_NAME; ?>"/>
<statusbarpanel id="statusbarpanel-text" label="<?php echo htmlspecialchars($error_msg); ?>" flex="4" crop="right" />
<statusbarpanel id="progress-panel" class="statusbarpanel-progress">
@@ -120,6 +120,10 @@ echo "<?xml-stylesheet href=\"".APP_ROOT."content/bindings.css\" type=\"text/css
class="sortDirectionIndicator"
sort="rdf:http://www.technikum-wien.at/zeugnisnote/rdf#studiengang_kz" onclick="LehrveranstaltungNotenTreeSort()"/>
<splitter class="tree-splitter"/>
<treecol id="lehrveranstaltung-noten-tree-verband" label="Verband" flex="2" hidden="true" persist="hidden, width, ordinal"
class="sortDirectionIndicator"
sort="rdf:http://www.technikum-wien.at/zeugnisnote/rdf#verband" />
<splitter class="tree-splitter"/>
<treecol id="lehrveranstaltung-noten-tree-studiengang_kz_lv" label="LehrveranstaltungStudiengang_kz" flex="1" hidden="true" persist="hidden, width, ordinal"
class="sortDirectionIndicator"
sort="rdf:http://www.technikum-wien.at/zeugnisnote/rdf#studiengang_kz_lv" onclick="LehrveranstaltungNotenTreeSort()"/>
@@ -151,6 +155,7 @@ echo "<?xml-stylesheet href=\"".APP_ROOT."content/bindings.css\" type=\"text/css
<treecell label="rdf:http://www.technikum-wien.at/zeugnisnote/rdf#lehrveranstaltung_id"/>
<treecell label="rdf:http://www.technikum-wien.at/zeugnisnote/rdf#studiengang"/>
<treecell label="rdf:http://www.technikum-wien.at/zeugnisnote/rdf#studiengang_kz"/>
<treecell label="rdf:http://www.technikum-wien.at/zeugnisnote/rdf#verband"/>
<treecell label="rdf:http://www.technikum-wien.at/zeugnisnote/rdf#studiengang_kz_lv"/>
<treecell label="rdf:http://www.technikum-wien.at/zeugnisnote/rdf#student_semester"/>
<treecell label="rdf:http://www.technikum-wien.at/zeugnisnote/rdf#punkte"/>
@@ -247,6 +247,10 @@ echo '<?xul-overlay href="'.APP_ROOT.'content/lvplanung/stpl-details-overlay.xul
/>
</row>
<row>
<label value="rdf:http://www.technikum-wien.at/lehreinheit-lvplan/rdf#zeitverfuegbarkeit"
tooltiptext="rdf:http://www.technikum-wien.at/lehreinheit-lvplan/rdf#lektor hat in diesem Studiensemester verfügbare Zeiten" class="tempus_lektor_verfuegbarezeit"/>
</row>
</rows>
</grid>
+2 -2
View File
@@ -681,12 +681,12 @@ while ($begin<=$ende)
{
$wunsch=new zeitwunsch();
if ($type=='lektor')
if ($wunsch->loadPerson($pers_uid,$datum))
if ($wunsch->loadPerson($pers_uid,montag($datum)))
$zeitwunsch=$wunsch->zeitwunsch;
else
$error_msg.=$wunsch->errormsg;
if ($aktion=='lva_single_search' || $aktion=='lva_multi_search')
if ($wunsch->loadZwLE($lva_id,$datum))
if ($wunsch->loadZwLE($lva_id,montag($datum)))
$zeitwunsch=$wunsch->zeitwunsch;
else
$error_msg.=$wunsch->errormsg;
+15
View File
@@ -2272,6 +2272,21 @@ if(!$error)
$errormsg = 'Fehlerhafte Parameteruebergabe';
}
}
elseif(isset($_POST['type']) && $_POST['type']=='checkbuchung')
{
$person_ids = explode(';',$_POST['person_ids']);
$exists = false;
if (defined('FAS_DOPPELTE_BUCHUNGSTYPEN_CHECK') && (in_array($_POST['buchungstyp_kurzbz'], unserialize(FAS_DOPPELTE_BUCHUNGSTYPEN_CHECK))))
{
$konto = new konto();
$exists = $konto->checkDoppelteBuchung($person_ids, $_POST['studiensemester_kurzbz'], $_POST['buchungstyp_kurzbz']);
}
if($exists)
$return = true;
else
$return = false;
}
elseif(isset($_POST['type']) && $_POST['type']=='neuebuchung')
{
//Speichert eine neue Buchung
+36
View File
@@ -3085,6 +3085,20 @@ function StudentKontoNeuSpeichern(dialog, person_ids, studiengang_kz)
return false;
}
var tocheck = <?php echo (defined('FAS_DOPPELTE_BUCHUNGSTYPEN_CHECK') && FAS_DOPPELTE_BUCHUNGSTYPEN_CHECK) ? 'true' : 'false' ?>;
var exists = false;
if (tocheck)
{
exists = StudentCheckBuchung(person_ids, studiensemester_kurzbz, buchungstyp_kurzbz, studiengang_kz);
}
if (exists)
{
if(!confirm('Die Buchung ist bereits vorhanden. Trotzdem fortfahren?'))
return false;
}
req.add('type', 'neuebuchung');
req.add('person_ids', person_ids);
@@ -3116,6 +3130,28 @@ function StudentKontoNeuSpeichern(dialog, person_ids, studiengang_kz)
return true;
}
}
// ****
// * Prüft ob die Buchung bereits vorhanden ist
// ****
function StudentCheckBuchung(person_ids, studiensemester_kurzbz, buchungstyp_kurzbz, studiengang_kz)
{
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
var url = '<?php echo APP_ROOT ?>content/student/studentDBDML.php';
var req = new phpRequest(url,'','');
req.add('type', 'checkbuchung');
req.add('person_ids', person_ids);
req.add('studiensemester_kurzbz', studiensemester_kurzbz);
req.add('buchungstyp_kurzbz', buchungstyp_kurzbz);
req.add('studiengang_kz', studiengang_kz);
var response = req.executePOST();
var val = new ParseReturnValue(response);
return(val.dbdml_return);
}
// *****
// * Druckt eine Zahlungsbestaetigung aus
+23
View File
@@ -334,6 +334,29 @@ function onLektorSelect(event)
}
}
function LektorFunktionLoadZeitwunschAdminUrl(){
var treeLektor = document.getElementById('tree-lektor');
var col = treeLektor.columns ? treeLektor.columns["uid"] : "uid";
try
{
var uid = treeLektor.view.getCellText(treeLektor.currentIndex,col);
}
catch(e)
{
}
if (uid == '' || uid == undefined)
{
alert('LektorIn auswählen, um Zeitwünsche einsehen zu können.');
return;
}
else
{
window.open('<?php echo APP_ROOT ?>vilesci/personen/zeitwunsch.php?uid=' + uid);
}
}
function loadURL(event)
{
var contentFrame = document.getElementById('contentFrame');
+2
View File
@@ -186,6 +186,8 @@ echo '<?xul-overlay href="'.APP_ROOT.'content/lvplanung/stpl-semester-overlay.xu
<vbox id="vbox-main">
<popupset>
<menupopup id="fasoverlay-lektor-tree-popup">
<menuitem label="Zeitwünsche einsehen" oncommand="LektorFunktionLoadZeitwunschAdminUrl();" />
<menuseparator />
<menuitem label="Mail senden" oncommand="LektorFunktionMail();" />
<menuseparator />
<menuitem label="Entfernen" oncommand="LektorFunktionDel();" />
-26
View File
@@ -53,8 +53,6 @@ class adresse extends basis_db
public $rechnungsadresse=false; // boolean
public $anmerkung; // string
public $co_name;
public $adressentyp;
public $bezeichnung;
public $bezeichnung_mehrsprachig;
/**
@@ -523,29 +521,5 @@ class adresse extends basis_db
}
return true;
}
public function getAdressentyp()
{
$qry = "SELECT * FROM public.tbl_adressentyp ORDER BY sort";
if($this->db_query($qry))
{
while($row = $this->db_fetch_object())
{
$obj = new adresse();
$obj->adressentyp = $row->adressentyp_kurzbz;
$obj->bezeichnung = $row->bezeichnung;
$this->result[] = $obj;
}
return true;
}
else
{
$this->errormsg = 'Fehler beim Laden der Daten';
return false;
}
}
}
?>
+41
View File
@@ -0,0 +1,41 @@
<?php
require_once(dirname(__FILE__) . '/basis_db.class.php');
class adressentyp extends basis_db {
public $result = array();
public $adressentyp;
public $bezeichnung;
public function __construct()
{
parent::__construct();
}
public function getAll()
{
$qry = "SELECT * FROM public.tbl_adressentyp ORDER BY sort";
if($this->db_query($qry))
{
while($row = $this->db_fetch_object())
{
$obj = new adressentyp();
$obj->adressentyp = $row->adressentyp_kurzbz;
$obj->bezeichnung = $row->bezeichnung;
$this->result[] = $obj;
}
return true;
}
else
{
$this->errormsg = 'Fehler beim Laden der Daten';
return false;
}
}
}
?>
+14
View File
@@ -1182,4 +1182,18 @@ function generateUniqueToken($length = 64)
return $token;
}
/**
* Berechnet die Anzahl von ganzen Tagen zwischen zwei Daten
* @param string $date1 Datum im Format '2022-02-22'.
* @param string $date2 Datum im Format '2022-04-22'.
* @return Anzahl der Tage
*/
function anzahlTage($date1, $date2)
{
$date1_ts = strtotime($date1);
$date2_ts = strtotime($date2);
$diff = $date2_ts - $date1_ts;
return round($diff / 86400);
}
?>
+8 -7
View File
@@ -2,13 +2,14 @@
// Hintergrundfarben fuer Tabellen beim Zeitwunsch
global $cfgStdBgcolor;
$cfgStdBgcolor=array();
$cfgStdBgcolor[0]="#CC0000";
$cfgStdBgcolor[1]="#FF2200";
$cfgStdBgcolor[2]="#FF9922";
$cfgStdBgcolor[3]="#FFFF55";
$cfgStdBgcolor[4]="#C0ECC3";
$cfgStdBgcolor[5]="#48FA66";
$cfgStdBgcolor[6]="#CCFFCC";
$cfgStdBgcolor[0]="#CC0000"; // rot
$cfgStdBgcolor[1]="#FF2200"; // hellrot
$cfgStdBgcolor[2]="#FF9922"; // orange
$cfgStdBgcolor[3]="#FFFF55"; // gelb
$cfgStdBgcolor[4]="#C0ECC3"; // hellgrün mittel
$cfgStdBgcolor[5]="#48FA66"; // dunkelgrün mittel
$cfgStdBgcolor[6]="#CCFFCC"; // hellgrün heller
$cfgStdBgcolor[7]="#59b359 "; // dunkelgrün dunkler
// Mehrsprachige Wochentage
global $tagbez;
+40 -9
View File
@@ -553,31 +553,38 @@ class konto extends basis_db
/**
* Überprüft, ob das Konto einer Person ausgeglichen ist, oder ob noch Zahlungen offen sind
* @param $person_id ID der Person, die geprüft werden soll
* @return true wenn ausgeglichen, false wenn Zahlungen offen, false mit errormsg wenn ein Fehler aufgetreten ist
* @param int $person_id ID der Person, die geprüft werden soll.
* @param bool $aktuelleBuchungenOnly True, wenn nur Zahlungen mit Buchungsdatum <= aktuelles Datum berücksichtigt werden sollen.
* @return boolean true wenn ausgeglichen, false wenn Zahlungen offen, false mit errormsg wenn ein Fehler aufgetreten ist
*/
public function checkKontostand($person_id)
public function checkKontostand($person_id, $aktuelleBuchungenOnly = false)
{
$qry="SELECT sum(betrag) as summe FROM public.tbl_konto WHERE person_id=".$this->db_add_param($person_id);
if($result=$this->db_query($qry))
$qry = "SELECT sum(betrag) as summe
FROM public.tbl_konto
WHERE person_id=".$this->db_add_param($person_id);
if($aktuelleBuchungenOnly)
$qry .= " AND buchungsdatum <= now()";
if ($result = $this->db_query($qry))
{
if($row=$this->db_fetch_object())
if ($row = $this->db_fetch_object())
{
if($row->summe>=0)
if ($row->summe >= 0)
return true;
else
return false;
}
else
{
$this->errormsg = "Fehler beim Holen der Daten";
return false;
$this->errormsg="Fehler beim Holen der Daten";
}
}
else
{
$this->errormsg = "Fehler bei der Datenbankabfrage";
return false;
$this->errormsg="Fehler bei der Datenbankabfrage";
}
}
@@ -957,6 +964,30 @@ class konto extends basis_db
return false;
}
}
public function checkDoppelteBuchung($person_ids, $stsem, $typ)
{
$qry = "SELECT betrag
FROM public.tbl_konto
JOIN public.tbl_benutzer benutzer USING(person_id)
WHERE person_id IN (".$this->implode4SQL(array_filter($person_ids)).")
AND studiensemester_kurzbz = ".$this->db_add_param($stsem)."
AND buchungstyp_kurzbz = ".$this->db_add_param($typ)."
GROUP BY buchungsnr";
if ($result = $this->db_query($qry))
{
if ($this->db_num_rows($result) > 0)
return true;
else
return false;
}
else
{
$this->errormsg = 'Fehler bei der Abfrage aufgetreten';
return false;
}
}
}
?>
+4 -1
View File
@@ -681,8 +681,11 @@ class lehreinheit extends basis_db
else
{
$row=$this->db_fetch_object($erg_zs);
$this->errormsg="Kollision (Zeitsperre): $row->zeitsperre_id|$row->mitarbeiter_uid|$row->zeitsperretyp_kurzbz|$row->bezeichnung|$row->vondatum/$row->vonstunde-$row->bisdatum/$row->bisstunde - $row->vertretung_uid";
if ($row->zeitsperretyp_kurzbz != 'ZVerfueg')
{
$this->errormsg = "Kollision (Zeitsperre): $row->zeitsperre_id|$row->mitarbeiter_uid|$row->zeitsperretyp_kurzbz|$row->bezeichnung|$row->vondatum/$row->vonstunde-$row->bisdatum/$row->bisstunde - $row->vertretung_uid";
return false;
}
}
}
return true;
+14 -6
View File
@@ -202,9 +202,12 @@ class LehreListHelper
$qry = 'SELECT
distinct on(nachname, vorname, person_id) vorname, nachname, matrikelnr, public.tbl_student.student_uid,
tbl_studentlehrverband.semester, tbl_studentlehrverband.verband, tbl_studentlehrverband.gruppe,
(SELECT status_kurzbz FROM public.tbl_prestudentstatus WHERE prestudent_id=tbl_student.prestudent_id ORDER BY datum DESC, insertamum DESC, ext_id DESC LIMIT 1) as status,
(SELECT status_kurzbz FROM public.tbl_prestudentstatus
WHERE prestudent_id=tbl_student.prestudent_id
ORDER BY datum DESC, insertamum DESC, ext_id DESC LIMIT 1) as status,
tbl_bisio.bisio_id, tbl_bisio.von, tbl_bisio.bis, tbl_student.studiengang_kz AS stg_kz_student,
tbl_note.lkt_ueberschreibbar, tbl_note.anmerkung, tbl_mitarbeiter.mitarbeiter_uid, tbl_person.matr_nr, tbl_studiengang.kurzbzlang, tbl_mobilitaet.mobilitaetstyp_kurzbz,
tbl_note.lkt_ueberschreibbar, tbl_note.anmerkung, tbl_mitarbeiter.mitarbeiter_uid, tbl_person.matr_nr, tbl_studiengang.kurzbzlang,
tbl_mobilitaet.mobilitaetstyp_kurzbz, tbl_zeugnisnote.note,
(CASE WHEN bis.tbl_mobilitaet.studiensemester_kurzbz = vw_student_lehrveranstaltung.studiensemester_kurzbz THEN 1 ELSE 0 END) as doubledegree
FROM
campus.vw_student_lehrveranstaltung
@@ -212,7 +215,9 @@ class LehreListHelper
JOIN public.tbl_person USING(person_id) LEFT JOIN public.tbl_student ON(uid=student_uid)
LEFT JOIN public.tbl_mitarbeiter ON(uid=mitarbeiter_uid)
LEFT JOIN public.tbl_studentlehrverband USING(student_uid,studiensemester_kurzbz)
LEFT JOIN lehre.tbl_zeugnisnote on(vw_student_lehrveranstaltung.lehrveranstaltung_id=tbl_zeugnisnote.lehrveranstaltung_id AND tbl_zeugnisnote.student_uid=tbl_student.student_uid AND tbl_zeugnisnote.studiensemester_kurzbz=tbl_studentlehrverband.studiensemester_kurzbz)
LEFT JOIN lehre.tbl_zeugnisnote on(vw_student_lehrveranstaltung.lehrveranstaltung_id=tbl_zeugnisnote.lehrveranstaltung_id
AND tbl_zeugnisnote.student_uid=tbl_student.student_uid
AND tbl_zeugnisnote.studiensemester_kurzbz=tbl_studentlehrverband.studiensemester_kurzbz)
LEFT JOIN lehre.tbl_note USING (note)
LEFT JOIN bis.tbl_bisio ON(uid=tbl_bisio.student_uid)
LEFT JOIN public.tbl_studiengang ON(tbl_student.studiengang_kz=tbl_studiengang.studiengang_kz)
@@ -254,8 +259,10 @@ class LehreListHelper
else
$zusatz='';
if($row->bisio_id!='' && $row->status!='Incoming' && ($row->bis > $stsemdatumvon || $row->bis=='') && $row->von < $stsemdatumbis) //Outgoing
$zusatz.='(o)(ab '.$datum->formatDatum($row->von,'d.m.Y').')';
//Outgoing
if($row->bisio_id != '' && $row->status != 'Incoming' && ($row->bis > $stsemdatumvon || $row->bis == '')
&& $row->von < $stsemdatumbis && (anzahlTage($row->von, $row->bis) >= 30))
$zusatz .= '(o)(ab '.$datum->formatDatum($row->von, 'd.m.Y').')';
if($row->lkt_ueberschreibbar == 'f') // angerechnet / intern angerechnet / nicht zugelassen
$zusatz.= '('. $row->anmerkung. ')';
@@ -281,7 +288,8 @@ class LehreListHelper
'gruppe'=>trim($row->gruppe),
'zusatz'=>$zusatz,
'studiengang_kurzbz'=>$row->kurzbzlang,
'mobilitaetstyp_kurzbz'=>$row->mobilitaetstyp_kurzbz
'mobilitaetstyp_kurzbz'=>$row->mobilitaetstyp_kurzbz,
'note'=>$row->note
));
}
}
+27 -1
View File
@@ -34,6 +34,8 @@ require_once(dirname(__FILE__).'/variable.class.php');
class lehrstunde extends basis_db
{
public $result = array();
public $stundenplan_id; /// @brief ID in der Datenbank
public $lehreinheit_id; /// @brief id der Lehreinheit in der DB
public $unr; // @brief Unterrichtsnummer
@@ -876,9 +878,13 @@ class lehrstunde extends basis_db
if ($anz_zs!=0)
{
$row = $this->db_fetch_object($erg_zs);
if ($row->zeitsperretyp_kurzbz != 'ZVerfueg')
{
$this->errormsg="Kollision (Zeitsperre): $row->zeitsperre_id|$row->lektor|$row->zeitsperretyp_kurzbz - $row->vondatum/$row->vonstunde|$row->bisdatum/$row->bisstunde";
return true;
}
}
return false;
}
@@ -1060,7 +1066,19 @@ class lehrstunde extends basis_db
return $result;
}
public function getStundenplanData($db_stpl_table, $lehrveranstaltung_id=null, $studiensemester_kurzbz=null, $lehreinheit_id=null, $mitarbeiter_uid=null, $student_uid=null)
/**
* Holt Studenplandaten.
*
* @param $db_stpl_table
* @param null $lehrveranstaltung_id
* @param null $studiensemester_kurzbz
* @param null $lehreinheit_id
* @param null $mitarbeiter_uid
* @param null $student_uid
* @param false $nurBevorstehende Wenn true, dann werden nur bevorstehende LVs abgefragt.
* @return bool
*/
public function getStundenplanData($db_stpl_table, $lehrveranstaltung_id=null, $studiensemester_kurzbz=null, $lehreinheit_id=null, $mitarbeiter_uid=null, $student_uid=null, $nurBevorstehende = false)
{
$qry = "SELECT
@@ -1112,6 +1130,11 @@ class lehrstunde extends basis_db
else
return false;
if($nurBevorstehende)
{
$qry.= " AND datum >= NOW()::date ";
}
$qry.="GROUP BY stpl.datum, stpl.unr, stpl.lehreinheit_id, lehrfach.bezeichnung
ORDER BY stpl.datum, min(stpl.stunde), stpl.unr, stpl.lehreinheit_id";
@@ -1136,8 +1159,11 @@ class lehrstunde extends basis_db
return true;
}
else
{
$this->errormsg = 'Fehler beim Einholen der Stundenplandaten';
return false;
}
}
}
?>
+23 -4
View File
@@ -834,11 +834,26 @@ class prestudent extends person
$stg_obj = new studiengang();
$stg_obj->load($studiengang_kz);
if($stg_obj->typ=='m')
$qry.=" AND a.rolle='Interessent' AND a.zgvmas_code is not null AND a.zgvmas_erfuellt = 't'";
{
$qry.=" AND a.rolle='Interessent' AND a.zgvmas_code is not null";
if (defined('ZGV_ERFUELLT_ANZEIGEN') && ZGV_ERFUELLT_ANZEIGEN)
$qry .= " AND a.zgvmas_erfuellt = 't'";
}
elseif($stg_obj->typ=='p')
$qry.=" AND a.rolle='Interessent' AND a.zgvdoktor_code is not null AND a.zgvdoktor_erfuellt = 't'";
{
$qry.=" AND a.rolle='Interessent' AND a.zgvdoktor_code is not null";
if (defined('ZGV_DOKTOR_ANZEIGEN') && ZGV_DOKTOR_ANZEIGEN)
$qry .= " AND a.zgvdoktor_erfuellt = 't'";
}
else
$qry.=" AND a.rolle='Interessent' AND a.zgv_code is not null AND a.zgv_erfuellt = 't'";
{
$qry.=" AND a.rolle='Interessent' AND a.zgv_code is not null";
if (defined('ZGV_ERFUELLT_ANZEIGEN') && ZGV_ERFUELLT_ANZEIGEN)
$qry .= " AND a.zgv_erfuellt = 't'";
}
break;
case "reihungstestangemeldet":
$qry.="
@@ -2489,10 +2504,14 @@ class prestudent extends person
$qry = "SELECT
UPPER(tbl_studiengang.typ || tbl_studiengang.kurzbz) as kuerzel
FROM
public.tbl_prestudent
public.tbl_prestudent pt
JOIN public.tbl_prestudentstatus USING (prestudent_id)
JOIN public.tbl_studiengang USING (studiengang_kz)
WHERE person_id = ".$this->db_add_param($person_id, FHC_INTEGER)."
AND NOT EXISTS
(SELECT * FROM public.tbl_prestudentstatus ps
WHERE ps.prestudent_id = pt.prestudent_id
AND status_kurzbz = 'Abbrecher' )
AND status_kurzbz in ('Absolvent','Diplomand','Unterbrecher','Student')
AND typ in ('b','m','d')
ORDER BY status_kurzbz ASC
+3 -1
View File
@@ -1235,7 +1235,9 @@ class wochenplan extends basis_db
if (isset($wunsch[$i][$j]))
{
$index=$wunsch[$i][$j];
if ($index==-3)
// Negative und positive Zeitsperren beruecksichtigen
if ($index==-3 || $index == 4)
{
//Wenn eine Zeitsperre eingetragen ist, dann diese im Tooltiptext anzeigen
$zeitsperre = new zeitsperre();
+55
View File
@@ -537,5 +537,60 @@ class zeitsperre extends basis_db
return $this->bisdatum;
}
/**
* Liefert die Zeitsperren eines Users innerhalb einer bestimmten Zeitspanne.
* Einschränkung nach Zeitsperrentyp möglich.
*
* @param $uid
* @param $von string Datum im Format YYYY-MM-DD
* @param $bis string Datum im Format YYYY-MM-DD
* @param null $zeitsperretyp_kurzbz
* @return bool
*/
public function getVonBis($uid, $von, $bis, $zeitsperretyp_kurzbz = null)
{
$qry = '
SELECT
zeitsperre_id, zeitsperretyp_kurzbz, vondatum, vonstunde, bisdatum, bisstunde
FROM
campus.tbl_zeitsperre
LEFT JOIN campus.tbl_zeitsperretyp USING (zeitsperretyp_kurzbz)
WHERE
mitarbeiter_uid = '. $this->db_add_param($uid). '
AND (
(vondatum BETWEEN '.$this->db_add_param($von).' AND '.$this->db_add_param($bis).')
OR
(bisdatum BETWEEN '.$this->db_add_param($von).' AND '.$this->db_add_param($bis).')
)';
if (!is_null($zeitsperretyp_kurzbz))
{
$qry.= '
AND zeitsperretyp_kurzbz = '. $this->db_add_param($zeitsperretyp_kurzbz);
}
if (!$this->db_query($qry))
{
$this->errormsg=$this->db_last_error();
return false;
}
else
{
while($row = $this->db_fetch_object())
{
$obj = new stdClass();
$obj->zeitsperre_id = $row->zeitsperre_id;
$obj->zeitsperretyp_kurzbz = $row->zeitsperretyp_kurzbz;
$obj->vondatum = $row->vondatum;
$obj->vonstunde = $row->vonstunde;
$obj->bisdatum = $row->bisdatum;
$obj->bisstunde = $row->bisstunde;
$this->result[]= $obj;
}
return true;
}
}
}
?>
+104 -24
View File
@@ -37,6 +37,8 @@ class zeitwunsch extends basis_db
public $insertvon;
public $updateamum;
public $updatevon;
public $zeitwunsch_id;
public $zeitwunsch_gueltigkeit_id;
/**
* Konstruktor
@@ -121,7 +123,7 @@ class zeitwunsch extends basis_db
if($this->new)
{
$qry = 'INSERT INTO campus.tbl_zeitwunsch (mitarbeiter_uid, tag, stunde, gewicht,
insertamum, insertvon, updateamum, updatevon) VALUES('.
insertamum, insertvon, updateamum, updatevon, zeitwunsch_gueltigkeit_id) VALUES('.
$this->db_add_param($this->mitarbeiter_uid).','.
$this->db_add_param($this->tag, FHC_INTEGER).','.
$this->db_add_param($this->stunde, FHC_INTEGER).','.
@@ -129,7 +131,8 @@ class zeitwunsch extends basis_db
$this->db_add_param($this->insertamum).','.
$this->db_add_param($this->insertvon).','.
$this->db_add_param($this->updateamum).','.
$this->db_add_param($this->updatevon).');';
$this->db_add_param($this->updatevon).','.
$this->db_add_param($this->zeitwunsch_gueltigkeit_id).');';
}
else
{
@@ -140,7 +143,8 @@ class zeitwunsch extends basis_db
" WHERE
mitarbeiter_uid=".$this->db_add_param($this->mitarbeiter_uid, FHC_STRING, false)."
AND tag=".$this->db_add_param($this->tag, FHC_INTEGER)."
AND stunde=".$this->db_add_param($this->stunde, FHC_INTEGER);
AND stunde=".$this->db_add_param($this->stunde, FHC_INTEGER). "
AND zeitwunsch_gueltigkeit_id=".$this->db_add_param($this->zeitwunsch_gueltigkeit_id, FHC_INTEGER);
}
if($this->db_query($qry))
@@ -155,15 +159,70 @@ class zeitwunsch extends basis_db
}
/**
* Zeitwunsch einer Person laden
* Zeitwunsch einer Person zu bestimmter Zeitwunschgueltigkeit laden
* @param $uid
* @param $zeitwunsch_gueltigkeit_id
* @return boolean
*/
public function loadByZWG($uid, $zeitwunsch_gueltigkeit_id)
{
$qry = '
SELECT *
FROM campus.tbl_zeitwunsch
JOIN campus.tbl_zeitwunsch_gueltigkeit zwg USING (zeitwunsch_gueltigkeit_id)
WHERE zwg.mitarbeiter_uid = ' . $this->db_add_param($uid) . '
AND zeitwunsch_gueltigkeit_id = ' . $this->db_add_param($zeitwunsch_gueltigkeit_id) . '
ORDER BY tag, stunde
';
if ($this->db_query($qry))
{
while ($row = $this->db_fetch_object())
{
$this->zeitwunsch[$row->tag][$row->stunde] = $row->gewicht;
$this->insertamum = $row->insertamum;
$this->insertvon = $row->insertvon;
$this->updateamum = $row->updateamum;
$this->updatevon = $row->updatevon;
$this->zeitwunsch_id = $row->zeitwunsch_id;
$this->zeitwunsch_gueltigkeit_id = $row->zeitwunsch_gueltigkeit_id;
}
return true;
}
else
{
$this->errormsg = $this->db_last_error();
return false;
}
}
/**
* Alle Zeitwuensche einer Person laden.
* Um auf einen Zeitwunsch einer bestimmten Zeit, also innerhalb einer bestimmten Zeitwunschgueltigkeit
* zu beschraenken, kann ein Datum mitgegeben werden.
* @param uid
* @param datum
* @param datum UNIX timestamp, um Zeitwunsch mit richtiger Zeitwunschgueltigkeit zu ermitteln
* @return boolean Ergebnis steht in Array $zeitwunsch wenn true
*/
public function loadPerson($uid,$datum=null)
{
// Default datum: jetzt
if (is_null($datum))
{
$datum = time();
}
$qry = "
SELECT *
FROM campus.tbl_zeitwunsch
JOIN campus.tbl_zeitwunsch_gueltigkeit zwg USING (zeitwunsch_gueltigkeit_id)
WHERE zwg.mitarbeiter_uid=". $this->db_add_param($uid). "
AND ". $this->db_add_param(date('Y-m-d', $datum)). " BETWEEN von AND COALESCE(bis,'2999-01-01');
";
// Zeitwuensche abfragen
if(!$this->db_query("SELECT * FROM campus.tbl_zeitwunsch WHERE mitarbeiter_uid=".$this->db_add_param($uid)))
if(!$this->db_query($qry))
{
$this->errormsg = $this->db_last_error();
return false;
@@ -177,6 +236,8 @@ class zeitwunsch extends basis_db
$this->insertvon = $row->insertvon;
$this->updateamum = $row->updateamum;
$this->updatevon = $row->updatevon;
$this->zeitwunsch_id = $row->zeitwunsch_id;
$this->zeitwunsch_gueltigkeit_id = $row->zeitwunsch_gueltigkeit_id;
}
}
@@ -189,13 +250,19 @@ class zeitwunsch extends basis_db
// Zeitsperren abfragen
$sql="
SELECT
vondatum,vonstunde,bisdatum,bisstunde
zeitsperretyp_kurzbz, vondatum,vonstunde,bisdatum,bisstunde
FROM
campus.tbl_zeitsperre
WHERE
mitarbeiter_uid=".$this->db_add_param($uid)."
AND vondatum<=".$this->db_add_param($ende)."
AND bisdatum>=".$this->db_add_param($start);
AND bisdatum>=".$this->db_add_param($start). "
-- Negative Zeitsperren sollen im Plan eine positive Zeitsperre 'ZVerfueg' overrulen
ORDER BY
CASE
WHEN zeitsperretyp_kurzbz = 'ZVerfueg' THEN 1
ELSE 2
END;";
if(!$this->db_query($sql))
{
@@ -204,6 +271,8 @@ class zeitwunsch extends basis_db
}
else
{
// Zeitsperren negativ (-3) gewichten.
// Ausnahme: positive Zeitsperren: diese positiv (4) gewichten.
while($row = $this->db_fetch_object())
{
$beginn=montag($datum);
@@ -213,20 +282,21 @@ class zeitwunsch extends basis_db
//echo "\n".$date_iso."\n".$row->vondatum."\n";
if ($date_iso>$row->vondatum && $date_iso<$row->bisdatum)
for ($j=$this->min_stunde;$j<=$this->max_stunde;$j++)
$this->zeitwunsch[$i][$j]=-3;
$this->zeitwunsch[$i][$j] = $row->zeitsperretyp_kurzbz == 'ZVerfueg' ? 4 : -3;
if ($date_iso==$row->vondatum && $date_iso<$row->bisdatum)
{
if (is_null($row->vonstunde))
$row->vonstunde=$this->min_stunde;
for ($j=$row->vonstunde;$j<=$this->max_stunde;$j++)
$this->zeitwunsch[$i][$j]=-3;
$this->zeitwunsch[$i][$j] = $row->zeitsperretyp_kurzbz == 'ZVerfueg' ? 4 : -3;
}
if ($date_iso>$row->vondatum && $date_iso==$row->bisdatum)
{
if (is_null($row->bisstunde))
$row->bisstunde=$this->max_stunde;
for ($j=$this->min_stunde;$j<=$row->bisstunde;$j++)
$this->zeitwunsch[$i][$j]=-3;
$this->zeitwunsch[$i][$j] = $row->zeitsperretyp_kurzbz == 'ZVerfueg' ? 4 : -3;
}
if ($date_iso==$row->vondatum && $date_iso==$row->bisdatum)
{
@@ -235,7 +305,7 @@ class zeitwunsch extends basis_db
if (is_null($row->bisstunde))
$row->bisstunde=$this->max_stunde;
for ($j=$row->vonstunde;$j<=$row->bisstunde;$j++)
$this->zeitwunsch[$i][$j]=-3;
$this->zeitwunsch[$i][$j] = $row->zeitsperretyp_kurzbz == 'ZVerfueg' ? 4 : -3;
}
$beginn=jump_day($beginn,1);
}
@@ -245,16 +315,19 @@ class zeitwunsch extends basis_db
return true;
}
/**
* Zeitwunsch der Personen in Lehreinheiten laden
* @param $le_id LehreinheitID Array
* @param $datum
* @param $datum UNIX timestamp Datum, um Zeitwunsch mit richtiger Zeitwunschgueltigkeit zu ermitteln
* @return true oder false
*/
public function loadZwLE($le_id,$datum=null)
public function loadZwLE($le_id, $datum = null)
{
//$this->init();
// Default datum: jetzt
if (is_null($datum))
{
$datum = time();
}
// SUB-Select fuer LVAs
$sql_query_leid='';
$sql_query_le='SELECT DISTINCT mitarbeiter_uid FROM campus.vw_lehreinheit WHERE ';
@@ -265,7 +338,11 @@ class zeitwunsch extends basis_db
// Schlechteste Zeitwuensche holen
$sql_query='SELECT tag,stunde,min(gewicht) AS gewicht
FROM campus.tbl_zeitwunsch WHERE mitarbeiter_uid IN ('.$sql_query_le.') GROUP BY tag,stunde';
FROM campus.tbl_zeitwunsch
JOIN campus.tbl_zeitwunsch_gueltigkeit zwg USING (zeitwunsch_gueltigkeit_id)
WHERE zwg.mitarbeiter_uid IN ('.$sql_query_le.')
AND '. $this->db_add_param(date('Y-m-d', $datum)). ' BETWEEN von AND COALESCE(bis,\'2999-01-01\')
GROUP BY tag,stunde;';
// Zeitwuensche abfragen
if(!$this->db_query($sql_query))
@@ -289,7 +366,7 @@ class zeitwunsch extends basis_db
// Zeitsperren abfragen
$sql="
SELECT
vondatum,vonstunde,bisdatum,bisstunde
zeitsperretyp_kurzbz, vondatum,vonstunde,bisdatum,bisstunde
FROM
campus.tbl_zeitsperre
WHERE
@@ -311,20 +388,20 @@ class zeitwunsch extends basis_db
//echo "\n".$date_iso."\n".$row->vondatum."\n";
if ($date_iso>$row->vondatum && $date_iso<$row->bisdatum)
for ($j=$this->min_stunde;$j<=$this->max_stunde;$j++)
$this->zeitwunsch[$i][$j]=-3;
$this->zeitwunsch[$i][$j]= $row->zeitsperretyp_kurzbz == 'ZVerfueg' ? 4 : -3;
if ($date_iso==$row->vondatum && $date_iso<$row->bisdatum)
{
if (is_null($row->vonstunde))
$row->vonstunde=$this->min_stunde;
for ($j=$row->vonstunde;$j<=$this->max_stunde;$j++)
$this->zeitwunsch[$i][$j]=-3;
$this->zeitwunsch[$i][$j]= $row->zeitsperretyp_kurzbz == 'ZVerfueg' ? 4 : -3;
}
if ($date_iso>$row->vondatum && $date_iso==$row->bisdatum)
{
if (is_null($row->bisstunde))
$row->bisstunde=$this->max_stunde;
for ($j=$this->min_stunde;$j<=$row->bisstunde;$j++)
$this->zeitwunsch[$i][$j]=-3;
$this->zeitwunsch[$i][$j]= $row->zeitsperretyp_kurzbz == 'ZVerfueg' ? 4 : -3;
}
if ($date_iso==$row->vondatum && $date_iso==$row->bisdatum)
{
@@ -333,7 +410,7 @@ class zeitwunsch extends basis_db
if (is_null($row->bisstunde))
$row->bisstunde=$this->max_stunde;
for ($j=$row->vonstunde;$j<=$row->bisstunde;$j++)
$this->zeitwunsch[$i][$j]=-3;
$this->zeitwunsch[$i][$j]= $row->zeitsperretyp_kurzbz == 'ZVerfueg' ? 4 : -3;
}
$beginn=jump_day($beginn,1);
}
@@ -346,17 +423,19 @@ class zeitwunsch extends basis_db
* Prueft ob bereits ein Zeitwunsch eingetragen ist
*
* @param $uid
* @param $zwg_id
* @param $stunde
* @param $tag
* @return true wenn vorhanden sonst false
*/
function exists($uid, $stunde, $tag)
function exists($uid, $zwg_id, $stunde, $tag)
{
$qry = "SELECT 1 FROM campus.tbl_zeitwunsch
WHERE
mitarbeiter_uid=".$this->db_add_param($uid)."
AND stunde=".$this->db_add_param($stunde, FHC_INTEGER)."
AND tag=".$this->db_add_param($tag, FHC_INTEGER);
AND tag=".$this->db_add_param($tag, FHC_INTEGER). "
AND zeitwunsch_gueltigkeit_id = ".$this->db_add_param($zwg_id, FHC_INTEGER);
if($this->db_query($qry))
{
if($this->db_num_rows()>0)
@@ -371,4 +450,5 @@ class zeitwunsch extends basis_db
}
}
}
?>
+271
View File
@@ -0,0 +1,271 @@
<?php
require_once(dirname(__FILE__). '/basis_db.class.php');
class zeitwunsch_gueltigkeit extends basis_db
{
public $new; // boolean
public $result = array();
public $zeitwunsch_gueltigkeit_id; // integer
public $mitarbeiter_uid; // varchar 32
public $von; // date
public $bis; // date
public $insertamum; // timestamp
public $insertvon; // varchar 32
public $updateamum; // timestamp
public $updatevon; // varchar 32
public $studiensemester_kurzbz;
public $start;
public $ende;
public function __construct($zeitwunsch_gueltigkeit_id = null)
{
parent::__construct();
if (!is_null($zeitwunsch_gueltigkeit_id))
{
$this->load($zeitwunsch_gueltigkeit_id);
}
}
/**
* Ladet eine Zeitwunschgueltigkeit.
* @param $zeitwunsch_gueltigkeit_id
* @return bool
*/
public function load($zeitwunsch_gueltigkeit_id)
{
if (!is_numeric($zeitwunsch_gueltigkeit_id))
{
$this->errormsg = 'Wrong parameter zeitwunsch_gueltigkeit_id.';
return false;
}
$qry = '
SELECT *, studiensemester_kurzbz, start, ende
FROM campus.tbl_zeitwunsch_gueltigkeit, public.tbl_studiensemester
WHERE zeitwunsch_gueltigkeit_id = '.$this->db_add_param($zeitwunsch_gueltigkeit_id). '
AND (von < ende AND COALESCE(bis, \'2999-12-31\'::date ) > start)
ORDER BY start ASC
LIMIT 1
';
if ($result = $this->db_query($qry))
{
while ($row = $this->db_fetch_object($result))
{
$this->zeitwunsch_gueltigkeit_id = $row->zeitwunsch_gueltigkeit_id;
$this->von = $row->von;
$this->bis = $row->bis;
$this->insertamum = $row->insertamum;
$this->insertvon = $row->insertvon;
$this->updateamum = $row->updateamum;
$this->updatevon = $row->updatevon;
$this->studiensemester_kurzbz = $row->studiensemester_kurzbz;
$this->start = $row->start;
$this->ende = $row->ende;
}
return true;
}
else
{
$this->errormsg = 'Fehler bei der Datenbankabfrage';
return false;
}
}
/**
* Speichert eine Zeitwunschgueltigkeit
*/
public function save()
{
if($this->new)
{
$qry = '
INSERT INTO campus.tbl_zeitwunsch_gueltigkeit (mitarbeiter_uid, von, bis, insertvon)
VALUES ('.
$this->db_add_param($this->mitarbeiter_uid).', '.
$this->db_add_param($this->von).', '.
$this->db_add_param($this->bis).', '.
$this->db_add_param($this->insertvon). ')
RETURNING zeitwunsch_gueltigkeit_id;
';
}
else
{
$qry = '
UPDATE campus.tbl_zeitwunsch_gueltigkeit SET'.
' bis = '. $this->db_add_param($this->bis). ', '.
' updateamum = NOW(), '.
' updatevon = '.$this->db_add_param($this->updatevon).
' WHERE zeitwunsch_gueltigkeit_id = ' .$this->db_add_param($this->zeitwunsch_gueltigkeit_id, FHC_INTEGER);
}
if($result = $this->db_query($qry))
{
// Wenn neuer Eintrag
if ($this->new)
{
if($row = $this->db_fetch_object($result))
{
// ZWG ID des neuen ZWG Eintrags zurueckgeben
$this->zeitwunsch_gueltigkeit_id = $row->zeitwunsch_gueltigkeit_id;
}
}
return true;
}
else
{
$this->errormsg = 'Fehler beim Speichern der Zeitwunschgueltigkeit';
return false;
}
}
/**
* Ladet Zeitwunschgueltigkeiten einer UID mitsamt den zugehoerigen Studiensemestern.
* @param $uid
* @param numeric $limit limit = null liefert alle ZWG; limit = 1 liefert die letztgueltige Zeitwunsch-Gueltigkeit.
* @param bool $activeOnly Wenn während des laufenden Semesters der Zeitwunsch geaendert werden, werden mehrere ZWG im Semester hinterlegt.
* true liefert pro Studiensemester nur die letztgueltigen ZWG;
* false liefert alle ZWG pro Studiensemester
* @param string $bis string date, z.B. 2022-01-31
* @return bool
*/
public function getByUID($uid, $limit = null, $activeOnly = true, $bis = null)
{
$qry = '
WITH basic_select AS (
SELECT *,
row_number() over (PARTITION BY studiensemester_kurzbz ORDER BY von DESC) r
FROM campus.tbl_zeitwunsch_gueltigkeit, public.tbl_studiensemester
WHERE mitarbeiter_uid = ' . $this->db_add_param($uid);
// Wenn Bis-Datum angegeben
if (!is_null($bis))
{
// Zeitwuensche nur bis zum angegebenen Bis-Datum
$qry.= '
AND (von < ende AND '. $this->db_add_param($bis). '::date > start))
';
}
// Wenn kein Bis-Datum angegeben ist
else
{
// Zeitwuensche bis zum Semesterende des chronologisch letzten Zeitwunsches (also der ZWG, wo bis NULL ist)
$qry.= '
AND (von < ende AND COALESCE(bis, (SELECT ende FROM public.tbl_studiensemester WHERE von BETWEEN start AND ende)) > start))';
}
$qry.= '
SELECT *
FROM basic_select
';
// Wenn nur aktive Zeitwunschgueltigkeiten angezeigt werden sollen
if ($activeOnly)
{
$qry.= ' WHERE r = 1';
}
$qry.= ' ORDER BY von DESC, start DESC';
// Wenn Limit angegeben
if (!is_null($limit))
{
$qry.= ' LIMIT '.$this->db_add_param($limit);
}
if ($result = $this->db_query($qry))
{
$this->result = array();
while ($row = $this->db_fetch_object($result))
{
$obj = new StdClass();
$obj->zeitwunsch_gueltigkeit_id = $row->zeitwunsch_gueltigkeit_id;
$obj->von = $row->von;
$obj->bis = $row->bis;
$obj->studiensemester_kurzbz = $row->studiensemester_kurzbz;
$obj->start = $row->start;
$obj->ende = $row->ende;
$obj->insertamum = $row->insertamum;
$obj->insertvon = $row->insertvon;
$obj->updateamum = $row->updateamum;
$obj->updatevon = $row->updatevon;
$this->result[]= $obj;
}
return true;
}
else
{
$this->errormsg = 'Fehler bei der Datenbankabfrage';
return false;
}
}
/**
* Ladet Zeitwunschgueltigkeiten einer UID und eines bestimmten Semesters (defaultmaeßig nur die letztgueltige)
* @param $uid
* @param $studiensemester_kurzbz
* @param null $limit limit = null liefert alle ZWG des Studiensemesters; limit = 1 liefert die letztgueltige ZWG.
* @return bool
*/
public function getByStudiensemester($uid, $studiensemester_kurzbz, $limit = 1)
{
$qry = '
WITH studiensemester AS
(
SELECT studiensemester_kurzbz, start, ende
FROM public.tbl_studiensemester
WHERE studiensemester_kurzbz = '.$this->db_add_param($studiensemester_kurzbz). '
)
SELECT zwg.*, studiensemester_kurzbz, start, ende
FROM campus.tbl_zeitwunsch_gueltigkeit zwg, studiensemester ss
WHERE zwg.mitarbeiter_uid = '.$this->db_add_param($uid). '
AND (zwg.von < ss.ende AND COALESCE(zwg.bis, ss.ende) >= ss.start)
ORDER BY von DESC, bis DESC
';
// Wenn Limit angegeben
if (!is_null($limit))
{
// Ausgabe limitieren
$qry.= 'LIMIT '.$this->db_add_param($limit);
}
if ($result = $this->db_query($qry))
{
$this->result = array();
while ($row = $this->db_fetch_object($result))
{
$obj = new StdClass();
$obj->zeitwunsch_gueltigkeit_id = $row->zeitwunsch_gueltigkeit_id;
$obj->von = $row->von;
$obj->bis = $row->bis;
$obj->studiensemester_kurzbz = $row->studiensemester_kurzbz;
$obj->start = $row->start;
$obj->ende = $row->ende;
$obj->insertamum = $row->insertamum;
$obj->insertvon = $row->insertvon;
$obj->updateamum = $row->updateamum;
$obj->updatevon = $row->updatevon;
$this->result[]= $obj;
}
return true;
}
else
{
$this->errormsg = 'Fehler bei der Datenbankabfrage';
return false;
}
}
}
+5 -1
View File
@@ -256,7 +256,7 @@ class zeugnisnote extends basis_db
* $studiensemester_kurzbz
* @return true wenn ok, false wenn Fehler
*/
public function getZeugnisnoten($lehrveranstaltung_id, $student_uid, $studiensemester_kurzbz)
public function getZeugnisnoten($lehrveranstaltung_id, $student_uid, $studiensemester_kurzbz, $nichtAnzeigen = null)
{
$where='';
if($lehrveranstaltung_id!=null)
@@ -265,6 +265,8 @@ class zeugnisnote extends basis_db
$where.=" AND uid=".$this->db_add_param($student_uid);
if($studiensemester_kurzbz!=null)
$where.=" AND vw_student_lehrveranstaltung.studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz);
if ($nichtAnzeigen != null)
$where.=" AND tbl_note.anmerkung NOT IN (".$this->db_implode4SQL($nichtAnzeigen).")";
$where2='';
if($lehrveranstaltung_id!=null)
$where2.=" AND lehrveranstaltung_id=".$this->db_add_param($lehrveranstaltung_id, FHC_INTEGER);
@@ -272,6 +274,8 @@ class zeugnisnote extends basis_db
$where2.=" AND student_uid=".$this->db_add_param($student_uid);
if($studiensemester_kurzbz!=null)
$where2.=" AND studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz);
if ($nichtAnzeigen != null)
$where2.=" AND tbl_note.anmerkung NOT IN (".$this->db_implode4SQL($nichtAnzeigen).")";
$qry = "SELECT vw_student_lehrveranstaltung.lehrveranstaltung_id, uid,
vw_student_lehrveranstaltung.studiensemester_kurzbz, note, punkte, uebernahmedatum, benotungsdatum,
+1
View File
@@ -66,6 +66,7 @@ $this->phrasen['global/pdfExport']='PDF Export';
$this->phrasen['global/und']='und';
$this->phrasen['global/oder']='oder';
$this->phrasen['global/faelligAm']='Fällig am';
$this->phrasen['global/aenderungenZuruecksetzen']= "&Auml;nderungen zur&uuml;cksetzen";
$this->phrasen['global/username']='Username';
$this->phrasen['global/vorname']='Vorname';
+1
View File
@@ -21,6 +21,7 @@ $this->phrasen['lvplan/lehrverbaende']='Lehrverbände';
$this->phrasen['lvplan/uebersichtDerLehrverbaende']='Übersicht der Lehrverbände';
$this->phrasen['lvplan/fehlerUndFeedback']='Feedback geben';
$this->phrasen['lvplan/lvKoordinationsstelle']='LV-Koordinationsstelle';
$this->phrasen['lvplan/lvPlanung']='LV-Planung';
$this->phrasen['lvplan/reservierungen']='Reservierungen';
$this->phrasen['lvplan/reservierungWurdeGeloescht']='Reservierung wurde geloescht';
$this->phrasen['lvplan/alleReservierungen']='Alle Reservierungen';
+19 -1
View File
@@ -3,12 +3,13 @@ $this->phrasen['zeitwunsch/falscheWerteEingetragen']='Es duerfen nur die Werte -
$this->phrasen['zeitwunsch/zeitwunsch']='Zeitwunsch';
$this->phrasen['zeitwunsch/help']='HELP';
$this->phrasen['zeitwunsch/zeitwunschVon']='Zeitwünsche von';
$this->phrasen['zeitwunsch/tragenSieInDiesesNormwochenraster']='Tragen Sie in dieses Normwochenraster Ihre Verfügbarkeit in einer durchschnittlichen Arbeitswoche ein.';
$this->phrasen['zeitwunsch/tragenSieInDiesesNormwochenraster']="Tragen Sie in dieses Normwochenraster Ihre Verfügbarkeit in einer durchschnittlichen Arbeitswoche ein. Klicken Sie danach auf 'Speichern'";
$this->phrasen['zeitwunsch/letzteAenderung']='Letzte Änderung';
$this->phrasen['zeitwunsch/von']='von';
$this->phrasen['zeitwunsch/formularZumEintragenDerZeitsperren']='Das Formular zum Eintragen der Zeitsperren finden Sie %s hier';
$this->phrasen['zeitwunsch/erklärung']='Erklärung';
$this->phrasen['zeitwunsch/kontrollierenSieIhreZeitwuensche']='Bitte kontrollieren/ändern Sie Ihre Zeitwünsche und klicken Sie anschließend auf "Speichern"';
$this->phrasen['zeitwunsch/erstellenSieIhreZeitwuensche']='Bitte erstellen / ändern Sie Ihre Zeitwünsche und klicken Sie anschließend auf "Speichern"';
$this->phrasen['zeitwunsch/wert']='Wert';
$this->phrasen['zeitwunsch/bedeutung']='Bedeutung';
$this->phrasen['zeitwunsch/hierMoechteIchUnterrichten']='Hier möchte ich unterrichten';
@@ -23,4 +24,21 @@ $this->phrasen['zeitwunsch/erklaerung']='Erklärung';
$this->phrasen['zeitwunsch/beiProblemenWendenSieSichAn']='Bei Problemen wenden Sie sich bitte an die';
$this->phrasen['zeitwunsch/profil']='Profil';
$this->phrasen['zeitwunsch/geteilteArbeitszeit']='Ich bin mit der Verplanung meiner Lehre in getrennten Blöcken am Tagesrand einverstanden.';
$this->phrasen['zeitwunsch/gueltigIm']="Mein Zeitwunsch g&uuml;ltig im: ";
$this->phrasen['zeitwunsch/erklaerungstext']="Sie k&ouml;nnen Ihren Zeitwunsch direkt in der Tabelle bearbeiten oder einen Zeitwunsch eines vergangenen Studiensemester kopieren.<br>
<br><b>Solange Sie keine &Auml;nderungen vornehmen, <u>wird Ihr Zeitwunsch immer ins n&auml;chste Studiensemester &uuml;bernommen.</u></b>";
$this->phrasen['zeitwunsch/werteAuf1setzen']="Alle Werte auf 1 setzen";
$this->phrasen['zeitwunsch/kopierenText']="W&auml;hlen Sie rechts das gew&uuml;nschte Studiensemester aus.
Der Zeitwunsch wird dann <u>automatisch</u> in die Tabelle &uuml;bernommen.<br>
Nehmen Sie gegebenenfalls &Auml;nderungen vor und klicken danach auf 'Speichern'.";
$this->phrasen['zeitwunsch/kopieren']= "&auml;ndern";
$this->phrasen['zeitwunsch/aendern']= "kopieren von fr&uuml;herem Studiensemester&emsp;";
$this->phrasen['zeitwunsch/stundenBereitsVerplant']='Stunden für %s bereits verplant';
$this->phrasen['zeitwunsch/fuer']='Zeitwunsch f&uuml;r %s &ensp;';
$this->phrasen['zeitwunsch/bearbeitungDeaktiviert']='Bearbeitung deaktiviert';
$this->phrasen['zeitwunsch/bearbeitungDeaktiviertText']='Ihnen wurden im %s bereits Lehrveranstaltung(en) zugeteilt.<br>
Bitte stimmen Sie sich vor einer &Auml;nderung <a href="mailto:%s">per Mail</a> mit den betroffenen Studieng&auml;ngen ab.<br>
M&ouml;chten Sie trotzdem ohne Abstimmung bzw. nach bereits erfolgter Abstimmung fortsetzen?';
$this->phrasen['zeitwunsch/bearbeitungAktivieren']='Bearbeitung aktivieren';
$this->phrasen['zeitwunsch/kompetenzfeldWirdInformiert']= 'INFO: Kompetenzfeld wird &uuml;ber die &Auml;nderung per Mail informiert';
?>
+1
View File
@@ -65,6 +65,7 @@ $this->phrasen['global/drucken']='Print';
$this->phrasen['global/und']='and';
$this->phrasen['global/oder']='or';
$this->phrasen['global/faelligAm']='Due on';
$this->phrasen['global/aenderungenZuruecksetzen']= "Reset changes";
$this->phrasen['global/username']='Username';
$this->phrasen['global/vorname']='First Name';
+1
View File
@@ -21,6 +21,7 @@ $this->phrasen['lvplan/lehrverbaende']='Teaching Groups';
$this->phrasen['lvplan/uebersichtDerLehrverbaende']='Overview of Teaching Groups';
$this->phrasen['lvplan/fehlerUndFeedback']='Send Feedback';
$this->phrasen['lvplan/lvKoordinationsstelle']='Course-Coordination Office';
$this->phrasen['lvplan/lvPlanung']='Course-Planning Office';
$this->phrasen['lvplan/reservierungen']='Reservations';
$this->phrasen['lvplan/reservierungWurdeGeloescht'] = 'Reservation successfully deleted';
$this->phrasen['lvplan/alleReservierungen']='All reservations';
+19 -1
View File
@@ -3,12 +3,13 @@ $this->phrasen['zeitwunsch/falscheWerteEingetragen']='Invalid input. Only the va
$this->phrasen['zeitwunsch/zeitwunsch']='Preferred teaching time';
$this->phrasen['zeitwunsch/help']='HELP';
$this->phrasen['zeitwunsch/zeitwunschVon']='Preferred teaching times for';
$this->phrasen['zeitwunsch/tragenSieInDiesesNormwochenraster']='Enter your availability for an average week in this standard week grid.';
$this->phrasen['zeitwunsch/tragenSieInDiesesNormwochenraster']='Enter your availability for an average week in this standard week grid and click "Save"';
$this->phrasen['zeitwunsch/letzteAenderung']='Last Update';
$this->phrasen['zeitwunsch/von']='from';
$this->phrasen['zeitwunsch/formularZumEintragenDerZeitsperren']='The form for entering times when you are unavailable to teach can be found %s here';
$this->phrasen['zeitwunsch/erklärung']='Explanation';
$this->phrasen['zeitwunsch/kontrollierenSieIhreZeitwuensche']='Please check/change your preferred teaching times and click "Save"';
$this->phrasen['zeitwunsch/erstellenSieIhreZeitwuensche']='Please enter / change your preferred teaching times and click "Save"';
$this->phrasen['zeitwunsch/wert']='Value';
$this->phrasen['zeitwunsch/bedeutung']='Meaning';
$this->phrasen['zeitwunsch/hierMoechteIchUnterrichten']='I would like to teach at this time';
@@ -23,4 +24,21 @@ $this->phrasen['zeitwunsch/erklaerung']='Explanation';
$this->phrasen['zeitwunsch/beiProblemenWendenSieSichAn']='If you are having problems, please contact the ';
$this->phrasen['zeitwunsch/profil']='Profile';
$this->phrasen['zeitwunsch/geteilteArbeitszeit']='Ich bin mit der Verplanung meiner Lehre in getrennten Blöcken am Tagesrand einverstanden.';
$this->phrasen['zeitwunsch/gueltigIm']="My preferred times valid in: ";
$this->phrasen['zeitwunsch/erklaerungstext']="You can edit your preferred times directly in the table or copy a your preferred times from a previous semester.<br>
<b>As long as you do not make any changes, your preferred times will be carried over to the next study semester.</b>";
$this->phrasen['zeitwunsch/werteAuf1setzen']="Set all values to 1";
$this->phrasen['zeitwunsch/kopierenText']="Select the desired semester on the right.
Your preferred time of that semester is then <u> automatically </u> transferred to the table.<br>
Make changes if necessary and then click on 'Save'.";
$this->phrasen['zeitwunsch/kopieren']= "change";
$this->phrasen['zeitwunsch/aendern']= "copy from a previous semester";
$this->phrasen['zeitwunsch/stundenBereitsVerplant']='Hours already scheduled for %s';
$this->phrasen['zeitwunsch/fuer']='Preferred time for %s &ensp;';
$this->phrasen['zeitwunsch/bearbeitungDeaktiviert']='Editing disabled';
$this->phrasen['zeitwunsch/bearbeitungDeaktiviertText']='You have already been assigned to course(s) in %s.</span><br>
Please agree <a href="mailto:%s">per Mail</a> with the degree programs concerned, before making a change.<br>
Would you still like to continue without agreement or after having agreed?';
$this->phrasen['zeitwunsch/bearbeitungAktivieren']='Enable editing';
$this->phrasen['zeitwunsch/kompetenzfeldWirdInformiert']= 'INFO: The field of competence will be informed of your changes by email';
?>
-127
View File
@@ -1,127 +0,0 @@
# Globally valid entries
build_settings:
ignore: # Ignores vendor and tests folders
- "vendor"
- "tests"
pgsql: # PostgreSQL connection parameters
host: "localhost;dbname=template1" # Connects to the template1 database to be able to drop database fhcomplete
user: "fhcomplete"
pass: "fhcomplete"
setup: # First!
pgsql: # Close previous connections to database -> drop database -> create database
- "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE pid <> pg_backend_pid() AND datname = 'fhcomplete';"
- "DROP DATABASE IF EXISTS fhcomplete;"
- "CREATE DATABASE fhcomplete;"
composer: # Run composer to install all the required 3rd party software
shell:
# Install addons
- "git clone --quiet https://github.com/FH-Complete/FHC-AddOn-Abrechnung.git %BUILD_PATH%/addons/abrechnung"
- "git clone --quiet https://github.com/FH-Complete/FHC-AddOn-Asterisk.git %BUILD_PATH%/addons/asterisk"
- "git clone --quiet https://github.com/FH-Complete/FHC-AddOn-Aufnahme.git %BUILD_PATH%/addons/aufnahme"
- "git clone --quiet https://github.com/FH-Complete/FHC-AddOn-Bewerbung.git %BUILD_PATH%/addons/bewerbung"
- "git clone --quiet https://github.com/FH-Complete/FHC-AddOn-CaseTime.git %BUILD_PATH%/addons/casetime"
- "git clone --quiet https://github.com/FH-Complete/FHC-AddOn-LDAP.git %BUILD_PATH%/addons/ldap"
- "git clone --quiet https://github.com/FH-Complete/FHC-AddOn-Lehrmittel.git %BUILD_PATH%/addons/lehrmittel"
- "git clone --quiet https://github.com/FH-Complete/FHC-AddOn-LV-Evaluierung.git %BUILD_PATH%/addons/lvevaluierung"
- "git clone --quiet https://github.com/FH-Complete/FHC-AddOn-LVInfo.git %BUILD_PATH%/addons/lvinfo"
- "git clone --quiet https://github.com/FH-Complete/FHC-AddOn-Kompetenzen.git %BUILD_PATH%/addons/kompetenzen"
- "git clone --quiet https://github.com/FH-Complete/FHC-AddOn-Moodle.git %BUILD_PATH%/addons/moodle"
- "git clone --quiet https://github.com/FH-Complete/FHC-AddOn-Reports.git %BUILD_PATH%/addons/reports"
- "git clone --quiet https://github.com/FH-Complete/FHC-AddOn-Studiengangsverwaltung.git %BUILD_PATH%/addons/studiengangsverwaltung"
- "git clone --quiet https://github.com/FH-Complete/FHC-AddOn-Textbausteine.git %BUILD_PATH%/addons/textbausteine"
- "git clone --quiet https://github.com/FH-Complete/FHC-AddOn-WaWi.git %BUILD_PATH%/addons/wawi"
# Copy addons configs
- "cp -R /var/www/configs/fhc/abrechnung/* %BUILD_PATH%/addons/abrechnung"
- "cp -R /var/www/configs/fhc/asterisk/* %BUILD_PATH%/addons/asterisk"
- "cp -R /var/www/configs/fhc/bewerbung/* %BUILD_PATH%/addons/bewerbung"
- "cp -R /var/www/configs/fhc/casetime/* %BUILD_PATH%/addons/casetime"
- "cp -R /var/www/configs/fhc/lehrmittel/* %BUILD_PATH%/addons/lehrmittel"
- "cp -R /var/www/configs/fhc/lvinfo/* %BUILD_PATH%/addons/lvinfo"
- "cp -R /var/www/configs/fhc/reports/* %BUILD_PATH%/addons/reports"
- "cp -R /var/www/configs/fhc/wawi/* %BUILD_PATH%/addons/wawi"
# Copy core configs and .htaccess
- "cp -R /var/www/configs/fhc/configs/* ./config"
- "cp /var/www/configs/fhc/configs/.htaccess ./cis/private/"
- "cp /var/www/configs/fhc/configs/.htaccess ./content"
- "cp /var/www/configs/fhc/configs/.htaccess ./rdf"
- "cp /var/www/configs/fhc/configs/.htaccess ./system"
- "cp /var/www/configs/fhc/configs/.htaccess ./vilesci"
# Create core directories
- "mkdir documents"
- "mkdir documents/csv_import"
- "mkdir documents/dms"
- "mkdir documents/import"
- "mkdir documents/benotungstool"
- "mkdir paabgabe"
# Copy codeigniter configs
- "mkdir ./application/config/development"
- "cp -R /var/www/configs/ci/* ./application/config/development"
# Clone extensions
- "git clone --quiet https://github.com/FH-Complete/FHC-Core-MobilityOnline.git /tmp/FHC-Core-MobilityOnline"
- "git clone --quiet https://github.com/FH-Complete/FHC-Core-Budget.git /tmp/FHC-Core-Budget"
- "git clone --quiet https://github.com/FH-Complete/FHC-Core-DSMS.git /tmp/FHC-Core-DSMS"
- "git clone --quiet https://github.com/FH-Complete/FHC-Core-Nextcloud.git /tmp/FHC-Core-Nextcloud"
# Create extensions archives
- "tar cfzP /tmp/FHC-Core-MobilityOnline.tgz /tmp/FHC-Core-MobilityOnline/"
- "tar cfzP /tmp/FHC-Core-Budget.tgz /tmp/FHC-Core-Budget/"
- "tar cfzP /tmp/FHC-Core-DSMS.tgz /tmp/FHC-Core-DSMS/"
- "tar cfzP /tmp/FHC-Core-Nextcloud.tgz /tmp/FHC-Core-Nextcloud/"
# Install extensions
#- "php index.ci.php system/extensions/CLI_Manager uploadExtension FHC-Core-MobilityOnline /tmp/FHC-Core-MobilityOnline.tgz"
#- "php index.ci.php system/extensions/CLI_Manager uploadExtension FHC-Core-Budget /tmp/FHC-Core-Budget.tgz"
#- "php index.ci.php system/extensions/CLI_Manager uploadExtension FHC-Core-DSMS /tmp/FHC-Core-DSMS.tgz"
#- "php index.ci.php system/extensions/CLI_Manager uploadExtension FHC-Core-Nextcloud /tmp/FHC-Core-Nextcloud.tgz"
# Remove temporary files
- "rm -fR /tmp/FHC-Core-MobilityOnline*"
- "rm -fR /tmp/FHC-Core-Budget*"
- "rm -fR /tmp/FHC-Core-DSMS*"
- "rm -fR /tmp/FHC-Core-Nextcloud*"
# Change files permissions
- "chmod -R 0770 *"
- "find . -type f -exec chmod 0644 {} \\;"
# Create a symlink to the current build folder
- "ln -s %BUILD_PATH% ../fhcomplete"
test: # Run tests
php_parallel_lint: # Lint cannot fail!
php_mess_detector: # Mess detector
rules:
- "unusedcode"
- "codesize"
- "design"
allow_failures: true
php_cpd: # Copy/paste detector
ignore:
- "rdf"
- "config"
- "locale"
- "application/config"
- "application/views"
# Global ignore is overwritten by the specific one
- "vendor"
- "tests"
allow_failures: true
php_code_sniffer: # Code sniffer
standard: "tests/codesniffer/FHComplete"
ignore:
- "rdf"
- "locale"
- "application/views"
allowed_warnings: -1 # Warnings are ignored for a successful build
allow_failures: true
#codeception: # Codeception
# config: "tests/codeception/"
# path: "tests/codeception/_output/"
# allow_failures: true
failure: # On failure
email: # Send an email to warn the team
default_mailto_address: systementwicklung@technikum-wien.at
complete: # Last!
pgsql: # Close previous connections to database -> drop database
- "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE pid <> pg_backend_pid() AND datname = 'fhcomplete';"
- "DROP DATABASE IF EXISTS fhcomplete;"
shell: # Remove the previously created symlink
- "rm ../fhcomplete"
@@ -3,6 +3,8 @@ const ANRECHNUNGSTATUS_REJECTED = 'rejected';
const HERKUNFT_DER_KENNTNISSE_MAX_LENGTH = 125;
$(function(){
const uploadMaxFilesize = $('#requestAnrechnung-uploadfile').data('maxsize') ; // in byte
// Set status alert color
requestAnrechnung.setStatusAlertColor();
@@ -26,6 +28,12 @@ $(function(){
// Avoid form redirecting automatically
e.preventDefault();
var fileInput = $('#requestAnrechnung-uploadfile');
if (!requestAnrechnung.fileSizeOk(fileInput, uploadMaxFilesize)) // in byte
{
return FHC_DialogLib.alertWarning(FHC_PhrasesLib.t("ui", "errorDokumentZuGross"));
}
FHC_AjaxClient.ajaxCallPost(
FHC_JS_DATA_STORAGE_OBJECT.called_path + "/apply",
{
@@ -161,5 +169,19 @@ var requestAnrechnung = {
// Disable all form elements
$("#requestAnrechnung-form :input").prop("disabled", true);
},
fileSizeOk: function(fileInput, maxSize){
if (fileInput.get(0).files.length){
var fileSize = fileInput.get(0).files[0].size; // in bytes
if (fileSize > maxSize)
{
return false;
}
return true;
}
}
}
+176
View File
@@ -0,0 +1,176 @@
$(function(){
var studiensemesterStart = $("#studsemStart").val();
Zverfueg.initDatepicker(studiensemesterStart);
$('#form-zeitverfuegbarkeit').submit(function(e){
e.preventDefault();
let zeitsperre_id = this.zeitsperre_id.value;
let mitarbeiter_uid = this.mitarbeiter_uid.value;
let lektor = this.mitarbeiter_uid.options[this.mitarbeiter_uid.selectedIndex].text;
let bezeichnung = this.bezeichnung.value;
let vondatum = this.vondatum.value;
let vonstunde = this.vonstunde.value;
let bisdatum = this.bisdatum.value;
let bisstunde = this.bisstunde.value;
FHC_AjaxClient.ajaxCallPost(
FHC_JS_DATA_STORAGE_OBJECT.called_path + "/saveZeitverfuegbarkeit",
{
zeitsperre_id: zeitsperre_id,
mitarbeiter_uid: mitarbeiter_uid,
bezeichnung: bezeichnung,
zeitsperretyp_kurzbz: 'ZVerfueg',
vondatum: vondatum,
vonstunde: vonstunde,
bisdatum: bisdatum,
bisstunde: bisstunde
},
{
successCallback: function (data, textStatus, jqXHR)
{
if (FHC_AjaxClient.isError(data))
{
FHC_DialogLib.alertWarning(FHC_AjaxClient.getError(data));
}
if (FHC_AjaxClient.hasData(data))
{
if (zeitsperre_id == '')
{
// Add row
$('#tableWidgetTabulator').tabulator('addRow', {
zeitsperre_id: FHC_AjaxClient.getData(data).zeitsperre_id,
mitarbeiter_uid: mitarbeiter_uid,
lektor: lektor,
vondatum: vondatum,
vonstunde: $.isNumeric(vonstunde) ? vonstunde : '',
bisdatum: bisdatum,
bisstunde: $.isNumeric(bisstunde) ? bisstunde : '',
bezeichnung: bezeichnung
}, true); // true adds new row on top
}
else {
$('#tableWidgetTabulator').tabulator('updateData', [{
zeitsperre_id: zeitsperre_id,
vondatum: vondatum,
vonstunde: $.isNumeric(vonstunde) ? vonstunde : '',
bisdatum: bisdatum,
bisstunde: $.isNumeric(bisstunde) ? bisstunde : '',
bezeichnung: bezeichnung
}]);
}
// Reset form
Zverfueg.resetFormFields();
// Disable form elements
Zverfueg.disableFormElements();
// Display success message
FHC_DialogLib.alertSuccess(FHC_AjaxClient.getData(data).msg);
}
},
errorCallback: function (jqXHR, textStatus, errorThrown)
{
FHC_DialogLib.alertError(FHC_PhrasesLib.t("ui", "systemfehler"));
}
}
);
})
$('#btn-delete').click(function() {
let zeitsperre_id = $('#zeitsperre_id').val();
FHC_AjaxClient.ajaxCallPost(
FHC_JS_DATA_STORAGE_OBJECT.called_path + "/deleteZeitverfuegbarkeit",
{
zeitsperre_id: zeitsperre_id,
},
{
successCallback: function (data, textStatus, jqXHR) {
if (FHC_AjaxClient.isError(data)) {
FHC_DialogLib.alertWarning(FHC_AjaxClient.getError(data));
}
if (FHC_AjaxClient.hasData(data)) {
// Delete row
let row = $('#tableWidgetTabulator').tabulator('getRow', zeitsperre_id);
row.delete(zeitsperre_id);
// Reset form
Zverfueg.resetFormFields();
// Disable form elements
Zverfueg.disableFormElements();
// Display delete message
FHC_DialogLib.alertSuccess(FHC_AjaxClient.getData(data).msg);
}
},
errorCallback: function (jqXHR, textStatus, errorThrown)
{
FHC_DialogLib.alertError(FHC_PhrasesLib.t("ui", "systemfehler"));
}
});
});
$('#btn-break').click(function () {
Zverfueg.disableFormElements();
})
})
var Zverfueg = {
initDatepicker: function (studiensemesterStart) {
// Prevent opening HTMl date picker
$('input[type=date]').on('click', function(event) {
event.preventDefault();
});
$.datepicker.setDefaults($.datepicker.regional['de']);
$( ".zverfueg-datepicker" ).datepicker({
"dateFormat": "yy-mm-dd",
"minDate": $.datepicker.formatDate('yy-mm-dd', new Date(studiensemesterStart))
});
},
resetFormFields: function(){
$('#form-zeitverfuegbarkeit')
.trigger('reset')
.find('input:hidden[name=zeitsperre_id]').val('')
.find('textarea[name=bezeichnung]').val('');
},
disableFormElements: function (){
$('#btn-delete').prop('disabled', true).tooltip('enable');
$('#mitarbeiter_uid').prop('disabled', false);
},
enableFormElements: function (){
$('#btn-delete').prop('disabled', false).tooltip('disable');
$('#mitarbeiter_uid').prop('disabled', true);
}
}
// TABULATOR FUNCTIONS
// ---------------------------------------------------------------------------------------------------------------------
function func_rowSelected(row){
Zverfueg.enableFormElements();
// Set form fields
$('#zeitsperre_id').val(row.getData().zeitsperre_id);
$('#mitarbeiter_uid').val(row.getData().mitarbeiter_uid);
$('#bezeichnung').val(row.getData().bezeichnung);
$('#vondatum').datepicker('setDate', row.getData().vondatum);
$('#bisdatum').datepicker('setDate', row.getData().bisdatum);
$('#vonstunde').val(row.getData().vonstunde);
$('#bisstunde').val(row.getData().bisstunde);
}
function func_rowDeselected(row){
Zverfueg.resetFormFields();
Zverfueg.disableFormElements();
Zverfueg.resetFormFields();
}
+3 -3
View File
@@ -30,9 +30,9 @@ header("Content-type: application/xhtml+xml");
echo '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>';
// DAO
require_once('../config/vilesci.config.inc.php');
require_once('../include/adresse.class.php');
require_once('../include/adressentyp.class.php');
$adresse = new adresse();
$adresse = new adressentyp();
$rdf_url='http://www.technikum-wien.at/adressentyp';
echo '
@@ -44,7 +44,7 @@ echo '
<RDF:Seq about="'.$rdf_url.'/liste">
';
if ($adresse->getAdressentyp())
if ($adresse->getAll())
{
foreach ($adresse->result as $row)
{
+2 -2
View File
@@ -287,7 +287,7 @@ if($prestudent_help->load($prest_id))
$titel_kurzbz = '';
}
if ($prestudent_help->getLastStatus($prest_id, null, 'Student'))
if ($prestudent_help->getLastStatus($prest_id, null))
{
$studienplan_id = $prestudent_help->studienplan_id;
$studienordnung = new studienordnung();
@@ -327,7 +327,7 @@ foreach($prestudent_arr as $prest_id)
$lehrgangstyp = new studiengang();
$lehrgangstyp->loadLehrgangstyp($studiengang->lgartcode);
if ($prestudent->getLastStatus($prestudent->prestudent_id, null, 'Student'))
if ($prestudent->getLastStatus($prestudent->prestudent_id, null))
{
$studienplan_id = $prestudent->studienplan_id;
$studienordnung = new studienordnung();
+17 -1
View File
@@ -649,7 +649,16 @@ if (isset($_REQUEST["xmlformat"]) && $_REQUEST["xmlformat"] == "xml")
WHERE
student_uid = ".$db->db_add_param($uid_arr[$i])."
AND zeugnis = true
AND studiensemester_kurzbz in (".$sqlStudent->implode4SQL($aktuellesSemester).")
AND studiensemester_kurzbz in (".$sqlStudent->implode4SQL($aktuellesSemester).")";
if (defined('ZEUGNISNOTE_NICHT_ANZEIGEN'))
{
$qry .="
AND note.anmerkung NOT IN (".$sqlStudent->implode4SQL(unserialize(ZEUGNISNOTE_NICHT_ANZEIGEN)).")
";
};
$qry .= "
AND NOT EXISTS(SELECT 1 FROM bis.tbl_bisio JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
WHERE lehrveranstaltung_id=tbl_lehrveranstaltung.lehrveranstaltung_id
AND student_uid=".$db->db_add_param($uid_arr[$i])."
@@ -916,6 +925,13 @@ if (isset($_REQUEST["xmlformat"]) && $_REQUEST["xmlformat"] == "xml")
lehrveranstaltung_id = ".$db->db_add_param($row_outgoing->lehrveranstaltung_id)."
AND student_uid = ".$db->db_add_param($uid_arr[$i]);
if (defined('ZEUGNISNOTE_NICHT_ANZEIGEN'))
{
$qry_outgoing_note .= "
AND tbl_note.anmerkung NOT IN (".$db->implode4SQL(unserialize(ZEUGNISNOTE_NICHT_ANZEIGEN)).")
";
};
if($result_outgoing_note = $db->db_query($qry_outgoing_note))
{
if($row_outgoing_note = $db->db_fetch_object($result_outgoing_note))
+11
View File
@@ -40,6 +40,8 @@ require_once('../include/mitarbeiter.class.php');
require_once('../include/zeitaufzeichnung_gd.class.php');
require_once('../include/lehreinheitmitarbeiter.class.php');
require_once('../include/vertrag.class.php');
require_once('../include/studiensemester.class.php');
require_once('../include/zeitsperre.class.php');
$uid=get_uid();
$error_msg='';
@@ -136,6 +138,14 @@ if (!$error_msg)
die ('Fehler bei Methode getLehreinheitLVPL(): '.$lehreinheit->errormsg);
$lva=$lehreinheit->lehreinheiten;
$rdf_url='http://www.technikum-wien.at/lehreinheit-lvplan/';
// Positive Zeitsperre 'Zeitverfuegbarkeit' holen
$ss = new Studiensemester($studiensemester);
$zeitsperre = new Zeitsperre();
$zeitsperre->getVonBis($lektor, $ss->start, $ss->ende, 'ZVerfueg');
$zeitverfuegbarkeit = count($zeitsperre->result) > 0 ? 'Zeit verfügbar' : '';
?>
<RDF:RDF
@@ -395,6 +405,7 @@ if ($anz>0)
<LVA:anzahl_notizen>'.$anzahl_notizen.'</LVA:anzahl_notizen>
<LVA:lehreinheit_id>'.$l->lehreinheit_id[0].'</LVA:lehreinheit_id>
<LVA:vertragsstatus>'.$vertragsstatus.'</LVA:vertragsstatus>
<LVA:zeitverfuegbarkeit>'. $zeitverfuegbarkeit. '</LVA:zeitverfuegbarkeit>
</RDF:Description>
</RDF:li>';
}
+1 -1
View File
@@ -80,7 +80,7 @@ function draw_content($row)
<PROJEKTBETREUER:faktor><![CDATA['.$row->faktor.']]></PROJEKTBETREUER:faktor>
<PROJEKTBETREUER:name><![CDATA['.$row->name.']]></PROJEKTBETREUER:name>
<PROJEKTBETREUER:punkte><![CDATA['.$row->punkte.']]></PROJEKTBETREUER:punkte>
<PROJEKTBETREUER:stunden><![CDATA['.number_format($row->stunden,1).']]></PROJEKTBETREUER:stunden>
<PROJEKTBETREUER:stunden><![CDATA['.(float)$row->stunden.']]></PROJEKTBETREUER:stunden>
<PROJEKTBETREUER:stundensatz><![CDATA['.$row->stundensatz.']]></PROJEKTBETREUER:stundensatz>
<PROJEKTBETREUER:betreuerart_kurzbz><![CDATA['.$row->betreuerart_kurzbz.']]></PROJEKTBETREUER:betreuerart_kurzbz>
<PROJEKTBETREUER:vertrag_id><![CDATA['.$row->vertrag_id.']]></PROJEKTBETREUER:vertrag_id>
+1 -3
View File
@@ -256,9 +256,7 @@ if (isset($_REQUEST["xmlformat"]) && $_REQUEST["xmlformat"] == "xml")
}
$obj = new zeugnisnote();
$obj->getZeugnisnoten($lehrveranstaltung_id=null, $uid_arr[$i], $studiensemester_kurzbz);
$obj->getZeugnisnoten($lehrveranstaltung_id=null, $uid_arr[$i], $studiensemester_kurzbz, (defined('ZEUGNISNOTE_NICHT_ANZEIGEN')) ? unserialize(ZEUGNISNOTE_NICHT_ANZEIGEN) : null);
$ects_gesamt = $ects_gesamt_positiv = 0;
$prestudent_id = $row->prestudent_id;
+1
View File
@@ -118,6 +118,7 @@ foreach ($obj->result as $row)
<NOTE:student_vorname><![CDATA['.$benutzer->vorname.']]></NOTE:student_vorname>
<NOTE:studiengang><![CDATA['.(isset($stg_arr[$benutzer->studiengang_kz])?$stg_arr[$benutzer->studiengang_kz]:'').']]></NOTE:studiengang>
<NOTE:studiengang_kz><![CDATA['.$benutzer->studiengang_kz.']]></NOTE:studiengang_kz>
<NOTE:verband><![CDATA['.$benutzer->verband.']]></NOTE:verband>
<NOTE:studiengang_lv><![CDATA['.$stg_arr[$lv_obj->studiengang_kz].']]></NOTE:studiengang_lv>
<NOTE:studiengang_kz_lv><![CDATA['.$lv_obj->studiengang_kz.']]></NOTE:studiengang_kz_lv>
<NOTE:semester_lv><![CDATA['.$lv_obj->semester.']]></NOTE:semester_lv>
+6
View File
@@ -20,6 +20,12 @@ label.tempus_vertrag_info
font-size: x-small
}
label.tempus_lektor_verfuegbarezeit
{
font-weight: bold;
color: green;
}
label.kalenderwoche
{
font-size: medium;
+150 -2
View File
@@ -5940,7 +5940,6 @@ if ($result = $db->db_query("SELECT * FROM pg_class WHERE relname='idx_tbl_zeita
echo 'Index fuer campus.tbl_zeitaufzeichnung.uid hinzugefuegt<br>';
}
}
// Change size of wawi.tbl_kostenstelle.kostenstelle_nr from character varying(4) to character varying(6)
if ($result = $db->db_query("SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='wawi' AND TABLE_NAME='tbl_kostenstelle' AND COLUMN_NAME = 'kostenstelle_nr' AND character_maximum_length < 6"))
{
@@ -5965,6 +5964,126 @@ if(!$result = @$db->db_query("SELECT behebung_parameter FROM system.tbl_issue LI
echo '<br>Added column behebung_parameter to table system.tbl_issue';
}
// Add table campus.tbl_zeitwunsch_gueltigkeit and migrate initial data
if($result = $db->db_query("SELECT * FROM information_schema.tables WHERE table_schema LIKE 'campus' AND table_name = 'tbl_zeitwunsch_gueltigkeit'"))
{
if ($db->db_fetch_object($result) == false)
{
$qry = "
CREATE TABLE campus.tbl_zeitwunsch_gueltigkeit
(
zeitwunsch_gueltigkeit_id INTEGER NOT NULL,
mitarbeiter_uid CHARACTER VARYING(32) NOT NULL,
von DATE,
bis DATE,
insertamum TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW(),
insertvon CHARACTER VARYING(32),
updateamum TIMESTAMP WITHOUT TIME ZONE,
updatevon CHARACTER VARYING(32)
);
CREATE SEQUENCE campus.seq_zeitwunsch_gueltigkeit_zeitwunsch_gueltigkeit_id
INCREMENT BY 1
NO MAXVALUE
NO MINVALUE
CACHE 1;
-- Add Primary Key
ALTER TABLE campus.tbl_zeitwunsch_gueltigkeit ADD CONSTRAINT pk_zeitwunsch_gueltigkeit_zeitwunsch_gueltigkeit_id PRIMARY KEY (zeitwunsch_gueltigkeit_id);
ALTER TABLE campus.tbl_zeitwunsch_gueltigkeit ALTER COLUMN zeitwunsch_gueltigkeit_id SET DEFAULT nextval('campus.seq_zeitwunsch_gueltigkeit_zeitwunsch_gueltigkeit_id');
-- Add Permissions
GRANT SELECT, UPDATE ON SEQUENCE campus.seq_zeitwunsch_gueltigkeit_zeitwunsch_gueltigkeit_id TO vilesci;
GRANT SELECT, UPDATE ON SEQUENCE campus.seq_zeitwunsch_gueltigkeit_zeitwunsch_gueltigkeit_id TO web;
GRANT SELECT, INSERT, UPDATE, DELETE ON campus.tbl_zeitwunsch_gueltigkeit TO vilesci;
GRANT SELECT, INSERT, UPDATE ON campus.tbl_zeitwunsch_gueltigkeit TO web;
-- Initial data migration
INSERT INTO campus.tbl_zeitwunsch_gueltigkeit
(
mitarbeiter_uid,
von,
bis,
insertamum,
insertvon,
updateamum,
updatevon
)
SELECT * FROM
(
-- Unique Mitarbeiter from Zeitwunsch Tabelle, Start of actual Studiensemester and open end
SELECT DISTINCT mitarbeiter_uid,
(SELECT start FROM public.tbl_studiensemester WHERE start <= NOW() AND ende >= NOW()),
NULL::DATE AS \"ende\",
NOW(),
'system',
NOW(),
'system'
FROM campus.tbl_zeitwunsch
ORDER BY mitarbeiter_uid
) AS init_data
";
if(!$db->db_query($qry))
echo '<strong>campus.tbl_zeitwunsch_gueltigkeit: '.$db->db_last_error().'</strong><br>';
else
echo 'campus.tbl_zeitwunsch_gueltigkeit: Tabelle hinzugefuegt<br>';
}
}
// Add column zeitwunsch_id (as new primary key) and zeitwunsch_gueltigkeit_id to campus.tbl_zeitwunsch
if ($result = $db->db_query("SELECT 1 FROM information_schema.columns WHERE table_schema = 'campus' AND table_name = 'tbl_zeitwunsch' AND column_name IN ('zeitwunsch_id', 'zeitwunsch_gueltigkeit_id')"))
{
if ($db->db_num_rows($result) <> 2)
{
$qry = "
ALTER TABLE campus.tbl_zeitwunsch DROP CONSTRAINT IF EXISTS pk_tbl_zeitwunsch; -- Drop combined pk stunde/mitarbeiter_uid/tag
-- Add primary key and foreign key
ALTER TABLE campus.tbl_zeitwunsch ADD COLUMN IF NOT EXISTS zeitwunsch_id INTEGER;
ALTER TABLE campus.tbl_zeitwunsch ADD COLUMN IF NOT EXISTS zeitwunsch_gueltigkeit_id INTEGER;
-- Add comments
COMMENT ON COLUMN campus.tbl_zeitwunsch.zeitwunsch_gueltigkeit_id IS 'Ordnet die Zeitwuensche einer Gueltigkeitsdauer von-bis zu';
COMMENT ON COLUMN campus.tbl_zeitwunsch.mitarbeiter_uid IS 'DEPRECATED';
CREATE SEQUENCE campus.seq_zeitwunsch_zeitwunsch_id
INCREMENT BY 1
NO MAXVALUE
NO MINVALUE
CACHE 1;
ALTER TABLE campus.tbl_zeitwunsch ALTER COLUMN zeitwunsch_id SET DEFAULT nextval('campus.seq_zeitwunsch_zeitwunsch_id');
UPDATE campus.tbl_zeitwunsch SET zeitwunsch_id = nextval('campus.seq_zeitwunsch_zeitwunsch_id');
ALTER TABLE campus.tbl_zeitwunsch ADD CONSTRAINT pk_zeitwunsch_zeitwunsch_id PRIMARY KEY (zeitwunsch_id);
ALTER TABLE campus.tbl_zeitwunsch ADD CONSTRAINT fk_zeitwunsch_zeitwunsch_gueltigkeit_id FOREIGN KEY (zeitwunsch_gueltigkeit_id) REFERENCES campus.tbl_zeitwunsch_gueltigkeit(zeitwunsch_gueltigkeit_id) ON DELETE RESTRICT ON UPDATE CASCADE;
-- Set initial zeitwunsch_gueltigkeit_id values to Gueltigkeitszeitraum of actual Studiensemester
UPDATE campus.tbl_zeitwunsch
SET zeitwunsch_gueltigkeit_id = (
SELECT zeitwunsch_gueltigkeit_id
FROM campus.tbl_zeitwunsch_gueltigkeit zwg
WHERE tbl_zeitwunsch.mitarbeiter_uid = zwg.mitarbeiter_uid
);
-- Set primary key and foreign key NOT NULL
ALTER TABLE campus.tbl_zeitwunsch ALTER COLUMN zeitwunsch_id SET NOT NULL;
ALTER TABLE campus.tbl_zeitwunsch ALTER COLUMN zeitwunsch_gueltigkeit_id SET NOT NULL;
-- Set permissions
GRANT SELECT, UPDATE ON SEQUENCE campus.seq_zeitwunsch_zeitwunsch_id TO vilesci;
GRANT SELECT, UPDATE ON SEQUENCE campus.seq_zeitwunsch_zeitwunsch_id TO web;
";
if (!$db->db_query($qry))
echo '<strong>campus.tbl_zeitwunsch: ' . $db->db_last_error() . '</strong><br>';
else
echo '<br>campus.tbl_zeitwunsch: Neue Spalte zeitwunsch_id hinzugefuegt.';
}
}
// Add index beschreibung to system.tbl_webservicelog
if ($result = $db->db_query("SELECT * FROM pg_class WHERE relname='idx_webservicelog_beschreibung'"))
{
@@ -5979,6 +6098,34 @@ if ($result = $db->db_query("SELECT * FROM pg_class WHERE relname='idx_webservic
}
}
// Insert postive Zeitsperre 'Zeitverfuegbarkeit' to tbl_zeitsperretyp
if($result = @$db->db_query("SELECT 1 FROM campus.tbl_zeitsperretyp WHERE zeitsperretyp_kurzbz = 'ZVerfueg';"))
{
if($db->db_num_rows($result) == 0)
{
$qry = "INSERT INTO campus.tbl_zeitsperretyp(zeitsperretyp_kurzbz, beschreibung) VALUES('ZVerfueg', 'Zeitverfügbarkeit');";
if(!$db->db_query($qry))
echo '<strong>campus.tbl_zeitsperretyp '.$db->db_last_error().'</strong><br>';
else
echo 'campus.tbl_zeitsperretyp: Added value \'ZVerfueg\'<br>';
}
}
// Add permission to administrate zeitverfuegbarkeiten
if($result = @$db->db_query("SELECT 1 FROM system.tbl_berechtigung WHERE berechtigung_kurzbz = 'lehre/zeitverfuegbarkeit';"))
{
if($db->db_num_rows($result) == 0)
{
$qry = "INSERT INTO system.tbl_berechtigung(berechtigung_kurzbz, beschreibung) VALUES('lehre/zeitverfuegbarkeit', 'Zeitverfuegbarkeit verwalten');";
if(!$db->db_query($qry))
echo '<strong>system.tbl_berechtigung '.$db->db_last_error().'</strong><br>';
else
echo ' system.tbl_berechtigung: Added permission for lehre/zeitverfuegbarkeit<br>';
}
}
// *** Pruefung und hinzufuegen der neuen Attribute und Tabellen
echo '<H2>Pruefe Tabellen und Attribute!</H2>';
@@ -6071,7 +6218,8 @@ $tabellen=array(
"campus.tbl_zeitaufzeichnung_gd" => array("zeitaufzeichnung_gd_id","uid","studiensemester_kurzbz","selbstverwaltete_pause","insertamum","insertvon","updateamum","updatevon"),
"campus.tbl_zeitsperre" => array("zeitsperre_id","zeitsperretyp_kurzbz","mitarbeiter_uid","bezeichnung","vondatum","vonstunde","bisdatum","bisstunde","vertretung_uid","updateamum","updatevon","insertamum","insertvon","erreichbarkeit_kurzbz","freigabeamum","freigabevon"),
"campus.tbl_zeitsperretyp" => array("zeitsperretyp_kurzbz","beschreibung","farbe"),
"campus.tbl_zeitwunsch" => array("stunde","mitarbeiter_uid","tag","gewicht","updateamum","updatevon","insertamum","insertvon"),
"campus.tbl_zeitwunsch" => array("stunde","mitarbeiter_uid","tag","gewicht","updateamum","updatevon","insertamum","insertvon", "zeitwunsch_id", "zeitwunsch_gueltigkeit_id"),
"campus.tbl_zeitwunsch_gueltigkeit" => array("zeitwunsch_gueltigkeit_id","mitarbeiter_uid","von","bis","insertamum","insertvon", "updateamum","updatevon"),
"fue.tbl_aktivitaet" => array("aktivitaet_kurzbz","beschreibung","sort"),
"fue.tbl_aufwandstyp" => array("aufwandstyp_kurzbz","bezeichnung"),
"fue.tbl_projekt" => array("projekt_kurzbz","nummer","titel","beschreibung","beginn","ende","oe_kurzbz","budget","farbe","aufwandstyp_kurzbz","ressource_id","anzahl_ma","aufwand_pt","projekt_id","projekttyp_kurzbz","zeitaufzeichnung"),
+3 -1
View File
@@ -1026,7 +1026,9 @@ $filters = array(
{"name": "nachname"},
{"name": "matrikelnummer"},
{"name": "studiengang"},
{"name": "studiensemester"}
{"name": "studiensemester"},
{"name": "last_status"},
{"name": "bismelden"}
],
"filters": []
}
+60
View File
@@ -1554,6 +1554,26 @@ $phrases = array(
)
)
),
array(
'app' => 'core',
'category' => 'ui',
'phrase' => 'geloescht',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Gel&ouml;scht',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Deleted',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'anrechnung',
@@ -12353,6 +12373,46 @@ array(
)
)
),
array(
'app' => 'core',
'category' => 'ui',
'phrase' => 'errorDokumentZuGross',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => "Dokument zu groß",
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => "Document maximum size exceeded",
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'ui',
'phrase' => 'errorUploadFehltOderZuGross',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => "Dokument fehlt oder zu groß",
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => "Document missing or maximum size exceeded",
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'ui',
-2
View File
@@ -1,2 +0,0 @@
<?php
// This is global bootstrap for autoloading
@@ -1,26 +0,0 @@
<?php
/**
* Inherited Methods
* @method void wantToTest($text)
* @method void wantTo($text)
* @method void execute($callable)
* @method void expectTo($prediction)
* @method void expect($prediction)
* @method void amGoingTo($argumentation)
* @method void am($role)
* @method void lookForwardTo($achieveValue)
* @method void comment($description)
* @method \Codeception\Lib\Friend haveFriend($name, $actorClass = NULL)
*
* @SuppressWarnings(PHPMD)
*/
class AcceptanceTester extends \Codeception\Actor
{
use _generated\AcceptanceTesterActions;
/**
* Define custom actions here
*/
}
-39
View File
@@ -1,39 +0,0 @@
<?php
/**
* Inherited Methods
* @method void wantToTest($text)
* @method void wantTo($text)
* @method void execute($callable)
* @method void expectTo($prediction)
* @method void expect($prediction)
* @method void amGoingTo($argumentation)
* @method void am($role)
* @method void lookForwardTo($achieveValue)
* @method void comment($description)
* @method \Codeception\Lib\Friend haveFriend($name, $actorClass = NULL)
*
* @SuppressWarnings(PHPMD)
*/
class ApiTester extends \Codeception\Actor
{
const WAIT = 70000; // 0.07 seconds
use _generated\ApiTesterActions;
/**
* Define custom actions here
*/
public function wait($micro_seconds = null)
{
if (!is_null($micro_seconds))
{
usleep($micro_seconds);
}
else
{
usleep(ApiTester::WAIT);
}
}
}
@@ -1,26 +0,0 @@
<?php
/**
* Inherited Methods
* @method void wantToTest($text)
* @method void wantTo($text)
* @method void execute($callable)
* @method void expectTo($prediction)
* @method void expect($prediction)
* @method void amGoingTo($argumentation)
* @method void am($role)
* @method void lookForwardTo($achieveValue)
* @method void comment($description)
* @method \Codeception\Lib\Friend haveFriend($name, $actorClass = NULL)
*
* @SuppressWarnings(PHPMD)
*/
class FunctionalTester extends \Codeception\Actor
{
use _generated\FunctionalTesterActions;
/**
* Define custom actions here
*/
}
-25
View File
@@ -1,25 +0,0 @@
<?php
/**
* Inherited Methods
* @method void wantToTest($text)
* @method void wantTo($text)
* @method void execute($callable)
* @method void expectTo($prediction)
* @method void expect($prediction)
* @method void amGoingTo($argumentation)
* @method void am($role)
* @method void lookForwardTo($achieveValue)
* @method void comment($description)
* @method \Codeception\Lib\Friend haveFriend($name, $actorClass = NULL)
*
* @SuppressWarnings(PHPMD)
*/
class UnitTester extends \Codeception\Actor
{
use _generated\UnitTesterActions;
/**
* Define custom actions here
*/
}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -1,204 +0,0 @@
<?php //[STAMP] e88575298465f35c4ba48944693fdc61
namespace _generated;
// This class was automatically generated by build task
// You should not change it manually as it will be overwritten on next build
// @codingStandardsIgnoreFile
use Codeception\Module\Db;
trait FunctionalTesterActions
{
/**
* @return \Codeception\Scenario
*/
abstract protected function getScenario();
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Inserts an SQL record into a database. This record will be erased after the test.
*
* ``` php
* <?php
* $I->haveInDatabase('users', array('name' => 'miles', 'email' => 'miles@davis.com'));
* ?>
* ```
*
* @param string $table
* @param array $data
*
* @return integer $id
* @see \Codeception\Module\Db::haveInDatabase()
*/
public function haveInDatabase($table, $data) {
return $this->getScenario()->runStep(new \Codeception\Step\Action('haveInDatabase', func_get_args()));
}
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Asserts that a row with the given column values exists.
* Provide table name and column values.
*
* ``` php
* <?php
* $I->seeInDatabase('users', array('name' => 'Davert', 'email' => 'davert@mail.com'));
* ```
* Fails if no such user found.
*
* @param string $table
* @param array $criteria
* Conditional Assertion: Test won't be stopped on fail
* @see \Codeception\Module\Db::seeInDatabase()
*/
public function canSeeInDatabase($table, $criteria = null) {
return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeInDatabase', func_get_args()));
}
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Asserts that a row with the given column values exists.
* Provide table name and column values.
*
* ``` php
* <?php
* $I->seeInDatabase('users', array('name' => 'Davert', 'email' => 'davert@mail.com'));
* ```
* Fails if no such user found.
*
* @param string $table
* @param array $criteria
* @see \Codeception\Module\Db::seeInDatabase()
*/
public function seeInDatabase($table, $criteria = null) {
return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeInDatabase', func_get_args()));
}
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Asserts that the given number of records were found in the database.
*
* ``` php
* <?php
* $I->seeNumRecords(1, 'users', ['name' => 'davert'])
* ?>
* ```
*
* @param int $expectedNumber Expected number
* @param string $table Table name
* @param array $criteria Search criteria [Optional]
* Conditional Assertion: Test won't be stopped on fail
* @see \Codeception\Module\Db::seeNumRecords()
*/
public function canSeeNumRecords($expectedNumber, $table, $criteria = null) {
return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeNumRecords', func_get_args()));
}
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Asserts that the given number of records were found in the database.
*
* ``` php
* <?php
* $I->seeNumRecords(1, 'users', ['name' => 'davert'])
* ?>
* ```
*
* @param int $expectedNumber Expected number
* @param string $table Table name
* @param array $criteria Search criteria [Optional]
* @see \Codeception\Module\Db::seeNumRecords()
*/
public function seeNumRecords($expectedNumber, $table, $criteria = null) {
return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeNumRecords', func_get_args()));
}
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Effect is opposite to ->seeInDatabase
*
* Asserts that there is no record with the given column values in a database.
* Provide table name and column values.
*
* ``` php
* <?php
* $I->dontSeeInDatabase('users', array('name' => 'Davert', 'email' => 'davert@mail.com'));
* ```
* Fails if such user was found.
*
* @param string $table
* @param array $criteria
* Conditional Assertion: Test won't be stopped on fail
* @see \Codeception\Module\Db::dontSeeInDatabase()
*/
public function cantSeeInDatabase($table, $criteria = null) {
return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeInDatabase', func_get_args()));
}
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Effect is opposite to ->seeInDatabase
*
* Asserts that there is no record with the given column values in a database.
* Provide table name and column values.
*
* ``` php
* <?php
* $I->dontSeeInDatabase('users', array('name' => 'Davert', 'email' => 'davert@mail.com'));
* ```
* Fails if such user was found.
*
* @param string $table
* @param array $criteria
* @see \Codeception\Module\Db::dontSeeInDatabase()
*/
public function dontSeeInDatabase($table, $criteria = null) {
return $this->getScenario()->runStep(new \Codeception\Step\Assertion('dontSeeInDatabase', func_get_args()));
}
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Fetches a single column value from a database.
* Provide table name, desired column and criteria.
*
* ``` php
* <?php
* $mail = $I->grabFromDatabase('users', 'email', array('name' => 'Davert'));
* ```
*
* @param string $table
* @param string $column
* @param array $criteria
*
* @return mixed
* @see \Codeception\Module\Db::grabFromDatabase()
*/
public function grabFromDatabase($table, $column, $criteria = null) {
return $this->getScenario()->runStep(new \Codeception\Step\Action('grabFromDatabase', func_get_args()));
}
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Returns the number of rows in a database
*
* @param string $table Table name
* @param array $criteria Search criteria [Optional]
*
* @return int
* @see \Codeception\Module\Db::grabNumRecords()
*/
public function grabNumRecords($table, $criteria = null) {
return $this->getScenario()->runStep(new \Codeception\Step\Action('grabNumRecords', func_get_args()));
}
}
@@ -1,204 +0,0 @@
<?php //[STAMP] e88575298465f35c4ba48944693fdc61
namespace _generated;
// This class was automatically generated by build task
// You should not change it manually as it will be overwritten on next build
// @codingStandardsIgnoreFile
use Codeception\Module\Db;
trait UnitTesterActions
{
/**
* @return \Codeception\Scenario
*/
abstract protected function getScenario();
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Inserts an SQL record into a database. This record will be erased after the test.
*
* ``` php
* <?php
* $I->haveInDatabase('users', array('name' => 'miles', 'email' => 'miles@davis.com'));
* ?>
* ```
*
* @param string $table
* @param array $data
*
* @return integer $id
* @see \Codeception\Module\Db::haveInDatabase()
*/
public function haveInDatabase($table, $data) {
return $this->getScenario()->runStep(new \Codeception\Step\Action('haveInDatabase', func_get_args()));
}
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Asserts that a row with the given column values exists.
* Provide table name and column values.
*
* ``` php
* <?php
* $I->seeInDatabase('users', array('name' => 'Davert', 'email' => 'davert@mail.com'));
* ```
* Fails if no such user found.
*
* @param string $table
* @param array $criteria
* Conditional Assertion: Test won't be stopped on fail
* @see \Codeception\Module\Db::seeInDatabase()
*/
public function canSeeInDatabase($table, $criteria = null) {
return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeInDatabase', func_get_args()));
}
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Asserts that a row with the given column values exists.
* Provide table name and column values.
*
* ``` php
* <?php
* $I->seeInDatabase('users', array('name' => 'Davert', 'email' => 'davert@mail.com'));
* ```
* Fails if no such user found.
*
* @param string $table
* @param array $criteria
* @see \Codeception\Module\Db::seeInDatabase()
*/
public function seeInDatabase($table, $criteria = null) {
return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeInDatabase', func_get_args()));
}
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Asserts that the given number of records were found in the database.
*
* ``` php
* <?php
* $I->seeNumRecords(1, 'users', ['name' => 'davert'])
* ?>
* ```
*
* @param int $expectedNumber Expected number
* @param string $table Table name
* @param array $criteria Search criteria [Optional]
* Conditional Assertion: Test won't be stopped on fail
* @see \Codeception\Module\Db::seeNumRecords()
*/
public function canSeeNumRecords($expectedNumber, $table, $criteria = null) {
return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeNumRecords', func_get_args()));
}
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Asserts that the given number of records were found in the database.
*
* ``` php
* <?php
* $I->seeNumRecords(1, 'users', ['name' => 'davert'])
* ?>
* ```
*
* @param int $expectedNumber Expected number
* @param string $table Table name
* @param array $criteria Search criteria [Optional]
* @see \Codeception\Module\Db::seeNumRecords()
*/
public function seeNumRecords($expectedNumber, $table, $criteria = null) {
return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeNumRecords', func_get_args()));
}
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Effect is opposite to ->seeInDatabase
*
* Asserts that there is no record with the given column values in a database.
* Provide table name and column values.
*
* ``` php
* <?php
* $I->dontSeeInDatabase('users', array('name' => 'Davert', 'email' => 'davert@mail.com'));
* ```
* Fails if such user was found.
*
* @param string $table
* @param array $criteria
* Conditional Assertion: Test won't be stopped on fail
* @see \Codeception\Module\Db::dontSeeInDatabase()
*/
public function cantSeeInDatabase($table, $criteria = null) {
return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeInDatabase', func_get_args()));
}
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Effect is opposite to ->seeInDatabase
*
* Asserts that there is no record with the given column values in a database.
* Provide table name and column values.
*
* ``` php
* <?php
* $I->dontSeeInDatabase('users', array('name' => 'Davert', 'email' => 'davert@mail.com'));
* ```
* Fails if such user was found.
*
* @param string $table
* @param array $criteria
* @see \Codeception\Module\Db::dontSeeInDatabase()
*/
public function dontSeeInDatabase($table, $criteria = null) {
return $this->getScenario()->runStep(new \Codeception\Step\Assertion('dontSeeInDatabase', func_get_args()));
}
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Fetches a single column value from a database.
* Provide table name, desired column and criteria.
*
* ``` php
* <?php
* $mail = $I->grabFromDatabase('users', 'email', array('name' => 'Davert'));
* ```
*
* @param string $table
* @param string $column
* @param array $criteria
*
* @return mixed
* @see \Codeception\Module\Db::grabFromDatabase()
*/
public function grabFromDatabase($table, $column, $criteria = null) {
return $this->getScenario()->runStep(new \Codeception\Step\Action('grabFromDatabase', func_get_args()));
}
/**
* [!] Method is generated. Documentation taken from corresponding module.
*
* Returns the number of rows in a database
*
* @param string $table Table name
* @param array $criteria Search criteria [Optional]
*
* @return int
* @see \Codeception\Module\Db::grabNumRecords()
*/
public function grabNumRecords($table, $criteria = null) {
return $this->getScenario()->runStep(new \Codeception\Step\Action('grabNumRecords', func_get_args()));
}
}
-27
View File
@@ -1,27 +0,0 @@
actor: Tester
paths:
tests: tests
log: _output
data: _data
helpers: _support
settings:
bootstrap: _bootstrap.php
colors: true
memory_limit: 1024M
modules:
enabled:
- Db:
dsn: 'pgsql:host=localhost;port=5432;dbname=fhctest'
user: 'fhcomplete'
password: 'fhcomplete'
dump: _data/dump.sql
populate: true
cleanup: false
reconnect: false
coverage:
enabled: true
include:
- application/*
exclude:
- application/cache/*
- application/logs/*
@@ -1,21 +0,0 @@
# Codeception Test Suite Configuration
# suite for acceptance tests.
# perform tests in browser using the WebDriver or PhpBrowser.
# If you need both WebDriver and PHPBrowser tests - create a separate suite.
class_name: AcceptanceTester
modules:
enabled:
- Db
- PhpBrowser:
url: 'http://admin:1q2w3@test.fhcomplete.org/build/'
config:
Db:
dsn: 'pgsql:host=localhost;port=5432;dbname=fhctest'
user: 'fhcomplete'
password: 'fhcomplete'
dump: _data/dump.sql
populate: true
cleanup: false
reconnect: false
@@ -1,6 +0,0 @@
<?php
$I = new AcceptanceTester($scenario);
$I->wantTo('CIS Startseite Testen');
//$I->amOnPage('/cis/index.html');
//$I->see('Powered by FH Complete');
?>
@@ -1,11 +0,0 @@
<?php
$I = new AcceptanceTester($scenario);
$I->wantTo('Test the Search-Feature of VileSci');
$I->amOnPage('/vilesci/personen/suche.php');
$I->lookForwardTo('Personensuche');
$I->seeElement('input[name="searchstr"]');
$I->seeElement('input[type=submit][value=Suchen]');
$I->fillField('searchstr', 'Vicenta');
$I->click('Suchen');
$I->see('McKenzie');
@@ -1,26 +0,0 @@
<?php
$I = new AcceptanceTester($scenario);
$I->wantTo('test the Startpage of VileSci');
$I->wantTo('test this over vilesci/index.php');
$I->amOnPage('/vilesci/index.php');
$I->See('This application works only with');
$I->seeElement('#frameset-vilesci');
$I->wantTo('and now over index.ci.php');
$I->amOnPage('/index.ci.php');
$I->See('This application works only with');
$I->seeElement('#frameset-vilesci');
$I->wantTo('test the top menu');
$I->amOnPage('/vilesci/top.php');
$I->seeElement('.logo');
$I->wantTo('test the left nav-frame');
$I->amOnPage('/vilesci/left.php');
$I->seeElement('.left_nav');
$I->wantTo('test the main-frame');
$I->amOnPage('/vilesci/main.php');
$I->seeElement('img');
?>
@@ -1,2 +0,0 @@
<?php
// Here you can initialize variables that will be available to your tests
@@ -1,20 +0,0 @@
class_name: ApiTester
modules:
enabled:
- Db
- REST:
# API URL
url: 'http://admin:1q2w3@test.fhcomplete.org/build/index.ci.php/api/'
# Can also be a framework module name
depends: PhpBrowser
# Limits PhpBrowser to JSON or XML
part: Json
config:
Db:
dsn: 'pgsql:host=localhost;port=5432;dbname=fhctest'
user: 'fhcomplete'
password: 'fhcomplete'
dump: _data/dump.sql
populate: true
cleanup: false
reconnect: false
@@ -1,2 +0,0 @@
<?php
// Here you can initialize variables that will be available to your tests
-178
View File
@@ -1,178 +0,0 @@
<?php
/**
* Recursively finds all files in the given folder
*/
function lstFiles($dir, $lst = null)
{
$retLst = array();
if ($lst == null)
$lst = scandir($dir);
$lst = array_diff($lst, array('..', '.'));
foreach ($lst as $el)
{
if (is_dir($dir.'/'.$el))
{
$retLst = array_merge($retLst, lstFiles($dir.'/'.$el, scandir($dir.'/'.$el)));
}
else
{
array_push($retLst, $dir.'/'.$el);
}
}
return $retLst;
}
// Get a list of every file present in the given folder
$lstFiles = lstFiles('../../../../application/controllers/api/v1');
// Automatically detects the line ending character
ini_set('auto_detect_line_endings', true);
// Gets the template of the header of the test file
if (($fileTplHead = file_get_contents('./template_head.tpl')) === false)
die('Problems loading template_head.tpl');
// Gets the template of the body of the test file
if (($fileTplCall = file_get_contents('./template_call.tpl')) === false)
die('Problems loading template_call.tpl');
// Loops the list of files
foreach($lstFiles as $file)
{
// Open the file for reading
if (($fileHandle = fopen($file, 'r')) !== false)
{
$name = ''; // Name of the test
$functions = array(); // List of functions
$functionsCounter = -1; // Functions counter
// Reads from the file line by line
while (($line = fgets($fileHandle, 4096)) !== false)
{
// Drops the spaces at the beginning and at the and of the line
$line = trim($line);
// If it is the line that declare the class
if (strpos($line, 'class') !== false)
{
$name = explode(' ', $line)[1];
}
// If it is a line that declare a function
if (strpos($line, 'public function get') !== false)
{
$functionsCounter++;
$functions[$functionsCounter] = array();
$functions[$functionsCounter]['name'] = trim(preg_replace('/^get/i', ' ', explode(' ', $line)[2]));
$functions[$functionsCounter]['name'] = trim(str_replace('()', ' ', $functions[$functionsCounter]['name']));
$functions[$functionsCounter]['parameters'] = array();
}
// If it is a line that get a parameter
if (strpos($line, 'this->get') !== false)
{
$parameters = explode('\'', $line);
if (count($parameters) >= 2)
{
$functions[$functionsCounter]['parameters'][] = $parameters[1];
}
else
{
$parameters = explode('"', $line);
if (count($parameters) >= 2)
{
$functions[$functionsCounter]['parameters'][] = $parameters[1];
}
}
}
}
fclose($fileHandle); // Closing the file pointer is always a good thing
// Gets the path of the api
$apiPath = trim(str_replace('../../../../application/controllers/api/', ' ', $file));
$apiPath = substr($apiPath, 0, strrpos($apiPath, '/') + 1);
// Prefix of the test file name given by the parent folder
$namePrefix = trim(str_replace('v1/', ' ', $apiPath));
$namePrefix = ucfirst(trim(str_replace('/', ' ', $namePrefix)));
// If if is not a fake
if (trim($name) != '')
{
// Where to create the test files
$testDir = './v1/';
// If the test file is not already present
if (!file_exists($testDir.$namePrefix.$name.'Cept.php'))
{
// Create and open the test file for writing
if (($fileTestHandle = fopen($testDir.$namePrefix.$name.'Cept.php', 'w')) !== false)
{
// Lst of function to place in the header
$strLstFunctions = '';
for($i = 0; $i < count($functions); $i++)
{
$function = $functions[$i];
if ($i == 0)
{
$strLstFunctions .= $apiPath.$name.'/'.': ';
}
$strLstFunctions .= $function['name'];
if ($i < count($functions) - 1)
{
$strLstFunctions .= ' ';
}
}
// Create the test file header using the template
$strToWrite = str_replace('_CALL_', $strLstFunctions, $fileTplHead);
// Writes the header into the test file
if (fwrite($fileTestHandle, $strToWrite."\n") === false)
{
echo 'Error!!!';
}
// For every function create a call
foreach($functions as $function)
{
// Gets a list of parameters
$strLstParameters = '';
for($i = 0; $i < count($function['parameters']); $i++)
{
$parameter = $function['parameters'][$i];
$strLstParameters .= '"'.$parameter.'" => "1"';
if ($i < count($function['parameters']) - 1)
{
$strLstParameters .= ", ";
}
}
// Create the call using the template
$strToWrite = str_replace('_CALL_', $apiPath.$name.'/'.$function['name'], $fileTplCall);
$strToWrite = str_replace('_PARAMETERS_', $strLstParameters, $strToWrite);
// Write it into the test file
if (fwrite($fileTestHandle, $strToWrite."\n") === false)
{
echo 'Error!!!';
}
}
fclose($fileTestHandle); // As usual
}
else
{
echo "Error opening file: ".$testDir.$name.'Cept.php'."\n";
}
}
else
{
echo $testDir.$name."Cept.php is already present\n";
}
}
}
}
?>
@@ -1,5 +0,0 @@
$I->sendGET("_CALL_", array(_PARAMETERS_));
$I->seeResponseCodeIs(200);
$I->seeResponseIsJson();
$I->seeResponseContainsJson(["error" => 0]);
$I->wait();
@@ -1,6 +0,0 @@
<?php
$I = new ApiTester($scenario);
$I->wantTo("Test API call _CALL_");
$I->amHttpAuthenticated("admin", "1q2w3");
$I->haveHttpHeader("FHC-API-KEY", "testapikey@fhcomplete.org");
@@ -1,11 +0,0 @@
<?php
$I = new ApiTester($scenario);
$I->wantTo("Test API call v1/accounting/Aufteilung/: Aufteilung");
$I->amHttpAuthenticated("admin", "1q2w3");
$I->haveHttpHeader("FHC-API-KEY", "testapikey@fhcomplete.org");
$I->sendGET("v1/accounting/Aufteilung/Aufteilung", array("aufteilung_id" => "1"));
$I->seeResponseCodeIs(200);
$I->seeResponseIsJson();
$I->seeResponseContainsJson(["error" => 0]);
$I->wait();
@@ -1,11 +0,0 @@
<?php
$I = new ApiTester($scenario);
$I->wantTo("Test API call v1/accounting/Bestelldetail/: Bestelldetail");
$I->amHttpAuthenticated("admin", "1q2w3");
$I->haveHttpHeader("FHC-API-KEY", "testapikey@fhcomplete.org");
$I->sendGET("v1/accounting/Bestelldetail/Bestelldetail", array("bestelldetail_id" => "1"));
$I->seeResponseCodeIs(200);
$I->seeResponseIsJson();
$I->seeResponseContainsJson(["error" => 0]);
$I->wait();
@@ -1,11 +0,0 @@
<?php
$I = new ApiTester($scenario);
$I->wantTo("Test API call v1/accounting/Bestelldetailtag/: Bestelldetailtag");
$I->amHttpAuthenticated("admin", "1q2w3");
$I->haveHttpHeader("FHC-API-KEY", "testapikey@fhcomplete.org");
$I->sendGET("v1/accounting/Bestelldetailtag/Bestelldetailtag", array("bestelldetail_id" => "1", "tag" => "1"));
$I->seeResponseCodeIs(200);
$I->seeResponseIsJson();
$I->seeResponseContainsJson(["error" => 0]);
$I->wait();
@@ -1,11 +0,0 @@
<?php
$I = new ApiTester($scenario);
$I->wantTo("Test API call v1/accounting/Bestellstatus/: Bestellstatus");
$I->amHttpAuthenticated("admin", "1q2w3");
$I->haveHttpHeader("FHC-API-KEY", "testapikey@fhcomplete.org");
$I->sendGET("v1/accounting/Bestellstatus/Bestellstatus", array("bestellstatus_kurzbz" => "1"));
$I->seeResponseCodeIs(200);
$I->seeResponseIsJson();
$I->seeResponseContainsJson(["error" => 0]);
$I->wait();
@@ -1,11 +0,0 @@
<?php
$I = new ApiTester($scenario);
$I->wantTo("Test API call v1/accounting/Bestellung/: Bestellung");
$I->amHttpAuthenticated("admin", "1q2w3");
$I->haveHttpHeader("FHC-API-KEY", "testapikey@fhcomplete.org");
$I->sendGET("v1/accounting/Bestellung/Bestellung", array("bestellung_id" => "1"));
$I->seeResponseCodeIs(200);
$I->seeResponseIsJson();
$I->seeResponseContainsJson(["error" => 0]);
$I->wait();
@@ -1,11 +0,0 @@
<?php
$I = new ApiTester($scenario);
$I->wantTo("Test API call v1/accounting/Bestellungtag/: Bestellungtag");
$I->amHttpAuthenticated("admin", "1q2w3");
$I->haveHttpHeader("FHC-API-KEY", "testapikey@fhcomplete.org");
$I->sendGET("v1/accounting/Bestellungtag/Bestellungtag", array("bestellung_id" => "1", "tag" => "1"));
$I->seeResponseCodeIs(200);
$I->seeResponseIsJson();
$I->seeResponseContainsJson(["error" => 0]);
$I->wait();
@@ -1,11 +0,0 @@
<?php
$I = new ApiTester($scenario);
$I->wantTo("Test API call v1/accounting/Buchung/: Buchung");
$I->amHttpAuthenticated("admin", "1q2w3");
$I->haveHttpHeader("FHC-API-KEY", "testapikey@fhcomplete.org");
$I->sendGET("v1/accounting/Buchung/Buchung", array("buchung_id" => "1"));
$I->seeResponseCodeIs(200);
$I->seeResponseIsJson();
$I->seeResponseContainsJson(["error" => 0]);
$I->wait();
@@ -1,11 +0,0 @@
<?php
$I = new ApiTester($scenario);
$I->wantTo("Test API call v1/accounting/Buchungstyp/: Buchungstyp");
$I->amHttpAuthenticated("admin", "1q2w3");
$I->haveHttpHeader("FHC-API-KEY", "testapikey@fhcomplete.org");
$I->sendGET("v1/accounting/Buchungstyp/Buchungstyp", array("buchungstyp_kurzbz" => "1"));
$I->seeResponseCodeIs(200);
$I->seeResponseIsJson();
$I->seeResponseContainsJson(["error" => 0]);
$I->wait();
@@ -1,11 +0,0 @@
<?php
$I = new ApiTester($scenario);
$I->wantTo("Test API call v1/accounting/Budget/: Budget");
$I->amHttpAuthenticated("admin", "1q2w3");
$I->haveHttpHeader("FHC-API-KEY", "testapikey@fhcomplete.org");
$I->sendGET("v1/accounting/Budget/Budget", array("kostenstelle_id" => "1", "geschaeftsjahr_kurzbz" => "1"));
$I->seeResponseCodeIs(200);
$I->seeResponseIsJson();
$I->seeResponseContainsJson(["error" => 0]);
$I->wait();
@@ -1,11 +0,0 @@
<?php
$I = new ApiTester($scenario);
$I->wantTo("Test API call v1/accounting/Konto/: Konto");
$I->amHttpAuthenticated("admin", "1q2w3");
$I->haveHttpHeader("FHC-API-KEY", "testapikey@fhcomplete.org");
$I->sendGET("v1/accounting/Konto/Konto", array("konto_id" => "1"));
$I->seeResponseCodeIs(200);
$I->seeResponseIsJson();
$I->seeResponseContainsJson(["error" => 0]);
$I->wait();

Some files were not shown because too many files have changed in this diff Show More