Merge branch 'master' into feature-6237/Phrases_system_MkIII

This commit is contained in:
Paolo
2022-04-12 11:01:31 +02:00
161 changed files with 60593 additions and 48778 deletions
+5 -3
View File
@@ -53,6 +53,7 @@ class adresse extends basis_db
public $rechnungsadresse=false; // boolean
public $anmerkung; // string
public $co_name;
public $bezeichnung_mehrsprachig;
/**
* Konstruktor
@@ -133,10 +134,10 @@ class adresse extends basis_db
$this->errormsg = 'person_id muss eine gültige Zahl sein';
return false;
}
$sprache = new sprache();
//Lesen der Daten aus der Datenbank
$qry = "SELECT * FROM public.tbl_adresse WHERE person_id=".$this->db_add_param($pers_id, FHC_INTEGER, false);
$qry.=" ORDER BY zustelladresse DESC";
$qry = "SELECT *, ". $sprache->getSprachQuery('bezeichnung_mehrsprachig') ." FROM public.tbl_adresse JOIN public.tbl_adressentyp ON typ = adressentyp_kurzbz WHERE person_id=".$this->db_add_param($pers_id, FHC_INTEGER, false);
$qry.=" ORDER BY zustelladresse DESC, sort";
if(!$this->db_query($qry))
{
@@ -167,6 +168,7 @@ class adresse extends basis_db
$adr_obj->co_name = $row->co_name;
$adr_obj->rechnungsadresse = $this->db_parse_bool($row->rechnungsadresse);
$adr_obj->anmerkung = $row->anmerkung;
$adr_obj->bezeichnung_mehrsprachig = $sprache->parseSprachResult('bezeichnung_mehrsprachig',$row);
$this->result[] = $adr_obj;
}
+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;
}
}
}
?>
+6 -2
View File
@@ -309,6 +309,10 @@ class benutzer extends person
*/
public function search($searchItems, $limit=null, $aktiv=true, $positivePersonalnr=false)
{
// SearchItems imploden und trimmen, um preg_split(Zeichenweise trennung) durchfuehren zu koennen
$searchItems_string_orig = implode(' ', $searchItems);
$searchItems_string = generateSpecialCharacterString($searchItems_string_orig);
$qry = "SELECT * FROM (
SELECT
distinct on (uid) vorname, nachname, uid, mitarbeiter_uid, personalnummer, titelpre, titelpost, lektor, fixangestellt, alias, tbl_benutzer.aktiv, anrede,
@@ -350,8 +354,8 @@ class benutzer extends person
if($positivePersonalnr === true)
$qry.=" (personalnummer >= 0 OR personalnummer IS NULL) AND";
$qry.=" (lower(vorname || ' ' || nachname) like lower('%".$this->db_escape(implode(' ',$searchItems))."%')";
$qry.=" OR lower(nachname || ' ' || vorname) like lower('%".$this->db_escape(implode(' ',$searchItems))."%')";
$qry.=" (lower(vorname || ' ' || nachname) ~* lower(".$this->db_add_param($searchItems_string).")";
$qry.=" OR lower(nachname || ' ' || vorname) ~* lower(".$this->db_add_param($searchItems_string).")";
$qry.=" OR lower(uid) like lower('%".$this->db_escape(implode(' ',$searchItems))."%')";
$qry.=" OR lower(telefonklappe) like lower('%".$this->db_escape(implode(' ',$searchItems))."%')";
+16 -1
View File
@@ -1186,7 +1186,22 @@ class betriebsmittel extends basis_db
//Kartennummern die im Hex-Format sind werden umgewandelt
if (!is_numeric($kartennummer))
{
$kartennummer=substr($kartennummer,strlen($kartennummer)-2,2).substr($kartennummer,strlen($kartennummer)-4,2). substr($kartennummer,strlen($kartennummer)-6,2).substr($kartennummer,0,2);
$tmp_kn_str = null;
for ($i=0; strlen($kartennummer) > $i; $i+=2) {
#wenn die strlen($kartennummer) gerade ist (TW hat 8 Stellen, FHB 14 Stellen)
$tmp_kn_str .= substr($kartennummer,strlen($kartennummer)-($i+2),2);
//#wenn ich ungerade und der letzte Durchgang ist dann nur mehr die eine Nummer nach vorne
//if ((strlen($kartennummer)%2 != 0) && ($i+2 > strlen($kartennummer))) {
// $tmp_kn_str .= substr($kartennummer,strlen($kartennummer)-($i+1),1);
//#sonst normal immer 2 stellen nach vorne ruecken
//} else {
// $tmp_kn_str .= substr($kartennummer,strlen($kartennummer)-($i+2),2);
//}
}
$kartennummer = $tmp_kn_str;
$kartennummer=hexdec( $kartennummer);
}
+1 -1
View File
@@ -48,7 +48,7 @@ class bisverwendung extends basis_db
public $inkludierte_lehre;
public $zeitaufzeichnungspflichtig;
public $azgrelevant;
public $homeoffice;
public $homeoffice=false;
public $ba1bez;
public $ba2bez;
+200
View File
@@ -0,0 +1,200 @@
<?php
/* Copyright (C) 2006 Technikum-Wien
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* Authors: Harald Bamberger <harald.bamberger@technikum-wien.at>
*/
require_once(dirname(__DIR__) . '/basis_db.class.php');
/**
* Description of covidhelper
*
* @author bambi
*/
class CovidHelper extends basis_db
{
const STATUS_OK = 1;
const STATUS_NOTOK = 0;
const STATUS_UNKNOWN = -1;
const STATUS_NOTSET = -2;
const TITLE_OK = 'Nachweis gültig';
const TITLE_NOTOK = 'Nachweis ungültig';
const TITLE_UNKNOWN = 'Nachweis unbekannt';
const DB_SCHEMA = 'public';
const DB_TABLE = 'tbl_person';
const DB_UDFNAME = 'udf_3gvalid';
protected $isUdfDefined;
protected $uids;
protected $covidstatus;
public function __construct()
{
parent::__construct();
$this->uids = array();
$this->covidstatus = array();
$this->isUdfDefined = false;
$this->checkIfUdfValuesAreDefined();
}
public function isUdfDefined()
{
return $this->isUdfDefined;
}
public function fetchCovidStatus(array $uids)
{
$this->uids = $uids;
$this->covidstatus = array();
$this->fetchCovidValidStatus();
}
public function getIconHtml($uid)
{
$html = '';
$status = isset($this->covidstatus[$uid]) ? $this->covidstatus[$uid] : self::STATUS_NOTSET;
switch ($status)
{
case self::STATUS_OK:
$html = '<i title="' . $this->getTitle($uid) . '" class="fa fa-check-circle" aria-hidden="true" style="color: green; margin-right: .5em;"></i>';
break;
case self::STATUS_NOTOK:
case self::STATUS_UNKNOWN:
$html = '<i title="' . $this->getTitle($uid) . '" class="fa fa-times-circle" aria-hidden="true" style="color: red; margin-right: .5em;"></i>';
break;
/*
case self::STATUS_UNKNOWN:
$html = '<i title="' . $this->getTitle($uid) . '" class="fa fa-question-circle" aria-hidden="true" style="color: grey; margin-right: .5em;"></i>';
break;
*/
default:
$html = '';
break;
}
return $html;
}
public function getBootstrapClass($uid)
{
$class = '';
$status = isset($this->covidstatus[$uid]) ? $this->covidstatus[$uid] : self::STATUS_NOTSET;
switch ($status)
{
case self::STATUS_OK:
$class = 'success';
break;
case self::STATUS_NOTOK:
case self::STATUS_UNKNOWN:
$class = 'danger';
break;
/*
case self::STATUS_UNKNOWN:
$class = 'warning';
break;
*/
default:
$class = '';
break;
}
return $class;
}
public function getTitle($uid)
{
$title = '';
$status = isset($this->covidstatus[$uid]) ? $this->covidstatus[$uid] : self::STATUS_NOTSET;
switch ($status)
{
case self::STATUS_OK:
$title = self::TITLE_OK;
break;
case self::STATUS_NOTOK:
case self::STATUS_UNKNOWN:
$title = self::TITLE_NOTOK;
break;
/*
case self::STATUS_UNKNOWN:
$title = self::TITLE_UNKNOWN;
break;
*/
default:
$title = '';
break;
}
return $title;
}
public function getCovidStatus()
{
return $this->covidstatus;
}
protected function fetchCovidValidStatus()
{
if( !($this->isUdfDefined && is_array($this->uids) && (count($this->uids) > 0)) )
{
return;
}
$sql = <<<EOSQL
SELECT b.uid, CASE
WHEN (p."udf_values" -> 'udf_3gvalid')::text::date >= CURRENT_DATE::text::date THEN 1
WHEN (p."udf_values" -> 'udf_3gvalid')::text::date < CURRENT_DATE::text::date THEN 0
ELSE -1
END AS covidvalid
FROM tbl_person p
JOIN tbl_benutzer b ON b.person_id = p.person_id AND b.uid IN ({$this->implode4SQL($this->uids)})
EOSQL;
$this->covidstatus = array();
if( $this->db_query($sql) )
{
while( false !== ($row = $this->db_fetch_object()) )
{
$this->covidstatus[$row->uid] = $row->covidvalid;
}
} else {
$this->errormsg = "Fehler in der Abfrage des Covidstatus.";
}
}
public function checkIfUdfValuesAreDefined()
{
$sql = 'SELECT count(name) AS "udfdefined" '
. 'FROM "system"."tbl_udf", jsonb_to_recordset("jsons") AS items(name text) '
. 'WHERE "schema" = \'' . self::DB_SCHEMA . '\' '
. 'AND "table" = \'' . self::DB_TABLE . '\' '
. 'AND "name" = \'' . self::DB_UDFNAME . '\'';
if ( $this->db_query($sql) )
{
if ($row = $this->db_fetch_object())
{
$this->isUdfDefined = ($row->udfdefined > 0) ? true : false;
}
else
{
$this->errormsg = "Fehler in der Abfrage beim Pruefen der UDFs. Kein Datensatz gefunden.";
$this->isUdfDefined = false;
}
}
else
{
$this->errormsg = "Fehler in der Abfrage beim Pruefen der UDFs.";
$this->isUdfDefined = false;
}
}
}
+36 -28
View File
@@ -455,42 +455,50 @@ function intersect($str1, $str2)
* Konvertiert Problematische Sonderzeichen in Strings fuer
* Accountnamen und EMail-Aliase
*
* @param $str
* @return bereinigter String
* @param string $str Inputparameter.
* @return string bereinigter String.
*/
function convertProblemChars($str)
{
$enc = 'UTF-8';
$acentos = array(
'A' => '/&Agrave;|&Aacute;|&Acirc;|&Atilde;|&Aring;/',
'Ae' => '/&Auml;/',
'a' => '/&agrave;|&aacute;|&acirc;|&atilde;|&aring;/',
'ae'=> '/&auml;/',
'C' => '/&Ccedil;/',
'c' => '/&ccedil;/',
'E' => '/&Egrave;|&Eacute;|&Ecirc;|&Euml;/',
'e' => '/&egrave;|&eacute;|&ecirc;|&euml;/',
'I' => '/&Igrave;|&Iacute;|&Icirc;|&Iuml;/',
'i' => '/&igrave;|&iacute;|&icirc;|&iuml;/',
'N' => '/&Ntilde;/',
'n' => '/&ntilde;/',
'O' => '/&Ograve;|&Oacute;|&Ocirc;|&Otilde;/',
'Oe' => '/&Ouml;/',
'o' => '/&ograve;|&oacute;|&ocirc;|&otilde;/',
'oe' => '/&ouml;/',
'U' => '/&Ugrave;|&Uacute;|&Ucirc;/',
'Ue' => '/&Uuml;/',
'u' => '/&ugrave;|&uacute;|&ucirc;/',
'ue' => '/&uuml;/',
'Y' => '/&Yacute;/',
'y' => '/&yacute;|&yuml;/',
'a.' => '/&ordf;/',
'o.' => '/&ordm;/',
'ss' => '/&szlig;/'
'A' => '/&Agrave;|&Aacute;|&Acirc;|&Atilde;|&Aring;|&Abreve;|Ǎ/',
'Ae' => '/&Auml;/',
'a' => '/&agrave;|&aacute;|&acirc;|&atilde;|&aring;|&abreve;|ǎ/',
'ae' => '/&auml;/',
'C' => '/&Ccedil;|&Ccaron;/',
'c' => '/&ccedil;|&ccaron;/',
'E' => '/&Egrave;|&Eacute;|&Ecirc;|&Euml;/',
'e' => '/&egrave;|&eacute;|&ecirc;|&euml;/',
'I' => '/&Igrave;|&Iacute;|&Icirc;|&Iuml;/',
'i' => '/&igrave;|&iacute;|&icirc;|&iuml;/',
'N' => '/&Ntilde;|&Ncaron;|&ncaron;/',
'n' => '/&ntilde;/',
'O' => '/&Ograve;|&Oacute;|&Ocirc;|&Otilde;/',
'Oe' => '/&Ouml;/',
'o' => '/&ograve;|&oacute;|&ocirc;|&otilde;/',
'oe' => '/&ouml;/',
'R' => '/&Rcaron;/',
'r' => '/&rcaron;/',
'S' => '/&Scaron;/',
's' => '/&scaron;/',
'T' => '/&Tcaron;/',
't' => '/&tcaron;/',
'U' => '/&Ugrave;|&Uacute;|&Ucirc;|&Ubreve;|Ǔ/',
'Ue' => '/&Uuml;/',
'u' => '/&ugrave;|&uacute;|&ucirc;|&ubreve;|ǔ/',
'ue' => '/&uuml;/',
'Y' => '/&Yacute;/',
'y' => '/&yacute;|&yuml;/',
'Z' => '/&Zcaron;/',
'z' => '/&zcaron;/',
'a.' => '/&ordf;/',
'o.' => '/&ordm;/',
'ss' => '/&szlig;/'
);
return preg_replace($acentos, array_keys($acentos), htmlentities($str,ENT_NOQUOTES, $enc));
return preg_replace($acentos, array_keys($acentos), htmlentities($str, ENT_NOQUOTES | ENT_HTML5, $enc));
}
//Ersetzt alle Problemzeichen in einem String bevor dieser als xml oder rdf ausgegeben wird
+294
View File
@@ -0,0 +1,294 @@
<?php
/* Copyright (C) 2006 Technikum-Wien
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* Authors: Harald Bamberger <harald.bamberger@technikum-wien.at>
* Manfred Kindl <manfred.kindl@technikum-wien.at>
*/
require_once('../../../config/cis.config.inc.php');
require_once('../../../include/lehrveranstaltung.class.php');
require_once('../../../include/lehreinheitgruppe.class.php');
require_once('../../../include/lehreinheit.class.php');
require_once('../../../include/benutzerberechtigung.class.php');
require_once('../../../include/lehreinheitmitarbeiter.class.php');
require_once('../../../include/studiensemester.class.php');
require_once('../../../include/functions.inc.php');
require_once('../../../include/erhalter.class.php');
require_once('../../../include/datum.class.php');
/**
* Description of lehrelisthelper
*
* @author bambi
*/
class LehreListHelper
{
protected $db;
protected $studiensemester;
protected $lvid;
protected $lv;
protected $lehreinheit;
protected $stg;
protected $arr_lehrende;
protected $studentuids;
protected $data;
protected $gruppen_string;
protected $lehrende_string;
protected $raum_string;
public function __construct(basis_db $db, $studiensemester, $lvid,
lehrveranstaltung $lv, studiengang $stg, $lehreinheit='')
{
$this->db = $db;
$this->studiensemester = $studiensemester;
$this->lvid = $lvid;
$this->lv = $lv;
$this->lehreinheit = $lehreinheit;
$this->stg = $stg;
$this->arr_lehrende = array();
$this->studentuids = array();
$this->data = array();
$this->gruppen_string = '';
$this->lehrende_string = '';
$this->raum_string = '';
$this->loadMemberGroups();
$this->loadPlannedRooms();
$this->initData();
$this->loadLehrende();
$this->loadStudierende();
}
public function getData()
{
return $this->data;
}
public function getStudentUids()
{
return $this->studentuids;
}
public function getArr_Lehrende()
{
return $this->arr_lehrende;
}
public function getLehrende_String()
{
return $this->lehrende_string;
}
protected function loadMemberGroups()
{
// Teilnehmende Gruppen laden
$qry = "SELECT DISTINCT ON(kuerzel, semester, verband, gruppe, gruppe_kurzbz)
UPPER(stg_typ::varchar(1) || stg_kurzbz) as kuerzel,
semester,
verband,
gruppe,
gruppe_kurzbz
FROM campus.vw_lehreinheit
WHERE lehrveranstaltung_id=".$this->db->db_add_param($this->lvid, FHC_INTEGER)."
AND studiensemester_kurzbz=".$this->db->db_add_param($this->studiensemester);
if($this->lehreinheit!='')
$qry.=" AND lehreinheit_id=".$this->db->db_add_param($this->lehreinheit, FHC_INTEGER);
$this->gruppen_string = '';
if($result = $this->db->db_query($qry))
{
while($row = $this->db->db_fetch_object($result))
{
if($this->gruppen_string!='')
$this->gruppen_string.=', ';
if($row->gruppe_kurzbz=='')
$this->gruppen_string.=trim($row->kuerzel.'-'.$row->semester.$row->verband.$row->gruppe);
else
$this->gruppen_string.=$row->gruppe_kurzbz;
}
}
}
protected function loadPlannedRooms()
{
// Verplante Räume laden
$qry = "SELECT distinct(ort_kurzbz)
FROM lehre.tbl_stundenplan
WHERE lehreinheit_id in
(
SELECT lehreinheit_id
FROM campus.vw_lehreinheit
WHERE lehrveranstaltung_id = ".$this->db->db_add_param($this->lvid, FHC_INTEGER)."
AND studiensemester_kurzbz = ".$this->db->db_add_param($this->studiensemester)."
)";
if($this->lehreinheit!='')
$qry.= " AND tbl_stundenplan.lehreinheit_id = ".$this->db->db_add_param($this->lehreinheit, FHC_INTEGER);
$this->raum_string = '';
if($result = $this->db->db_query($qry))
{
while($row = $this->db->db_fetch_object($result))
{
if($this->raum_string!='')
$this->raum_string.=', ';
if($row->ort_kurzbz!='')
$this->raum_string.=$row->ort_kurzbz;
}
}
}
protected function initData()
{
$studiengang_bezeichnung=$this->stg->bezeichnung;
$this->stg->getAllTypes();
$this->data = array(
'gruppen'=>$this->gruppen_string,
'bezeichnung'=>$this->lv->bezeichnung,
'lehrveranstaltung_id'=>$this->lv->lehrveranstaltung_id,
'studiengang'=>$studiengang_bezeichnung,
'studiengang_kz'=>$this->lv->studiengang_kz,
'typ'=>$this->stg->studiengang_typ_arr[$this->stg->typ],
'ects'=>$this->lv->ects,
'sprache'=>$this->lv->sprache,
'studiensemester'=>$this->studiensemester,
'semester'=>$this->lv->semester,
'orgform'=>$this->lv->orgform_kurzbz,
'raum'=>$this->raum_string,
);
}
protected function loadLehrende()
{
//Lehrende der LV laden und in ein Array schreiben
$lehrende = new lehreinheitmitarbeiter();
$lehrende->getMitarbeiterLV($this->lvid, $this->studiensemester, $this->lehreinheit);
$this->arr_lehrende = array();
if (isset($lehrende->result))
{
foreach($lehrende->result AS $row)
{
$this->data[]=array('lehrende'=>array('uid'=>$row->uid,'name'=>$row->vorname.' '.$row->nachname));
$this->arr_lehrende[]=mb_strtoupper($row->uid);
$this->lehrende_string .= (strlen($this->lehrende_string) > 0)
? ', ' . $row->vorname . ' ' . $row->nachname
: $row->vorname . ' ' . $row->nachname;
}
}
}
protected function loadStudierende()
{
//Studierende der LV laden und in ein Array schreiben
$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,
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,
(CASE WHEN bis.tbl_mobilitaet.studiensemester_kurzbz = vw_student_lehrveranstaltung.studiensemester_kurzbz THEN 1 ELSE 0 END) as doubledegree
FROM
campus.vw_student_lehrveranstaltung
JOIN public.tbl_benutzer USING(uid)
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_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)
LEFT JOIN bis.tbl_mobilitaet USING(prestudent_id)
WHERE
vw_student_lehrveranstaltung.lehrveranstaltung_id='.$this->db->db_add_param($this->lvid, FHC_INTEGER).' AND
vw_student_lehrveranstaltung.studiensemester_kurzbz='.$this->db->db_add_param($this->studiensemester);
if($this->lehreinheit!='')
$qry.=' AND vw_student_lehrveranstaltung.lehreinheit_id='.$this->db->db_add_param($this->lehreinheit, FHC_INTEGER);
$qry.=' ORDER BY nachname, vorname, person_id, tbl_bisio.bis, doubledegree DESC';
$stsem_obj = new studiensemester();
$stsem_obj->load($this->studiensemester);
$stsemdatumvon = $stsem_obj->start;
$stsemdatumbis = $stsem_obj->ende;
$erhalter = new erhalter();
$erhalter->getAll();
$a_o_kz = '9'.sprintf("%03s", $erhalter->result[0]->erhalter_kz); //Stg_Kz AO-Studierende auslesen (9005 fuer FHTW)
$anzahl_studierende = 0;
$datum = new datum();
$zusatz = '';
$this->studentuids = array();
if($result = $this->db->db_query($qry))
{
while($row = $this->db->db_fetch_object($result))
{
if($row->status!='Abbrecher' && $row->status!='Unterbrecher')
{
$anzahl_studierende++;
if($row->status=='Incoming') //Incoming
$zusatz='(i)';
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->lkt_ueberschreibbar == 'f') // angerechnet / intern angerechnet / nicht zugelassen
$zusatz.= '('. $row->anmerkung. ')';
if($row->mitarbeiter_uid!='') //mitarbeiter
$zusatz.='(ma)';
if($row->stg_kz_student==$a_o_kz) //Außerordentliche Studierende
$zusatz.='(a.o.)';
if(($row->mobilitaetstyp_kurzbz != '') && ($row->doubledegree == 1)) //Double Degree Student
$zusatz .= '(d.d.)';
$this->studentuids[] = $row->student_uid;
$this->data[]=array('student'=>array(
'uid' => $row->student_uid,
'vorname'=>$row->vorname,
'nachname'=>$row->nachname,
'personenkennzeichen'=>trim($row->matrikelnr),
'matr_nr'=>$row->matr_nr,
'semester'=>$row->semester,
'verband'=>trim($row->verband),
'gruppe'=>trim($row->gruppe),
'zusatz'=>$zusatz,
'studiengang_kurzbz'=>$row->kurzbzlang,
'mobilitaetstyp_kurzbz'=>$row->mobilitaetstyp_kurzbz
));
}
}
//Anzahl Studierende in Array $data (an erster Stelle) einfuegen
$this->data = array_reverse($this->data, true);
$this->data['anzahl_studierende'] = $anzahl_studierende;
$this->data = array_reverse($this->data, true);
}
}
}
+71 -12
View File
@@ -849,6 +849,8 @@ class mitarbeiter extends benutzer
$obj->titelpost = $row->titelpost;
$obj->kurzbz = $row->kurzbz;
$obj->vornamen = $row->vornamen;
$obj->aktiv =$this->db_parse_bool($row->aktiv);
$obj->fixangestellt = $this->db_parse_bool($row->fixangestellt);
$this->result[] = $obj;
}
@@ -916,6 +918,10 @@ class mitarbeiter extends benutzer
*/
public function searchPersonal($filter)
{
// Filter imploden und trimmen, um preg_split(Zeichenweise trennung) durchfuehren zu koennen
//$searchItems_string_orig = implode(' ', $filter);
$searchItems_string = generateSpecialCharacterString($filter);
$qry = "SELECT
distinct on(mitarbeiter_uid) *, tbl_benutzer.aktiv as aktiv, tbl_mitarbeiter.insertamum,
tbl_mitarbeiter.insertvon, tbl_mitarbeiter.updateamum, tbl_mitarbeiter.updatevon, tbl_person.svnr
@@ -923,8 +929,8 @@ class mitarbeiter extends benutzer
public.tbl_mitarbeiter
JOIN public.tbl_benutzer ON(mitarbeiter_uid=uid)
JOIN public.tbl_person USING(person_id)
WHERE lower(COALESCE(nachname,'') ||' '|| COALESCE(vorname,'')) ~* lower(".$this->db_add_param($filter).") OR
lower(COALESCE(vorname,'') ||' '|| COALESCE(nachname,'')) ~* lower(".$this->db_add_param($filter).") OR
WHERE lower(COALESCE(nachname,'') ||' '|| COALESCE(vorname,'')) ~* lower(".$this->db_add_param($searchItems_string).") OR
lower(COALESCE(vorname,'') ||' '|| COALESCE(nachname,'')) ~* lower(".$this->db_add_param($searchItems_string).") OR
uid ~* ".$this->db_add_param($filter)." ";
if(is_numeric($filter))
$qry.="OR personalnummer = ".$this->db_add_param($filter)." OR svnr = ".$this->db_add_param($filter).";";
@@ -1090,6 +1096,55 @@ class mitarbeiter extends benutzer
return $return;
}
/**
* Gibt UID des letzten Vorgesetzten zurück
* @param string $uid Mitarbeiter.
* @return uid letzter Vorgesetzter
*/
public function getLastVorgesetzter($uid = null)
{
$return = false;
if (is_null($uid))
$uid = $this->uid;
$qry = "SELECT
uid as vorgesetzter
FROM
public.tbl_benutzerfunktion
WHERE
funktion_kurzbz='Leitung' AND
(datum_von is null OR datum_von<=now()) AND
(datum_bis is null OR datum_bis>=now()) AND
oe_kurzbz in (SELECT oe_kurzbz
FROM public.tbl_benutzerfunktion
WHERE
funktion_kurzbz='oezuordnung' AND uid=".$this->db_add_param($uid)."
ORDER BY datum_von DESC
LIMIT 1
);
";
if ($this->db_query($qry))
{
while ($row = $this->db_fetch_object())
{
if ($row->vorgesetzter != '')
{
$return = $this->vorgesetzter = $row->vorgesetzter;
}
else
{
$this->errormsg = 'Fehler bei einer Datenbankabfrage!';
$return = false;
}
}
}
return $return;
}
/**
* Gibt ein Array mit den UIDs der aktiv beschäftigten Untergebenen zurueck
* @param string $uid UID.
@@ -1309,6 +1364,7 @@ class mitarbeiter extends benutzer
WHERE
bismelden
AND personalnummer>0
AND tbl_bisverwendung.beginn<='.$this->db_add_param($meldungEnde).'
AND (tbl_bisverwendung.ende is NULL OR tbl_bisverwendung.ende>'.$this->db_add_param($meldungBeginn).')
ORDER BY uid, nachname,vorname
';
@@ -1418,22 +1474,25 @@ class mitarbeiter extends benutzer
$hasUDF = false;
$udf = new UDF();
$qry = "SELECT DISTINCT ON(mitarbeiter_uid) *,
tbl_benutzer.aktiv as aktiv,
tbl_mitarbeiter.insertamum,
tbl_mitarbeiter.insertvon,
tbl_mitarbeiter.updateamum,
tbl_mitarbeiter.updatevon";
$qry = "SELECT
*,
tbl_benutzer.aktiv as aktiv,
tbl_mitarbeiter.insertamum,
tbl_mitarbeiter.insertvon,
tbl_mitarbeiter.updateamum,
tbl_mitarbeiter.updatevon";
if ($hasUDF = $udf->personHasUDF())
{
$qry .= ", public.tbl_person.udf_values AS p_udf_values";
}
$qry .= " FROM ((public.tbl_mitarbeiter JOIN public.tbl_benutzer ON(mitarbeiter_uid=uid))
JOIN public.tbl_person USING(person_id))
LEFT JOIN public.tbl_benutzerfunktion USING(uid)
WHERE uid in(".$this->db_implode4SQL($uid_arr).")";;
$qry .= " FROM
public.tbl_mitarbeiter
JOIN public.tbl_benutzer ON(mitarbeiter_uid=uid)
JOIN public.tbl_person USING(person_id)
WHERE uid in(".$this->db_implode4SQL($uid_arr).")";
$qry .= " ORDER BY nachname, vorname";
if($this->db_query($qry))
{
+13 -2
View File
@@ -24,6 +24,7 @@
*/
require_once(dirname(__FILE__).'/basis_db.class.php');
require_once(dirname(__FILE__).'/datum.class.php');
require_once(dirname(__FILE__).'/udf.class.php');
class person extends basis_db
{
@@ -64,6 +65,7 @@ class person extends basis_db
public $foto_sperre = false; // boolean
public $matr_nr; //varchar(32)
public $bpk; //varchar(255)
public $udf_values; //json
/**
* Konstruktor - Uebergibt die Connection und laedt optional eine Person
@@ -84,6 +86,8 @@ class person extends basis_db
**/
public function load($personId)
{
$udf = new UDF();
//person_id auf gueltigkeit pruefen
if (is_numeric($personId) && $personId != '')
{
@@ -91,8 +95,11 @@ class person extends basis_db
gebdatum, gebort, gebzeit, foto, anmerkung, homepage, svnr, ersatzkennzeichen,
familienstand, anzahlkinder, aktiv, insertamum, insertvon, updateamum, updatevon, ext_id,
geschlecht, staatsbuergerschaft, geburtsnation, kurzbeschreibung, zugangscode, foto_sperre,
matr_nr, bpk
FROM public.tbl_person
matr_nr, bpk";
if ($hasUDF = $udf->personHasUDF())
$qry .= ", udf_values ";
$qry .= "FROM public.tbl_person
WHERE person_id = " . $this->db_add_param($personId, FHC_INTEGER);
if (!$this->db_query($qry))
@@ -135,6 +142,10 @@ class person extends basis_db
$this->foto_sperre = $this->db_parse_bool($row->foto_sperre);
$this->matr_nr = $row->matr_nr;
$this->bpk = $row->bpk;
if ($hasUDF)
{
$this->udf_values = $row->udf_values;
}
}
else
{
+2 -2
View File
@@ -32,12 +32,12 @@ class basis_db extends db
//Connection Herstellen
if (DB_CONNECT_PERSISTENT)
{
if(!basis_db::$db_conn = pg_pconnect($conn_str))
if(!basis_db::$db_conn = @pg_pconnect($conn_str))
die('Fehler beim Oeffnen der Datenbankverbindung');
}
else
{
if(!basis_db::$db_conn = pg_connect($conn_str))
if(!basis_db::$db_conn = @pg_connect($conn_str))
die('Fehler beim Oeffnen der Datenbankverbindung');
}
}
+72 -14
View File
@@ -26,6 +26,7 @@ require_once(dirname(__FILE__).'/log.class.php');
require_once(dirname(__FILE__).'/phrasen.class.php');
require_once(dirname(__FILE__).'/globals.inc.php');
require_once(dirname(__FILE__).'/sprache.class.php');
require_once(dirname(__FILE__).'/udf.class.php');
$sprache = getSprache();
$lang = new sprache();
@@ -44,10 +45,12 @@ class prestudent extends person
public $zgvort;
public $zgvdatum;
public $zgvnation;
public $zgv_erfuellt;
public $zgvmas_code;
public $zgvmaort;
public $zgvmadatum;
public $zgvmanation;
public $zgvmas_erfuellt;
public $ausstellungsstaat;
public $aufnahmeschluessel;
public $facheinschlberuf;
@@ -68,11 +71,13 @@ class prestudent extends person
public $zgvdoktorort;
public $zgvdoktordatum;
public $zgvdoktornation;
public $zgvdoktor_erfuellt;
public $gsstudientyp_kurzbz='Intern';
public $aufnahmegruppe_kurzbz;
public $priorisierung = null;
public $foerderrelevant = null;
public $standort_code = null;
public $udf_values = null;
public $status_kurzbz;
public $studiensemester_kurzbz;
@@ -139,10 +144,12 @@ class prestudent extends person
$this->zgvort = $row->zgvort;
$this->zgvdatum = $row->zgvdatum;
$this->zgvnation = $row->zgvnation;
$this->zgv_erfuellt = $row->zgv_erfuellt;
$this->zgvmas_code = $row->zgvmas_code;
$this->zgvmaort = $row->zgvmaort;
$this->zgvmadatum = $row->zgvmadatum;
$this->zgvmanation = $row->zgvmanation;
$this->zgvmas_erfuellt = $row->zgvmas_erfuellt;
$this->aufnahmeschluessel = $row->aufnahmeschluessel;
$this->facheinschlberuf = $this->db_parse_bool($row->facheinschlberuf);
$this->anmeldungreihungstest = $row->anmeldungreihungstest;
@@ -163,6 +170,7 @@ class prestudent extends person
$this->zgvdoktorort = $row->zgvdoktorort;
$this->zgvdoktordatum = $row->zgvdoktordatum;
$this->zgvdoktornation = $row->zgvdoktornation;
$this->zgvdoktor_erfuellt = $row->zgvdoktor_erfuellt;
$this->gsstudientyp_kurzbz = $row->gsstudientyp_kurzbz;
$this->aufnahmegruppe_kurzbz = $row->aufnahmegruppe_kurzbz;
$this->priorisierung = $row->priorisierung;
@@ -224,6 +232,11 @@ class prestudent extends person
$this->errormsg = 'ZGV Master Ort darf nicht länger als 64 Zeichen sein.';
return false;
}
if(mb_strlen($this->zgvdoktorort)>64)
{
$this->errormsg = 'ZGV Doktor Ort darf nicht länger als 64 Zeichen sein.';
return false;
}
return true;
}
@@ -249,12 +262,14 @@ class prestudent extends person
if($this->new) //Wenn new true ist dann ein INSERT absetzen ansonsten ein UPDATE
{
$qry = 'BEGIN;INSERT INTO public.tbl_prestudent (aufmerksamdurch_kurzbz, person_id,
studiengang_kz, berufstaetigkeit_code, ausbildungcode, zgv_code, zgvort, zgvdatum, zgvnation,
zgvmas_code, zgvmaort, zgvmadatum, zgvmanation, aufnahmeschluessel, facheinschlberuf,
studiengang_kz, berufstaetigkeit_code, ausbildungcode, zgv_code, zgvort, zgvdatum, zgvnation, zgv_erfuellt,
zgvmas_code, zgvmaort, zgvmadatum, zgvmanation, zgvmas_erfuellt, zgvdoktor_code, zgvdoktorort, zgvdoktordatum,
zgvdoktornation,aufnahmeschluessel, facheinschlberuf,
reihungstest_id, anmeldungreihungstest, reihungstestangetreten, rt_gesamtpunkte,
rt_punkte1, rt_punkte2, rt_punkte3, bismelden, insertamum, insertvon,
updateamum, updatevon, anmerkung, dual, ausstellungsstaat, mentor,
gsstudientyp_kurzbz, aufnahmegruppe_kurzbz, priorisierung, foerderrelevant, standort_code) VALUES('.
gsstudientyp_kurzbz, aufnahmegruppe_kurzbz, priorisierung, zgvdoktor_erfuellt, foerderrelevant, standort_code) VALUES('.
$this->db_add_param($this->aufmerksamdurch_kurzbz).",".
$this->db_add_param($this->person_id).",".
$this->db_add_param($this->studiengang_kz).",".
@@ -264,10 +279,16 @@ class prestudent extends person
$this->db_add_param($this->zgvort).",".
$this->db_add_param($this->zgvdatum).",".
$this->db_add_param($this->zgvnation).",".
$this->db_add_param($this->zgv_erfuellt).",".
$this->db_add_param($this->zgvmas_code).",".
$this->db_add_param($this->zgvmaort).",".
$this->db_add_param($this->zgvmadatum).",".
$this->db_add_param($this->zgvmanation).",".
$this->db_add_param($this->zgvmas_erfuellt).",".
$this->db_add_param($this->zgvdoktor_code).",".
$this->db_add_param($this->zgvdoktorort).",".
$this->db_add_param($this->zgvdoktordatum).",".
$this->db_add_param($this->zgvdoktornation).",".
$this->db_add_param($this->aufnahmeschluessel).",".
$this->db_add_param($this->facheinschlberuf, FHC_BOOLEAN).",".
$this->db_add_param($this->reihungstest_id).",".
@@ -289,6 +310,7 @@ class prestudent extends person
$this->db_add_param($this->gsstudientyp_kurzbz).",".
$this->db_add_param($this->aufnahmegruppe_kurzbz).",".
$this->db_add_param($this->priorisierung).",".
$this->db_add_param($this->zgvdoktor_erfuellt).",".
$this->db_add_param($this->foerderrelevant, FHC_BOOLEAN).",".
$this->db_add_param($this->standort_code).");";
}
@@ -304,10 +326,16 @@ class prestudent extends person
' zgvort='.$this->db_add_param($this->zgvort).",".
' zgvdatum='.$this->db_add_param($this->zgvdatum).",".
' zgvnation='.$this->db_add_param($this->zgvnation).",".
' zgv_erfuellt='.$this->db_add_param($this->zgv_erfuellt).",".
' zgvmas_code='.$this->db_add_param($this->zgvmas_code).",".
' zgvmaort='.$this->db_add_param($this->zgvmaort).",".
' zgvmadatum='.$this->db_add_param($this->zgvmadatum).",".
' zgvmanation='.$this->db_add_param($this->zgvmanation).",".
' zgvmas_erfuellt='.$this->db_add_param($this->zgvmas_erfuellt).",".
' zgvdoktor_code='.$this->db_add_param($this->zgvdoktor_code).",".
' zgvdoktorort='.$this->db_add_param($this->zgvdoktorort).",".
' zgvdoktordatum='.$this->db_add_param($this->zgvdoktordatum).",".
' zgvdoktornation='.$this->db_add_param($this->zgvdoktornation).",".
' aufnahmeschluessel='.$this->db_add_param($this->aufnahmeschluessel).",".
' facheinschlberuf='.$this->db_add_param($this->facheinschlberuf, FHC_BOOLEAN).",".
' reihungstest_id='.$this->db_add_param($this->reihungstest_id).",".
@@ -327,6 +355,7 @@ class prestudent extends person
' ausstellungsstaat='.$this->db_add_param($this->ausstellungsstaat).",".
' aufnahmegruppe_kurzbz='.$this->db_add_param($this->aufnahmegruppe_kurzbz).",".
' priorisierung='.$this->db_add_param($this->priorisierung).",".
' zgvdoktor_erfuellt='.$this->db_add_param($this->zgvdoktor_erfuellt).', '.
' foerderrelevant='.$this->db_add_param($this->foerderrelevant, FHC_BOOLEAN).",".
' standort_code='.$this->db_add_param($this->standort_code)." ".
" WHERE prestudent_id=".$this->db_add_param($this->prestudent_id).";";
@@ -804,10 +833,12 @@ class prestudent extends person
case "zgv":
$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";
if($stg_obj->typ=='m')
$qry.=" AND a.rolle='Interessent' AND a.zgvmas_code is not null 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'";
else
$qry.=" AND a.rolle='Interessent' AND a.zgv_code is not null";
$qry.=" AND a.rolle='Interessent' AND a.zgv_code is not null AND a.zgv_erfuellt = 't'";
break;
case "reihungstestangemeldet":
$qry.="
@@ -904,10 +935,17 @@ class prestudent extends person
$ps->zgvort = $row->zgvort;
$ps->zgvdatum = $row->zgvdatum;
$ps->zgvnation = $row->zgvnation;
$ps->zgv_erfuellt = $row->zgv_erfuellt;
$ps->zgvmas_code = $row->zgvmas_code;
$ps->zgvmaort = $row->zgvmaort;
$ps->zgvmadatum = $row->zgvmadatum;
$ps->zgvmanation = $row->zgvmanation;
$ps->zgvmas_erfuellt = $row->zgvmas_erfuellt;
$ps->zgvdoktor_code = $row->zgvdoktor_code;
$ps->zgvdoktorort = $row->zgvdoktorort;
$ps->zgvdoktordatum = $row->zgvdoktordatum;
$ps->zgvdoktornation = $row->zgvdoktornation;
$ps->zgvdoktor_erfuellt = $row->zgvdoktor_erfuellt;
$ps->ausstellungsstaat = $row->ausstellungsstaat;
$ps->aufnahmeschluessel = $row->aufnahmeschluessel;
$ps->facheinschlberuf = $this->db_parse_bool($row->facheinschlberuf);
@@ -1413,6 +1451,9 @@ class prestudent extends person
person_id=".$this->db_add_param($person_id, FHC_INTEGER)."
ORDER BY prestudent_id";
$udf = new UDF();
$hasUDF = $udf->prestudentHasUDF();
if($this->db_query($qry))
{
while($row = $this->db_fetch_object())
@@ -1428,10 +1469,12 @@ class prestudent extends person
$obj->zgvort = $row->zgvort;
$obj->zgvdatum = $row->zgvdatum;
$obj->zgvnation = $row->zgvnation;
$obj->zgv_erfuellt = $row->zgv_erfuellt;
$obj->zgvmas_code = $row->zgvmas_code;
$obj->zgvmaort = $row->zgvmaort;
$obj->zgvmadatum = $row->zgvmadatum;
$obj->zgvmanation = $row->zgvmanation;
$obj->zgvmas_erfuellt = $row->zgvmas_erfuellt;
$obj->aufnahmeschluessel = $row->aufnahmeschluessel;
$obj->facheinschlberuf = $this->db_parse_bool($row->facheinschlberuf);
$obj->anmeldungreihungstest = $row->anmeldungreihungstest;
@@ -1455,6 +1498,13 @@ class prestudent extends person
$obj->gsstudientyp_kurzbz = $row->gsstudientyp_kurzbz;
$obj->aufnahmegruppe_kurzbz = $row->aufnahmegruppe_kurzbz;
$obj->priorisierung = $row->priorisierung;
$obj->zgvdoktor_erfuellt = $row->zgvdoktor_erfuellt;
if ($hasUDF)
{
$obj->udf_values = $row->udf_values;
}
$this->result[] = $obj;
}
@@ -1478,7 +1528,7 @@ class prestudent extends person
(
'bachelor' => array(),
'master' => array(),
//'doktor' => array(),
'doktor' => array(),
);
$attribute = array
(
@@ -2075,11 +2125,11 @@ class prestudent extends person
$log->sql = $qry;
$log->sqlundo = 'INSERT INTO public.tbl_prestudent(
prestudent_id, aufmerksamdurch_kurzbz, studiengang_kz, berufstaetigkeit_code, ausbildungcode,
zgv_code, zgvort, zgvdatum, zgvnation, zgvmas_code, zgvmaort, zgvmadatum, zgvmanation,
zgv_code, zgvort, zgvdatum, zgvnation,zgv_erfuellt, zgvmas_code, zgvmaort, zgvmadatum, zgvmanation,zgvmas_erfuellt,
aufnahmeschluessel, facheinschlberuf, anmeldungreihungstest, reihungstestangetreten, reihungstest_id,
punkte, rt_punkte1, rt_punkte2, rt_punkte3, bismelden, person_id, anmerkung, mentor, ext_id_prestudent,
dual, ausstellungsstaat, zgvdoktor_code, zgvdoktorort, zgvdoktordatum, zgvdoktornation,
gsstudientyp_kurzbz, aufnahmegruppe_kurzbz, priorisierung) VALUES('.
gsstudientyp_kurzbz, aufnahmegruppe_kurzbz, priorisierung,zgvdoktor_erfuellt) VALUES('.
$this->db_add_param($this->prestudent_id).','.
$this->db_add_param($this->aufmerksamdurch_kurzbz).','.
$this->db_add_param($this->studiengang_kz).','.
@@ -2089,10 +2139,12 @@ class prestudent extends person
$this->db_add_param($this->zgvort).','.
$this->db_add_param($this->zgvdatum).','.
$this->db_add_param($this->zgvnation).','.
$this->db_add_param($this->zgv_erfuellt).','.
$this->db_add_param($this->zgvmas_code).','.
$this->db_add_param($this->zgvmaort).','.
$this->db_add_param($this->zgvmadatum).','.
$this->db_add_param($this->zgvmanation).','.
$this->db_add_param($this->zgvmas_erfuellt).','.
$this->db_add_param($this->aufnahmeschluessel).','.
$this->db_add_param($this->facheinschlberuf, FHC_BOOLEAN).','.
$this->db_add_param($this->anmeldungreihungstest).','.
@@ -2115,7 +2167,8 @@ class prestudent extends person
$this->db_add_param($this->zgvdoktornation).','.
$this->db_add_param($this->gsstudientyp_kurzbz).','.
$this->db_add_param($this->aufnahmegruppe_kurzbz).','.
$this->db_add_param($this->priorisierung).');';
$this->db_add_param($this->priorisierung).','.
$this->db_add_param($this->zgvdoktor_erfuellt).');';
if($log->save(true))
{
@@ -2226,9 +2279,9 @@ class prestudent extends person
WHERE laststatus NOT IN ('Abbrecher', 'Abgewiesener', 'Absolvent')
AND priorisierung <= ".$this->db_add_param($priorisierungAbsolut, FHC_INTEGER);
if ($result = $this->db_query($qry))
if($result = $this->db_query($qry))
{
if ($row = $this->db_fetch_object($result))
if($row = $this->db_fetch_object($result))
{
return $row->prio_relativ;
}
@@ -2243,8 +2296,9 @@ class prestudent extends person
$this->errormsg = 'Fehler beim Laden der Daten';
return false;
}
}
}
/**
* Prueft, ob eine Person einen aktuellen PreStudentstatus-Eintrag besitzt, der die ZGV Master ersetzt
* @param int $person_id ID der zu überprüfenden Person.
@@ -2435,10 +2489,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
+1 -1
View File
@@ -206,7 +206,7 @@ class projektphase extends basis_db
$obj->beschreibung = $row->beschreibung;
$obj->start = $row->start;
$obj->ende = $row->ende;
//$obj->personentage = $row->personentage;
$obj->personentage = $row->personentage;
$obj->farbe = $row->farbe;
$obj->budget = $row->budget;
$obj->ressource_id = $row->ressource_id;
+22 -19
View File
@@ -361,13 +361,13 @@ class pruefling extends basis_db
$qry = "
SELECT DISTINCT ON (vw_auswertung_ablauf.gebiet_id) gebiet_id,
vw_auswertung_ablauf.*,
vw_auswertung_ablauf.*,
tbl_studiengang.typ
FROM
FROM
testtool.vw_auswertung_ablauf
JOIN
JOIN
public.tbl_studiengang USING (studiengang_kz)
WHERE
WHERE
reihungstest_id = ".$this->db_add_param($reihungstest_id, FHC_INTEGER);
// Ggf. die Basis-Fragengebiete ermitteln (ohne Quereinsteigergebiete)
@@ -387,8 +387,8 @@ class pruefling extends basis_db
if (!empty($basis_gebiet_id_toString))
{
$qry .= "
AND
gebiet_id IN (". $basis_gebiet_id_toString. ")
AND
gebiet_id IN (". $basis_gebiet_id_toString. ")
";
}
}
@@ -400,13 +400,16 @@ class pruefling extends basis_db
{
$excluded_gebiete = unserialize(FAS_REIHUNGSTEST_EXCLUDE_GEBIETE);
$exclude_gebiet_id_arr = $excluded_gebiete;
$exclude_gebiet_id_toString = implode(', ', $exclude_gebiet_id_arr);
$qry .= "
AND
gebiet_id NOT IN (". $exclude_gebiet_id_toString. ")
AND
typ = 'b'
";
if (is_array($exclude_gebiet_id_arr) && count($exclude_gebiet_id_arr) > 0)
{
$exclude_gebiet_id_toString = implode(', ', $exclude_gebiet_id_arr);
$qry .= "
AND
gebiet_id NOT IN (". $exclude_gebiet_id_toString. ")
AND
typ = 'b'
";
}
}
}
@@ -421,21 +424,21 @@ class pruefling extends basis_db
prestudent_id
FROM
public.tbl_rt_person
JOIN
JOIN
public.tbl_prestudent USING(person_id)
JOIN
public.tbl_prestudentstatus USING (prestudent_id, studienplan_id)
JOIN
JOIN
tbl_reihungstest ON (
tbl_rt_person.rt_id = tbl_reihungstest.reihungstest_id
tbl_rt_person.rt_id = tbl_reihungstest.reihungstest_id
)
WHERE
tbl_rt_person.person_id = ".$this->db_add_param($person_id, FHC_INTEGER)."
AND
AND
tbl_rt_person.rt_id = ".$this->db_add_param($reihungstest_id, FHC_INTEGER)."
AND
AND
tbl_prestudentstatus.status_kurzbz='Interessent'
AND
AND
tbl_prestudentstatus.studiensemester_kurzbz = tbl_reihungstest.studiensemester_kurzbz
ORDER BY tbl_reihungstest.datum DESC, tbl_prestudent.priorisierung ASC LIMIT 1
)
+10 -9
View File
@@ -1247,15 +1247,16 @@ class reihungstest extends basis_db
*/
public function getReihungstestPersonDatum($prestudent_id, $datum)
{
$qry = "SELECT
tbl_rt_person.*
FROM
public.tbl_rt_person
JOIN public.tbl_prestudent USING(person_id)
JOIN public.tbl_reihungstest ON(tbl_reihungstest.reihungstest_id=tbl_rt_person.rt_id)
WHERE
tbl_prestudent.prestudent_id = ".$this->db_add_param($prestudent_id)."
AND tbl_reihungstest.datum=".$this->db_add_param($datum);
$qry = "SELECT rt_person.*
FROM tbl_prestudent ps
JOIN tbl_prestudentstatus pss ON ps.prestudent_id = pss.prestudent_id
JOIN tbl_rt_person rt_person ON ps.person_id = rt_person.person_id
JOIN tbl_reihungstest rt ON rt_person.rt_id = rt.reihungstest_id
JOIN tbl_rt_studienplan rtstp ON rt.reihungstest_id = rtstp.reihungstest_id
WHERE ps.prestudent_id = ".$this->db_add_param($prestudent_id)."
AND rtstp.studienplan_id = pss.studienplan_id
AND rt.datum=".$this->db_add_param($datum);
if ($result = $this->db_query($qry))
{
while ($row = $this->db_fetch_object($result))
+6
View File
@@ -553,6 +553,12 @@ class statistik extends basis_db
{
$name = $this->db_field_name($this->data,$spalte);
$this->html.= '<td>'.$this->convert_html_chars($row->$name).'</td>';
// Umwandeln von Punkt in Komma bei Float-Werten
if (is_numeric($row->$name))
{
if (strpos($row->$name,'.') != false)
$row->$name = number_format($row->$name,2,",","");
}
$this->csv.= '"'.$row->$name.'",';
}
+1 -1
View File
@@ -571,7 +571,7 @@ class student extends benutzer
{
$qry = "SELECT tbl_student.* FROM public.tbl_benutzer JOIN public.tbl_student ON(uid=student_uid)
WHERE person_id=".$this->db_add_param($person_id, FHC_INTEGER);
if($studiengang_kz != '')
{
$qry .= " AND studiengang_kz=".$this->db_add_param($studiengang_kz, FHC_INTEGER);
+1 -1
View File
@@ -72,7 +72,7 @@ class studienplatz extends basis_db
parent::__construct();
if(!is_null($studienplatz_id))
$this->load($studienplatz_id);
$this->loadStudienplatz($studienplatz_id);
}
public function __set($name,$value)
+1
View File
@@ -566,6 +566,7 @@ class vorlage extends basis_db
$this->insertvon = $row->insertvon;
$this->updateamum = $row->updateamum;
$this->updatevon = $row->updatevon;
$this->vorlagestudiengang_id = $row->vorlagestudiengang_id;
return true;
}
+128 -7
View File
@@ -812,20 +812,141 @@ or not exists
$qry = "select max(datum) from addon.tbl_casetime_timesheet where ".$where." and abgeschicktamum is not null";
if($result = $this->db_query($qry))
{
if ($result = $this->db_query($qry))
{
$datum = $this->db_fetch_object($result);
return $datum->max;
}
else
{
return false;
}
}
else
{
return false;
}
}
else
{
return false;
}
}
/**
* Prüft, ob es für einen bestimmten User für einen bestimmten Tag eine Zeitaufzeichnung gibt
* @param string $user Uid des zu prüfenden Users.
* @param date $vonDay Startdatum des zu prüfenden Zeitraumes im Format d.m.Y.
* @param date $bisDay Enddatum des zu prüfenden Zeitraumes im Format d.m.Y.
* @return boolean true, wenn vorhanden, sonst false
*/
public function existsZeitaufzeichnung($user, $vonDay, $bisDay)
{
$datum = date($vonDay);
$year = substr($datum, 6, 4);
$month = substr($datum, 3, 2);
$day = substr($datum, 0, 2);
$datumbisDay = date($bisDay);
$yearbisDay = substr($datumbisDay, 6, 4);
$monthbisDay = substr($datumbisDay, 3, 2);
$daybisDay = substr($datumbisDay, 0, 2);
$bisDay = date("Y-m-d", (mktime(0, 0, 0, $monthbisDay, $daybisDay + 1, $yearbisDay)));
$datum = date("Y-m-d", (mktime(0, 0, 0, $month, $day, $year)));
$qry = "
SELECT *
FROM campus.tbl_zeitaufzeichnung
WHERE uid = ". $this->db_add_param($user). "
AND start >= ". $this->db_add_param($datum). "
AND ende < ". $this->db_add_param($bisDay). ";
";
if ($this->db_query($qry))
{
$num_rows = $this->db_num_rows();
if ($num_rows >= 1)
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
/** Check, if there is a blocking PausenError
*
* @param string $uid User uid.
* @param string $datumday Day to be check in the format "Y-m-d".
* @return boolean True if there is a Pausen error.
*/
public function checkPausenErrors($uid, $datumday)
{
$tagesbeginn = '';
$tagesende = '';
$pausesumme = 0;
$tagessaldo = '';
$elsumme = '00:00';
$pflichtpause = false;
$blockingError = false;
$datum = new datum();
$this->getListeUserFromTo($uid, $datumday, $datumday, null);
foreach ($this->result as $row)
{
$datumtag = $datum->formatDatum($row->datum, 'Y-m-d');
if (($tagesbeginn == '' || $datum->mktime_fromtimestamp($datum->formatDatum($tagesbeginn, $format = 'Y-m-d H:i:s')) > $datum->mktime_fromtimestamp($datum->formatDatum($row->start, $format = 'Y-m-d H:i:s'))) && $row->aktivitaet_kurzbz != 'LehreExtern' && $row->aktivitaet_kurzbz != 'Ersatzruhe')
$tagesbeginn = $datum->formatDatum($row->start, 'H:i');
if (($tagesende == '' || $datum->mktime_fromtimestamp($datum->formatDatum($tagesende, $format = 'Y-m-d H:i:s')) < $datum->mktime_fromtimestamp($datum->formatDatum($row->ende, $format = 'Y-m-d H:i:s'))) && $row->aktivitaet_kurzbz != 'LehreExtern' && $row->aktivitaet_kurzbz != 'Ersatzruhe')
$tagesende = $datum->formatDatum($row->ende, 'H:i');
if ($row->aktivitaet_kurzbz == "Pause")
{
list($h1, $m1) = explode(':', $row->diff);
$pausesumme += ($h1 * 3600 + $m1 * 60);
}
}
$tagessaldo = $datum->mktime_fromtimestamp($datum->formatDatum($tagesende, $format = 'Y-m-d H:i:s')) - $datum->mktime_fromtimestamp($datum->formatDatum($tagesbeginn, $format = 'Y-m-d H:i:s')) - 3600;
list($h2, $m2) = explode(':', $elsumme);
$elsumme = $h2 * 3600 + $m2 * 60;
if ($datum->formatDatum($datumday, 'Y-m-d') >= '2019-11-06')
{
$pausesumme = $pausesumme;
}
elseif ($tagessaldo > 18000 && $tagessaldo < 19800 && $pflichtpause == false && $elsumme == 0)
{
$pausesumme = $tagessaldo - 18000;
}
elseif ($tagessaldo > 18000 && $pflichtpause == false && $elsumme == 0)
{
$pausesumme = $pausesumme + 1800;
}
if ($elsumme > 0)
{
$pausesumme = $pausesumme + $elsumme;
$pflichtpause = true;
}
$tagessaldo = $tagessaldo - $pausesumme;
//check if blocking error
if (($tagessaldo > 19800 && $pausesumme < 1800) || ($tagessaldo > 18000 && $tagessaldo < 19800 && $pausesumme < $tagessaldo - 18000))
{
$blockingError = true;
}
return $blockingError;
}
}
?>
+225
View File
@@ -0,0 +1,225 @@
<?php
require_once('../../../include/datum.class.php');
require_once('../../../include/projekt.class.php');
require_once('../../../include/projektphase.class.php');
require_once('../../../include/zeitaufzeichnung.class.php');
/**
* Description of zeitaufzeichnung_import
*
* @author chris
*/
class zeitaufzeichnung_import {
protected $errors;
protected $warnings;
protected $infos;
protected $p;
protected $datum;
protected $project;
protected $phase;
protected $limitdate;
protected $zeit;
/**
* @param phrasen $p The Translator object
*/
public function __construct($p) {
$this->errors = [];
$this->warnings = [];
$this->infos = [];
$this->p = $p;
$this->datum = new datum();
$this->project = new projekt();
$this->phase = new projektphase();
$this->limitdate = date('c', strtotime("+5 weeks"));
$this->zeit = new zeitaufzeichnung();
}
/**
* @return boolean
*/
public function hasErrors() {
return !empty($this->errors);
}
/**
* @return boolean
*/
public function hasWarnings() {
return !empty($this->warnings);
}
/**
* @return boolean
*/
public function hasInfos() {
return !empty($this->infos);
}
/**
* @return string
*/
public function ErrorsToHTML() {
$html = '';
foreach ($this->errors as $msg) {
$html .= '<span style="color:red;"><b>' . $msg . '</b></span><br>' . "\n";
}
return $html;
}
/**
* @return string
*/
public function WarningsToHTML() {
$html = '';
foreach ($this->warnings as $msg) {
$html .= '<span style="color:orange;"><b>' . $msg . '</b></span><br>' . "\n";
}
return $html;
}
/**
* @return string
*/
public function InfosToHTML() {
$html = '';
foreach ($this->infos as $msg) {
$html .= '<span style="color:green;"><b>' . $msg . '</b></span><br>' . "\n";
}
return $html;
}
/**
* @return string
*/
public function OutputToHTML() {
return $this->InfosToHTML() . $this->WarningsToHTML() . $this->ErrorsToHTML();
}
/**
* @param string $msg
* @return void
*/
protected function addError($msg) {
$this->errors[] = $msg;
}
/**
* @param string $msg
* @return void
*/
protected function addWarning($msg) {
$this->warnings[] = $msg;
}
/**
* @param string $msg
* @return void
*/
protected function addInfo($msg) {
$this->infos[] = $msg;
}
/**
* @param string $uid The user id
* @param string $day "Y-m-d" formatted datestring
* @return void
*
* @throws Exception
*/
protected function checkZeitsperren($uid, $day) {
$zs = new zeitsperre();
if (!$zs->getSperreByDate($uid, $day, null, zeitsperre::NUR_BLOCKIERENDE_ZEITSPERREN)) {
throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten") . ": Fehler beim Überprüfen der Zeitsperren");
}
if (count($zs->result) !== 0) {
$zsdate = new DateTime($day);
$zsdate = $zsdate->format('d.m.Y');
throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten") . ": " . $this->p->t("zeitaufzeichnung/zeitsperreVorhanden", [$zsdate, $zs->result[0]->zeitsperretyp_kurzbz]));
}
}
/**
* @param string $date datetimestring
* @return void
*
* @throws Exception
*/
protected function checkLimitdatum($date) {
if ($this->datum->formatDatum($date, 'Y-m-d H:i:s') > $this->limitdate) {
throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten") . ': Eingabe nicht möglich da (' . $date . ') zu weit in der Zukunft liegt.');
}
}
/**
* @param string $start datestring
* @param string $end datestring
* @param string $aktivitaet_kurzbz
* @return void
*
* @throws Exception
*/
protected function checkDienstreise($start, $end, $aktivitaet_kurzbz) {
$startDate = $this->datum->formatDatum($start, 'Y-m-d');
$endDate = $this->datum->formatDatum($end, 'Y-m-d');
if ($startDate != $endDate && $aktivitaet_kurzbz != "DienstreiseMT") {
throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten")
.': Eingabe nicht möglich, da keine Zeitaufzeichnung über mehrere Tage erlaubt ist (ausgenommen Dienstreisen).');
}
}
/**
* @param string $end timestring
* @return void
*
* @throws Exception
*/
protected function checkTagesgenau($end) {
$endTime = $this->datum->formatDatum($end, 'H:i:s');
if ($endTime == '00:00:00') {
throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten")
.': Bitte Arbeitszeiten gemäß Arbeitsaufzeichnung Leitfaden tagesgenau abgrenzen: Nur Eingaben von 00:00 bis 23:59 erlaubt!');
}
}
/**
* @param string $projekt_kurzbz
* @param string $start datestring
* @param string $end datestring
* @return void
*
* @throws Exception
*/
protected function checkProjectInterval($projekt_kurzbz, $start, $end) {
if (!$this->project->checkProjectInCorrectTime($projekt_kurzbz, $start, $end)) {
throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten") . ': Eingabe nicht möglich, da angegebenes Anfangs und Enddatum nicht in den Projektzeitrahmen fällt: (' . $start . ') (' . $end . ')');
}
}
/**
* @param string $phase The Projektphase ID
* @param string $start datestring
* @param string $end datestring
* @return void
*
* @throws Exception
*/
protected function checkPhaseInterval($phase, $start, $end) {
if (!$this->phase->checkProjectphaseInCorrectTime($phase, $start, $end)) {
throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten") . ': Eingabe nicht möglich, da angegebenes Anfangs und Enddatum nicht in den Projektphasenzeitrahmen fällt: (' . $start . ') (' . $end . ')');
}
}
}
@@ -0,0 +1,435 @@
<?php
require_once('zeitaufzeichnung_import.class.php');
require_once('../../../include/organisationseinheit.class.php');
/**
* Description of zeitaufzeichnung_csv_import
*
* @author bambi
*/
class zeitaufzeichnung_import_csv extends zeitaufzeichnung_import {
const USER = 0;
const AKTIVITAET = 1;
const STARTDT = 2;
const ENDEDT = 3;
const BESCHREIBUNG = 4;
const OE = 5;
const PROJEKT = 6;
const PHASE = 7;
const SERVICE = 8;
const HOMEOFFICE = 9;
const ANZAHL_PFLICHTFELDER = 4;
protected $tmpname;
protected $fh;
protected $anzahl;
protected $importtage_array;
protected $ende_vorher;
protected $user;
protected $project_kurzbz_array;
protected $projectphasen_kurzbz_array;
protected $sperrdatum;
protected $current_line;
protected $homeoffice;
/**
* @param phrasen $p The Translator object
* @param string $user The user ID
* @param string $sperrdatum "c" formatted datetimestring
* @param string $filename
*/
public function __construct(phrasen $p, $user, $sperrdatum, $filename) {
parent::__construct($p);
$this->user = $user;
$this->tmpname = $filename;
$this->sperrdatum = $sperrdatum;
$this->project_kurzbz_array = [];
$projects = $this->project->getProjekteListForMitarbeiter($user);
foreach ($projects as $pp)
$this->project_kurzbz_array[] = (string) $pp->projekt_kurzbz;
$this->projectphasen_kurzbz_array = [];
$projektphasen = $this->phase->getProjectphaseForMitarbeiter($user);
foreach ($projektphasen as $pp)
$this->projectphasen_kurzbz_array[] = (string) $pp->projektphase_id;
}
/**
* @param string $msg
* @param boolean $prepend_current_line
* @return void
*/
protected function addError($msg, $prepend_current_line = false) {
if( $prepend_current_line ) {
$msg = 'Zeile ' . $this->current_line . ' - ' . $msg;
}
$this->errors[] = $msg;
}
/**
* @return void
*/
public function import() {
try {
$this->checkMimeType();
$this->openFileForReading();
$this->checkEncoding();
$this->iterateRows();
$this->checkAndCleanup();
} catch (Exception $ex) {
$this->addError($ex->getMessage());
}
}
/**
* @return void
*
* @throws Exception
*/
protected function checkMimeType() {
$mimeType = mime_content_type($this->tmpname);
if ($mimeType !== 'text/plain' ) {
throw new Exception('Datei ist nicht im CSV Format.');
}
}
/**
* @return void
*
* @throws Exception
*/
protected function openFileForReading() {
if (false === ($this->fh = fopen($this->tmpname, 'r')) )
{
throw new Exception('CSV - Datei konnte nicht zum lesen geöffnet werden.');
}
}
/**
* @return void
*
* @throws Exception
*/
protected function checkEncoding() {
$filecontent = file_get_contents($this->tmpname);
if (!mb_detect_encoding($filecontent, 'UTF-8', true) ) {
throw new Exception('Datei konnte nicht importiert werden. Encoding ist nicht UTF-8!');
}
}
/**
* @return void
*/
protected function iterateRows() {
set_time_limit(0);
$this->anzahl = 0;
$this->importtage_array = array();
$this->ende_vorher = date('Y-m-d H:i:s');
$data = null;
$this->current_line = 0;
while (($data = fgetcsv($this->fh, 1000, ';', '"')) !== FALSE) {
if ((false !== strpos($data[self::USER], '#'))
|| count($data) < self::ANZAHL_PFLICHTFELDER) {
// ignore lines starting with #
continue;
}
$this->current_line++;
$this->processData($data);
}
}
/**
* @param array $data
* @return void
*/
protected function processData($data) {
try {
$this->checkUser($data[self::USER]);
$this->initData($data);
$this->checkProject($data[self::PROJEKT], $data[self::PHASE]);
$this->checkPhase($data[self::PHASE]);
$this->checkZeitsperren($this->user, $this->datum->formatDatum($data[self::STARTDT], 'Y-m-d'));
$this->checkSperrdatum($data[self::STARTDT]);
$this->checkLimitdatum($data[self::STARTDT]);
$this->checkDienstreise($data[self::STARTDT], $data[self::ENDEDT], $data[self::AKTIVITAET]);
$this->checkTagesgenau($data[self::ENDEDT]);
if(empty($data[self::PHASE]))
$this->checkProjectInterval($data[self::PROJEKT], $data[self::STARTDT], $data[self::ENDEDT]);
$this->checkPhaseInterval($data[self::PHASE], $data[self::STARTDT], $data[self::ENDEDT]);
$this->checkVals($data[self::OE],$data[self::PROJEKT],$data[self::PHASE],$data[self::SERVICE]);
$this->mapLehreIntern($data);
$this->prepareZeitaufzeichnung($data);
$this->checkImporttage($data[self::STARTDT]);
$this->saveZeit($data[self::STARTDT], $data[self::ENDEDT]);
} catch (Exception $ex) {
$this->addError($ex->getMessage(), true);
}
}
/**
* @param string $user The User ID
* @return void
*
* @throws Exception
*/
protected function checkUser($user) {
if ($user !== $this->user || (strpos($user, '#') !== false))
{
throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten").': Falsche UID nicht importiert (' . $user . ')');
}
}
/**
* @param string $project The Project ID or empty string
* @param string $phase The Phase ID or empty string
* @return void
*
* @throws Exception
*/
protected function checkProject($project, $phase) {
if(!empty($project) && !in_array($project, $this->project_kurzbz_array) && empty($phase))
{
throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da Sie folgendem Projekt entweder nicht zugewiesen sind oder das Projekt schon abgeschlossen wurde: (' . $project . ')');
}
}
/**
* @param string $phase The Phase ID or empty string
* @return void
*
* @throws Exception
*/
protected function checkPhase($phase) {
if(!empty($phase) && !in_array($phase, $this->projectphasen_kurzbz_array))
{
throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da Sie folgender Projektphase entweder nicht zugewiesen sind oder die Projektphase schon abgeschlossen wurde: (' . $phase . ')');
}
}
/**
* @param array $data
* @return void
*/
protected function initData(&$data) {
foreach ([self::OE, self::PROJEKT, self::PHASE, self::SERVICE] as $key)
if (!isset($data[$key]))
$data[$key] = NULL;
if (!isset($data[self::HOMEOFFICE]))
$data[$key] = false;
}
/**
* @param string $start datetimestring
* @return void
*
* @throws Exception
*/
protected function checkSperrdatum($start) {
if ($this->datum->formatDatum($start, 'Y-m-d H:i:s') < $this->sperrdatum) {
throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten") . ': Eingabe nicht möglich da vor dem Sperrdatum (' . $start . ')');
}
}
/**
* @param string $oe_val
* @param string $project_val
* @param string $phase_val
* @param string $service_val
* @return void
*
* @throws Exception
*/
protected function checkVals($oe_val, $project_val, $phase_val, $service_val) {
$failedvals = $this->_checkVals($oe_val, $project_val, $phase_val, $service_val);
if( count($failedvals) > 0 )
{
throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten").': Fehlerhafte Werte ('.implode(', ', $failedvals).')');
}
}
/**
* @param string $oe_val
* @param string $project_val
* @param string $phase_val
* @param string $service_val
* @return array
*/
protected function _checkVals ($oe_val, $project_val, $phase_val, $service_val) {
$error = [];
if ($service_val && ( filter_var($service_val, FILTER_VALIDATE_INT) === false )) {
$error[] = 'service';
}
if ($phase_val && ( filter_var($phase_val, FILTER_VALIDATE_INT) === false )) {
$error[] = 'phase';
}
if ($oe_val) {
$oecheck = new organisationseinheit($oe_val);
if ($oecheck->errormsg) {
$error[] = 'OE';
}
}
if ($project_val) {
$procheck = new projekt($project_val);
if ($procheck->errormsg) {
$error[] = 'projekt';
}
}
return $error;
}
/**
* @param array $data
* @return void
*/
protected function mapLehreIntern(&$data) {
if ($data[self::AKTIVITAET] == 'LehreIntern') {
$data[self::AKTIVITAET] = 'Lehre';
}
}
/**
* @param array $data
* @return void
*/
protected function prepareZeitaufzeichnung($data) {
$this->zeit->new = true;
$this->zeit->beschreibung = NULL;
$this->zeit->oe_kurzbz_1 = NULL;
$this->zeit->projekt_kurzbz = NULL;
$this->zeit->projektphase_id = NULL;
$this->zeit->service_id = NULL;
$this->zeit->insertamum = date('Y-m-d H:i:s');
$this->zeit->updateamum = date('Y-m-d H:i:s');
$this->zeit->updatevon = $this->user;
$this->zeit->insertvon = $this->user;
$this->zeit->uid = $data[self::USER];
$this->zeit->aktivitaet_kurzbz = $data[self::AKTIVITAET];
$this->zeit->start = $this->datum->formatDatum($data[self::STARTDT], 'Y-m-d H:i:s');
$this->zeit->ende = $this->datum->formatDatum($data[self::ENDEDT], 'Y-m-d H:i:s');
if (isset($data[self::BESCHREIBUNG])) {
$this->zeit->beschreibung = $data[self::BESCHREIBUNG];
}
if (isset($data[self::OE])) {
$this->zeit->oe_kurzbz_1 = $data[self::OE];
}
if (isset($data[self::PROJEKT])) {
$this->zeit->projekt_kurzbz = $data[self::PROJEKT];
}
if (isset($data[self::PHASE])) {
$this->zeit->projektphase_id = $data[self::PHASE];
}
if (isset($data[self::SERVICE])) {
$this->zeit->service_id = $data[self::SERVICE];
}
$this->zeit->homeoffice = false;
if (isset($data[self::HOMEOFFICE])) {
$this->zeit->homeoffice = (strtolower($data[self::HOMEOFFICE]) == 'true');
if (strtolower($data[self::HOMEOFFICE]) == 'true') {
// check, ob homeoffice gemäß Bisverwendung
$vonCSV = $this->datum->formatDatum($data[self::STARTDT], 'Y-m-d');
$verwendung = new bisverwendung();
$verwendung->getVerwendungDatum($data[self::USER], $vonCSV);
foreach ($verwendung->result as $v) {
if ($v->homeoffice) {
$this->zeit->homeoffice = true;
} else {
$this->addWarning($this->p->t("zeitaufzeichnung/homeofficeNichtErlaubt", [$vonCSV]));
$this->zeit->homeoffice = false;
}
}
}
}
}
/**
* @param string $start datestring
* @return void
*
* @throws Exception
*/
protected function checkImporttage($start) {
$tag = $this->datum->formatDatum($start, 'Y-m-d');
if (!in_array($tag, $this->importtage_array)) {
$this->importtage_array[] = $tag;
$this->zeit->deleteEntriesForUser($this->user, $tag);
} else if ($this->ende_vorher < $this->zeit->start) {
$this->savePause();
}
$this->ende_vorher = $this->zeit->ende;
}
/**
* @return void
*/
protected function savePause() {
$pause = new zeitaufzeichnung();
$pause->new = true;
$pause->insertamum = date('Y-m-d H:i:s');
$pause->updateamum = date('Y-m-d H:i:s');
$pause->updatevon = $this->user;
$pause->insertvon = $this->user;
$pause->uid = $this->user;
$pause->aktivitaet_kurzbz = 'Pause';
$pause->start = $this->ende_vorher;
$pause->ende = $this->zeit->start;
$pause->beschreibung = '';
$pause->homeoffice = $this->zeit->homeoffice;
if(!$pause->save())
{
$this->addError($this->p->t("global/fehlerBeimSpeichernDerDaten").': '.$pause->errormsg, true);
}
}
/**
* @param string $start datetimestring
* @param string $end datetimestring
* @return void
*/
protected function saveZeit($start, $end) {
if ($start != $end) {
if (!$this->zeit->save()) {
$this->addError($this->p->t("global/fehlerBeimSpeichernDerDaten") . ': ' . $this->zeit->errormsg . '(' . $this->zeit->start . ')', true);
} else {
$this->anzahl++;
}
} else {
$this->anzahl++;
}
}
/**
* @return void
*/
protected function checkAndCleanup() {
if ($this->anzahl > 0) {
$this->addInfo($this->p->t("global/datenWurdenGespeichert") . ' (' . $this->anzahl . ')');
foreach ($this->importtage_array as $ptag) {
$this->zeit->cleanPausenForUser($this->user, $ptag);
}
}
}
}
@@ -0,0 +1,222 @@
<?php
require_once('zeitaufzeichnung_import.class.php');
/**
* Description of zeitaufzeichnung_import_post
*
* @author chris
*/
class zeitaufzeichnung_import_post extends zeitaufzeichnung_import {
protected $datum;
protected $user;
protected $edit;
protected $data;
/**
* @param phrasen $p The Translator object
* @param string $user The user ID
* @param boolean $edit Edit or create a new one
* @param array $data The array keys are:
* - aktivitaet_kurzbz string
* - beschreibung string
* - bis datum
* - bis_pause datum
* - homeoffice boolean
* - kunde_uid string ID
* - oe_kurzbz_1 string
* - oe_kurzbz_2 string
* - projekt_kurzbz string
* - projektphase_id string ID
* - service_id string ID
* - von datum
* - von_pause datum
* - zeitaufzeichnung_id string ID
* @param string $filename
*/
public function __construct(phrasen $p, $user, $edit, $data) {
parent::__construct($p);
$this->user = $user;
$this->edit = $edit;
$this->data = $data;
}
/**
* @return string
*/
public function ErrorsToHTML() {
$html = '';
foreach ($this->errors as $msg) {
$html .= '<span id="triggerPhasenReset" style="color:red;"><b>' . $msg . '</b></span><br>' . "\n";
}
return $html;
}
/**
* @return void
*/
public function import() {
try {
$this->checkNew($this->data['zeitaufzeichnung_id']);
$this->prepareZeitaufzeichnung($this->data['aktivitaet_kurzbz'], $this->data['von'], $this->data['bis'], $this->data['beschreibung'], $this->data['oe_kurzbz_1'], $this->data['oe_kurzbz_2'], $this->data['projekt_kurzbz'], $this->data['projektphase_id'], $this->data['homeoffice'], $this->data['service_id'], $this->data['kunde_uid']);
$this->checkZeitsperren($this->user, $this->datum->formatDatum($this->data['von'], 'Y-m-d'));
$this->checkProjectInterval($this->data['projekt_kurzbz'], $this->data['von'], $this->data['bis']);
$this->checkLimitdatum($this->data['von']);
$this->checkLimitdatum($this->data['bis']);
$this->checkPhaseInterval($this->data['projektphase_id'], $this->data['von'], $this->data['bis']);
$this->checkDienstreise($this->data['von'], $this->data['bis'], $this->data['aktivitaet_kurzbz']);
$this->checkTagesgenau($this->data['bis']);
$this->processPause($this->data['von_pause'], $this->data['bis_pause']);
$this->saveZeit();
} catch (Exception $ex) {
$this->addError($ex->getMessage());
}
}
/**
* @param string $zeitaufzeichnung_id
* @return void
*/
protected function checkNew($zeitaufzeichnung_id) {
if($this->edit) {
if(!$this->zeit->load($zeitaufzeichnung_id))
die($this->p->t("global/fehlerBeimLadenDesDatensatzes"));
$this->zeit->new = false;
} else {
$this->zeit->new = true;
$this->zeit->insertamum = date('Y-m-d H:i:s');
$this->zeit->insertvon = $this->user;
}
}
/**
* @param string $aktivitaet_kurzbz
* @param string $von datetime
* @param string $bis datetime
* @param string $beschreibung
* @param string $oe_kurzbz_1
* @param string $oe_kurzbz_2
* @param string $projekt_kurzbz
* @param string $projektphase_id
* @param boolean $homeoffice
* @param string $service_id
* @param string $kunde_uid
* @return void
*/
protected function prepareZeitaufzeichnung($aktivitaet_kurzbz, $von, $bis, $beschreibung, $oe_kurzbz_1, $oe_kurzbz_2, $projekt_kurzbz, $projektphase_id, $homeoffice, $service_id, $kunde_uid) {
$this->zeit->uid = $this->user;
$this->zeit->aktivitaet_kurzbz = $aktivitaet_kurzbz;
$this->zeit->start = $this->datum->formatDatum($von, 'Y-m-d H:i:s');
$this->zeit->ende = $this->datum->formatDatum($bis, 'Y-m-d H:i:s');
$this->zeit->beschreibung = $beschreibung;
$this->zeit->oe_kurzbz_1 = $oe_kurzbz_1;
$this->zeit->oe_kurzbz_2 = $oe_kurzbz_2;
$this->zeit->updateamum = date('Y-m-d H:i:s');
$this->zeit->updatevon = $this->user;
$this->zeit->projekt_kurzbz = $projekt_kurzbz;
$this->zeit->projektphase_id = $projektphase_id;
$this->zeit->homeoffice = $homeoffice;
$this->zeit->service_id = $service_id;
$this->zeit->kunde_uid = $kunde_uid;
}
/**
* @param string $start datetime
* @param string $end datetime
* @return void
*/
protected function processPause($start, $end) {
if (isset($_POST['genPause'])) {
$p_start = $this->datum->formatDatum($start, 'Y-m-d H:i:s');
$p_end = $this->datum->formatDatum($end, 'Y-m-d H:i:s');
$this->checkPauseInArbeitszeit($p_start, $p_end);
$this->checkPauseValid($p_start, $p_end);
$this->savePause($start, $end);
}
}
/**
* @param string $start "Y-m-d H:i:s" formatted datetime
* @param string $end "Y-m-d H:i:s" formatted datetime
* @return void
*
* @throws Exception
*/
protected function checkPauseInArbeitszeit($start, $end) {
if ($this->zeit->start > $start || $this->zeit->ende < $end) {
throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten") . ': Pause außerhalb der Arbeitszeit');
}
}
/**
* @param string $start "Y-m-d H:i:s" formatted datetime
* @param string $end "Y-m-d H:i:s" formatted datetime
* @return void
*
* @throws Exception
*/
protected function checkPauseValid($start, $end) {
if ($start > $end) {
throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten") . ': Fehlerhafte Pausenzeiten');
}
}
/**
* @param string $start datetime
* @param string $end datetime
* @return void
*/
protected function savePause($start, $end) {
//Eintrag Arbeit bis zur Pause
$ende = $this->zeit->ende;
$this->zeit->ende = $this->datum->formatDatum($start, 'Y-m-d H:i:s');
if (!$this->zeit->save()) {
$this->addError($p->t("global/fehlerBeimSpeichernDerDaten") . ': ' . $this->zeit->errormsg);
}
//Eintrag für die Pause
$pause = new zeitaufzeichnung();
$pause->new = true;
$pause->insertamum = date('Y-m-d H:i:s');
$pause->updateamum = date('Y-m-d H:i:s');
$pause->updatevon = $this->user;
$pause->insertvon = $this->user;
$pause->uid = $this->user;
$pause->aktivitaet_kurzbz = 'Pause';
$pause->homeoffice = $this->zeit->homeoffice;
$pause->start = $this->datum->formatDatum($start, 'Y-m-d H:i:s');
$pause->ende = $this->datum->formatDatum($end, 'Y-m-d H:i:s');
$pause->beschreibung = '';
if (!$pause->save()) {
$this->addError($p->t("global/fehlerBeimSpeichernDerDaten") . ': ' . $pause->errormsg);
}
// Eintrag Arbeit ab der Pause
if ($this->zeit->new == false) {
$this->zeit->new = true;
$this->zeit->insertamum = date('Y-m-d H:i:s');
$this->zeit->insertvon = $this->user;
}
$this->zeit->start = $this->datum->formatDatum($end, 'Y-m-d H:i:s');
$this->zeit->ende = $ende;
}
/**
* @return void
*
* @throws Exception
*/
protected function saveZeit() {
if (!$this->zeit->save()) {
throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten") . ': ' . $this->zeit->errormsg);
} else if (!$this->hasErrors()) {
$this->addInfo($this->p->t("global/datenWurdenGespeichert"));
}
}
}
+25 -8
View File
@@ -23,6 +23,9 @@ require_once(dirname(__FILE__).'/basis_db.class.php');
class zeitsperre extends basis_db
{
const NUR_BLOCKIERENDE_ZEITSPERREN = true;
const BLOCKIERENDE_ZEITSPERREN = "'Krank','Urlaub','ZA','DienstV','PflegeU','DienstF','CovidSB','CovidKS'";
public $new; // boolean
public $result = array(); // news Objekt
@@ -57,6 +60,11 @@ class zeitsperre extends basis_db
$this->load($zeitsperre_id);
}
public static function getBlockierendeZeitsperren()
{
return explode("','",trim(self::BLOCKIERENDE_ZEITSPERREN, '\''));
}
/**
* Laedt alle Zeitsperren eines Benutzers wo ende>=now() ist
* @param $uid
@@ -368,11 +376,13 @@ class zeitsperre extends basis_db
*
* @param $user
* @param $datum
* @param $stunde
* @param $stunde optional, wird nur abgefragt, wenn != null
* @param $nurblockierend boolean default false
* @return true wenn ok, false im Fehlerfall
*/
public function getSperreByDate($user, $datum, $stunde)
public function getSperreByDate($user, $datum, $stunde=null, $nurblockierend=false)
{
$this->result = array();
$qry = "
SELECT
*
@@ -380,16 +390,23 @@ class zeitsperre extends basis_db
campus.tbl_zeitsperre
WHERE
vondatum<=".$this->db_add_param($datum)."
AND bisdatum>=".$this->db_add_param($datum)." AND
((vondatum=".$this->db_add_param($datum)." AND vonstunde<=".$this->db_add_param($stunde).") OR vonstunde is null OR vondatum<>".$this->db_add_param($datum).") AND
((bisdatum=".$this->db_add_param($datum)." AND bisstunde>=".$this->db_add_param($stunde).") OR bisstunde is null OR bisdatum<>".$this->db_add_param($datum).") AND
mitarbeiter_uid=".$this->db_add_param($user);
AND bisdatum>=".$this->db_add_param($datum);
if( $nurblockierend ) {
$qry .= " AND zeitsperretyp_kurzbz in (" . self::BLOCKIERENDE_ZEITSPERREN . ")";
}
if(!is_null($stunde))
$qry.=" AND
((vondatum=".$this->db_add_param($datum)." AND vonstunde<=".$this->db_add_param($stunde).") OR vonstunde is null OR vondatum<>".$this->db_add_param($datum).") AND
((bisdatum=".$this->db_add_param($datum)." AND bisstunde>=".$this->db_add_param($stunde).") OR bisstunde is null OR bisdatum<>".$this->db_add_param($datum).")";
$qry .= "AND mitarbeiter_uid=".$this->db_add_param($user);
if($result = $this->db_query($qry))
{
while($row = $this->db_fetch_object($result))
{
$obj = new zeitsperre();
$obj->zeitsperre_id = $row->zeitsperre_id;
@@ -482,7 +499,7 @@ class zeitsperre extends basis_db
$qry = "select datum::date, freigabevon, zeitsperretyp_kurzbz
from (SELECT generate_series(vondatum::timestamp, bisdatum::timestamp, '1 day') as datum, freigabevon, mitarbeiter_uid, zeitsperretyp_kurzbz FROM campus.tbl_zeitsperre where vonstunde is null and bisstunde is null) a
where a.mitarbeiter_uid = ".$this->db_add_param($uid)." and datum>(now() - interval '".$anz_tage." Days') and zeitsperretyp_kurzbz in ('Krank','Urlaub', 'ZA', 'DienstV','PflegeU', 'DienstF')";
where a.mitarbeiter_uid = ".$this->db_add_param($uid)." and datum>(now() - interval '".$anz_tage." Days') and zeitsperretyp_kurzbz in (" . self::BLOCKIERENDE_ZEITSPERREN . ")";