From 282b46d54e22a918b87b3779221bd4f989826eb8 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Tue, 23 Aug 2022 15:26:13 +0200 Subject: [PATCH 001/176] =?UTF-8?q?Added=20betreuerart=20Senatsvorsitz=20a?= =?UTF-8?q?nd=20Senatspr=C3=BCfer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- system/dbupdate_3.3.php | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php index 6824d350f..515a80bf5 100644 --- a/system/dbupdate_3.3.php +++ b/system/dbupdate_3.3.php @@ -6273,6 +6273,34 @@ if($result = @$db->db_query("SELECT * FROM information_schema.role_table_grants } } +// lehre.tbl_betreuerart: add type Senatsvorsitz +if($result = $db->db_query("SELECT 1 FROM lehre.tbl_betreuerart WHERE betreuerart_kurzbz='Senatsvorsitz'")) +{ + if($db->db_num_rows($result)==0) + { + $qry = "INSERT INTO lehre.tbl_betreuerart(betreuerart_kurzbz, beschreibung) VALUES('Senatsvorsitz', 'Senatsvorsitz kommissionelle Prüfung');"; + + if(!$db->db_query($qry)) + echo 'Betreuerart: '.$db->db_last_error().'
'; + else + echo '
Neue Betreuerart Senatsvorsitz in lehre.tbl_betreuerart hinzugefügt'; + } +} + +// lehre.tbl_betreuerart: add type Senatsprüfer +if($result = $db->db_query("SELECT 1 FROM lehre.tbl_betreuerart WHERE betreuerart_kurzbz='Senatspruefer'")) +{ + if($db->db_num_rows($result)==0) + { + $qry = "INSERT INTO lehre.tbl_betreuerart(betreuerart_kurzbz, beschreibung) VALUES('Senatspruefer', 'Senatsprüfer kommissionelle Prüfung');"; + + if(!$db->db_query($qry)) + echo 'Betreuerart: '.$db->db_last_error().'
'; + else + echo '
Neue Betreuerart Senatspruefer in lehre.tbl_betreuerart hinzugefügt'; + } +} + // *** Pruefung und hinzufuegen der neuen Attribute und Tabellen echo '

Pruefe Tabellen und Attribute!

'; From 82d7891f3c81d4abdf33c2be5a04de7412b9ed0f Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Tue, 23 Aug 2022 17:45:12 +0200 Subject: [PATCH 002/176] =?UTF-8?q?Projektarbeitsbeurteilung=20possible=20?= =?UTF-8?q?for=20Pr=C3=BCfungssenat.=20Mails=20are=20sent=20to=20Senat=20m?= =?UTF-8?q?embers,=20Senat=20members=20are=20displayed=20with=20correct=20?= =?UTF-8?q?labels,=20external=20Pr=C3=BCfer=20can=20get=20login=20token?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../education/Projektbetreuer_model.php | 36 +- cis/private/lehre/abgabe_lektor.php | 3 +- cis/private/lehre/abgabe_lektor_details.php | 336 +++++++----- cis/private/lehre/abgabe_student.php | 518 +++++++++--------- cis/private/lehre/abgabe_student_details.php | 95 ++-- include/projektbetreuer.class.php | 68 ++- locale/de-AT/abgabetool.php | 9 +- locale/en-US/abgabetool.php | 7 +- system/phrasesupdate.php | 20 + vilesci/lehre/abgabe_assistenz.php | 6 +- 10 files changed, 611 insertions(+), 487 deletions(-) diff --git a/application/models/education/Projektbetreuer_model.php b/application/models/education/Projektbetreuer_model.php index 0200f6468..f6205f67f 100644 --- a/application/models/education/Projektbetreuer_model.php +++ b/application/models/education/Projektbetreuer_model.php @@ -54,18 +54,28 @@ class Projektbetreuer_model extends DB_Model $qry = "SELECT DISTINCT ON (pers.person_id) pers.person_id, betreuerart_kurzbz, vorname, nachname, trim(COALESCE(titelpre,'')||' '||COALESCE(vorname,'')||' '||COALESCE(nachname,'')||' '||COALESCE(titelpost,'')) as voller_name, anrede, titelpre, titelpost, gebdatum, geschlecht, pa.projekttyp_kurzbz, - ben.uid, ben.alias, ma.personalnummer, mitarbeiter_uid, student_uid - FROM lehre.tbl_projektarbeit pa - JOIN lehre.tbl_projektbetreuer USING (projektarbeit_id) - JOIN public.tbl_person pers USING (person_id) - LEFT JOIN public.tbl_benutzer ben USING (person_id) - LEFT JOIN public.tbl_mitarbeiter ma ON ben.uid = ma.mitarbeiter_uid - WHERE ben.aktiv - AND projektarbeit_id = ? - AND betreuerart_kurzbz = ? - ORDER BY pers.person_id, CASE WHEN ma.mitarbeiter_uid IS NULL THEN 1 ELSE 0 END, /*Mitarbeiter account first*/ - CASE WHEN ben.uid IS NULL THEN 1 ELSE 0 END, /*user with account first*/ - ben.insertamum"; + ben.uid, ben.alias, ma.personalnummer, mitarbeiter_uid, student_uid, + ( + SELECT kontakt + FROM public.tbl_kontakt + WHERE kontakttyp = 'email' + AND person_id = pers.person_id + ORDER BY + CASE WHEN zustellung THEN 0 ELSE 1 END, + insertamum DESC NULLS LAST + LIMIT 1 + ) AS private_email + FROM lehre.tbl_projektarbeit pa + JOIN lehre.tbl_projektbetreuer USING (projektarbeit_id) + JOIN public.tbl_person pers USING (person_id) + LEFT JOIN public.tbl_benutzer ben USING (person_id) + LEFT JOIN public.tbl_mitarbeiter ma ON ben.uid = ma.mitarbeiter_uid + WHERE (ben.aktiv OR ben.aktiv IS NULL) + AND projektarbeit_id = ? + AND betreuerart_kurzbz = ? + ORDER BY pers.person_id, CASE WHEN ma.mitarbeiter_uid IS NULL THEN 1 ELSE 0 END, /*Mitarbeiter account first*/ + CASE WHEN ben.uid IS NULL THEN 1 ELSE 0 END, /*user with account first*/ + ben.insertamum"; return $this->execQuery($qry, array($projektarbeit_id, $betreuerart_kurzbz)); } @@ -102,7 +112,7 @@ class Projektbetreuer_model extends DB_Model trim(COALESCE(titelpre,'')||' '||COALESCE(vorname,'')||' '||COALESCE(nachname,'')||' '||COALESCE(titelpost,'')) as voller_name, CASE WHEN tbl_benutzer.uid IS NULL THEN kontakt ELSE tbl_benutzer.uid || '@".DOMAIN."' END AS email, abg.abgabedatum FROM lehre.tbl_projektbetreuer betr - JOIN lehre.tbl_projektarbeit parb ON betr.projektarbeit_id = parb.projektarbeit_id + JOIN lehre.tbl_projektarbeit parb ON betr.projektarbeit_id = parb.projektarbeit_id JOIN public.tbl_person pers ON betr.person_id = pers.person_id LEFT JOIN public.tbl_kontakt ON pers.person_id = tbl_kontakt.person_id AND kontakttyp = 'email' AND zustellung = true LEFT JOIN public.tbl_benutzer ON pers.person_id = tbl_benutzer.person_id diff --git a/cis/private/lehre/abgabe_lektor.php b/cis/private/lehre/abgabe_lektor.php index 414c5e423..069f3caf3 100644 --- a/cis/private/lehre/abgabe_lektor.php +++ b/cis/private/lehre/abgabe_lektor.php @@ -75,8 +75,7 @@ $sql_query = "SELECT WHERE public.tbl_benutzer.person_id=lehre.tbl_projektbetreuer.person_id AND public.tbl_benutzer.uid=".$db->db_add_param($getuid).") ".($showall?'':' AND public.tbl_benutzer.aktiv AND lehre.tbl_projektarbeit.note IS NULL ')." - AND (betreuerart_kurzbz='Betreuer' OR betreuerart_kurzbz='Begutachter' OR betreuerart_kurzbz='Erstbegutachter' - OR betreuerart_kurzbz='Zweitbegutachter' OR betreuerart_kurzbz='Erstbetreuer') + AND betreuerart_kurzbz IN ('Betreuer', 'Begutachter', 'Erstbegutachter', 'Zweitbegutachter', 'Erstbetreuer', 'Senatsvorsitz', 'Senatspruefer') ORDER BY tbl_projektarbeit.projektarbeit_id, betreuerart_kurzbz desc) as xy ORDER BY nachname"; diff --git a/cis/private/lehre/abgabe_lektor_details.php b/cis/private/lehre/abgabe_lektor_details.php index a508de098..ed33add27 100644 --- a/cis/private/lehre/abgabe_lektor_details.php +++ b/cis/private/lehre/abgabe_lektor_details.php @@ -121,9 +121,9 @@ $titel = $projektarbeit_obj->titel; $student_uid = $projektarbeit_obj->student_uid; // paarbeit sollte nur ab bestimmten Zeitpunkt online bewertet werden -$num_rows_sem = $projektarbeit_obj->projektarbeitIsCurrent($projektarbeit_id); +$paIsCurrent = $projektarbeit_obj->projektarbeitIsCurrent($projektarbeit_id); -if(!is_numeric($num_rows_sem) || $num_rows_sem < 0) +if(!is_numeric($paIsCurrent) || $paIsCurrent < 0) { echo "".$p->t('abgabetool/fehlerAktualitaetProjektarbeit')."
 "; } @@ -143,27 +143,28 @@ if($num_rows_endupload < 0) } // Zweitbegutachter holen -if($betreuerart=="Erstbegutachter") +if(in_array($betreuerart, array('Erstbegutacher', 'Senatsvorsitz'))) { - $projektbetreuer = new projektbetreuer(); - $alleBegutachter = $projektbetreuer->getProjektbetreuer($projektarbeit_id); + $alleBegutachter = new projektbetreuer(); + $alleBegutachterRes = $alleBegutachter->getProjektbetreuer($projektarbeit_id); - if ($alleBegutachter) + if ($alleBegutachterRes) { - $alleBegutachterResults = $projektbetreuer->result; - - foreach ($alleBegutachterResults as $begutachter) + $zweitbetreuerArr = array(); + foreach ($alleBegutachter->result as $begutachter) { - if ($begutachter->betreuerart_kurzbz == "Erstbegutachter") + if (in_array($begutachter->betreuerart_kurzbz, array('Erstbegutacher', 'Senatsvorsitz'))) { + // dem Erstbetreuer zugewiesene Zweitbetreuer holen $erstbetreuer_id = $begutachter->person_id; - $zweitbegutachter = $projektbetreuer->getZweitbegutachterWithToken($erstbetreuer_id, $projektarbeit_id, $student_uid); - break; + $zweitbegutachter = new projektbetreuer(); + $zweitbegutachterRes = $zweitbegutachter->getZweitbegutachterWithToken($erstbetreuer_id, $projektarbeit_id, $student_uid); + if ($zweitbegutachterRes) $zweitbetreuerArr = array_merge($zweitbetreuerArr, $zweitbegutachter->result); } } // Mail mit Token an Zweitbegutachter senden - if ($zweitbegutachter && $num_rows_sem >= 1 && isset($_GET['zweitbegutachtertoken'])) + if ($zweitbegutachterRes && $paIsCurrent >= 1 && isset($_GET['zweitbegutachtertoken']) && isset($_GET['zweitbetreuer_person_id'])) { $qry_std="SELECT * FROM campus.vw_benutzer where uid=".$db->db_add_param($uid); if(!$result_std=$db->db_query($qry_std)) @@ -173,15 +174,24 @@ if($betreuerart=="Erstbegutachter") else { $row_std=@$db->db_fetch_object($result_std); - $mailres = sendZweitbegutachterMail($zweitbegutachter, $erstbetreuer_id, $row_std); + foreach ($zweitbetreuerArr as $zbg) + { + // if Zweitbetreuer is the one for which token was requested, send mail + if ($zbg->person_id == $_GET['zweitbetreuer_person_id']) + { + $mailres = sendZweitbegutachterMail($zbg, $erstbetreuer_id, $row_std); - if ($mailres) - { - echo "
".$p->t('abgabetool/zweitbegutachterMailGesendet', $zweitbegutachter->email)."
 "; - } - else - { - echo "".$p->t('abgabetool/fehlerMailZweitBegutachter')." Mail: ".$zweitbegutachter->email."
 "; + if ($mailres) + { + echo "
" + .$p->t('abgabetool/zweitbegutachterMailGesendet', array($zbg->voller_name, $zbg->email)) + ."
 "; + } + else + { + echo "".$p->t('abgabetool/fehlerMailZweitBegutachter')." Mail: ".$zbg->email."
 "; + } + } } } } @@ -465,7 +475,7 @@ $htmlstr .= "\n"; $htmlstr .= ""; $htmlstr .= ""; $htmlstr .= "\n"; -if (isset($zweitbegutachter) && $zweitbegutachter) // wenn es Zweitbegutachter gibt + +if (isset($zweitbetreuerArr) && is_array($zweitbetreuerArr)) // wenn es Zweitbetreuer gibt { - // Zweitbegutachter anzeigen + // Zweitbetreuer anzeigen $htmlstr .= "\n"; - $htmlstr .= "\n"; $htmlstr .= "\n"; $htmlstr .= "\n"; @@ -545,122 +571,122 @@ $htmlstr .= "\n"; $result=@$db->db_query($qry); - while ($row=@$db->db_fetch_object($result)) +while ($row=@$db->db_fetch_object($result)) +{ + $htmlstr .= "\n"; + $htmlstr .= "\n"; + $htmlstr .= "\n"; + $htmlstr .= "\n"; + $htmlstr .= "\n"; + $htmlstr .= "\n"; + $htmlstr .= "\n"; + if(!$row->abgabedatum) { - $htmlstr .= "\n"; - $htmlstr .= "\n"; - $htmlstr .= "\n"; - $htmlstr .= "\n"; - $htmlstr .= "\n"; - $htmlstr .= "\n"; - $htmlstr .= "\n"; + if ($row->datumdatum>=date('Y-m-d')) && ($row->datumabgabedatum>$row->datum) + { + //Abgabe nach Termin - weiß auf hellrot + $bgcol='#EA7B7B'; + $fcol='#FFFFFF'; + } + else + { + //Abgabe vor Termin - schwarz auf grün + $bgcol='#00FF00'; + $fcol='#000000'; + } + } + //$htmlstr .= ""; + } + else + { + $htmlstr .= ""; + } + $htmlstr .= " \n"; + $htmlstr .= " \n"; + $htmlstr .= " \n"; + $htmlstr .= " \n"; + $htmlstr .= " \n"; + if($user==$row->insertvon && $betreuerart!="Zweitbegutachter") + { + $htmlstr .= " "; + if(!$row->abgabedatum) { - if ($row->datumdatum>=date('Y-m-d')) && ($row->datumt('global/loeschen')."' onclick='return confdel()' title='".$p->t('abgabetool/terminLoeschen')."'>"; } else { - if($row->abgabedatum>$row->datum) - { - //Abgabe nach Termin - weiß auf hellrot - $bgcol='#EA7B7B'; - $fcol='#FFFFFF'; - } - else - { - //Abgabe vor Termin - schwarz auf grün - $bgcol='#00FF00'; - $fcol='#000000'; - } + $htmlstr .= " "; } - //$htmlstr .= ""; - } - else - { - $htmlstr .= ""; - } - $htmlstr .= " \n"; - $htmlstr .= " \n"; - $htmlstr .= " \n"; - $htmlstr .= " \n"; - $htmlstr .= " \n"; - if($user==$row->insertvon && $betreuerart!="Zweitbegutachter") - { - $htmlstr .= " "; - - if(!$row->abgabedatum) - { - $htmlstr .= " "; - } - else - { - $htmlstr .= " "; - } - } - else - { - $htmlstr .= " "; - } - if(file_exists(PAABGABE_PATH.$row->paabgabe_id.'_'.$uid.'.pdf')) - { - $htmlstr .= " "; - } - else - { - $htmlstr .= " "; - } - if($row->abgabedatum && $row->paabgabetyp_kurzbz=="end") - { - $htmlstr .= " "; - } - else - { - $htmlstr .= " "; - } - $htmlstr .= " \n"; - - - $htmlstr .= "\n"; } + else + { + $htmlstr .= " "; + } + if(file_exists(PAABGABE_PATH.$row->paabgabe_id.'_'.$uid.'.pdf')) + { + $htmlstr .= " "; + } + else + { + $htmlstr .= " "; + } + if($row->abgabedatum && $row->paabgabetyp_kurzbz=="end") + { + $htmlstr .= " "; + } + else + { + $htmlstr .= " "; + } + $htmlstr .= " \n"; + + + $htmlstr .= "\n"; +} //Eingabezeile fuer neuen Termin $htmlstr .= ''."\n"; @@ -721,10 +747,16 @@ function sendZweitbegutachterMail($zweitbegutachter, $erstbegutachter_person_id, if (!$projektbetreuer) return $projektbetreuer; - $zweitbetr = $projektbetreuer->getZweitbegutachterWithToken($erstbegutachter_person_id, $zweitbegutachter->projektarbeit_id, $student->uid); + $zweitbetrRes = $projektbetreuer->getZweitbegutachterWithToken( + $erstbegutachter_person_id, + $zweitbegutachter->projektarbeit_id, + $student->uid, + $zweitbegutachter->person_id + ); - if ($zweitbetr) + if ($zweitbetrRes && isset($projektbetreuer->result[0])) { + $zweitbetr = $projektbetreuer->result[0]; $intern = isset($zweitbetr->uid); $mail_baselink = APP_ROOT."index.ci.php/extensions/FHC-Core-Projektarbeitsbeurteilung/Projektarbeitsbeurteilung"; $mail_fulllink = "$mail_baselink?projektarbeit_id=".$zweitbegutachter->projektarbeit_id."&uid=".$student->uid; diff --git a/cis/private/lehre/abgabe_student.php b/cis/private/lehre/abgabe_student.php index 2a328dd35..8782c84c1 100644 --- a/cis/private/lehre/abgabe_student.php +++ b/cis/private/lehre/abgabe_student.php @@ -1,248 +1,270 @@ - - * Andreas Oesterreicher < andreas.oesterreicher@technikum-wien.at > - * Rudolf Hangl < rudolf.hangl@technikum-wien.at > - * Gerald Simane-Sequens < gerald.simane-sequens@technikum-wien.at > - */ - -require_once('../../../config/cis.config.inc.php'); -require_once('../../../include/functions.inc.php'); -require_once('../../../include/datum.class.php'); -require_once('../../../include/person.class.php'); -require_once('../../../include/benutzer.class.php'); -require_once('../../../include/student.class.php'); -require_once('../../../include/studiengang.class.php'); -require_once('../../../include/benutzerberechtigung.class.php'); -require_once('../../../include/phrasen.class.php'); - -$sprache = getSprache(); -$p = new phrasen($sprache); - -if (!$db = new basis_db()) - die($p->t('global/fehlerBeimOeffnenDerDatenbankverbindung')); - -$getuid=get_uid(); -$uid=$getuid; - -if(isset($_GET['uid'])) -{ - //Studentenansicht - $uid = $_GET['uid']; - //Rechte Pruefen - $allowed=false; - - $student = new student(); - if(!$student->load($uid)) - die($p->t('global/fehlerBeimErmittelnDerUID')); - - $stg_obj = new studiengang(); - if(!$stg_obj->load($student->studiengang_kz)) - die($p->t('global/fehlerBeimLesenAusDatenbank')); - - //Berechtigung ueber das Berechtigungssystem - $rechte = new benutzerberechtigung(); - $rechte->getBerechtigungen($getuid); - if($rechte->isBerechtigt('lehre/abgabetool',$stg_obj->oe_kurzbz,'s')) - $allowed=true; - - //oder Lektor mit Betreuung dieses Studenten - $qry = "SELECT 1 - FROM - lehre.tbl_projektarbeit - JOIN lehre.tbl_projektbetreuer USING(projektarbeit_id) - JOIN campus.vw_benutzer on(vw_benutzer.person_id=tbl_projektbetreuer.person_id) - WHERE - tbl_projektarbeit.student_uid=".$db->db_add_param($uid)." AND - vw_benutzer.uid=".$db->db_add_param($getuid).";"; - - if($result = $db->db_query($qry)) - { - if($db->db_num_rows($result)>0) - { - $allowed=true; - } - } - - if(!$allowed) - { - die($p->t('abgabetool/keineBerechtigungStudentenansicht')); - } -} -$htmlstr = ''; -$htmlstr1 = ''; -$vorname=''; -$nachname=''; -$zweitbetreuer = ''; - -$sql_query = "SELECT (SELECT nachname FROM public.tbl_person WHERE person_id=tbl_projektbetreuer.person_id) AS bnachname, - (SELECT vorname FROM public.tbl_person WHERE person_id=tbl_projektbetreuer.person_id) AS bvorname, - (SELECT titelpre FROM public.tbl_person WHERE person_id=tbl_projektbetreuer.person_id) AS btitelpre, - (SELECT titelpost FROM public.tbl_person WHERE person_id=tbl_projektbetreuer.person_id) AS btitelpost, - (SELECT person_id FROM lehre.tbl_projektbetreuer WHERE projektarbeit_id=tbl_projektarbeit.projektarbeit_id - AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter') LIMIT 1) AS zweitbetreuer_person_id, - (SELECT betreuerart_kurzbz FROM lehre.tbl_projektbetreuer WHERE projektarbeit_id=tbl_projektarbeit.projektarbeit_id - AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter') LIMIT 1) AS zweitbetreuer_betreuerart_kurzbz, - tbl_projektbetreuer.person_id AS betreuer_person_id, - tbl_projekttyp.bezeichnung AS prjbez, *, - lehre.tbl_projektbetreuer.note as note, - public.tbl_benutzer.aktiv as aktiv, - (SELECT abgeschicktvon FROM extension.tbl_projektarbeitsbeurteilung WHERE projektarbeit_id = tbl_projektarbeit.projektarbeit_id AND betreuer_person_id = tbl_projektbetreuer.person_id) AS babgeschickt, - (SELECT abgeschicktvon FROM extension.tbl_projektarbeitsbeurteilung WHERE projektarbeit_id = tbl_projektarbeit.projektarbeit_id AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter') LIMIT 1) AS zweitbetreuer_abgeschickt - FROM lehre.tbl_projektarbeit - LEFT JOIN lehre.tbl_projektbetreuer USING(projektarbeit_id) - LEFT JOIN public.tbl_benutzer ON(uid=student_uid) - LEFT JOIN public.tbl_person ON(tbl_benutzer.person_id=tbl_person.person_id) - LEFT JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) - LEFT JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id) - LEFT JOIN public.tbl_studiengang USING(studiengang_kz) - LEFT JOIN lehre.tbl_projekttyp USING (projekttyp_kurzbz) - WHERE (projekttyp_kurzbz='Bachelor' OR projekttyp_kurzbz='Diplom') - AND (tbl_projektbetreuer.betreuerart_kurzbz='Betreuer' - OR tbl_projektbetreuer.betreuerart_kurzbz='Begutachter' - OR tbl_projektbetreuer.betreuerart_kurzbz='Erstbetreuer' - OR tbl_projektbetreuer.betreuerart_kurzbz='Erstbegutachter') - AND tbl_projektarbeit.student_uid=".$db->db_add_param($uid)." - ORDER BY studiensemester_kurzbz desc, tbl_lehrveranstaltung.kurzbz"; - -//AND tbl_projektarbeit.student_uid='$getuid' 'ie07m102'; -if(!$erg=$db->db_query($sql_query)) -{ - $errormsg=$p->t('global/fehlerBeimLesenAusDatenbank'); -} -else -{ - $htmlstr .= "
".$p->t('abgabetool/student').": ".$db->convert_html_chars($studentenname).""; -$semester_benotbar = $num_rows_sem >= 1; +$semester_benotbar = $paIsCurrent >= 1; $endupload_vorhanden = $num_rows_endupload >= 1; if ($semester_benotbar && $endupload_vorhanden) @@ -498,30 +508,46 @@ else } $htmlstr .= "
" . $p->t('abgabetool/titel') . ": ".$db->convert_html_chars($titel)."".$p->t('abgabetool/studentenansicht')."
" . $p->t('abgabetool/zweitBegutachter') . ": " . $zweitbegutachter->voller_name . ""; - - // keine Mail -> Fehler anzeigen - if (!isset($zweitbegutachter->email)) - $htmlstr .= "  " . $p->t("; - - // Token senden button wenn Zweitbegutachter extern ist und Projektarbeit nicht für altes Semester ist - if (isset($zweitbegutachter->email) && !isset($zweitbegutachter->uid) && $num_rows_sem >= 1) + $htmlstr .= ""; + $bart = ''; + foreach($zweitbetreuerArr as $zweitbetreuer) { - $htmlstr .= "
\n"; - $htmlstr .= ""; - $htmlstr .= ""; - $htmlstr .= ""; - $htmlstr .= " email) . "' alt='" . $p->t('abgabetool/zweitbetreuerMailSenden', $zweitbegutachter->email) . "'/>\n"; - $htmlstr .= " \n"; - $htmlstr .= "
"; - } + if ($bart !== $zweitbetreuer->betreuerart_kurzbz) + { + $htmlstr .= ($zweitbetreuer->betreuerart_kurzbz == 'Senatspruefer' ? $p->t('abgabetool/senatsPruefer') : $p->t('abgabetool/zweitBegutachter')); + $htmlstr .= ": "; + $bart = $zweitbetreuer->betreuerart_kurzbz; + } + else + $htmlstr .= ", "; + $htmlstr .= "" . $zweitbetreuer->voller_name . ""; + + // keine Mail -> Fehler anzeigen + if (!isset($zweitbetreuer->email)) + $htmlstr .= "  " . $p->t("; + + // Token senden button wenn Zweitbegutachter extern ist und Projektarbeit nicht für altes Semester ist + if (isset($zweitbetreuer->email) && !isset($zweitbetreuer->uid) && $paIsCurrent >= 1) + { + $htmlstr .= "
\n"; + $htmlstr .= ""; + $htmlstr .= ""; + $htmlstr .= ""; + $htmlstr .= ""; + $htmlstr .= " voller_name, $zweitbetreuer->email)) . "' + alt='" . $p->t('abgabetool/zweitbetreuerMailSenden', array($zweitbetreuer->voller_name, $zweitbetreuer->email)) . "'/>\n"; + $htmlstr .= " "; + $htmlstr .= "
"; + } + } $htmlstr .= "
fixtermin=='t'?'checked=\"checked\"':'')." >"; + //$htmlstr .= "fixtermin=='t'?'checked="checked" style="background-color:#FF0000;"':'')." disabled>"; + if($row->fixtermin=='t') + { + $htmlstr .= "JN".($row->abgabedatum==''?' ':$datum_obj->formatDatum($row->abgabedatum,'d.m.Y'))."       fixtermin=='t'?'checked=\"checked\"':'')." >"; - //$htmlstr .= "fixtermin=='t'?'checked="checked" style="background-color:#FF0000;"':'')." disabled>"; - if($row->fixtermin=='t') - { - $htmlstr .= "JN".($row->abgabedatum==''?' ':$datum_obj->formatDatum($row->abgabedatum,'d.m.Y'))."                     PDF    zusätzliche Daten    
              PDF    zusätzliche Daten    
\n"; - $htmlstr .= "\n"; - $htmlstr .= " - - - - - - - - "; - $htmlstr .= "\n"; - $i = 0; - while($row=$db->db_fetch_object($erg)) - { - $htmlstr1 = ''; - $zweitbetreuer_obj = new person(); - if ($zweitbetreuer_obj->load($row->zweitbetreuer_person_id)) - { - $zweitbetreuer = ', '.$db->convert_html_chars($row->zweitbetreuer_betreuerart_kurzbz).': '.$zweitbetreuer_obj->titelpre.' '.$zweitbetreuer_obj->vorname.' '.$zweitbetreuer_obj->nachname.' '.$zweitbetreuer_obj->titelpost; - } - $htmlstr1 = ''.$db->convert_html_chars($row->betreuerart_kurzbz).': '; - $vorname=$row->vorname; - $nachname=$row->nachname; - $uid=$row->uid; - ($row->btitelpre!=''?$htmlstr1 .= $row->btitelpre.' ':$htmlstr1 .= ''); - $htmlstr1 .= $row->bvorname.' '.$row->bnachname; - ($row->btitelpost!=''?$htmlstr1 .= ' '.$row->btitelpost:$htmlstr1 .= ''); - $htmlstr1 .= $zweitbetreuer; - $htmlstr .= " \n"; //class='liste".($i%2)."' - - if (is_null($row->note) && $row->aktiv === 't') - $htmlstr .= " \n"; - elseif (!is_null($row->babgeschickt) || !is_null($row->zweitbetreuer_abgeschickt)) - { - $htmlstr .= ""; - } else - { - $htmlstr .= ""; - } - - - $htmlstr .= " \n"; - $htmlstr .= " \n"; - $htmlstr .= " "; - $htmlstr .= " \n"; - $htmlstr .= " \n"; - $htmlstr .= " \n"; -// $htmlstr .= " \n"; - $htmlstr .= " \n"; - $i++; - } - $htmlstr .= "
".$p->t('abgabetool/details')."".$p->t('lvplan/sem')."".$p->t('lvplan/stg')."".$p->t('global/mail')."".$p->t('abgabetool/betreuer')."".$p->t('abgabetool/typ')."".$p->t('abgabetool/titel')."
".$p->t('abgabetool/upload').""; - - if (!is_null($row->babgeschickt)) - $htmlstr .= "".$p->t('abgabetool/projektbeurteilungErstDownload').""; - - if (!is_null($row->babgeschickt) && !is_null($row->zweitbetreuer_abgeschickt)) - $htmlstr .= "/"; - - if (!is_null($row->zweitbetreuer_abgeschickt)) - $htmlstr .= "".$p->t('abgabetool/projektbeurteilungZweitDownload').""; - - $htmlstr .= "".$row->studiensemester_kurzbz."".strtoupper($row->typ.$row->kurzbz).""; - - $qry_betr="SELECT mitarbeiter_uid FROM public.tbl_person - JOIN public.tbl_benutzer USING(person_id) - JOIN public.tbl_mitarbeiter ON(uid=mitarbeiter_uid) - WHERE person_id=".$db->db_add_param($row->betreuer_person_id, FHC_INTEGER).";"; - if($result_betr=$db->db_query($qry_betr)) - { - if($row_betr=$db->db_fetch_object($result_betr)) - { - $htmlstr.="email"; - } - else - { - $htmlstr.="UID unknown!"; - } - } - $htmlstr .= " ".$htmlstr1." ".$db->convert_html_chars($row->prjbez)."".$db->convert_html_chars($row->titel)."".$db->convert_html_chars($row->betreuerart_kurzbz)."
\n"; -} -echo ' - - - - Abgabesystem_Studentensicht - - - - - - - - - - - - -'; - - echo '

'.$p->t('abgabetool/ueberschrift'); - if(trim($uid)!='') - echo " ($uid $vorname $nachname)
Anleitung ".$p->t('global/handbuch')."
"; - echo '

'; - echo $htmlstr; - echo ' -'; -?> + + * Andreas Oesterreicher < andreas.oesterreicher@technikum-wien.at > + * Rudolf Hangl < rudolf.hangl@technikum-wien.at > + * Gerald Simane-Sequens < gerald.simane-sequens@technikum-wien.at > + */ + +require_once('../../../config/cis.config.inc.php'); +require_once('../../../include/functions.inc.php'); +require_once('../../../include/datum.class.php'); +require_once('../../../include/person.class.php'); +require_once('../../../include/benutzer.class.php'); +require_once('../../../include/student.class.php'); +require_once('../../../include/studiengang.class.php'); +require_once('../../../include/projektbetreuer.class.php'); +require_once('../../../include/benutzerberechtigung.class.php'); +require_once('../../../include/phrasen.class.php'); + +$sprache = getSprache(); +$p = new phrasen($sprache); + +if (!$db = new basis_db()) + die($p->t('global/fehlerBeimOeffnenDerDatenbankverbindung')); + +$getuid=get_uid(); +$uid=$getuid; + +if(isset($_GET['uid'])) +{ + //Studentenansicht + $uid = $_GET['uid']; + //Rechte Pruefen + $allowed=false; + + $student = new student(); + if(!$student->load($uid)) + die($p->t('global/fehlerBeimErmittelnDerUID')); + + $stg_obj = new studiengang(); + if(!$stg_obj->load($student->studiengang_kz)) + die($p->t('global/fehlerBeimLesenAusDatenbank')); + + //Berechtigung ueber das Berechtigungssystem + $rechte = new benutzerberechtigung(); + $rechte->getBerechtigungen($getuid); + if($rechte->isBerechtigt('lehre/abgabetool',$stg_obj->oe_kurzbz,'s')) + $allowed=true; + + //oder Lektor mit Betreuung dieses Studenten + $qry = "SELECT 1 + FROM + lehre.tbl_projektarbeit + JOIN lehre.tbl_projektbetreuer USING(projektarbeit_id) + JOIN campus.vw_benutzer on(vw_benutzer.person_id=tbl_projektbetreuer.person_id) + WHERE + tbl_projektarbeit.student_uid=".$db->db_add_param($uid)." AND + vw_benutzer.uid=".$db->db_add_param($getuid).";"; + + if($result = $db->db_query($qry)) + { + if($db->db_num_rows($result)>0) + { + $allowed=true; + } + } + + if(!$allowed) + { + die($p->t('abgabetool/keineBerechtigungStudentenansicht')); + } +} +$htmlstr = ''; +$htmlstr1 = ''; +$vorname=''; +$nachname=''; +$zweitbetreuer = ''; +$senatspruefer = ''; + +$sql_query = "SELECT (SELECT nachname FROM public.tbl_person WHERE person_id=tbl_projektbetreuer.person_id) AS bnachname, + (SELECT vorname FROM public.tbl_person WHERE person_id=tbl_projektbetreuer.person_id) AS bvorname, + (SELECT titelpre FROM public.tbl_person WHERE person_id=tbl_projektbetreuer.person_id) AS btitelpre, + (SELECT titelpost FROM public.tbl_person WHERE person_id=tbl_projektbetreuer.person_id) AS btitelpost, + (SELECT person_id FROM lehre.tbl_projektbetreuer WHERE projektarbeit_id=tbl_projektarbeit.projektarbeit_id + AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter') LIMIT 1) AS zweitbetreuer_person_id, + (SELECT betreuerart_kurzbz FROM lehre.tbl_projektbetreuer WHERE projektarbeit_id=tbl_projektarbeit.projektarbeit_id + AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter') LIMIT 1) AS zweitbetreuer_betreuerart_kurzbz, + tbl_projektbetreuer.person_id AS betreuer_person_id, + tbl_projekttyp.bezeichnung AS prjbez, *, + lehre.tbl_projektbetreuer.note as note, + public.tbl_benutzer.aktiv as aktiv, + (SELECT abgeschicktvon FROM extension.tbl_projektarbeitsbeurteilung WHERE projektarbeit_id = tbl_projektarbeit.projektarbeit_id AND betreuer_person_id = tbl_projektbetreuer.person_id) AS babgeschickt, + (SELECT abgeschicktvon FROM extension.tbl_projektarbeitsbeurteilung WHERE projektarbeit_id = tbl_projektarbeit.projektarbeit_id AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter') LIMIT 1) AS zweitbetreuer_abgeschickt + FROM lehre.tbl_projektarbeit + LEFT JOIN lehre.tbl_projektbetreuer USING(projektarbeit_id) + LEFT JOIN public.tbl_benutzer ON(uid=student_uid) + LEFT JOIN public.tbl_person ON(tbl_benutzer.person_id=tbl_person.person_id) + LEFT JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) + LEFT JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id) + LEFT JOIN public.tbl_studiengang USING(studiengang_kz) + LEFT JOIN lehre.tbl_projekttyp USING (projekttyp_kurzbz) + WHERE (projekttyp_kurzbz='Bachelor' OR projekttyp_kurzbz='Diplom') + AND betreuerart_kurzbz IN ('Betreuer', 'Begutachter', 'Erstbegutachter', 'Senatsvorsitz') + AND tbl_projektarbeit.student_uid=".$db->db_add_param($uid)." + ORDER BY studiensemester_kurzbz desc, tbl_lehrveranstaltung.kurzbz"; + +//AND tbl_projektarbeit.student_uid='$getuid' 'ie07m102'; +if(!$erg=$db->db_query($sql_query)) +{ + $errormsg=$p->t('global/fehlerBeimLesenAusDatenbank'); +} +else +{ + $htmlstr .= "
\n"; + $htmlstr .= "\n"; + $htmlstr .= " + + + + + + + + "; + $htmlstr .= "\n"; + $i = 0; + while($row=$db->db_fetch_object($erg)) + { + // get zweitbetreuer, if any + $htmlstr1 = ''; + $zweitbetreuer_obj = new person(); + if ($zweitbetreuer_obj->load($row->zweitbetreuer_person_id)) + { + $zweitbetreuer = ', '.$db->convert_html_chars($row->zweitbetreuer_betreuerart_kurzbz).': '.$zweitbetreuer_obj->titelpre.' '.$zweitbetreuer_obj->vorname.' '.$zweitbetreuer_obj->nachname.' '.$zweitbetreuer_obj->titelpost; + } + $htmlstr1 = ''.$db->convert_html_chars($row->betreuerart_kurzbz).': '; + + // get senatspruefer, if any + if ($row->betreuerart_kurzbz == 'Senatsvorsitz') + { + $senatspruefer_obj = new projektbetreuer(); + $senatsprueferRes = $senatspruefer_obj->getZweitbegutachterWithToken($row->betreuer_person_id, $row->projektarbeit_id, $row->uid); + if ($senatsprueferRes) + { + $senatspruefer .= ', Senatsprüfer: '; + $first = true; + foreach($senatspruefer_obj->result as $spr) + { + if (!$first) + $senatspruefer .= ', '; + $senatspruefer .= $spr->voller_name; + $first = false; + } + } + } + + $vorname=$row->vorname; + $nachname=$row->nachname; + $uid=$row->uid; + + ($row->btitelpre!=''?$htmlstr1 .= $row->btitelpre.' ':$htmlstr1 .= ''); + $htmlstr1 .= $row->bvorname.' '.$row->bnachname; + ($row->btitelpost!=''?$htmlstr1 .= ' '.$row->btitelpost:$htmlstr1 .= ''); + $htmlstr1 .= $zweitbetreuer; + $htmlstr1 .= $senatspruefer; + $htmlstr .= " \n"; //class='liste".($i%2)."' + + if (is_null($row->note) && $row->aktiv === 't') + $htmlstr .= " \n"; + elseif (!is_null($row->babgeschickt) || !is_null($row->zweitbetreuer_abgeschickt)) + { + $htmlstr .= ""; + } else + { + $htmlstr .= ""; + } + + + $htmlstr .= " \n"; + $htmlstr .= " \n"; + $htmlstr .= " "; + $htmlstr .= " \n"; + $htmlstr .= " \n"; + $htmlstr .= " \n"; +// $htmlstr .= " \n"; + $htmlstr .= " \n"; + $i++; + } + $htmlstr .= "
".$p->t('abgabetool/details')."".$p->t('lvplan/sem')."".$p->t('lvplan/stg')."".$p->t('global/mail')."".$p->t('abgabetool/betreuer')."".$p->t('abgabetool/typ')."".$p->t('abgabetool/titel')."
".$p->t('abgabetool/upload').""; + + if (!is_null($row->babgeschickt)) + $htmlstr .= "".$p->t('abgabetool/projektbeurteilungErstDownload').""; + + if (!is_null($row->babgeschickt) && !is_null($row->zweitbetreuer_abgeschickt)) + $htmlstr .= "/"; + + if (!is_null($row->zweitbetreuer_abgeschickt)) + $htmlstr .= "".$p->t('abgabetool/projektbeurteilungZweitDownload').""; + + $htmlstr .= "".$row->note."".$row->studiensemester_kurzbz."".strtoupper($row->typ.$row->kurzbz).""; + + $qry_betr="SELECT mitarbeiter_uid FROM public.tbl_person + JOIN public.tbl_benutzer USING(person_id) + JOIN public.tbl_mitarbeiter ON(uid=mitarbeiter_uid) + WHERE person_id=".$db->db_add_param($row->betreuer_person_id, FHC_INTEGER).";"; + if($result_betr=$db->db_query($qry_betr)) + { + if($row_betr=$db->db_fetch_object($result_betr)) + { + $htmlstr.="email"; + } + else + { + $htmlstr.="UID unknown!"; + } + } + $htmlstr .= " ".$htmlstr1." ".$db->convert_html_chars($row->prjbez)."".$db->convert_html_chars($row->titel)."".$db->convert_html_chars($row->betreuerart_kurzbz)."
\n"; +} +echo ' + + + + Abgabesystem_Studentensicht + + + + + + + + + + + + +'; + + echo '

'.$p->t('abgabetool/ueberschrift'); + if(trim($uid)!='') + echo " ($uid $vorname $nachname)
Anleitung ".$p->t('global/handbuch')."
"; + echo '

'; + echo $htmlstr; + echo ' +'; +?> diff --git a/cis/private/lehre/abgabe_student_details.php b/cis/private/lehre/abgabe_student_details.php index 29d74ab66..bead1a1e9 100644 --- a/cis/private/lehre/abgabe_student_details.php +++ b/cis/private/lehre/abgabe_student_details.php @@ -435,6 +435,8 @@ if($command=="update" && $error!=true) // 1. Begutachter mail ohne Token $mail_baselink = APP_ROOT."index.ci.php/extensions/FHC-Core-Projektarbeitsbeurteilung/Projektarbeitsbeurteilung"; $mail_fulllink = "$mail_baselink?projektarbeit_id=".$projektarbeit_id."&uid=".$row_std->uid; + $projekttyp_kurzbz = $projektarbeit_obj->projekttyp_kurzbz; + $subject = $projektarbeit_obj->projekttyp_kurzbz == 'Diplom' ? 'Masterarbeitsbetreuung' : 'Bachelorarbeitsbetreuung'; $abgabetyp = $paabgabetyp_kurzbz == 'end' ? 'Endabgabe' : 'Zwischenabgabe'; $maildata = array(); @@ -452,7 +454,7 @@ if($command=="update" && $error!=true) 'ParbeitsbeurteilungEndupload', $maildata, $row_betr->mitarbeiter_uid."@".DOMAIN, - "Bachelor-/Masterarbeitsbetreuung", + $subject, 'sancho_header_min_bw.jpg', 'sancho_footer_min_bw.jpg', $user."@".DOMAIN); @@ -465,48 +467,63 @@ if($command=="update" && $error!=true) // 2. Begutachter mail, wenn Endabgabe, mit Token wenn extern if ($paabgabetyp_kurzbz == 'end') { - $projektbetreuer = new projektbetreuer(); - $zweitbetr = $projektbetreuer->getZweitbegutachterWithToken($bid, $projektarbeit_id, $row_std->uid); + // Zweitbegutachter holen + $zweitbegutachter = new projektbetreuer(); + $zweitbegutachterRes = $zweitbegutachter->getZweitbegutachterWithToken($bid, $projektarbeit_id, $row_std->uid); - if ($zweitbetr) + if ($zweitbegutachterRes) { - $tokenGenRes = $projektbetreuer->generateZweitbegutachterToken($zweitbetr->person_id, $projektarbeit_id); + $zweitbegutachterResults = $zweitbegutachter->result; - if (!$tokenGenRes) - echo "" . $p->t('abgabetool/fehlerMailZweitBegutachter') . "
 "; - - $zweitbetr = $projektbetreuer->getZweitbegutachterWithToken($bid, $projektarbeit_id, $row_std->uid); - - if (!$zweitbetr) - echo "" . $p->t('abgabetool/fehlerMailZweitBegutachter') . "
 "; - - $intern = isset($zweitbetr->uid); - $mail_link = $intern ? $mail_fulllink : $mail_baselink; - - $zweitbetmaildata = array(); - $zweitbetmaildata['geehrt'] = "geehrte" . ($zweitbetr->anrede == "Herr" ? "r" : ""); - $zweitbetmaildata['anrede'] = $zweitbetr->anrede; - $zweitbetmaildata['betreuer_voller_name'] = $zweitbetr->voller_name; - $zweitbetmaildata['student_anrede'] = $maildata['student_anrede']; - $zweitbetmaildata['student_voller_name'] = $maildata['student_voller_name']; - $zweitbetmaildata['abgabetyp'] = $abgabetyp; - $zweitbetmaildata['parbeituebersichtlink'] = $intern ? $maildata['parbeituebersichtlink'] : ""; - $zweitbetmaildata['bewertunglink'] = $num_rows_sem >= 1 ? "

Zur Beurteilung der Arbeit

" : ""; - $zweitbetmaildata['token'] = $num_rows_sem >= 1 && isset($zweitbetr->zugangstoken) && !$intern ? "

Zugangstoken: " . $zweitbetr->zugangstoken . "

" : ""; - - $mailres = sendSanchoMail( - 'ParbeitsbeurteilungEndupload', - $zweitbetmaildata, - $zweitbetr->email, - "Masterarbeitsbetreuung", - 'sancho_header_min_bw.jpg', - 'sancho_footer_min_bw.jpg', - $user . "@" . DOMAIN - ); - - if (!$mailres) + foreach ($zweitbegutachterResults as $begutachter) { - echo "" . $p->t('abgabetool/fehlerMailZweitBegutachter') . "
 "; + // token generieren, wenn noch nicht vorhanden und notwendig (wird in methode überprüft) + $tokenGenRes = $zweitbegutachter->generateZweitbegutachterToken($begutachter->person_id, $projektarbeit_id); + + if (!$tokenGenRes) + echo "" . $p->t('abgabetool/fehlerMailZweitBegutachter') . "
 "; + + // Zweitbegutachter (evtl. mit Token) holen + $zweitbegutachterMitToken = new projektbetreuer(); + $begutachterMitTokenRes = $zweitbegutachterMitToken->getZweitbegutachterWithToken($bid, $projektarbeit_id, $row_std->uid, $begutachter->person_id); + + if (!$begutachterMitTokenRes) + echo "" . $p->t('abgabetool/fehlerMailZweitBegutachter') . "
 "; + + // Email an Zweitbegutachter senden + if (isset($zweitbegutachterMitToken->result[0])) + { + $begutachterMitToken = $zweitbegutachterMitToken->result[0]; + + $intern = isset($begutachterMitToken->uid); + $mail_link = $intern ? $mail_fulllink : $mail_baselink; + + $zweitbetmaildata = array(); + $zweitbetmaildata['geehrt'] = "geehrte" . ($begutachterMitToken->anrede == "Herr" ? "r" : ""); + $zweitbetmaildata['anrede'] = $begutachterMitToken->anrede; + $zweitbetmaildata['betreuer_voller_name'] = $begutachterMitToken->voller_name; + $zweitbetmaildata['student_anrede'] = $maildata['student_anrede']; + $zweitbetmaildata['student_voller_name'] = $maildata['student_voller_name']; + $zweitbetmaildata['abgabetyp'] = $abgabetyp; + $zweitbetmaildata['parbeituebersichtlink'] = $intern ? $maildata['parbeituebersichtlink'] : ""; + $zweitbetmaildata['bewertunglink'] = $num_rows_sem >= 1 ? "

Zur Beurteilung der Arbeit

" : ""; + $zweitbetmaildata['token'] = $num_rows_sem >= 1 && isset($begutachterMitToken->zugangstoken) && !$intern ? "

Zugangstoken: " . $begutachterMitToken->zugangstoken . "

" : ""; + + $mailres = sendSanchoMail( + 'ParbeitsbeurteilungEndupload', + $zweitbetmaildata, + $begutachterMitToken->email, + $subject, + 'sancho_header_min_bw.jpg', + 'sancho_footer_min_bw.jpg', + $user . "@" . DOMAIN + ); + + if (!$mailres) + { + echo "" . $p->t('abgabetool/fehlerMailZweitBegutachter') . "
 "; + } + } } } } diff --git a/include/projektbetreuer.class.php b/include/projektbetreuer.class.php index 04ba36b26..e55ad08d1 100644 --- a/include/projektbetreuer.class.php +++ b/include/projektbetreuer.class.php @@ -395,40 +395,66 @@ class projektbetreuer extends basis_db * @param $erstbegutachter_person_id int person_id des Erstbegutachters * @param $projektarbeit_id int * @param $student_uid string uid des Studenten der Arbeit abgibt + * @param $zweitbegutachter_person_id int person_id des Zweitbegutachters (wenn mehrere Zweitbetreuer zu einem Erstbegutachter erwartet werden) * @return object | bool */ - public function getZweitbegutachterWithToken($erstbegutachter_person_id, $projektarbeit_id, $student_uid) + public function getZweitbegutachterWithToken($erstbegutachter_person_id, $projektarbeit_id, $student_uid, $zweitbegutachter_person_id = null) { - $qry_betr="SELECT betr.person_id, betr.projektarbeit_id, pers.anrede, betr.zugangstoken, betr.zugangstoken_gueltigbis, tbl_benutzer.uid, kontakt, + $qry_betr="SELECT DISTINCT ON (betr.person_id) betr.person_id, betr.projektarbeit_id, pers.anrede, betr.zugangstoken, betr.zugangstoken_gueltigbis, + tbl_benutzer.uid, kontakt, betr.betreuerart_kurzbz, trim(COALESCE(titelpre,'')||' '||COALESCE(vorname,'')||' '||COALESCE(nachname,'')||' '||COALESCE(titelpost,'')) as voller_name, CASE WHEN tbl_benutzer.uid IS NULL THEN kontakt ELSE tbl_benutzer.uid || '@".DOMAIN."' END AS email, abg.abgabedatum FROM lehre.tbl_projektbetreuer betr - JOIN lehre.tbl_projektarbeit parb ON betr.projektarbeit_id = parb.projektarbeit_id + JOIN lehre.tbl_projektarbeit parb ON betr.projektarbeit_id = parb.projektarbeit_id JOIN public.tbl_person pers ON betr.person_id = pers.person_id LEFT JOIN public.tbl_kontakt ON pers.person_id = tbl_kontakt.person_id AND kontakttyp = 'email' AND zustellung = true LEFT JOIN public.tbl_benutzer ON pers.person_id = tbl_benutzer.person_id LEFT JOIN campus.tbl_paabgabe abg ON betr.projektarbeit_id = abg.projektarbeit_id AND abg.paabgabetyp_kurzbz = 'end' - WHERE betr.betreuerart_kurzbz = 'Zweitbegutachter' + WHERE + ( + ( + betr.betreuerart_kurzbz = 'Zweitbegutachter' + AND EXISTS ( + SELECT 1 FROM lehre.tbl_projektbetreuer + WHERE person_id = ".$this->db_add_param($erstbegutachter_person_id, FHC_INTEGER)." + AND betreuerart_kurzbz = 'Erstbegutachter' + AND projektarbeit_id = betr.projektarbeit_id + ) + ) + OR + ( + betr.betreuerart_kurzbz = 'Senatspruefer' + AND EXISTS ( + SELECT 1 FROM lehre.tbl_projektbetreuer + WHERE person_id = ".$this->db_add_param($erstbegutachter_person_id, FHC_INTEGER)." + AND betreuerart_kurzbz = 'Senatsvorsitz' + AND projektarbeit_id = betr.projektarbeit_id + ) + ) + ) AND betr.projektarbeit_id = ".$this->db_add_param($projektarbeit_id, FHC_INTEGER)." AND parb.student_uid = ".$this->db_add_param($student_uid)." - AND EXISTS ( - SELECT 1 FROM lehre.tbl_projektbetreuer - WHERE person_id = ".$this->db_add_param($erstbegutachter_person_id, FHC_INTEGER)." - AND betreuerart_kurzbz = 'Erstbegutachter' - AND projektarbeit_id = betr.projektarbeit_id - ) - AND (tbl_benutzer.aktiv OR tbl_benutzer.aktiv IS NULL) - ORDER BY betr.insertamum DESC - LIMIT 1"; + AND (tbl_benutzer.aktiv OR tbl_benutzer.aktiv IS NULL)"; + + if (isset($zweitbegutachter_person_id)) + { + $qry_betr .= " AND betr.person_id = ".$this->db_add_param($zweitbegutachter_person_id, FHC_INTEGER); + } + + $qry_betr .= " ORDER BY betr.person_id DESC, + (CASE WHEN EXISTS ( /* if multiple accounts, prioritize mitarbeiter */ + SELECT 1 FROM public.tbl_mitarbeiter ma + WHERE ma.mitarbeiter_uid = tbl_benutzer.uid + ) THEN 0 ELSE 1 END), betr.insertamum DESC"; if ($betr=$this->db_query($qry_betr)) { - $row_betr = $this->db_fetch_object($betr); - - if ($row_betr) - return $row_betr; - else - return false; + $result = array(); + while ($row_betr = $this->db_fetch_object()) + { + $this->result[] = $row_betr; + } + return true; } else { @@ -451,7 +477,7 @@ class projektbetreuer extends basis_db LEFT JOIN public.tbl_benutzer USING(person_id) WHERE projektarbeit_id = ".$this->db_add_param($projektarbeit_id, FHC_INTEGER)." AND tbl_projektbetreuer.person_id = ".$this->db_add_param($zweitbegutachter_person_id, FHC_INTEGER)." - AND betreuerart_kurzbz = 'Zweitbegutachter' + AND betreuerart_kurzbz IN ('Zweitbegutachter', 'Senatspruefer') LIMIT 1"; if ($betreueruidres = $this->db_query($betreuerUidQry)) @@ -494,7 +520,7 @@ class projektbetreuer extends basis_db zugangstoken_gueltigbis = CURRENT_DATE + interval '1 year' WHERE projektarbeit_id = " . $this->db_add_param($projektarbeit_id, FHC_INTEGER) . " AND person_id = " . $this->db_add_param($row_betr->person_id, FHC_INTEGER) . " - AND betreuerart_kurzbz = 'Zweitbegutachter'"; + AND betreuerart_kurzbz IN ('Zweitbegutachter', 'Senatspruefer')"; if ($this->db_query($qry_upd)) { diff --git a/locale/de-AT/abgabetool.php b/locale/de-AT/abgabetool.php index c4b17318b..e52b91c9a 100644 --- a/locale/de-AT/abgabetool.php +++ b/locale/de-AT/abgabetool.php @@ -83,12 +83,13 @@ $this->phrasen['abgabetool/gelesenUndAkzeptiert']='Gelesen und akzeptiert'; $this->phrasen['abgabetool/erklaerungNichtAkzeptiert']='Erklärung nicht akzeptiert'; $this->phrasen['abgabetool/downloadProjektarbeit']='Dokument herunterladen'; $this->phrasen['abgabetool/zweitBegutachter']='ZweitbegutachterIn'; -$this->phrasen['abgabetool/zweitbetreuerTokenMailSenden']='Zugangstoken an ZweitbegutachterIn noch einmal senden'; -$this->phrasen['abgabetool/zweitbegutachterMailGesendet']='Mail an ZweitbegutachterIn (%s) gesendet'; -$this->phrasen['abgabetool/zweitbetreuerMailSenden']='Mail an ZweitbegutachterIn (%s) senden'; -$this->phrasen['abgabetool/zweitBegutachterEmailFehlt']='keine Zustellmail für Zweitbegutachter vorhanden!'; +$this->phrasen['abgabetool/zweitbetreuerTokenMailSenden']='Zugangstoken noch einmal senden'; +$this->phrasen['abgabetool/zweitbegutachterMailGesendet']='Mail an %s (%s) gesendet'; +$this->phrasen['abgabetool/zweitbetreuerMailSenden']='Mail an %s (%s) senden'; +$this->phrasen['abgabetool/zweitBegutachterEmailFehlt']='keine Zustellmail vorhanden!'; $this->phrasen['abgabetool/projektbeurteilungDownload']='Projektbeurteilung herunterladen'; $this->phrasen['abgabetool/projektbeurteilungErstDownload']='Erst-/Begutachter'; $this->phrasen['abgabetool/projektbeurteilungZweitDownload']='Zweitbegutachter'; $this->phrasen['abgabetool/fehlerErmittelnEndabgabeProjektarbeit']='Fehler beim Ermitteln des Enduplaods der Projektarbeit'; +$this->phrasen['abgabetool/senatsPruefer']='Prüfer'; ?> diff --git a/locale/en-US/abgabetool.php b/locale/en-US/abgabetool.php index b05456faa..27a885a11 100644 --- a/locale/en-US/abgabetool.php +++ b/locale/en-US/abgabetool.php @@ -84,11 +84,12 @@ $this->phrasen['abgabetool/erklaerungNichtAkzeptiert']='Declaration not accepted $this->phrasen['abgabetool/downloadProjektarbeit']='Download File'; $this->phrasen['abgabetool/zweitBegutachter']='Second assessor'; $this->phrasen['abgabetool/zweitbetreuerTokenMailSenden']='Resend access token to second assessor'; -$this->phrasen['abgabetool/zweitbetreuerMailSenden']='Send mail to second assessor (%s)'; -$this->phrasen['abgabetool/zweitbegutachterMailGesendet']='Mail sent to second assessor (%s)'; -$this->phrasen['abgabetool/zweitBegutachterEmailFehlt']='Second assessor has no delivery mail adress!'; +$this->phrasen['abgabetool/zweitbetreuerMailSenden']='Send mail to assessor %s (%s)'; +$this->phrasen['abgabetool/zweitbegutachterMailGesendet']='Mail sent to assessor %s (%s)'; +$this->phrasen['abgabetool/zweitBegutachterEmailFehlt']='Assessor has no delivery mail adress!'; $this->phrasen['abgabetool/projektbeurteilungDownload']='Thesis-Assessment download'; $this->phrasen['abgabetool/projektbeurteilungErstDownload']='First-/Assessor'; $this->phrasen['abgabetool/projektbeurteilungZweitDownload']='Second Assessor'; $this->phrasen['abgabetool/fehlerErmittelnEndabgabeProjektarbeit']='Error when getting endupload of project work'; +$this->phrasen['abgabetool/senatsPruefer']='Examiner'; ?> diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index ca59997fa..7f051459d 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -10389,6 +10389,26 @@ Any unusual occurrences ) ) ), + array( + 'app' => 'projektarbeitsbeurteilung', + 'category' => 'projektarbeitsbeurteilung', + 'phrase' => 'senatsvorsitz', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Senatsvorsitz', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Assessor', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), array( 'app' => 'core', 'category' => 'anrechnung', diff --git a/vilesci/lehre/abgabe_assistenz.php b/vilesci/lehre/abgabe_assistenz.php index 3c939a330..4de70fd31 100644 --- a/vilesci/lehre/abgabe_assistenz.php +++ b/vilesci/lehre/abgabe_assistenz.php @@ -149,11 +149,7 @@ else LEFT JOIN PUBLIC.tbl_benutzer ON (PUBLIC.tbl_benutzer.person_id = PUBLIC.tbl_person.person_id) LEFT JOIN PUBLIC.tbl_mitarbeiter ON (PUBLIC.tbl_benutzer.uid = PUBLIC.tbl_mitarbeiter.mitarbeiter_uid) WHERE projektarbeit_id = ".$db->db_add_param($row->projektarbeit_id, FHC_INTEGER)." - AND ( - tbl_projektbetreuer.betreuerart_kurzbz = 'Erstbegutachter' - OR tbl_projektbetreuer.betreuerart_kurzbz = 'Betreuer' - OR tbl_projektbetreuer.betreuerart_kurzbz = 'Begutachter' - ) + AND tbl_projektbetreuer.betreuerart_kurzbz IN ('Erstbegutachter', 'Betreuer', 'Begutachter', 'Senatsvorsitz') UNION From a1622d8b7473a1ab0f00b3ea5156405b0a9d142c Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Wed, 24 Aug 2022 17:05:30 +0200 Subject: [PATCH 003/176] made betreuert SenatsprueferIn gender neutral --- system/dbupdate_3.3.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php index 515a80bf5..e362bedba 100644 --- a/system/dbupdate_3.3.php +++ b/system/dbupdate_3.3.php @@ -6292,7 +6292,7 @@ if($result = $db->db_query("SELECT 1 FROM lehre.tbl_betreuerart WHERE betreuerar { if($db->db_num_rows($result)==0) { - $qry = "INSERT INTO lehre.tbl_betreuerart(betreuerart_kurzbz, beschreibung) VALUES('Senatspruefer', 'Senatsprüfer kommissionelle Prüfung');"; + $qry = "INSERT INTO lehre.tbl_betreuerart(betreuerart_kurzbz, beschreibung) VALUES('Senatspruefer', 'SenatsprüferIn kommissionelle Prüfung');"; if(!$db->db_query($qry)) echo 'Betreuerart: '.$db->db_last_error().'
'; From 1d5d5e4a84b575af9a98ae7f694cdc95d80972f8 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Wed, 24 Aug 2022 18:07:34 +0200 Subject: [PATCH 004/176] added getEndabgabe method to Paabgabe model --- .../models/education/Paabgabe_model.php | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/application/models/education/Paabgabe_model.php b/application/models/education/Paabgabe_model.php index 087c27663..b876030a6 100644 --- a/application/models/education/Paabgabe_model.php +++ b/application/models/education/Paabgabe_model.php @@ -1,7 +1,6 @@ dbTable = 'campus.tbl_paabgabe'; $this->pk = 'paabgabe_id'; } + + /** + * Gets last Endabgabe of a Projektarbeit, including filename. + * @param int $projektarbeit_id + * @return object + */ + public function getEndabgabe($projektarbeit_id) + { + $qry = "SELECT paabgabe_id, student_uid, paabg.datum, paabg.abgabedatum, projekttyp_kurzbz, titel, titel_english, + paabgabe_id || '_' || student_uid || '.pdf' AS filename + FROM campus.tbl_paabgabe paabg + JOIN lehre.tbl_projektarbeit USING (projektarbeit_id) + WHERE projektarbeit_id = ? + AND paabgabetyp_kurzbz = 'end' + AND paabg.abgabedatum IS NOT NULL + ORDER BY paabg.abgabedatum, paabg.datum DESC + LIMIT 1"; + + return $this->execQuery($qry, array($projektarbeit_id)); + } } From 2125fdc21913ab563a3b3b4c444b65059b40c449 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Wed, 24 Aug 2022 18:09:30 +0200 Subject: [PATCH 005/176] sending of zweitbetreuer mail with token: correct subject depending on projekttyp --- cis/private/lehre/abgabe_lektor_details.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/cis/private/lehre/abgabe_lektor_details.php b/cis/private/lehre/abgabe_lektor_details.php index ed33add27..852529d53 100644 --- a/cis/private/lehre/abgabe_lektor_details.php +++ b/cis/private/lehre/abgabe_lektor_details.php @@ -119,6 +119,7 @@ if(!$projektarbeit_obj->load($projektarbeit_id)) die('Fehler beim Laden der Projektarbeit'); $titel = $projektarbeit_obj->titel; $student_uid = $projektarbeit_obj->student_uid; +$projekttyp_kurzbz = $projektarbeit_obj->projekttyp_kurzbz; // paarbeit sollte nur ab bestimmten Zeitpunkt online bewertet werden $paIsCurrent = $projektarbeit_obj->projektarbeitIsCurrent($projektarbeit_id); @@ -179,7 +180,7 @@ if(in_array($betreuerart, array('Erstbegutacher', 'Senatsvorsitz'))) // if Zweitbetreuer is the one for which token was requested, send mail if ($zbg->person_id == $_GET['zweitbetreuer_person_id']) { - $mailres = sendZweitbegutachterMail($zbg, $erstbetreuer_id, $row_std); + $mailres = sendZweitbegutachterMail($zbg, $erstbetreuer_id, $row_std, $projekttyp_kurzbz); if ($mailres) { @@ -734,7 +735,7 @@ echo $htmlstr; * @param object $student * @return bool|projektbetreuer|void|null */ -function sendZweitbegutachterMail($zweitbegutachter, $erstbegutachter_person_id, $student) +function sendZweitbegutachterMail($zweitbegutachter, $erstbegutachter_person_id, $student, $projekttyp_kurzbz) { if (!isset($zweitbegutachter->email) || $zweitbegutachter->email == '') return false; @@ -758,6 +759,7 @@ function sendZweitbegutachterMail($zweitbegutachter, $erstbegutachter_person_id, { $zweitbetr = $projektbetreuer->result[0]; $intern = isset($zweitbetr->uid); + $mail_subject = $projekttyp_kurzbz == 'Diplom' ? "Masterarbeitsbetreuung" : "Bachelorarbeitsbetreuung"; $mail_baselink = APP_ROOT."index.ci.php/extensions/FHC-Core-Projektarbeitsbeurteilung/Projektarbeitsbeurteilung"; $mail_fulllink = "$mail_baselink?projektarbeit_id=".$zweitbegutachter->projektarbeit_id."&uid=".$student->uid; $mail_link = $intern ? $mail_fulllink : $mail_baselink; @@ -777,7 +779,7 @@ function sendZweitbegutachterMail($zweitbegutachter, $erstbegutachter_person_id, 'ParbeitsbeurteilungEndupload', $maildata, $zweitbetr->email, - "Masterarbeitsbetreuung", + $mail_subject, 'sancho_header_min_bw.jpg', 'sancho_footer_min_bw.jpg' ); From 60d675f22b1a316d8bcb321dd08f5545c056d8d3 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Wed, 24 Aug 2022 18:09:53 +0200 Subject: [PATCH 006/176] added parbeitDownload phrases for Projektarbeitsbeurteilung --- system/phrasesupdate.php | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index 7f051459d..db9a33812 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -10409,6 +10409,26 @@ Any unusual occurrences ) ) ), + array( + 'app' => 'projektarbeitsbeurteilung', + 'category' => 'projektarbeitsbeurteilung', + 'phrase' => 'parbeitDownload', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Download Projektarbeit', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Download thesis', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), array( 'app' => 'core', 'category' => 'anrechnung', From 1d408b9d65e475c2e3eeda9a79c48f0325b66474 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Wed, 24 Aug 2022 19:39:31 +0200 Subject: [PATCH 007/176] added comment to getZweitbegutachterWithToken method in projektbetreuer class --- include/projektbetreuer.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/projektbetreuer.class.php b/include/projektbetreuer.class.php index e55ad08d1..1fe2a5e1a 100644 --- a/include/projektbetreuer.class.php +++ b/include/projektbetreuer.class.php @@ -421,7 +421,7 @@ class projektbetreuer extends basis_db AND projektarbeit_id = betr.projektarbeit_id ) ) - OR + OR /* either Zweitbegutachter of masterarbeit, or Kommissionsprüfer if Kommission */ ( betr.betreuerart_kurzbz = 'Senatspruefer' AND EXISTS ( From 2ff067193d868ca43b6919e14d17748f4d661e23 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Wed, 24 Aug 2022 19:39:59 +0200 Subject: [PATCH 008/176] added Senatsvorsitz to betreuerart kurzbz in pdfExport --- cis/private/pdfExport.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cis/private/pdfExport.php b/cis/private/pdfExport.php index 99b5c94f0..2743205d1 100644 --- a/cis/private/pdfExport.php +++ b/cis/private/pdfExport.php @@ -150,14 +150,14 @@ if (isset($_GET['betreuerart_kurzbz'])) if (isset($_GET['xsl']) && $_GET['xsl'] == 'Zahlung') { $requestdata = $_SERVER['QUERY_STRING']; - + $log = new Webservicelog(); $log->webservicetyp_kurzbz = 'content'; $log->request_id = isset($_GET['buchungsnummern']) && !empty($_GET['buchungsnummern']) ? $_GET['buchungsnummern'] : NULL; $log->beschreibung = 'Zahlungsbestaetigungsdownload'; $log->request_data = $requestdata; $log->execute_user = get_uid(); - + $log->save(true); } @@ -207,6 +207,7 @@ if (isset($_GET['xsl']) && ($_GET['xsl'] === 'Projektbeurteilung')) switch ($_GET['betreuerart_kurzbz']) { case 'Begutachter' : + case 'Senatsvorsitz' : $xsl = 'ProjektBeurteilungBA'; break; case 'Erstbegutachter' : From 92762c5dc2ace2b6cf61c641f880c97719b64996 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Sat, 27 Aug 2022 01:34:03 +0200 Subject: [PATCH 009/176] Projektarbeitsbeurteilung: - getZweitbegutachterWithToken: returns Zweitbegutachter (Senatspruefer) from Senatspruefungen as well - added phrase --- .../education/Projektbetreuer_model.php | 66 +++++++++++++------ system/phrasesupdate.php | 20 ++++++ 2 files changed, 67 insertions(+), 19 deletions(-) diff --git a/application/models/education/Projektbetreuer_model.php b/application/models/education/Projektbetreuer_model.php index f6205f67f..d23342c85 100644 --- a/application/models/education/Projektbetreuer_model.php +++ b/application/models/education/Projektbetreuer_model.php @@ -106,8 +106,10 @@ class Projektbetreuer_model extends DB_Model * @param $student_uid string uid des Studenten der Arbeit abgibt * @return object | bool */ - public function getZweitbegutachterWithToken($erstbegutachter_person_id, $projektarbeit_id, $student_uid) + public function getZweitbegutachterWithToken($erstbegutachter_person_id, $projektarbeit_id, $student_uid, $zweitbegutachter_person_id = null) { + $params = array($erstbegutachter_person_id, $erstbegutachter_person_id, $projektarbeit_id, $student_uid); + $qry_betr = "SELECT betr.person_id, betr.projektarbeit_id, pers.anrede, betr.zugangstoken, betr.zugangstoken_gueltigbis, tbl_benutzer.uid, kontakt, trim(COALESCE(titelpre,'')||' '||COALESCE(vorname,'')||' '||COALESCE(nachname,'')||' '||COALESCE(titelpost,'')) as voller_name, CASE WHEN tbl_benutzer.uid IS NULL THEN kontakt ELSE tbl_benutzer.uid || '@".DOMAIN."' END AS email, abg.abgabedatum @@ -117,20 +119,46 @@ class Projektbetreuer_model extends DB_Model LEFT JOIN public.tbl_kontakt ON pers.person_id = tbl_kontakt.person_id AND kontakttyp = 'email' AND zustellung = true LEFT JOIN public.tbl_benutzer ON pers.person_id = tbl_benutzer.person_id LEFT JOIN campus.tbl_paabgabe abg ON betr.projektarbeit_id = abg.projektarbeit_id AND abg.paabgabetyp_kurzbz = 'end' - WHERE betr.betreuerart_kurzbz = 'Zweitbegutachter' + WHERE + ( + ( + betr.betreuerart_kurzbz = 'Zweitbegutachter' + AND EXISTS ( + SELECT 1 FROM lehre.tbl_projektbetreuer + WHERE person_id = ? + AND betreuerart_kurzbz = 'Erstbegutachter' + AND projektarbeit_id = betr.projektarbeit_id + ) + ) + OR /* either Zweitbegutachter of masterarbeit, or Kommissionsprüfer if Kommission */ + ( + betr.betreuerart_kurzbz = 'Senatspruefer' + AND EXISTS ( + SELECT 1 FROM lehre.tbl_projektbetreuer + WHERE person_id = ? + AND betreuerart_kurzbz = 'Senatsvorsitz' + AND projektarbeit_id = betr.projektarbeit_id + ) + ) + ) AND betr.projektarbeit_id = ? AND parb.student_uid = ? - AND EXISTS ( - SELECT 1 FROM lehre.tbl_projektbetreuer - WHERE person_id = ? - AND betreuerart_kurzbz = 'Erstbegutachter' - AND projektarbeit_id = betr.projektarbeit_id - ) - AND (tbl_benutzer.aktiv OR tbl_benutzer.aktiv IS NULL) - ORDER BY betr.insertamum DESC + AND (tbl_benutzer.aktiv OR tbl_benutzer.aktiv IS NULL)"; + + if (isset($zweitbegutachter_person_id)) + { + $qry_betr .= " AND betr.person_id = ?"; + $params[] = $zweitbegutachter_person_id; + } + + $qry_betr .= " ORDER BY betr.person_id DESC, + (CASE WHEN EXISTS ( /* if multiple accounts, prioritize mitarbeiter */ + SELECT 1 FROM public.tbl_mitarbeiter ma + WHERE ma.mitarbeiter_uid = tbl_benutzer.uid + ) THEN 0 ELSE 1 END), betr.insertamum DESC LIMIT 1"; - return $this->execQuery($qry_betr, array($projektarbeit_id, $student_uid, $erstbegutachter_person_id)); + return $this->execQuery($qry_betr, $params); } /** @@ -141,23 +169,23 @@ class Projektbetreuer_model extends DB_Model */ public function generateZweitbegutachterToken($zweitbegutachter_person_id, $projektarbeit_id) { - $betreuerUidQry = "SELECT uid, zugangstoken, zugangstoken_gueltigbis, tbl_projektbetreuer.person_id + $betreuerUidQry = "SELECT uid, zugangstoken, zugangstoken_gueltigbis, tbl_projektbetreuer.person_id, betreuerart_kurzbz FROM lehre.tbl_projektbetreuer JOIN public.tbl_person USING(person_id) LEFT JOIN public.tbl_benutzer USING(person_id) WHERE projektarbeit_id = ? AND tbl_projektbetreuer.person_id = ? - AND betreuerart_kurzbz = 'Zweitbegutachter' + AND betreuerart_kurzbz IN ('Zweitbegutachter', 'Senatspruefer') LIMIT 1"; - $betreueruidres = $this->execQuery($betreuerUidQry, array($projektarbeit_id, $zweitbegutachter_person_id)); + $betreueruidRes = $this->execQuery($betreuerUidQry, array($projektarbeit_id, $zweitbegutachter_person_id)); - if (!hasData($betreueruidres)) + if (!hasData($betreueruidRes)) return error('Zweitbegutachter nicht gefunden'); - $row_betr = getData($betreueruidres)[0]; + $zweitbetreuer = getData($betreueruidRes)[0]; - if (!isset($row_betr->uid)) + if (!isset($zweitbetreuer->uid)) { do { $token = generateToken(16); @@ -166,8 +194,8 @@ class Projektbetreuer_model extends DB_Model $result = $this->update( array('projektarbeit_id' => $projektarbeit_id, - 'person_id' => $row_betr->person_id, - 'betreuerart_kurzbz' => 'Zweitbegutachter'), + 'person_id' => $zweitbetreuer->person_id, + 'betreuerart_kurzbz' => $zweitbetreuer->betreuerart_kurzbz), array('zugangstoken' => $token, 'zugangstoken_gueltigbis' => date('Y-m-d', strtotime('+1 year'))) ); diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index db9a33812..0c2bb0edf 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -10429,6 +10429,26 @@ Any unusual occurrences ) ) ), + array( + 'app' => 'projektarbeitsbeurteilung', + 'category' => 'projektarbeitsbeurteilung', + 'phrase' => 'betreuerart', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Betreuerart', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Assessor type', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), array( 'app' => 'core', 'category' => 'anrechnung', From 824a148b92cb67ae84c1ba3bf5c088f8cb0861a5 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Wed, 31 Aug 2022 13:38:38 +0200 Subject: [PATCH 010/176] adapted core to Projektarbeitsbeurteilung Zweitbegutachter/Erstbegutacher Controller split --- .../education/Projektbetreuer_model.php | 82 +++++++++---------- cis/private/lehre/abgabe_lektor_details.php | 13 +-- cis/private/lehre/abgabe_student_details.php | 5 +- 3 files changed, 52 insertions(+), 48 deletions(-) diff --git a/application/models/education/Projektbetreuer_model.php b/application/models/education/Projektbetreuer_model.php index d23342c85..8a333d47c 100644 --- a/application/models/education/Projektbetreuer_model.php +++ b/application/models/education/Projektbetreuer_model.php @@ -111,52 +111,52 @@ class Projektbetreuer_model extends DB_Model $params = array($erstbegutachter_person_id, $erstbegutachter_person_id, $projektarbeit_id, $student_uid); $qry_betr = "SELECT betr.person_id, betr.projektarbeit_id, pers.anrede, betr.zugangstoken, betr.zugangstoken_gueltigbis, tbl_benutzer.uid, kontakt, - trim(COALESCE(titelpre,'')||' '||COALESCE(vorname,'')||' '||COALESCE(nachname,'')||' '||COALESCE(titelpost,'')) as voller_name, - CASE WHEN tbl_benutzer.uid IS NULL THEN kontakt ELSE tbl_benutzer.uid || '@".DOMAIN."' END AS email, abg.abgabedatum - FROM lehre.tbl_projektbetreuer betr - JOIN lehre.tbl_projektarbeit parb ON betr.projektarbeit_id = parb.projektarbeit_id - JOIN public.tbl_person pers ON betr.person_id = pers.person_id - LEFT JOIN public.tbl_kontakt ON pers.person_id = tbl_kontakt.person_id AND kontakttyp = 'email' AND zustellung = true - LEFT JOIN public.tbl_benutzer ON pers.person_id = tbl_benutzer.person_id - LEFT JOIN campus.tbl_paabgabe abg ON betr.projektarbeit_id = abg.projektarbeit_id AND abg.paabgabetyp_kurzbz = 'end' - WHERE - ( + trim(COALESCE(titelpre,'')||' '||COALESCE(vorname,'')||' '||COALESCE(nachname,'')||' '||COALESCE(titelpost,'')) as voller_name, + CASE WHEN tbl_benutzer.uid IS NULL THEN kontakt ELSE tbl_benutzer.uid || '@".DOMAIN."' END AS email, abg.abgabedatum + FROM lehre.tbl_projektbetreuer betr + JOIN lehre.tbl_projektarbeit parb ON betr.projektarbeit_id = parb.projektarbeit_id + JOIN public.tbl_person pers ON betr.person_id = pers.person_id + LEFT JOIN public.tbl_kontakt ON pers.person_id = tbl_kontakt.person_id AND kontakttyp = 'email' AND zustellung = true + LEFT JOIN public.tbl_benutzer ON pers.person_id = tbl_benutzer.person_id + LEFT JOIN campus.tbl_paabgabe abg ON betr.projektarbeit_id = abg.projektarbeit_id AND abg.paabgabetyp_kurzbz = 'end' + WHERE ( - betr.betreuerart_kurzbz = 'Zweitbegutachter' - AND EXISTS ( - SELECT 1 FROM lehre.tbl_projektbetreuer - WHERE person_id = ? - AND betreuerart_kurzbz = 'Erstbegutachter' - AND projektarbeit_id = betr.projektarbeit_id + ( + betr.betreuerart_kurzbz = 'Zweitbegutachter' + AND EXISTS ( + SELECT 1 FROM lehre.tbl_projektbetreuer + WHERE person_id = ? + AND betreuerart_kurzbz = 'Erstbegutachter' + AND projektarbeit_id = betr.projektarbeit_id + ) + ) + OR /* either Zweitbegutachter of masterarbeit, or Kommissionsprüfer if Kommission */ + ( + betr.betreuerart_kurzbz = 'Senatspruefer' + AND EXISTS ( + SELECT 1 FROM lehre.tbl_projektbetreuer + WHERE person_id = ? + AND betreuerart_kurzbz = 'Senatsvorsitz' + AND projektarbeit_id = betr.projektarbeit_id + ) ) ) - OR /* either Zweitbegutachter of masterarbeit, or Kommissionsprüfer if Kommission */ - ( - betr.betreuerart_kurzbz = 'Senatspruefer' - AND EXISTS ( - SELECT 1 FROM lehre.tbl_projektbetreuer - WHERE person_id = ? - AND betreuerart_kurzbz = 'Senatsvorsitz' - AND projektarbeit_id = betr.projektarbeit_id - ) - ) - ) - AND betr.projektarbeit_id = ? - AND parb.student_uid = ? - AND (tbl_benutzer.aktiv OR tbl_benutzer.aktiv IS NULL)"; + AND betr.projektarbeit_id = ? + AND parb.student_uid = ? + AND (tbl_benutzer.aktiv OR tbl_benutzer.aktiv IS NULL)"; - if (isset($zweitbegutachter_person_id)) - { - $qry_betr .= " AND betr.person_id = ?"; - $params[] = $zweitbegutachter_person_id; - } + if (isset($zweitbegutachter_person_id)) + { + $qry_betr .= " AND betr.person_id = ?"; + $params[] = $zweitbegutachter_person_id; + } - $qry_betr .= " ORDER BY betr.person_id DESC, - (CASE WHEN EXISTS ( /* if multiple accounts, prioritize mitarbeiter */ - SELECT 1 FROM public.tbl_mitarbeiter ma - WHERE ma.mitarbeiter_uid = tbl_benutzer.uid - ) THEN 0 ELSE 1 END), betr.insertamum DESC - LIMIT 1"; + $qry_betr .= " ORDER BY betr.person_id DESC, + (CASE WHEN EXISTS ( /* if multiple accounts, prioritize mitarbeiter */ + SELECT 1 FROM public.tbl_mitarbeiter ma + WHERE ma.mitarbeiter_uid = tbl_benutzer.uid + ) THEN 0 ELSE 1 END), betr.insertamum DESC + LIMIT 1"; return $this->execQuery($qry_betr, $params); } diff --git a/cis/private/lehre/abgabe_lektor_details.php b/cis/private/lehre/abgabe_lektor_details.php index 852529d53..eb41620ce 100644 --- a/cis/private/lehre/abgabe_lektor_details.php +++ b/cis/private/lehre/abgabe_lektor_details.php @@ -144,7 +144,7 @@ if($num_rows_endupload < 0) } // Zweitbegutachter holen -if(in_array($betreuerart, array('Erstbegutacher', 'Senatsvorsitz'))) +if(in_array($betreuerart, array('Erstbegutachter', 'Senatsvorsitz'))) { $alleBegutachter = new projektbetreuer(); $alleBegutachterRes = $alleBegutachter->getProjektbetreuer($projektarbeit_id); @@ -154,7 +154,7 @@ if(in_array($betreuerart, array('Erstbegutacher', 'Senatsvorsitz'))) $zweitbetreuerArr = array(); foreach ($alleBegutachter->result as $begutachter) { - if (in_array($begutachter->betreuerart_kurzbz, array('Erstbegutacher', 'Senatsvorsitz'))) + if (in_array($begutachter->betreuerart_kurzbz, array('Erstbegutachter', 'Senatsvorsitz'))) { // dem Erstbetreuer zugewiesene Zweitbetreuer holen $erstbetreuer_id = $begutachter->person_id; @@ -165,7 +165,7 @@ if(in_array($betreuerart, array('Erstbegutacher', 'Senatsvorsitz'))) } // Mail mit Token an Zweitbegutachter senden - if ($zweitbegutachterRes && $paIsCurrent >= 1 && isset($_GET['zweitbegutachtertoken']) && isset($_GET['zweitbetreuer_person_id'])) + if (count($zweitbetreuerArr) > 0 && $paIsCurrent >= 1 && isset($_GET['zweitbegutachtertoken']) && isset($_GET['zweitbetreuer_person_id'])) { $qry_std="SELECT * FROM campus.vw_benutzer where uid=".$db->db_add_param($uid); if(!$result_std=$db->db_query($qry_std)) @@ -481,7 +481,8 @@ $endupload_vorhanden = $num_rows_endupload >= 1; if ($semester_benotbar && $endupload_vorhanden) { - $htmlstr .= "
"; + $beurtPfad = $betreuerart == 'Zweitbegutachter' ? 'ProjektarbeitsbeurteilungZweitbegutachter' : 'ProjektarbeitsbeurteilungErstbegutachter'; + $htmlstr .= ""; $htmlstr .= "\n"; $htmlstr .= "\n"; $htmlstr .= "
"; @@ -759,8 +760,8 @@ function sendZweitbegutachterMail($zweitbegutachter, $erstbegutachter_person_id, { $zweitbetr = $projektbetreuer->result[0]; $intern = isset($zweitbetr->uid); - $mail_subject = $projekttyp_kurzbz == 'Diplom' ? "Masterarbeitsbetreuung" : "Bachelorarbeitsbetreuung"; - $mail_baselink = APP_ROOT."index.ci.php/extensions/FHC-Core-Projektarbeitsbeurteilung/Projektarbeitsbeurteilung"; + $mail_subject = $projekttyp_kurzbz == 'Diplom' ? 'Masterarbeitsbetreuung' : 'Bachelorarbeitsbetreuung'; + $mail_baselink = APP_ROOT."index.ci.php/extensions/FHC-Core-Projektarbeitsbeurteilung/ProjektarbeitsbeurteilungZweitbegutachter"; $mail_fulllink = "$mail_baselink?projektarbeit_id=".$zweitbegutachter->projektarbeit_id."&uid=".$student->uid; $mail_link = $intern ? $mail_fulllink : $mail_baselink; diff --git a/cis/private/lehre/abgabe_student_details.php b/cis/private/lehre/abgabe_student_details.php index bead1a1e9..522e89dd3 100644 --- a/cis/private/lehre/abgabe_student_details.php +++ b/cis/private/lehre/abgabe_student_details.php @@ -433,7 +433,7 @@ if($command=="update" && $error!=true) $row_std=$db->db_fetch_object($result_std); // 1. Begutachter mail ohne Token - $mail_baselink = APP_ROOT."index.ci.php/extensions/FHC-Core-Projektarbeitsbeurteilung/Projektarbeitsbeurteilung"; + $mail_baselink = APP_ROOT."index.ci.php/extensions/FHC-Core-Projektarbeitsbeurteilung/ProjektarbeitsbeurteilungErstbegutachter"; $mail_fulllink = "$mail_baselink?projektarbeit_id=".$projektarbeit_id."&uid=".$row_std->uid; $projekttyp_kurzbz = $projektarbeit_obj->projekttyp_kurzbz; $subject = $projektarbeit_obj->projekttyp_kurzbz == 'Diplom' ? 'Masterarbeitsbetreuung' : 'Bachelorarbeitsbetreuung'; @@ -495,6 +495,9 @@ if($command=="update" && $error!=true) { $begutachterMitToken = $zweitbegutachterMitToken->result[0]; + $path = $begutachterMitToken->betreuerart_kurzbz == 'Zweitbegutachter' ? 'ProjektarbeitsbeurteilungZweitbegutachter' : 'ProjektarbeitsbeurteilungErstbegutachter'; + $mail_baselink = APP_ROOT."index.ci.php/extensions/FHC-Core-Projektarbeitsbeurteilung/$path"; + $mail_fulllink = "$mail_baselink?projektarbeit_id=".$projektarbeit_id."&uid=".$row_std->uid; $intern = isset($begutachterMitToken->uid); $mail_link = $intern ? $mail_fulllink : $mail_baselink; From cc33502ab3ad6ce31fd1819d62b8f768a80a19f9 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Thu, 1 Sep 2022 02:23:32 +0200 Subject: [PATCH 011/176] adapted "resend token for Begutachter" mail to Projektarbeitsbeurteilung controller split --- application/models/education/Projektbetreuer_model.php | 5 +++-- cis/private/lehre/abgabe_lektor_details.php | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/application/models/education/Projektbetreuer_model.php b/application/models/education/Projektbetreuer_model.php index 8a333d47c..db9310eed 100644 --- a/application/models/education/Projektbetreuer_model.php +++ b/application/models/education/Projektbetreuer_model.php @@ -110,9 +110,10 @@ class Projektbetreuer_model extends DB_Model { $params = array($erstbegutachter_person_id, $erstbegutachter_person_id, $projektarbeit_id, $student_uid); - $qry_betr = "SELECT betr.person_id, betr.projektarbeit_id, pers.anrede, betr.zugangstoken, betr.zugangstoken_gueltigbis, tbl_benutzer.uid, kontakt, + $qry_betr = "SELECT betr.person_id, betr.projektarbeit_id, pers.anrede, betr.zugangstoken, betr.zugangstoken_gueltigbis, tbl_benutzer.uid, trim(COALESCE(titelpre,'')||' '||COALESCE(vorname,'')||' '||COALESCE(nachname,'')||' '||COALESCE(titelpost,'')) as voller_name, - CASE WHEN tbl_benutzer.uid IS NULL THEN kontakt ELSE tbl_benutzer.uid || '@".DOMAIN."' END AS email, abg.abgabedatum + CASE WHEN tbl_benutzer.uid IS NULL THEN kontakt ELSE tbl_benutzer.uid || '@".DOMAIN."' END AS email, kontakt, + abg.abgabedatum, betr.betreuerart_kurzbz FROM lehre.tbl_projektbetreuer betr JOIN lehre.tbl_projektarbeit parb ON betr.projektarbeit_id = parb.projektarbeit_id JOIN public.tbl_person pers ON betr.person_id = pers.person_id diff --git a/cis/private/lehre/abgabe_lektor_details.php b/cis/private/lehre/abgabe_lektor_details.php index eb41620ce..2bda94848 100644 --- a/cis/private/lehre/abgabe_lektor_details.php +++ b/cis/private/lehre/abgabe_lektor_details.php @@ -760,8 +760,9 @@ function sendZweitbegutachterMail($zweitbegutachter, $erstbegutachter_person_id, { $zweitbetr = $projektbetreuer->result[0]; $intern = isset($zweitbetr->uid); + $mail_link_path = $zweitbetr->betreuerart_kurzbz == 'Zweitbegutachter' ? 'ProjektarbeitsbeurteilungZweitbegutachter' : 'ProjektarbeitsbeurteilungErstbegutachter'; $mail_subject = $projekttyp_kurzbz == 'Diplom' ? 'Masterarbeitsbetreuung' : 'Bachelorarbeitsbetreuung'; - $mail_baselink = APP_ROOT."index.ci.php/extensions/FHC-Core-Projektarbeitsbeurteilung/ProjektarbeitsbeurteilungZweitbegutachter"; + $mail_baselink = APP_ROOT."index.ci.php/extensions/FHC-Core-Projektarbeitsbeurteilung/$mail_link_path"; $mail_fulllink = "$mail_baselink?projektarbeit_id=".$zweitbegutachter->projektarbeit_id."&uid=".$student->uid; $mail_link = $intern ? $mail_fulllink : $mail_baselink; From 450b0b64339db9316e196676c474eccf981a1ea8 Mon Sep 17 00:00:00 2001 From: Manfred Date: Wed, 14 Sep 2022 15:55:07 +0200 Subject: [PATCH 012/176] Initial commit --- include/berechtigung.class.php | 37 + .../benutzerberechtigung_autocomplete.php | 116 ++ .../benutzerberechtigung_details.php | 1149 +++++++++++------ 3 files changed, 914 insertions(+), 388 deletions(-) create mode 100644 vilesci/stammdaten/benutzerberechtigung_autocomplete.php diff --git a/include/berechtigung.class.php b/include/berechtigung.class.php index 684ad4e81..ab224be4d 100644 --- a/include/berechtigung.class.php +++ b/include/berechtigung.class.php @@ -312,5 +312,42 @@ class berechtigung extends basis_db return false; } } + + /** + * Sucht nach Berechtigungen + * @param string $searchItem Suchbegriff + * @return boolean + */ + public function searchBerechtigungen($searchItem) + { + $this->result=array(); + $qry = 'SELECT * FROM system.tbl_berechtigung WHERE + ( + LOWER(berechtigung_kurzbz) LIKE LOWER(\'%'.$this->db_escape(($searchItem)).'%\') + OR + LOWER(beschreibung) LIKE LOWER(\'%'.$this->db_escape(($searchItem)).'%\') + )'; + + $qry .= ' ORDER BY berechtigung_kurzbz'; + + if($this->db_query($qry)) + { + while($row = $this->db_fetch_object()) + { + $obj = new berechtigung(); + + $obj->berechtigung_kurzbz = $row->berechtigung_kurzbz; + $obj->beschreibung = $row->beschreibung; + + $this->result[] = $obj; + } + return true; + } + else + { + $this->errormsg = 'Fehler beim Laden der Berechtigungen'; + return false; + } + } } ?> \ No newline at end of file diff --git a/vilesci/stammdaten/benutzerberechtigung_autocomplete.php b/vilesci/stammdaten/benutzerberechtigung_autocomplete.php new file mode 100644 index 000000000..07e57809e --- /dev/null +++ b/vilesci/stammdaten/benutzerberechtigung_autocomplete.php @@ -0,0 +1,116 @@ + + */ +require_once ('../../config/vilesci.config.inc.php'); +require_once ('../../include/functions.inc.php'); +require_once ('../../include/basis_db.class.php'); +require_once ('../../include/ort.class.php'); +require_once ('../../include/benutzer.class.php'); +require_once ('../../include/studiengang.class.php'); +require_once ('../../include/berechtigung.class.php'); +require_once ('../../include/organisationseinheit.class.php'); +require_once ('../../include/sprache.class.php'); + +if (! $db = new basis_db()) + die('Es konnte keine Verbindung zum Server aufgebaut werden.'); + +$uid = get_uid(); +$sprache = getSprache(); + +if (isset($_REQUEST['autocomplete']) && $_REQUEST['autocomplete'] == 'benutzer') +{ + $search = trim((isset($_REQUEST['term']) ? $_REQUEST['term'] : '')); + if (is_null($search) || $search == '') + exit(); + + $benutzer = new benutzer(); + + if ($benutzer->search(array( + $search + ))) + { + $result_obj = array(); + foreach ($benutzer->result as $row) + { + $item['vorname'] = html_entity_decode($row->vorname); + $item['nachname'] = html_entity_decode($row->nachname); + $item['uid'] = html_entity_decode($row->uid); + $result_obj[] = $item; + } + echo json_encode($result_obj); + } + exit(); +} + +if (isset($_REQUEST['autocomplete']) && $_REQUEST['autocomplete'] == 'berechtigung') +{ + $search = trim((isset($_REQUEST['term']) ? $_REQUEST['term'] : '')); + if (is_null($search) || $search == '') + exit(); + + $berechtigung = new berechtigung(); + + if ($berechtigung->searchBerechtigungen($search)) + { + $result_obj = array(); + foreach ($berechtigung->result as $row) + { + $item['berechtigung_kurzbz'] = html_entity_decode($row->berechtigung_kurzbz); + $item['beschreibung'] = html_entity_decode($row->beschreibung); + $result_obj[] = $item; + } + echo json_encode($result_obj); + } + exit(); +} + +if (isset($_REQUEST['autocomplete']) && $_REQUEST['autocomplete'] == 'oe_kurzbz') +{ + $search = trim((isset($_REQUEST['term']) ? $_REQUEST['term'] : '')); + if (is_null($search) || $search == '') + exit(); + + $search = array($search); + $oe = new organisationseinheit(); + $oe->search($search); + + $stg = new studiengang(); + $stg->search($search); + foreach($stg->result as $row) + { + if($row->aktiv===true) + $oe->result[] = new organisationseinheit($row->oe_kurzbz); + } + + if(is_array($oe->result) && count($oe->result) > 0) + { + $result_obj = array(); + foreach($oe->result as $row) + { + if($row->aktiv==true) + { + $item['oe_kurzbz'] = html_entity_decode($row->oe_kurzbz); + $item['organisationseinheittyp_kurzbz'] = html_entity_decode($row->organisationseinheittyp_kurzbz); + $item['bezeichnung'] = html_entity_decode($row->bezeichnung); + $result_obj[] = $item; + } + } + echo json_encode($result_obj); + } + exit(); +} + +?> diff --git a/vilesci/stammdaten/benutzerberechtigung_details.php b/vilesci/stammdaten/benutzerberechtigung_details.php index 83a9c34bb..03e7b15b9 100644 --- a/vilesci/stammdaten/benutzerberechtigung_details.php +++ b/vilesci/stammdaten/benutzerberechtigung_details.php @@ -37,7 +37,28 @@ require_once('../../include/person.class.php'); require_once('../../include/benutzer.class.php'); require_once('../../include/funktion.class.php'); require_once('../../include/wawi_kostenstelle.class.php'); +require_once('../../include/log.class.php'); +/* + * TODOs + * + +Checkbox-Range +Mehrfach-Löschen + + +Wawi und kostenstelle ausblenden +Checkbox markieren bei (doppel)klick auf Zeile + +---------------------- + +Nach übertragen gleich zu Person springen +Bug in Kopieren - Verdoppelt alle Einträge +Sortierreihenfolge. OE wird anscheinend nicht sortiert +ART prüfen auf schreibweise +BEschreibungstexte bestehender Rechte + + */ $user = get_uid(); $rechte = new benutzerberechtigung(); @@ -51,7 +72,8 @@ if(!$rechte->isBerechtigt('basis/berechtigung')) //$reloadstr = ''; // neuladen der liste im oberen frame $htmlstr = ''; -$errorstr = ''; //fehler beim insert +$errorstr = ''; +$successstr = ''; $sel = ''; $chk = ''; $oe_arr = array(); @@ -73,64 +95,161 @@ $neu = false; $negativ = false; $filter=(isset($_GET['filter'])?$_GET['filter']:'alle'); -if(isset($_POST['del'])) +if(isset($_POST['delete']) && $_POST['delete'] != '') { if(!$rechte->isBerechtigt('basis/berechtigung', null, 'suid')) - die('Sie haben keine Berechtigung fuer diese Aktion'); + die($rechte->errormsg); - $benutzerberechtigung_id = $_POST['benutzerberechtigung_id']; + $benutzerberechtigung_id = $_POST['delete']; $ber = new benutzerberechtigung(); if(!$ber->delete($benutzerberechtigung_id)) $errorstr .= 'Datensatz konnte nicht gelöscht werden!'; - //$reloadstr .= "\n"; + //$reloadstr .= ""; } -if(isset($_POST['kopieren'])) +if(isset($_POST['delete_multi']) && $_POST['delete_multi'] != '') { + if(!$rechte->isBerechtigt('basis/berechtigung', null, 'suid')) + die($rechte->errormsg); + + if (isset($_POST['dataset'])) + { + $i = 0; + foreach ($_POST['dataset'] AS $benutzerberechtigung_id => $value) + { + // Nur markierte Rechte kopieren + if (!isset($value['check'])) + { + continue; + } + + $ber = new benutzerberechtigung(); + if(!$ber->delete($benutzerberechtigung_id)) + { + $errorstr .= 'Datensatz konnte nicht gelöscht werden!'; + } + else + { + $i ++; + //Log schreiben + $log = new log(); + + $logdata = var_export((array) $ber, true); + $log->new = true; + $log->sql = $logdata; + $log->sqlundo = 'Kein Undo vorhanden'; + $log->executetime = date('Y-m-d H:i:s'); + $log->mitarbeiter_uid = $user; + $log->beschreibung = 'Berechtigung gelöscht'; + + if(!$log->save()) + { + $errorstr .= "Fehler beim schreiben des Log-Eintrags
"; + } + } + } + if ($errorstr == '') + { + $successstr .= "".$i." Rechte erfolgreich gelöscht
"; + } + } + + + + //$reloadstr .= ""; + +} + +if(isset($_POST['uebertragen']) && $_POST['uebertragen_nach'] != '') +{ + //echo '
', var_dump($_POST), '
';exit(); if($rechte->isBerechtigt('basis/berechtigung', null, 'suid')) { - $uid = $_POST['uid']; - $uid_von = $_POST['uid_von']; + $uidVon = $_POST['uid']; + $copyTo = $_POST['uebertragen_nach']; - $rechtevon = new benutzerberechtigung(); - if(!$rechtevon->loadBenutzerRollen($uid_von)) - die('Fehler beim Laden der Berechtigung von '.$uid_von); - - foreach($rechtevon->berechtigungen AS $row) + if (isset($_POST['dataset'])) { - //Nur aktive Berechtigungen kopieren - if(($row->start=='' || $row->start<=date('Y-m-d')) && ($row->ende=='' || $row->ende>=date('Y-m-d'))) + $i = 0; + foreach ($_POST['dataset'] AS $key => $value) { + // Nur markierte Rechte kopieren + if (!isset($value['check'])) + { + continue; + } + + $rolle_kurzbz = (isset($value['rolle_kurzbz']) ? $value['rolle_kurzbz'] : ''); + $berechtigung_kurzbz = (isset($value['berechtigung_kurzbz']) ? $value['berechtigung_kurzbz'] : ''); + $art = (isset($value['art']) ? $value['art'] : ''); + $oe_kurzbz = (isset($value['oe_kurzbz']) ? $value['oe_kurzbz'] : ''); + $kostenstelle_id = (isset($value['kostenstelle_id']) ? $value['kostenstelle_id'] : ''); + $start = (isset($value['start']) ? $value['start'] : ''); + $ende = (isset($value['ende']) ? $value['ende'] : ''); + $anmerkung = (isset($value['anmerkung']) ? $value['anmerkung'] : ''); + + $funktion_kurzbz = (isset($value['funktion_kurzbz']) ? $value['funktion_kurzbz'] : ''); + $studiensemester_kurzbz = null; + $ber = new benutzerberechtigung(); - $ber->new = true; - //$ber->benutzerberechtigung_id = $benutzerberechtigung_id; - $ber->art = $row->art; - $ber->oe_kurzbz = $row->oe_kurzbz; - $ber->berechtigung_kurzbz = $row->berechtigung_kurzbz; - $ber->rolle_kurzbz = $row->rolle_kurzbz; - $ber->uid = $uid; - $ber->funktion_kurzbz = $row->funktion_kurzbz; - $ber->studiensemester_kurzbz = $row->studiensemester_kurzbz; - $ber->start = $row->start; - $ber->ende = $row->ende; - $ber->negativ = $row->negativ; - $ber->insertamum=date('Y-m-d H:i:s'); + $ber->insertamum = date('Y-m-d H:i:s'); $ber->insertvon = $user; + $ber->new = true; + + if (isset($value['negativ'])) + $ber->negativ = true; + else + $ber->negativ = false; + + $ber->art = $art; + $ber->oe_kurzbz = $oe_kurzbz; + $ber->berechtigung_kurzbz = $berechtigung_kurzbz; + $ber->rolle_kurzbz = $rolle_kurzbz; + $ber->uid = $copyTo; + $ber->funktion_kurzbz = $funktion_kurzbz; + $ber->studiensemester_kurzbz = $studiensemester_kurzbz; + $ber->start = $start; + $ber->ende = $ende; $ber->updateamum = date('Y-m-d H:i:s'); $ber->updatevon = $user; - $ber->kostenstelle_id = $row->kostenstelle_id; - $ber->anmerkung = 'Kopiert von UID '.$uid_von.($row->anmerkung!=''?'. Anmerkung von UID '.$uid_von.': '.$row->anmerkung:''); + $ber->kostenstelle_id = $kostenstelle_id; + $ber->anmerkung = 'Kopiert von UID '.$uidVon.($anmerkung!=''?'. Anmerkung von UID '.$uidVon.': '.$anmerkung:''); if(!$ber->save()) { - if (!$ber->new) - $errorstr .= "Datensatz konnte nicht gespeichert werden!".$ber->errormsg; + $errorstr .= "Datensatz konnte nicht gespeichert werden!".$ber->errormsg; } + else + { + $i ++; + //Log schreiben + $log = new log(); + + $logdata = var_export((array) $ber, true); + $log->new = true; + $log->sql = $logdata; + $log->sqlundo = 'Kein Undo vorhanden'; + $log->executetime = date('Y-m-d H:i:s'); + $log->mitarbeiter_uid = $user; + $log->beschreibung = 'Berechtigung übertragen von '.$uidVon.' nach '.$copyTo; + + if(!$log->save()) + { + $errorstr .= "Fehler beim schreiben des Log-Eintrags
"; + } + } + } + if ($errorstr == '') + { + $successstr .= "".$i." Rechte erfolgreich kopiert
"; + echo ""; } } } @@ -140,71 +259,137 @@ if(isset($_POST['kopieren'])) } } -if(isset($_POST['schick']) || isset($_POST['copy'])) +if(isset($_POST['schick'])) { if($rechte->isBerechtigt('basis/berechtigung', null, 'suid')) { - $benutzerberechtigung_id = $_POST['benutzerberechtigung_id']; - $art = $_POST['art']; - $oe_kurzbz = (isset($_POST['oe_kurzbz'])?$_POST['oe_kurzbz']:''); - $berechtigung_kurzbz = (isset($_POST['berechtigung_kurzbz'])?$_POST['berechtigung_kurzbz']:''); - $rolle_kurzbz = (isset($_POST['rolle_kurzbz'])?$_POST['rolle_kurzbz']:''); - $uid = $_POST['uid']; - $funktion_kurzbz = $_POST['funktion_kurzbz']; - $studiensemester_kurzbz = null;//$_POST['studiensemester_kurzbz']; - $start = $_POST['start']; - $ende = $_POST['ende']; - $kostenstelle_id = (isset($_POST['kostenstelle_id'])?$_POST['kostenstelle_id']:''); - $anmerkung = (isset($_POST['anmerkung'])?$_POST['anmerkung']:''); + if (isset($_POST['dataset'])) + { + foreach ($_POST['dataset'] AS $benutzerberechtigung_id => $value) + { + $rolle_kurzbz = (isset($value['rolle_kurzbz']) ? $value['rolle_kurzbz'] : ''); + $berechtigung_kurzbz = (isset($value['berechtigung_kurzbz']) ? $value['berechtigung_kurzbz'] : ''); + $art = (isset($value['art']) ? $value['art'] : ''); + $oe_kurzbz = (isset($value['oe_kurzbz']) ? $value['oe_kurzbz'] : ''); + $kostenstelle_id = (isset($value['kostenstelle_id']) ? $value['kostenstelle_id'] : ''); + $start = (isset($value['start']) ? $value['start'] : ''); + $ende = (isset($value['ende']) ? $value['ende'] : ''); + $uid = $_POST['uid']; + $anmerkung = (isset($value['anmerkung']) ? $value['anmerkung'] : ''); + $funktion_kurzbz = (isset($_POST['funktion_kurzbz']) ? $_POST['funktion_kurzbz'] : ''); + $studiensemester_kurzbz = null; + + $ber = new benutzerberechtigung(); + if (isset($_POST['neu'])) + { + $ber->insertamum = date('Y-m-d H:i:s'); + $ber->insertvon = $user; + $ber->new = true; + } + else + { + if(!$ber->load($benutzerberechtigung_id)) + die('Fehler beim Laden der Berechtigung'); + } + if (isset($value['negativ'])) + $ber->negativ = true; + else + $ber->negativ = false; + + $ber->benutzerberechtigung_id = $benutzerberechtigung_id; + $ber->art = $art; + $ber->oe_kurzbz = $oe_kurzbz; + $ber->berechtigung_kurzbz = $berechtigung_kurzbz; + $ber->rolle_kurzbz = $rolle_kurzbz; + $ber->uid = $uid; + $ber->funktion_kurzbz = $funktion_kurzbz; + $ber->studiensemester_kurzbz = $studiensemester_kurzbz; + $ber->start = $start; + $ber->ende = $ende; + $ber->updateamum = date('Y-m-d H:i:s'); + $ber->updatevon = $user; + $ber->kostenstelle_id = $kostenstelle_id; + $ber->anmerkung = $anmerkung; + + if(!$ber->save()) + { + if (!$ber->new) + $errorstr .= "Datensatz konnte nicht upgedatet werden!".$ber->errormsg; + else + $errorstr .= "Datensatz konnte nicht gespeichert werden!".$ber->errormsg; + } + else + { + //Log schreiben + $log = new log(); + + $logdata = var_export((array) $ber, true); + $log->new = true; + $log->sql = $logdata; + $log->sqlundo = 'Kein Undo vorhanden'; + $log->executetime = date('Y-m-d H:i:s'); + $log->mitarbeiter_uid = $user; + if (isset($_POST['neu'])) + $log->beschreibung = 'Neue Berechtigung für '.$uid.' angelegt'; + else + $log->beschreibung = 'Berechtigung für '.$uid.' aktualisiert'; + + if(!$log->save()) + { + $errorstr .= "Fehler beim schreiben des Log-Eintrags
"; + } + } + } + } + } + else + { + $errorstr.='Fehler beim Speichern: '.$rechte->errormsg; + } +} + +if(isset($_POST['copy']) && $_POST['copy'] != '') +{ + if($rechte->isBerechtigt('basis/berechtigung', null, 'suid')) + { $ber = new benutzerberechtigung(); - if (isset($_POST['neu']) || isset($_POST['copy'])) - { - $ber->insertamum=date('Y-m-d H:i:s'); - $ber->insertvon = $user; - $ber->new = true; - } - else - { - if(!$ber->load($benutzerberechtigung_id)) - die('Fehler beim Laden der Berechtigung'); - } - if (isset($_POST['negativ'])) - $ber->negativ = true; - else - $ber->negativ = false; + if(!$ber->load($_POST['copy'])) + die('Fehler beim Laden der Berechtigung'); - $ber->benutzerberechtigung_id = $benutzerberechtigung_id; - $ber->art = $art; - $ber->oe_kurzbz = $oe_kurzbz; - $ber->berechtigung_kurzbz = $berechtigung_kurzbz; - $ber->rolle_kurzbz = $rolle_kurzbz; - $ber->uid = $uid; - $ber->funktion_kurzbz = $funktion_kurzbz; - $ber->studiensemester_kurzbz = $studiensemester_kurzbz; - $ber->start = $start; - $ber->ende = $ende; - $ber->updateamum = date('Y-m-d H:i:s'); - $ber->updatevon = $user; - $ber->kostenstelle_id = $kostenstelle_id; - $ber->anmerkung = $anmerkung; + $ber->new = true; + $ber->insertamum = date('Y-m-d H:i:s'); + $ber->insertvon = $user; - if(!$ber->save()){ + if(!$ber->save()) + { if (!$ber->new) $errorstr .= "Datensatz konnte nicht upgedatet werden!".$ber->errormsg; else $errorstr .= "Datensatz konnte nicht gespeichert werden!".$ber->errormsg; } - /*if ($ber->new) + else { - $reloadstr .= "\n"; - }*/ + //Log schreiben + $log = new log(); + + $logdata = var_export((array) $ber, true); + $log->new = true; + $log->sql = $logdata; + $log->sqlundo = 'Kein Undo vorhanden'; + $log->executetime = date('Y-m-d H:i:s'); + $log->mitarbeiter_uid = $user; + $log->beschreibung = 'Berechtigung für '.$uid.' kopiert'; + + if(!$log->save()) + { + $errorstr .= "Fehler beim schreiben des Log-Eintrags
"; + } + } } else { - $errorstr.='Fehler beim Speichern: Sie haben keine Berechtigung zum Speichern'; + $errorstr.='Fehler beim Speichern: '.$rechte->errormsg; } } @@ -220,10 +405,10 @@ sort($rolle_arr); $b->getBerechtigungen(); foreach($b->result as $berechtigung) { - $berechtigung_arr[] = $berechtigung->berechtigung_kurzbz; + $berechtigung_arr[$berechtigung->berechtigung_kurzbz] = $berechtigung->beschreibung; $berechtigung_beschreibung_arr[] = $berechtigung->beschreibung; } -//var_dump($berechtigung_arr); + $st = new studiensemester(); $st->getAll(); foreach($st->studiensemester as $studiensemester) @@ -233,6 +418,10 @@ foreach($st->studiensemester as $studiensemester) $oe = new organisationseinheit(); $oe->getAll(); +foreach ($oe->result AS $row) +{ + $oe_arr[$row->oe_kurzbz] = $row->organisationseinheittyp_kurzbz.' '.$row->bezeichnung; +} $kostenstelle = new wawi_kostenstelle(); $kostenstelle->getAll(); @@ -259,13 +448,16 @@ if (isset($_REQUEST['uid']) || isset($_REQUEST['funktion_kurzbz'])) $rights->loadBenutzerRollen($uid); $name = new benutzer(); $name->load($uid); - $htmlstr .= "Berechtigungen von ".$name->nachname." ".$name->vorname." (".$uid.")\n"; + + $htmlstr .= "Berechtigungen von ".$name->nachname." ".$name->vorname." (".$uid.")"; + $htmlstr .= "

".$errorstr."

".$successstr."

"; + //Formular zum Kopieren von Berechtigungen - $htmlstr .= "
\n"; - $htmlstr .= "Berechtigungen (aktive) kopieren von UID \n"; - $htmlstr .= "\n"; - $htmlstr .= "\n"; - $htmlstr .= "
\n"; + //$htmlstr .= "
"; + //$htmlstr .= "Berechtigungen (aktive) kopieren von UID "; + //$htmlstr .= ""; + //$htmlstr .= ""; + //$htmlstr .= "
"; $i = 0; // Zusätzlich jede Funktion mit einer gültigen Berechtigung anzeigen @@ -291,11 +483,13 @@ if (isset($_REQUEST['uid']) || isset($_REQUEST['funktion_kurzbz'])) $i++; if ($i==1) { - $htmlstr .= "Geerbte Berechtigungen aus Funktion\n"; + $htmlstr .= "

Geerbte Berechtigungen aus Funktion(en) "; } - $htmlstr .= ($i>1?", ":"").$funktion_bezeichnung->beschreibung.""; + $htmlstr .= ($i > 1 ? ", " : "").$funktion_bezeichnung->beschreibung; } } + if(!empty($funktionsrecht)) + $htmlstr .= '

'; } } elseif(isset($_REQUEST['funktion_kurzbz']) && $_REQUEST['funktion_kurzbz']!='') @@ -307,10 +501,10 @@ if (isset($_REQUEST['uid']) || isset($_REQUEST['funktion_kurzbz'])) die('Funktion existiert nicht'); $rights->loadBenutzerRollen(null, $funktion_kurzbz); - $htmlstr .= "Berechtigungen der Funktion ".$funktion->beschreibung."\n"; + $htmlstr .= "Berechtigungen der Funktion ".$funktion->beschreibung.""; } - //$htmlstr .= "Berechtigungen von ".$name->nachname." ".$name->vorname." (".$uid.")".$funktion_kurzbz."\n"; + //$htmlstr .= "Berechtigungen von ".$name->nachname." ".$name->vorname." (".$uid.")".$funktion_kurzbz.""; /*$htmlstr .= '      Filter: Alle | nur WaWi @@ -318,16 +512,19 @@ if (isset($_REQUEST['uid']) || isset($_REQUEST['funktion_kurzbz'])) ';*/ - $htmlstr .= "\n"; //Alternatives styling fuer Tablesorter um Platz zu sparen. - $htmlstr .= "\n"; + //////////////// + // Neue Berechtigung einfügen + //////////////// + + $htmlstr .= "
"; + $htmlstr .= ""; $htmlstr .= " - - - + + @@ -335,63 +532,52 @@ if (isset($_REQUEST['uid']) || isset($_REQUEST['funktion_kurzbz'])) - - \n"; + "; - $htmlstr .= "\n"; - $htmlstr .= "\n"; - $htmlstr .= "\n"; - $htmlstr .= "\n"; - $htmlstr .= "\n"; - $htmlstr .= "\n"; + $htmlstr .= ""; + $htmlstr .= ""; + $htmlstr .= ""; + $htmlstr .= ""; + $htmlstr .= ""; + $htmlstr .= ""; - //Status - $htmlstr .= " \n"; + $htmlstr .= ""; //Rolle - $htmlstr .= " \n"; + $htmlstr .= " "; //Berechtigung_kurzbz - $htmlstr .= " \n"; + $htmlstr .= " "; //Art - $htmlstr .= " \n"; + $htmlstr .= " "; //Organisationseinheit - if($funktion_kurzbz!='') - $htmlstr .= " \n"; + if($funktion_kurzbz != '') + { + $htmlstr .= " "; + } else { - $htmlstr .= " \n"; + $htmlstr .= " "; } //Kostenstelle - $htmlstr .= " \n"; + $htmlstr .= " "; - $htmlstr .= " \n"; - $htmlstr .= " \n"; - $htmlstr .= " \n"; + //Negativ + $htmlstr .= " "; + + //Start + $htmlstr .= " "; + + //Ende + $htmlstr .= " "; //Anmerkung - $htmlstr .= " \n"; + $htmlstr .= " "; - $htmlstr .= " "; - $htmlstr .= "\n"; - $htmlstr .= " \n"; + $htmlstr .= " "; + $htmlstr .= ""; + $htmlstr .= "
Rolle Berechtigung ArtOrganisationseinheitKostenstelleOrganisationseinheitKostenstelle Neg Gültig ab Gültig bisInfo
 Neu: "; + $htmlstr .= " "; + $htmlstr .= " "; + $htmlstr .= " "; + $htmlstr .= " OE aus MA-FunktionOE aus MA-Funktion"; + $htmlstr .= " "; + $htmlstr .= " "; + $htmlstr .= "
"; + + $htmlstr .= "
"; + + //////////////// + // Tabelle für bestehende Berechtigungen + //////////////// + + $htmlstr .= "
"; + + $htmlstr .= ""; + $htmlstr .= ""; + $htmlstr .= " + + + +
+ + +
+ "; + $htmlstr .= ""; + $htmlstr .= ""; + $htmlstr .= " + + + + + + + + + + + + + + + "; foreach($rights->berechtigungen as $b) { @@ -430,199 +659,139 @@ if (isset($_REQUEST['uid']) || isset($_REQUEST['funktion_kurzbz'])) break; default: break; } - if(isset($_POST['edit']) && $_POST['benutzerberechtigung_id']==$b->benutzerberechtigung_id) + + $htmlstr .= " "; + $heute = strtotime(date('Y-m-d')); + if ($b->ende!='' && strtotime($b->ende) < $heute) { - $htmlstr .= " \n"; - $htmlstr .= "\n"; - $htmlstr .= "\n"; - $htmlstr .= "\n"; - $htmlstr .= "\n"; - - $heute = strtotime(date('Y-m-d')); - if ($b->ende!='' && strtotime($b->ende)<$heute) - { - $status="ampel_rot.png"; - $titel="ccc"; - } - elseif ($b->start!='' && strtotime($b->start)>$heute) - { - $status="ampel_gelb.png"; - $titel="bbb"; - } - else - { - $status="ampel_gruen.png"; - $titel="aaa"; - } - //Status - $htmlstr .= " \n"; - //Rolle - $htmlstr .= " \n"; - - //Berechtigung - $htmlstr .= " \n"; - - //Art - $htmlstr .= " \n"; - - //Organisationseinheit - if($funktion_kurzbz!='') - $htmlstr .= " \n"; - else - { - $htmlstr .= " \n"; - } - - //Kostenstelle - $htmlstr .= " \n"; - - $htmlstr .= " \n"; - $htmlstr .= " \n"; - $htmlstr .= " \n"; - $htmlstr .= " \n"; - $htmlstr .= " \n"; - - $htmlstr .= " "; - $htmlstr .= " "; - $htmlstr .= "\n"; - $htmlstr .= " \n"; + $titel="ccc"; + $style = 'style="border-left: 10px solid tomato; border-right: 10px solid transparent; text-align: center; vertical-align: middle"'; + } + elseif ($b->start!='' && strtotime($b->start) > $heute) + { + $titel="bbb"; + $style = 'style="border-left: 10px solid gold; border-right: 10px solid transparent; text-align: center; vertical-align: middle"'; } else { - $htmlstr .= " \n"; - $htmlstr .= "\n"; - $htmlstr .= "\n"; - $htmlstr .= "\n"; - $htmlstr .= "\n"; + $titel="aaa"; + $style = 'style="border-left: 10px solid LightGreen; border-right: 10px solid transparent; text-align: center; vertical-align: middle"'; + } + // Auswahlcheckbox + $htmlstr .= " "; - $heute = strtotime(date('Y-m-d')); - if ($b->ende!='' && strtotime($b->ende)<$heute) + //Rolle + $htmlstr .= " \n"; - //Rolle - $htmlstr .= " \n"; + $sel = ""; + $htmlstr .= ""; + } + $htmlstr .= " "; + $htmlstr.=""; - //Berechtigung - $htmlstr .= " \n"; + //Berechtigung + $htmlstr .= " "; - //Art - $htmlstr .= " \n"; + //Art + $htmlstr .= " "; - //Organisationseinheit - $oekey = $oe->result; - $org = new organisationseinheit(); - $org->load($b->oe_kurzbz); - $htmlstr .= " \n"; - - //Kostenstelle - $kst = new wawi_kostenstelle(); - $kst->load($b->kostenstelle_id); - if(!$kst->aktiv) - $style='style="text-decoration:line-through;"'; - else - $style=''; - $htmlstr .= " \n"; - - - $htmlstr .= " \n"; - $htmlstr .= " \n"; - $htmlstr .= " \n"; - $htmlstr .= " \n"; - $htmlstr .= " \n"; - - $htmlstr .= " "; - $htmlstr .= " "; - $htmlstr .= "\n"; - $htmlstr .= " \n"; + //Organisationseinheit + if($funktion_kurzbz != '') + { + $htmlstr .= " "; + } + else + { + $htmlstr .= " "; } + //Kostenstelle + $htmlstr .= " "; + + //Negativ-Checkbox + $htmlstr .= " "; + + //Gültig ab + $htmlstr .= " "; + + // Gültig bis + $htmlstr .= " "; + + //Anmerkung + $htmlstr .= " "; + + //Info + $htmlstr .= " "; + + $htmlstr .= " "; + $htmlstr .= " "; } - - $htmlstr .= "
RolleBerechtigungArtOrganisationseinheitKostenstelleNegGültig abGültig bisAnmerkungInfo
aktiv"; - - // Wenn editiert wird, zu der Zeile Springen - $htmlstr.=" - - "; - $htmlstr.="OE aus MA-Funktionnegativ?'checked="checked"':'')." onchange='markier(\"td_".$b->benutzerberechtigung_id."\")'>anmerkung))."' size='30' maxlength='256' markier(\"td_".$b->benutzerberechtigung_id."\")'>information  
"; + $htmlstr .= " ".$titel.""; + $htmlstr .= " "; + $htmlstr .= " "; + $htmlstr .= " aktiv$b->rolle_kurzbz$b->berechtigung_kurzbz"; + $htmlstr .= " ".$b->berechtigung_kurzbz.""; + $htmlstr .= " berechtigung_kurzbz] : '')."'>"; + $htmlstr .= " ".$b->art.""; + $htmlstr .= " ".$b->art.""; + $htmlstr .= " "; + $htmlstr .= " ".$org->organisationseinheittyp_kurzbz." ".$org->bezeichnung."$kst->bezeichnungnegativ?'checked="checked"':'')." onchange='markier(\"td_".$b->benutzerberechtigung_id."\")' disabled>".$b->start."".$b->ende."".$b->anmerkung."information
OE aus MA-Funktion"; + $htmlstr .= " ".($b->oe_kurzbz != '' ? $oe_arr[$b->oe_kurzbz] : '').""; + $htmlstr .= " "; + $htmlstr .= " oe_kurzbz] : '')."'>"; + $htmlstr .= " "; + $htmlstr .= " "; + $htmlstr .= " negativ?'checked="checked"':'').">"; + $htmlstr .= " "; + $htmlstr .= " ".$b->start.""; + $htmlstr .= " "; + $htmlstr .= " "; + $htmlstr .= " ".$b->ende.""; + $htmlstr .= " "; + $htmlstr .= " "; + $htmlstr .= " anmerkung))."' size='30' maxlength='256'>"; + $htmlstr .= " information"; + $htmlstr .= " "; + $htmlstr .= " "; + $htmlstr .= "
\n"; + $htmlstr .= ""; + $htmlstr .= '
+
'; + $htmlstr .= ''; + $htmlstr .= ' + +
'; + $htmlstr .= ""; } -$htmlstr .= "
".$errorstr."
\n"; + ?> @@ -635,58 +804,19 @@ $htmlstr .= "
".$errorstr."
\n"; - - - + + + + + + - + + -

Berechtigung - Rolle - Übersicht

+

Berechtigung - Rolle -

deleteRolleBerechtigung($rolle_kurzbz, $berechtigung_kurzbz)): ?> Fehler beim Löschen: errormsg ?> - Berechtigung gelöscht! + Berechtigung gelöscht! -
- Zurück + Zurück zur Rollenübersicht -

RolleBerechtigung "":

- +

getBerechtigungen(); ?>
+ - - - + + + +
@@ -154,6 +216,8 @@ $delete = filter_input(INPUT_GET, 'delete', FILTER_VALIDATE_BOOLEAN); getRolleBerechtigung($rolle_kurzbz); foreach($berechtigungen->result as $rolle): ?> @@ -161,7 +225,7 @@ $delete = filter_input(INPUT_GET, 'delete', FILTER_VALIDATE_BOOLEAN); From 29809b6bf1ab0403e87e3debfdb80d7482389d6a Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Tue, 8 Nov 2022 16:15:16 +0100 Subject: [PATCH 019/176] moved Beurteilungsformulare Pruefungssenat changes to dbupdate_3.4 --- system/dbupdate_3.3.php | 28 ---------------------------- system/dbupdate_3.4.php | 2 ++ system/dbupdate_3.4/19154.php | 30 ++++++++++++++++++++++++++++++ 3 files changed, 32 insertions(+), 28 deletions(-) create mode 100644 system/dbupdate_3.4/19154.php diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php index 342c9d264..3c016cc39 100644 --- a/system/dbupdate_3.3.php +++ b/system/dbupdate_3.3.php @@ -6807,34 +6807,6 @@ if(!@$db->db_query("SELECT herkunftsland_code FROM bis.tbl_bisio LIMIT 1")) echo '
Spalte herkunftsland_code in bis.tbl_bisio hinzugefügt'; } -// lehre.tbl_betreuerart: add type Senatsvorsitz -if($result = $db->db_query("SELECT 1 FROM lehre.tbl_betreuerart WHERE betreuerart_kurzbz='Senatsvorsitz'")) -{ - if($db->db_num_rows($result)==0) - { - $qry = "INSERT INTO lehre.tbl_betreuerart(betreuerart_kurzbz, beschreibung) VALUES('Senatsvorsitz', 'Senatsvorsitz kommissionelle Prüfung');"; - - if(!$db->db_query($qry)) - echo 'Betreuerart: '.$db->db_last_error().'
'; - else - echo '
Neue Betreuerart Senatsvorsitz in lehre.tbl_betreuerart hinzugefügt'; - } -} - -// lehre.tbl_betreuerart: add type Senatsprüfer -if($result = $db->db_query("SELECT 1 FROM lehre.tbl_betreuerart WHERE betreuerart_kurzbz='Senatspruefer'")) -{ - if($db->db_num_rows($result)==0) - { - $qry = "INSERT INTO lehre.tbl_betreuerart(betreuerart_kurzbz, beschreibung) VALUES('Senatspruefer', 'SenatsprüferIn kommissionelle Prüfung');"; - - if(!$db->db_query($qry)) - echo 'Betreuerart: '.$db->db_last_error().'
'; - else - echo '
Neue Betreuerart Senatspruefer in lehre.tbl_betreuerart hinzugefügt'; - } -} - // *** Pruefung und hinzufuegen der neuen Attribute und Tabellen echo '

Pruefe Tabellen und Attribute!

'; diff --git a/system/dbupdate_3.4.php b/system/dbupdate_3.4.php index c3600d250..5c79d6c76 100644 --- a/system/dbupdate_3.4.php +++ b/system/dbupdate_3.4.php @@ -28,6 +28,8 @@ require_once('dbupdate_3.4/example2.php'); ... */ +require_once('dbupdate_3.4/19154.php'); + // *** Pruefung und hinzufuegen der neuen Attribute und Tabellen echo '

Pruefe Tabellen und Attribute!

'; diff --git a/system/dbupdate_3.4/19154.php b/system/dbupdate_3.4/19154.php new file mode 100644 index 000000000..c13a7b98e --- /dev/null +++ b/system/dbupdate_3.4/19154.php @@ -0,0 +1,30 @@ +db_query("SELECT 1 FROM lehre.tbl_betreuerart WHERE betreuerart_kurzbz='Senatsvorsitz'")) +{ + if($db->db_num_rows($result)==0) + { + $qry = "INSERT INTO lehre.tbl_betreuerart(betreuerart_kurzbz, beschreibung) VALUES('Senatsvorsitz', 'Senatsvorsitz kommissionelle Prüfung');"; + + if(!$db->db_query($qry)) + echo 'Betreuerart: '.$db->db_last_error().'
'; + else + echo '
Neue Betreuerart Senatsvorsitz in lehre.tbl_betreuerart hinzugefügt'; + } +} + +// lehre.tbl_betreuerart: add type Senatsprüfer +if($result = $db->db_query("SELECT 1 FROM lehre.tbl_betreuerart WHERE betreuerart_kurzbz='Senatspruefer'")) +{ + if($db->db_num_rows($result)==0) + { + $qry = "INSERT INTO lehre.tbl_betreuerart(betreuerart_kurzbz, beschreibung) VALUES('Senatspruefer', 'SenatsprüferIn kommissionelle Prüfung');"; + + if(!$db->db_query($qry)) + echo 'Betreuerart: '.$db->db_last_error().'
'; + else + echo '
Neue Betreuerart Senatspruefer in lehre.tbl_betreuerart hinzugefügt'; + } +} From f0b36610b7323f02d4dd181ddec3f2e45ab81744 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Thu, 10 Nov 2022 19:38:16 +0100 Subject: [PATCH 020/176] Projektarbeitsbeurteilung: added phrases, updated filter for uebersicht-page --- system/filtersupdate.php | 13 ++++++------- system/phrasesupdate.php | 20 ++++++++++++++++++++ 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/system/filtersupdate.php b/system/filtersupdate.php index c9c14d2a1..a3bb99a43 100644 --- a/system/filtersupdate.php +++ b/system/filtersupdate.php @@ -1035,7 +1035,6 @@ $filters = array( {"name": "Note"}, {"name": "ErstNachname"}, {"name": "ErstAbgeschickt"}, - {"name": "ZweitNachname"}, {"name": "ZweitAbgeschickt"} ], "filters": [] @@ -1111,12 +1110,12 @@ $filters = array( {"name": "Standardkostenstelle"} ], "filters": [ - { - "name": "Nachname", - "option": "", - "condition": "", - "operation": "" - } + { + "name": "Nachname", + "option": "", + "condition": "", + "operation": "" + } ] } ', diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index 3bb133f09..8e01d29bd 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -10449,6 +10449,26 @@ Any unusual occurrences ) ) ), + array( + 'app' => 'projektarbeitsbeurteilung', + 'category' => 'projektarbeitsbeurteilung', + 'phrase' => 'nebenBegutachter', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Nebenbegutachter*in', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'secondary assessor', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), array( 'app' => 'core', 'category' => 'anrechnung', From 763b0bb756f406df18fa1e6fa3fdd2e5c198e9d3 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Wed, 16 Nov 2022 17:19:13 +0100 Subject: [PATCH 021/176] renamed betreuerart of secondary examiner of bachelor thesis with Vorsitz from Senatspruefer to Senatsmitglied --- .../education/Projektbetreuer_model.php | 4 +-- cis/private/lehre/abgabe_lektor.php | 20 +++++++------ cis/private/lehre/abgabe_lektor_details.php | 2 +- cis/private/lehre/abgabe_student.php | 30 ++++++++++++------- include/projektbetreuer.class.php | 6 ++-- locale/de-AT/abgabetool.php | 2 +- locale/en-US/abgabetool.php | 2 +- system/dbupdate_3.4/19154.php | 10 +++---- system/phrasesupdate.php | 2 +- 9 files changed, 44 insertions(+), 34 deletions(-) diff --git a/application/models/education/Projektbetreuer_model.php b/application/models/education/Projektbetreuer_model.php index db9310eed..93fb656a7 100644 --- a/application/models/education/Projektbetreuer_model.php +++ b/application/models/education/Projektbetreuer_model.php @@ -133,7 +133,7 @@ class Projektbetreuer_model extends DB_Model ) OR /* either Zweitbegutachter of masterarbeit, or Kommissionsprüfer if Kommission */ ( - betr.betreuerart_kurzbz = 'Senatspruefer' + betr.betreuerart_kurzbz = 'Senatsmitglied' AND EXISTS ( SELECT 1 FROM lehre.tbl_projektbetreuer WHERE person_id = ? @@ -176,7 +176,7 @@ class Projektbetreuer_model extends DB_Model LEFT JOIN public.tbl_benutzer USING(person_id) WHERE projektarbeit_id = ? AND tbl_projektbetreuer.person_id = ? - AND betreuerart_kurzbz IN ('Zweitbegutachter', 'Senatspruefer') + AND betreuerart_kurzbz IN ('Zweitbegutachter', 'Senatsmitglied') LIMIT 1"; $betreueruidRes = $this->execQuery($betreuerUidQry, array($projektarbeit_id, $zweitbegutachter_person_id)); diff --git a/cis/private/lehre/abgabe_lektor.php b/cis/private/lehre/abgabe_lektor.php index 6b087d256..3d20c8a7e 100644 --- a/cis/private/lehre/abgabe_lektor.php +++ b/cis/private/lehre/abgabe_lektor.php @@ -61,8 +61,10 @@ $sql_query = "SELECT FROM (SELECT tbl_person.vorname, tbl_person.nachname, tbl_studiengang.typ, tbl_studiengang.kurzbz, tbl_projektarbeit.projekttyp_kurzbz, tbl_projekttyp.bezeichnung, tbl_projektarbeit.titel, tbl_projektarbeit.projektarbeit_id, - tbl_projektbetreuer.betreuerart_kurzbz, tbl_benutzer.uid, tbl_student.matrikelnr, tbl_lehreinheit.studiensemester_kurzbz - FROM lehre.tbl_projektarbeit LEFT JOIN lehre.tbl_projektbetreuer using(projektarbeit_id) + tbl_projektbetreuer.betreuerart_kurzbz, tbl_betreuerart.beschreibung AS betreuerart_beschreibung, tbl_benutzer.uid, tbl_student.matrikelnr, tbl_lehreinheit.studiensemester_kurzbz + FROM lehre.tbl_projektarbeit + LEFT JOIN lehre.tbl_projektbetreuer using(projektarbeit_id) + LEFT JOIN lehre.tbl_betreuerart using(betreuerart_kurzbz) LEFT JOIN public.tbl_benutzer on(uid=student_uid) LEFT JOIN public.tbl_student on(public.tbl_benutzer.uid=public.tbl_student.student_uid) LEFT JOIN public.tbl_person on(tbl_benutzer.person_id=tbl_person.person_id) @@ -75,7 +77,7 @@ $sql_query = "SELECT WHERE public.tbl_benutzer.person_id=lehre.tbl_projektbetreuer.person_id AND public.tbl_benutzer.uid=".$db->db_add_param($getuid).") ".($showall?'':' AND public.tbl_benutzer.aktiv AND lehre.tbl_projektarbeit.note IS NULL ')." - AND betreuerart_kurzbz IN ('Betreuer', 'Begutachter', 'Erstbegutachter', 'Zweitbegutachter', 'Erstbetreuer', 'Senatsvorsitz', 'Senatspruefer') + AND betreuerart_kurzbz IN ('Betreuer', 'Begutachter', 'Erstbegutachter', 'Zweitbegutachter', 'Erstbetreuer', 'Senatsvorsitz', 'Senatsmitglied') ORDER BY tbl_projektarbeit.projektarbeit_id, betreuerart_kurzbz desc) as xy ORDER BY nachname"; @@ -111,7 +113,7 @@ else $htmlstr .= "
\n"; $htmlstr .= " \n"; $htmlstr .= " \n"; - $htmlstr .= " \n"; + $htmlstr .= " \n"; $htmlstr .= " \n"; $i++; } @@ -126,11 +128,11 @@ echo ' '.$p->t('abgabetool/abgabetool').' - - - - - + + + + + - + - + - +"; + +} + if(isset($_POST['schick'])) { if($rechte->isBerechtigt('basis/berechtigung', null, 'suid')) @@ -418,9 +482,10 @@ if (!$b = new berechtigung()) $b->getRollen(); foreach($b->result as $berechtigung) { - $rolle_arr[] = $berechtigung->rolle_kurzbz; + $rolle_arr[$berechtigung->rolle_kurzbz] = $berechtigung->beschreibung; } -sort($rolle_arr); +ksort($rolle_arr, SORT_STRING | SORT_FLAG_CASE); + $b->getBerechtigungen(); foreach($b->result as $berechtigung) { @@ -592,10 +657,10 @@ if (isset($_REQUEST['uid']) || isset($_REQUEST['funktion_kurzbz'])) //Rolle $htmlstr .= " "; @@ -683,8 +748,8 @@ if (isset($_REQUEST['uid']) || isset($_REQUEST['funktion_kurzbz'])) $htmlstr .= " - - + + @@ -742,22 +807,32 @@ if (isset($_REQUEST['uid']) || isset($_REQUEST['funktion_kurzbz'])) //Rolle $htmlstr .= " "; @@ -827,13 +902,13 @@ if (isset($_REQUEST['uid']) || isset($_REQUEST['funktion_kurzbz'])) $htmlstr .= " "; //Gültig ab - $htmlstr .= " "; // Gültig bis - $htmlstr .= " "; @@ -842,7 +917,8 @@ if (isset($_REQUEST['uid']) || isset($_REQUEST['funktion_kurzbz'])) $htmlstr .= " "; - $htmlstr .= " "; $htmlstr .= " "; } $htmlstr .= "
art ?> beschreibung ?> - + entfernen ".strtoupper($row->typ.$row->kurzbz)."".$db->convert_html_chars($row->studiensemester_kurzbz)."".$db->convert_html_chars($row->titel)."".$db->convert_html_chars($row->betreuerart_kurzbz)."".($row->betreuerart_beschreibung == null ? $db->convert_html_chars($row->betreuerart_kurzbz) : $db->convert_html_chars($row->betreuerart_beschreibung))."
RolleBerechtigungRolleBerechtigung Art Organisationseinheit Kostenstelle"; - $htmlstr .= " "; $htmlstr .= " "; - for ($i = 0; $i < sizeof($rolle_arr); $i++) + foreach ($rolle_arr AS $key => $value) { - if ($b->rolle_kurzbz == $rolle_arr[$i]) + if ($b->rolle_kurzbz == $key) { - $sel = " selected"; + $sel = " selected='selected'"; } else $sel = ""; - $htmlstr .= ""; + $htmlstr .= ""; } $htmlstr .= " "; if ($b->rolle_kurzbz != '') { - $htmlstr .= " "; + $htmlstr .= " "; } $htmlstr.=""; + $htmlstr .= " "; $htmlstr .= " ".$b->start.""; $htmlstr .= " "; $htmlstr .= " "; + $htmlstr .= " "; $htmlstr .= " ".$b->ende.""; $htmlstr .= " "; $htmlstr .= " "; $htmlstr .= " anmerkung))."' data-toggle='tooltip' @@ -856,36 +932,54 @@ if (isset($_REQUEST['uid']) || isset($_REQUEST['funktion_kurzbz'])) $htmlstr .= " + data-placement='auto'> "; - $htmlstr .= " "; - $htmlstr .= " "; + $htmlstr .= " "; + $htmlstr .= " "; + $htmlstr .= " "; $htmlstr .= "
"; $htmlstr .= '
- -
- -
- + +
+
+ +
+ +
+ +
-
'; $htmlstr .= ""; - + $htmlstr .= "
















"; } ?> @@ -910,7 +1004,203 @@ if (isset($_REQUEST['uid']) || isset($_REQUEST['funktion_kurzbz'])) ?> - + + + + + + + + + + + + + +

+ + + + + From 783cb289cddabeb8f3d641be95904420614fff27 Mon Sep 17 00:00:00 2001 From: Werner Masik Date: Tue, 4 Apr 2023 18:51:06 +0200 Subject: [PATCH 128/176] added Unit-Tests; changed IDs of organisationseinheit in VertragsGUI --- application/controllers/Test.php | 16 ++++ .../VertragsbestandteilStunden.php | 3 + .../vertragsbestandteil/gui/FormData.php | 6 +- .../vertragsbestandteil/gui/GUIHandler.php | 86 +++++++++++++++---- .../gui/GUIHandlerFactory.php | 6 ++ .../gui/GUIVertragsbestandteilFunktion.php | 15 +++- .../gui/GUIVertragsbestandteilStunden.php | 20 +++-- .../vertragsbestandteil/gui/util.php | 8 ++ phpunit.xml | 13 +++ public/js/components/vbform/dvneuanlage.js | 4 +- .../vertragsbestandteil/gui/FormDataTest.php | 2 +- .../gui/GuiHandlerTest.php | 41 +++++++++ .../vertragsbestandteil/gui/funktion01.json | 4 +- .../gui/kuendigungsfrist01.json | 4 +- .../vertragsbestandteil/gui/readme.txt | 6 ++ .../vertragsbestandteil/gui/stunden01.json | 4 +- system/checksystem.php | 2 +- 17 files changed, 203 insertions(+), 37 deletions(-) create mode 100644 application/controllers/Test.php create mode 100644 application/libraries/vertragsbestandteil/gui/util.php create mode 100644 phpunit.xml create mode 100644 system/UnitTests/vertragsbestandteil/gui/GuiHandlerTest.php create mode 100644 system/UnitTests/vertragsbestandteil/gui/readme.txt diff --git a/application/controllers/Test.php b/application/controllers/Test.php new file mode 100644 index 000000000..2a7aa4e4e --- /dev/null +++ b/application/controllers/Test.php @@ -0,0 +1,16 @@ +getJSONDataInt($this->data['dienstverhaeltnisid'], $decodedData, 'dienstverhaeltnisid'); $this->getJSONData($this->data['unternehmen'], $decodedData, 'unternehmen'); $this->getJSONData($this->data['vertragsart_kurzbz'], $decodedData, 'vertragsart_kurzbz'); - $this->getJSONData($this->data['gueltigkeit'], $decodedData, 'gueltigkeit'); + $gueltigkeit = new GUIGueltigkeit(); + $gueltigkeit->mapJSON($decodedData['gueltigkeit']); + $this->data['gueltigkeit'] = $gueltigkeit; + //$this->getJSONData($this->data['gueltigkeit'], $decodedData, 'gueltigkeit'); } private function generateDvJSON() diff --git a/application/libraries/vertragsbestandteil/gui/GUIHandler.php b/application/libraries/vertragsbestandteil/gui/GUIHandler.php index 7a5695b44..5ccf9d421 100644 --- a/application/libraries/vertragsbestandteil/gui/GUIHandler.php +++ b/application/libraries/vertragsbestandteil/gui/GUIHandler.php @@ -1,9 +1,11 @@ userUID = $userUID; $this->CI = get_instance(); $this->CI->load->model('vertragsbestandteil/Dienstverhaeltnis_model', - 'Dienstverhaeltnis_model'); + 'Dienstverhaeltnis_model'); + $this->CI->load->library('vertragsbestandteil/VertragsbestandteilLib', + null, 'VertragsbestandteilLib'); } @@ -43,13 +47,19 @@ class GUIHandler // DV $dvData = $formDataMapper->getData(); - $this->handleDV($dvData); + $res = $this->handleDV($dvData); - // VBS - $vbsList = $formDataMapper->getVbs(); + if ($res === false) + { + // TODO write error message + } else { - foreach ($vbsList as $vbsID => $vbs) { - $this->handleVBS($dvData['dienstverhaeltnis_id'] ,$vbs); + // VBS + $vbsList = $formDataMapper->getVbs(); + + foreach ($vbsList as $vbsID => $vbs) { + $this->handleVBS($dvData['dienstverhaeltnisid'] ,$vbs); + } } return $formDataMapper->generateJSON(); @@ -68,29 +78,50 @@ class GUIHandler if (isset($dienstverhaeltnisid) && intval($dienstverhaeltnisid > 0)) { // DV exists - $ret = $this->updateDV($dv); + $res = $this->updateDV($dv); + if (isSuccess($res)) + { + return true; + } } else { // DV is new - $ret = $this->insertDV($dv); - // write back new id - $dv['dienstverhaeltnisid'] = $ret['dienstverhaeltnis_id']; + $res = $this->insertDV($dv); + if (isSuccess($res)) + { + // write back new id + $dv['dienstverhaeltnisid'] = $res->retval[0]->dienstverhaeltnis_id; + return true; + } + } + + return false; } - private function handleVBS($vbs) + private function handleVBS($dienstverhaeltnis_id, $vbs) { + /** @var GUIVertragsbestandteilFunktion */ $vbsMapper = GUIHandlerFactory::getGUIHandler($vbs['type']); $vbsMapper->mapJSON($vbs); $vbsData = $vbsMapper->getData(); // merge GUI-Data with DB-Data - $vbsInstance = $vbsMapper->generateVertragsbestandteil($vbsData['id']); + $vbsInstance = $vbsMapper->generateVertragsbestandteil(isset($vbsData['id'])?$vbsData['id']:null); + if ($vbsInstance->getDienstverhaeltnis_id() === null) + { + $vbsInstance->setDienstverhaeltnis_id($dienstverhaeltnis_id); + $vbsInstance->setInsertvon($this->userUID); + $vbsInstance->setInsertamum((new DateTime())->format("Y-m-d h:m:s")); + } else { + $vbsInstance->setUpdatevon($this->userUID); + $vbsInstance->setUpdateamum((new DateTime())->format("Y-m-d h:m:s")); + } // TODO Validate? // store - $this->VertragsbestandteilLib->store($vbsInstance); + $this->CI->VertragsbestandteilLib->storeVertragsbestandteil($vbsInstance); // GBS /* @@ -111,13 +142,21 @@ class GUIHandler // ------------------------------------ // DV does not have a dedicated handler - private function insertDV($dvJSON) { + $dvJSON['mitarbeiter_uid'] = $this->employeeUID; $now = new DateTime(); + $dvJSON['von'] = string2Date($dvJSON['gueltigkeit']->getData()['gueltig_ab']); + $dvJSON['bis'] = string2Date($dvJSON['gueltigkeit']->getData()['gueltig_bis']); + $dvJSON['oe_kurzbz'] = $dvJSON['unternehmen']; $dvJSON['insertvon'] = $this->userUID; $dvJSON['insertamum'] = $now->format(DateTime::ATOM); + unset($dvJSON['dienstverhaeltnisid']); + unset($dvJSON['children']); + unset($dvJSON['gueltigkeit']); + unset($dvJSON['unternehmen']); + $result = $this->CI->Dienstverhaeltnis_model->insert($dvJSON); if (isError($result)) @@ -132,15 +171,24 @@ class GUIHandler private function updateDV($dvJSON) { + $dvJSON['mitarbeiter_uid'] = $this->employeeUID; + $dvJSON['von'] = string2Date($dvJSON['gueltigkeit']->getData()['gueltig_ab']); + $dvJSON['bis'] = string2Date($dvJSON['gueltigkeit']->getData()['gueltig_bis']); + $dvJSON['oe_kurzbz'] = $dvJSON['unternehmen']; $now = new DateTime(); - $dvJSON['updatevon'] = getAuthUID(); + $dvJSON['updatevon'] = $this->userUID; $dvJSON['updateamum'] = $now->format(DateTime::ATOM); + $dvJSON['dienstverhaeltnis_id'] = $dvJSON['dienstverhaeltnisid']; unset($dvJSON['insertamum']); unset($dvJSON['insertvon']); + unset($dvJSON['dienstverhaeltnisid']); + unset($dvJSON['children']); + unset($dvJSON['gueltigkeit']); + unset($dvJSON['unternehmen']); - - $result = $this->CI->Dienstverhaeltnis_model->update($dvJSON['kontakt_id'], $dvJSON); + $result = $this->CI->Dienstverhaeltnis_model->update($dvJSON); + //$result = $this->CI->Dienstverhaeltnis_model->update($dvJSON['kontakt_id'], $dvJSON); if (isError($result)) { diff --git a/application/libraries/vertragsbestandteil/gui/GUIHandlerFactory.php b/application/libraries/vertragsbestandteil/gui/GUIHandlerFactory.php index ff1a7581d..e0140755b 100644 --- a/application/libraries/vertragsbestandteil/gui/GUIHandlerFactory.php +++ b/application/libraries/vertragsbestandteil/gui/GUIHandlerFactory.php @@ -1,5 +1,11 @@ 0) + { + // load VBS + $vbs = $this->vbsLib->fetchVertragsbestandteil($vbsData['id']); + } else { + $vbs = new vertragsbestandteil\VertragsbestandteilFunktion(); + } + // merge + $vbs->setBenutzerfunktion_id($this->data['benutzerfunktionid']); + $vbs->setVon(string2Date($this->data['gueltigkeit']->getData()['gueltig_ab'])); + $vbs->setBis(string2Date($this->data['gueltigkeit']->getData()['gueltig_bis'])); + return $vbs; } public function jsonSerialize() { diff --git a/application/libraries/vertragsbestandteil/gui/GUIVertragsbestandteilStunden.php b/application/libraries/vertragsbestandteil/gui/GUIVertragsbestandteilStunden.php index 60accea05..0e94ca16d 100644 --- a/application/libraries/vertragsbestandteil/gui/GUIVertragsbestandteilStunden.php +++ b/application/libraries/vertragsbestandteil/gui/GUIVertragsbestandteilStunden.php @@ -1,10 +1,18 @@ vbsLib->fetchVertragsbestandteil($vbsData['id']); } else { - $vbs = new vertragsbestandteil\VertragsbestandteilStunden(); - } - // merge + $vbs = new vertragsbestandteil\VertragsbestandteilStunden(); + } + // merge $vbs->setWochenstunden($this->data['stunden']); - $vbs->setVon($this->data['gueltigkeit']->getData()['gueltig_ab']); - $vbs->setBis($this->data['gueltigkeit']->getData()['gueltig_bis']); + $vbs->setVon(string2Date($this->data['gueltigkeit']->getData()['gueltig_ab'])); + $vbs->setBis(string2Date($this->data['gueltigkeit']->getData()['gueltig_bis'])); return $vbs; } diff --git a/application/libraries/vertragsbestandteil/gui/util.php b/application/libraries/vertragsbestandteil/gui/util.php new file mode 100644 index 000000000..6d70e790f --- /dev/null +++ b/application/libraries/vertragsbestandteil/gui/util.php @@ -0,0 +1,8 @@ +format('Y-m-d'); +} \ No newline at end of file diff --git a/phpunit.xml b/phpunit.xml new file mode 100644 index 000000000..946312355 --- /dev/null +++ b/phpunit.xml @@ -0,0 +1,13 @@ + + + + + system/UnitTests/vertragsbestandteil/gui + + + + + + + + diff --git a/public/js/components/vbform/dvneuanlage.js b/public/js/components/vbform/dvneuanlage.js index a309acec0..c4dddf191 100644 --- a/public/js/components/vbform/dvneuanlage.js +++ b/public/js/components/vbform/dvneuanlage.js @@ -6,8 +6,8 @@ export default {
diff --git a/system/UnitTests/vertragsbestandteil/gui/FormDataTest.php b/system/UnitTests/vertragsbestandteil/gui/FormDataTest.php index 0426ba8bc..c25892670 100644 --- a/system/UnitTests/vertragsbestandteil/gui/FormDataTest.php +++ b/system/UnitTests/vertragsbestandteil/gui/FormDataTest.php @@ -22,7 +22,7 @@ class FormDataTest extends TestCase $dataDV = $formDataMapper->getData(); $this->assertNotEmpty($dataDV); $this->assertNotEmpty($dataDV['unternehmen']); - $this->assertEquals('fhtw', $dataDV['unternehmen']); + $this->assertEquals('gst', $dataDV['unternehmen']); $this->assertNull($dataDV['dienstverhaeltnisid']); $this->assertNotEmpty($dataDV['vertragsart_kurzbz']); $this->assertEquals('echterDV', $dataDV['vertragsart_kurzbz']); diff --git a/system/UnitTests/vertragsbestandteil/gui/GuiHandlerTest.php b/system/UnitTests/vertragsbestandteil/gui/GuiHandlerTest.php new file mode 100644 index 000000000..fa808ff1d --- /dev/null +++ b/system/UnitTests/vertragsbestandteil/gui/GuiHandlerTest.php @@ -0,0 +1,41 @@ +load->helper('hlp_common'); + self::$CI->load->helper('hlp_return_object'); + } + + + public function testHandleInsert(): void + { + $jsondata = file_get_contents('./system/UnitTests/vertragsbestandteil/gui/stunden01.json'); + $this->assertNotEmpty($jsondata); + $GH = new GUIHandler($this->employeeUID, $this->userUID); + $res = $GH->handle($jsondata); + } + + + + public function test_true() + { + $this->assertTrue(true); + } + + + +} \ No newline at end of file diff --git a/system/UnitTests/vertragsbestandteil/gui/funktion01.json b/system/UnitTests/vertragsbestandteil/gui/funktion01.json index 15604745b..5130a317e 100644 --- a/system/UnitTests/vertragsbestandteil/gui/funktion01.json +++ b/system/UnitTests/vertragsbestandteil/gui/funktion01.json @@ -148,8 +148,8 @@ ], "data": { "dienstverhaeltnisid": null, - "unternehmen": "fhtw", - "vertragsart_kurzbz": "echterDV", + "unternehmen": "gst", + "vertragsart_kurzbz": "echterdv", "gueltigkeit": { "guioptions": { "sharedstatemode": "set" diff --git a/system/UnitTests/vertragsbestandteil/gui/kuendigungsfrist01.json b/system/UnitTests/vertragsbestandteil/gui/kuendigungsfrist01.json index 5c9d87ff6..4e279a047 100644 --- a/system/UnitTests/vertragsbestandteil/gui/kuendigungsfrist01.json +++ b/system/UnitTests/vertragsbestandteil/gui/kuendigungsfrist01.json @@ -150,8 +150,8 @@ ], "data": { "dienstverhaeltnisid": null, - "unternehmen": "fhtw", - "vertragsart_kurzbz": "echterDV", + "unternehmen": "gst", + "vertragsart_kurzbz": "echterdv", "gueltigkeit": { "guioptions": { "sharedstatemode": "set" diff --git a/system/UnitTests/vertragsbestandteil/gui/readme.txt b/system/UnitTests/vertragsbestandteil/gui/readme.txt new file mode 100644 index 000000000..7aaeab96f --- /dev/null +++ b/system/UnitTests/vertragsbestandteil/gui/readme.txt @@ -0,0 +1,6 @@ + + +testen: + +./vendor/bin/phpunit system/UnitTests/vertragsbestandteil/gui/FormDataTest.php +./vendor/bin/phpunit system/UnitTests/vertragsbestandteil/gui/GuiHandlerTest.php \ No newline at end of file diff --git a/system/UnitTests/vertragsbestandteil/gui/stunden01.json b/system/UnitTests/vertragsbestandteil/gui/stunden01.json index 8c319f7b5..48295f742 100644 --- a/system/UnitTests/vertragsbestandteil/gui/stunden01.json +++ b/system/UnitTests/vertragsbestandteil/gui/stunden01.json @@ -148,8 +148,8 @@ ], "data": { "dienstverhaeltnisid": null, - "unternehmen": "fhtw", - "vertragsart_kurzbz": "echterDV", + "unternehmen": "gst", + "vertragsart_kurzbz": "echterdv", "gueltigkeit": { "guioptions": { "sharedstatemode": "set" diff --git a/system/checksystem.php b/system/checksystem.php index ce343cdca..bdc14c9d3 100644 --- a/system/checksystem.php +++ b/system/checksystem.php @@ -28,7 +28,7 @@ require_once('../version.php'); require_once('../include/benutzerberechtigung.class.php'); // Datenbank Verbindung -$db = new basis_db(); + $db = new basis_db(); echo ' CheckSystem From 43f613b0bc286bf9c85981727fe187d7e3890447 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Wed, 5 Apr 2023 13:32:32 +0200 Subject: [PATCH 129/176] =?UTF-8?q?=C3=84nderung=20FHStG=20auf=20FHG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rdf/diplomasupplement.xml.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/rdf/diplomasupplement.xml.php b/rdf/diplomasupplement.xml.php index 47da798b7..4f19566d2 100644 --- a/rdf/diplomasupplement.xml.php +++ b/rdf/diplomasupplement.xml.php @@ -257,7 +257,7 @@ if (isset($_REQUEST["xmlformat"]) && $_REQUEST["xmlformat"] == "xml") if($row->typ=='d') { echo ' UNESCO ISCED 7'; - echo ' '; + echo ' '; echo ' '; echo ' '; echo ' '; @@ -269,7 +269,7 @@ if (isset($_REQUEST["xmlformat"]) && $_REQUEST["xmlformat"] == "xml") elseif($row->typ=='m') { echo ' UNESCO ISCED 7'; - echo ' '; + echo ' '; echo ' '; echo ' '; echo ' '; @@ -281,7 +281,7 @@ if (isset($_REQUEST["xmlformat"]) && $_REQUEST["xmlformat"] == "xml") elseif($row->typ=='b') { echo ' UNESCO ISCED 6'; - echo ' '; + echo ' '; echo ' '; echo ' '; echo ' '; @@ -299,8 +299,8 @@ if (isset($_REQUEST["xmlformat"]) && $_REQUEST["xmlformat"] == "xml") elseif($row->typ=='l' || $row->typ=='k' || $row->typ=='e') { echo ' UNESCO ISCED 7'; - echo ' Lehrgang zur Weiterbildung nach §9 FHStG idgF.'; - echo ' Certificate Program for Further Education subjected to § 9 FHStG'; + echo ' Lehrgang zur Weiterbildung nach §9 FHG idgF.'; + echo ' Certificate Program for Further Education subjected to § 9 FHG'; echo ' '; echo ' '; echo ' '; From 326b53544a47dcc8e0fc5a61eb40f94023cc47b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Wed, 5 Apr 2023 16:28:19 +0200 Subject: [PATCH 130/176] =?UTF-8?q?=C3=9Cbernahme=20Optimierung=20der=20An?= =?UTF-8?q?wesenheitsabfrage=20von=20BFI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/anwesenheit.class.php | 1373 +++++++++++++++++---------------- 1 file changed, 714 insertions(+), 659 deletions(-) diff --git a/include/anwesenheit.class.php b/include/anwesenheit.class.php index 3365e6d68..2b8389c79 100644 --- a/include/anwesenheit.class.php +++ b/include/anwesenheit.class.php @@ -1,659 +1,714 @@ - - */ -/** - * Klasse zur Verwaltung der Anwesenheiten der Studierenden - */ -require_once(dirname(__FILE__).'/basis_db.class.php'); -require_once(dirname(__FILE__).'/../config/global.config.inc.php'); - -class anwesenheit extends basis_db -{ - public $new=true; // boolean - public $result = array(); - - public $anwesenheit_id; // serial - public $uid; // varchar(32) - public $einheiten; // numeric(3,1) - public $datum; // date - public $anwesend; // boolean - public $lehreinheit_id; // bigint - public $anmerkung; // varchar(256) - - /** - * Konstruktor - * @param $anwesenheit_id ID des Datensatzes der geladen werden soll (Default=null) - */ - public function __construct($anwesenheit_id=null) - { - parent::__construct(); - - if(!is_null($anwesenheit_id)) - $this->load($anwesenheit_id); - } - - /** - * Laedt den Datensatz mit der ID $anwesenheit_id - * @param $anwesenheit_id ID des Datensatzes - * @return true wenn ok, false im Fehlerfall - */ - public function load($anwesenheit_id) - { - //Pruefen ob anwesenheit_id eine gueltige Zahl ist - if(!is_numeric($anwesenheit_id) || $anwesenheit_id == '') - { - $this->errormsg = 'Anwesenheit_id muss eine Zahl sein'; - return false; - } - - //Daten aus der Datenbank lesen - $qry = "SELECT * FROM campus.tbl_anwesenheit WHERE anwesenheit_id=".$this->db_add_param($anwesenheit_id, FHC_INTEGER, false); - - if(!$this->db_query($qry)) - { - $this->errormsg = 'Fehler bei einer Datenbankabfrage'; - return false; - } - - if($row = $this->db_fetch_object()) - { - $this->anwesenheit_id = $row->anwesenheit_id; - $this->uid = $row->uid; - $this->einheiten = $row->einheiten; - $this->datum = $row->datum; - $this->anwesend = $this->db_parse_bool($row->anwesend); - $this->lehreinheit_id = $row->lehreinheit_id; - $this->anmerkung = $row->anmerkung; - $this->new=false; - } - else - { - $this->errormsg = 'Es ist kein Datensatz mit dieser ID vorhanden'; - return false; - } - - return true; - } - - /** - * Prueft die Variablen auf Gueltigkeit - * @return true wenn ok, false im Fehlerfall - */ - protected function validate() - { - //Zahlenfelder pruefen - if(!is_numeric($this->anwesenheit_id) && $this->anwesenheit_id!='') - { - $this->errormsg='anwesenheit_id enthaelt ungueltige Zeichen'; - return false; - } - - //Gesamtlaenge pruefen - if(mb_strlen($this->anmerkung)>255) - { - $this->errormsg = 'Anmerkung darf nicht länger als 255 Zeichen sein'; - return false; - } - - $this->errormsg = ''; - return true; - } - - /** - * Speichert den aktuellen Datensatz in die Datenbank - * Wenn $neu auf true gesetzt ist wird ein neuer Datensatz angelegt - * andernfalls wird der bestehende Datensatz aktualisiert - * @return true wenn ok, false im Fehlerfall - */ - public function save() - { - //Variablen pruefen - if(!$this->validate()) - return false; - - if($this->new) - { - //Neuen Datensatz einfuegen - $qry='BEGIN;INSERT INTO campus.tbl_anwesenheit (uid, einheiten, anwesend, datum, lehreinheit_id, anmerkung) VALUES('. - $this->db_add_param($this->uid).', '. - $this->db_add_param($this->einheiten).', '. - $this->db_add_param($this->anwesend, FHC_BOOLEAN).', '. - $this->db_add_param($this->datum).', '. - $this->db_add_param($this->lehreinheit_id).', '. - $this->db_add_param($this->anmerkung).');'; - } - else - { - //Pruefen ob id eine gueltige Zahl ist - if(!is_numeric($this->anwesenheit_id)) - { - $this->errormsg = 'anwesenheit_id muss eine gueltige Zahl sein'; - return false; - } - $qry='UPDATE campus.tbl_anwesenheit SET'. - ' uid='.$this->db_add_param($this->uid).', '. - ' einheiten='.$this->db_add_param($this->einheiten).', '. - ' anwesend='.$this->db_add_param($this->anwesend,FHC_BOOLEAN).', '. - ' datum='.$this->db_add_param($this->datum).', '. - ' lehreinheit_id='.$this->db_add_param($this->lehreinheit_id, FHC_INTEGER).', '. - ' anmerkung='.$this->db_add_param($this->anmerkung).' '. - 'WHERE anwesenheit_id='.$this->db_add_param($this->anwesenheit_id, FHC_INTEGER, false).';'; - } - - if($this->db_query($qry)) - { - if($this->new) - { - //naechste ID aus der Sequence holen - $qry="SELECT currval('campus.seq_anwesenheit_anwesenheit_id') as id;"; - if($this->db_query($qry)) - { - if($row = $this->db_fetch_object()) - { - $this->anwesenheit_id = $row->id; - $this->db_query('COMMIT'); - } - else - { - $this->db_query('ROLLBACK'); - $this->errormsg = "Fehler beim Auslesen der Sequence"; - return false; - } - } - else - { - $this->db_query('ROLLBACK'); - $this->errormsg = 'Fehler beim Auslesen der Sequence'; - return false; - } - } - - } - else - { - $this->errormsg = 'Fehler beim Speichern des Datensatzes'; - return false; - } - return $this->anwesenheit_id; - } - - /** - * Laedt die Anwesenheiten einer Lehreinheit/Datum - * @param $lehreinheit_id - * @param $datum - * @return boolean true wenn ok, false im Fehlerfall - */ - public function getAnwesenheitLehreinheit($lehreinheit_id, $datum=null) - { - $qry = "SELECT * FROM campus.tbl_anwesenheit - WHERE - lehreinheit_id=".$this->db_add_param($lehreinheit_id, FHC_INTEGER); - - if(!is_null($datum)) - $qry.=" AND datum=".$this->db_add_param($datum); - - if($result = $this->db_query($qry)) - { - while($row = $this->db_fetch_object($result)) - { - $obj = new anwesenheit(); - - $obj->anwesenheit_id = $row->anwesenheit_id; - $obj->uid = $row->uid; - $obj->einheiten = $row->einheiten; - $obj->datum = $row->datum; - $obj->anwesend = $this->db_parse_bool($row->anwesend); - $obj->lehreinheit_id = $row->lehreinheit_id; - $obj->anmerkung = $row->anmerkung; - - $this->result[] = $obj; - } - return true; - } - else - { - $this->errormsg = 'Fehler beim Laden der Daten'; - return false; - } - } - - public function loadAnwesenheitMitarbeiter($mitarbeiter_uid, $lehreinheit_id) - { - $qry = "SELECT - datum, a.einheiten, - (SELECT true FROM campus.tbl_anwesenheit - WHERE lehreinheit_id=".$this->db_add_param($lehreinheit_id)." AND datum=a.datum LIMIT 1) as anwesend, - (SELECT stundensatz FROM lehre.tbl_lehreinheitmitarbeiter WHERE lehreinheit_id=".$this->db_add_param($lehreinheit_id)." - AND mitarbeiter_uid=".$this->db_add_param($mitarbeiter_uid).") as stundensatz - FROM - (SELECT datum, count(distinct stunde) as einheiten FROM lehre.tbl_stundenplan - WHERE - lehreinheit_id=".$this->db_add_param($lehreinheit_id)." - AND mitarbeiter_uid=".$this->db_add_param($mitarbeiter_uid)." - GROUP by datum) as a - "; - - if($result = $this->db_query($qry)) - { - $this->anzahl_termine=0; - $this->anzahl_anwesend=0; - $this->anwesenheit = array(); - - while($row = $this->db_fetch_object($result)) - { - $anwesend = $this->db_parse_bool($row->anwesend); - $key = $lehreinheit_id.'/'.$row->datum; - - $this->anwesenheit[$key]['anwesend'] = ($anwesend?true:false); - $this->anwesenheit[$key]['lehreinheit_id'] = $lehreinheit_id; - $this->anwesenheit[$key]['datum']=$row->datum; - $this->anwesenheit[$key]['einheiten']=$row->einheiten; - $this->anwesenheit[$key]['stundensatz']=$row->stundensatz; - - $this->anzahl_termine++; - if($anwesend) - $this->anzahl_anwesend++; - } - if($this->anzahl_termine>0) - { - $this->prozent_anwesend=$this->anzahl_anwesend/$this->anzahl_termine*100; - } - return true; - } - else - { - $this->errormsg='Fehler beim Laden der Daten'; - return false; - } - } - - /** - * Liefert für Student und Einheit wieviel Einheiten als anwesend/abwesend - * eingetragen sind. - * - * @param string $uid - * @param int $lehreinheit_id - * @param bool $anwesend - * @return int - */ - public function getAnwesenheit($uid, $lehreinheit_id, $anwesend = FALSE) - { - $qry = 'SELECT sum(einheiten) AS einheiten ' - . 'FROM campus.tbl_anwesenheit ' - . 'WHERE uid = ' . $this->db_add_param($uid) - . ' AND lehreinheit_id = ' . $this->db_add_param($lehreinheit_id, FHC_INTEGER) - . ' AND anwesend = ' . $this->db_add_param($anwesend, FHC_BOOLEAN); - - $result = $this->db_query($qry); - $row = $this->db_fetch_object($result); - - return $row->einheiten; - } - - /** - * Liefert die Anwesenheiten/Abwesenheiten eines Studenten bei einer LV - * - * @param string $student_uid - * @param int $lehrveranstaltung_id - * @param string $studiensemester_kurzbz - * @param boolean $anwesend - * @return boolean - */ - public function getAnwesenheitLehrveranstaltung($student_uid, $lehrveranstaltung_id, $studiensemester_kurzbz, $anwesend=false) - { - $qry = 'SELECT - distinct tbl_anwesenheit.* - FROM - campus.tbl_anwesenheit - JOIN campus.vw_student_lehrveranstaltung USING(uid) - WHERE - uid='.$this->db_add_param($student_uid).' - AND vw_student_lehrveranstaltung.lehreinheit_id=tbl_anwesenheit.lehreinheit_id - AND lehrveranstaltung_id='.$this->db_add_param($lehrveranstaltung_id, FHC_INTEGER).' - AND studiensemester_kurzbz='.$this->db_add_param($studiensemester_kurzbz).' - AND anwesend=' . $this->db_add_param($anwesend, FHC_BOOLEAN).' - ORDER BY datum'; - - if($result = $this->db_query($qry)) - { - while($row = $this->db_fetch_object($result)) - { - $obj = new anwesenheit(); - - $obj->anwesenheit_id = $row->anwesenheit_id; - $obj->uid = $row->uid; - $obj->einheiten = $row->einheiten; - $obj->datum = $row->datum; - $obj->anwesend = $this->db_parse_bool($row->anwesend); - $obj->lehreinheit_id = $row->lehreinheit_id; - $obj->anmerkung = $row->anmerkung; - - $this->result[] = $obj; - } - return true; - } - else - { - $this->errormsg = 'Fehler beim Laden der Daten'; - return false; - } - } - - /** - * Liefert die Termine an denen eine Abwesenheit eingetragen ist. - * - * @param string $uid - * @param int $lehreinheit_id - * @return array - */ - public function getAbwesendTermine($uid, $lehreinheit_id) - { - - $qry = 'SELECT datum, einheiten ' - . 'FROM campus.tbl_anwesenheit ' - . 'WHERE uid = ' . $this->db_add_param($uid) - . ' AND lehreinheit_id = ' . $this->db_add_param($lehreinheit_id) - . ' AND anwesend = FALSE ' - . 'ORDER BY datum'; - - $result = $this->db_query($qry); - $ret_obj = array(); - - while($row = $this->db_fetch_object($result)) - { - $ret_obj[] = $row; - } - - return $ret_obj; - } - - public function getAmpel($anwesenheit_relativ) - { - - if($anwesenheit_relativ < FAS_ANWESENHEIT_ROT) - { - return 'red'; - } - elseif($anwesenheit_relativ < FAS_ANWESENHEIT_GELB) - { - return 'yellow'; - } - else - { - return 'green'; - } - } - - /** - * Prueft ob Anwesenheiten erfasst wurden - * @param $lehreinheit_id ID der Lehreinheit - * @param $datum Datum - * @param $uid UID des Studierenden - * @return boolean true wenn vorhanden, sonst false - */ - public function AnwesenheitExists($lehreinheit_id, $datum, $uid=null) - { - $qry = "SELECT - 1 - FROM - campus.tbl_anwesenheit - WHERE - anwesend=true - AND lehreinheit_id=".$this->db_add_param($lehreinheit_id)." - AND datum=".$this->db_add_param($datum); - - if($uid!='') - $qry.=" AND uid=".$this->db_add_param($uid); - - if($result = $this->db_query($qry)) - { - if($this->db_num_rows($result)>0) - return true; - else - return false; - } - else - { - $this->errormsg = 'Fehler beim Laden der Daten'; - return false; - } - } - - /** - * Prueft ob Anwesenheiten erfasst wurden - * @param $lehreinheit_id ID der Lehreinheit - * @param $datum Datum - * @param $uid UID des Studierenden - * @return boolean true wenn vorhanden, sonst false - */ - public function AnwesenheitEntryExists($lehreinheit_id, $datum, $uid=null) - { - $qry = "SELECT - 1 - FROM - campus.tbl_anwesenheit - WHERE - lehreinheit_id=".$this->db_add_param($lehreinheit_id)." - AND datum=".$this->db_add_param($datum)." - AND uid=".$this->db_add_param($uid); - - if($result = $this->db_query($qry)) - { - if($this->db_num_rows($result)>0) - return true; - else - return false; - } - else - { - $this->errormsg = 'Fehler beim Laden der Daten'; - return false; - } - } - - /** - * Laedt die Anwesenheiten in Prozent von Studierenden bei Lehrveranstaltungen - * Wenn die StudentUID uebergeben wird, werden alle Lehrveranstaltungen zu denen der Studierenden zugeteilt ist inkl Prozent der Anwesenheit - * Wenn die LehrveranstaltungID uebergeben wird, werden alle Studierenden geholt die zugeteilt sind inkl Prozent der Anwesenheit - * Es werden pro Student die Anwesenheiten berechnet aufgrund der Lehreinheit zu der sie zugeordnet sind - * @param $studiensemester_kurzbz - * @param $student_uid - * @param $lehrveranstaltung_id - * @return boolean true wenn ok, false im fehlerfall - */ - public function loadAnwesenheitStudiensemester($studiensemester_kurzbz, $student_uid=null, $lehrveranstaltung_id=null) - { - $qry = "SELECT lehrveranstaltung_id, bezeichnung, vorname, wahlname, nachname,uid, sum(anwesend) as anwesend, sum(nichtanwesend) as nichtanwesend, sum(gesamtstunden) as gesamtstunden FROM ( - SELECT - lehrveranstaltung_id, bezeichnung, vorname, wahlname, nachname, uid, - ( - SELECT - sum(einheiten) - FROM - campus.tbl_anwesenheit - WHERE - lehreinheit_id=vw_student_lehrveranstaltung.lehreinheit_id - AND uid=vw_student_lehrveranstaltung.uid - AND anwesend - ) as anwesend, - ( - SELECT - sum(einheiten) - FROM - campus.tbl_anwesenheit - WHERE - lehreinheit_id=vw_student_lehrveranstaltung.lehreinheit_id - AND uid=vw_student_lehrveranstaltung.uid - AND NOT anwesend - ) as nichtanwesend, - ( - SELECT count(*) anzahl FROM - (SELECT datum, stunde FROM campus.vw_stundenplan - WHERE lehreinheit_id=vw_student_lehrveranstaltung.lehreinheit_id - AND (vw_stundenplan.titel not like '%Nebenprüfung%' OR vw_stundenplan.titel is null) GROUP BY datum, stunde) as a - ) as gesamtstunden - FROM - campus.vw_student_lehrveranstaltung - JOIN public.tbl_benutzer USING(uid) - JOIN public.tbl_person USING(person_id) - WHERE - studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz); - - if(!is_null($lehrveranstaltung_id)) - $qry.=" AND lehrveranstaltung_id=".$this->db_add_param($lehrveranstaltung_id); - if(!is_null($student_uid)) - $qry.=" AND uid=".$this->db_add_param($student_uid); - - $qry.=") as b GROUP BY lehrveranstaltung_id, bezeichnung, vorname, wahlname, nachname, uid"; - - if($lehrveranstaltung_id!='') - $qry.=" order by nachname, vorname "; - elseif($student_uid!='') - $qry.=" order by bezeichnung"; - - if($result = $this->db_query($qry)) - { - while($row = $this->db_fetch_object($result)) - { - $obj = new stdClass(); - $obj->bezeichnung = $row->bezeichnung; - $obj->anwesend = $row->anwesend; - $obj->nichtanwesend = $row->nichtanwesend; - $obj->gesamtstunden = $row->gesamtstunden; - - $obj->erfassteanwesenheit = $row->anwesend+$row->nichtanwesend; - if($row->gesamtstunden=='' || $obj->erfassteanwesenheit=='') - $obj->prozent=100; - else - $obj->prozent = number_format(100-(100/$obj->gesamtstunden*$row->nichtanwesend),2); - $obj->vorname = $row->vorname; - $obj->wahlname = $row->wahlname; - $obj->nachname = $row->nachname; - $obj->uid = $row->uid; - $obj->lehrveranstaltung_id = $row->lehrveranstaltung_id; - $this->result[] = $obj; - } - return true; - } - else - { - $this->errormsg='Fehler beim Laden der Daten'; - return false; - } - } - - /** - * Aendert die bestehende Anwesenheit - * @param $lehreinheit_id ID der Lehreinheit - * @param $datum Datum - * @param $uid UID des Studierenden - * @return boolean true ok, sonst false - */ - public function AnwesenheitToggle($lehreinheit_id, $datum, $uid) - { - if($this->AnwesenheitEntryExists($lehreinheit_id, $datum, $uid)) - { - $qry = "UPDATE - campus.tbl_anwesenheit - SET anwesend= NOT anwesend - WHERE - lehreinheit_id=".$this->db_add_param($lehreinheit_id)." - AND datum=".$this->db_add_param($datum)." - AND uid=".$this->db_add_param($uid); - - if($result = $this->db_query($qry)) - { - if($this->db_affected_rows($result)>0) - return true; - else - { - $this->errormsg='Anwesenheitsliste wurde noch nicht erfasst'; - return false; - } - } - else - { - $this->errormsg = 'Fehler beim Laden der Daten'; - return false; - } - } - else - { - // Anwesenheitsliste wurde noch nicht erfasst. Eintrag neu anlegen - - // Einheiten ermitteln - $qry = "SELECT - distinct stunde - FROM - lehre.tbl_stundenplan - WHERE - lehreinheit_id=".$this->db_add_param($lehreinheit_id)." - AND datum=".$this->db_add_param($datum); - - if($result = $this->db_query($qry)) - { - if($anzahl = $this->db_num_rows($result)) - { - $einheiten = $anzahl; - } - } - if($einheiten>0) - { - $this->lehreinheit_id=$lehreinheit_id; - $this->datum = $datum; - $this->uid = $uid; - $this->anwesend=true; - $this->new=true; - $this->einheiten=$einheiten; - if($this->save()) - return true; - else - { - $this->errormsg = 'Fehler beim Speichern der Daten'; - return true; - } - } - else - { - $this->errormsg = 'Anzahl der Einheiten fuer diesen Tag konnte nicht ermittelt werden'; - return false; - } - } - } - - /** - * Loescht eine Anwesenheit - * @param anwesenheit_id integer ID der Anwesenheit. - * @return boolean true wenn ok , false im fehlerfall - */ - public function delete($anwesenheit_id) - { - $qry = "DELETE FROM campus.tbl_anwesenheit WHERE anwesenheit_id=".$this->db_add_param($anwesenheit_id, FHC_INTEGER).";"; - - if($this->db_query($qry)) - { - return true; - } - else - { - $this->errormsg = 'Fehler beim Löschen der Anwesenheit'; - return false; - } - } -} + + */ +/** + * Klasse zur Verwaltung der Anwesenheiten der Studierenden + */ +require_once(dirname(__FILE__).'/basis_db.class.php'); +require_once(dirname(__FILE__).'/../config/global.config.inc.php'); + +class anwesenheit extends basis_db +{ + public $new=true; // boolean + public $result = array(); + + public $anwesenheit_id; // serial + public $uid; // varchar(32) + public $einheiten; // numeric(3,1) + public $datum; // date + public $anwesend; // boolean + public $lehreinheit_id; // bigint + public $anmerkung; // varchar(256) + + /** + * Konstruktor + * @param $anwesenheit_id ID des Datensatzes der geladen werden soll (Default=null) + */ + public function __construct($anwesenheit_id=null) + { + parent::__construct(); + + if(!is_null($anwesenheit_id)) + $this->load($anwesenheit_id); + } + + /** + * Laedt den Datensatz mit der ID $anwesenheit_id + * @param $anwesenheit_id ID des Datensatzes + * @return true wenn ok, false im Fehlerfall + */ + public function load($anwesenheit_id) + { + //Pruefen ob anwesenheit_id eine gueltige Zahl ist + if(!is_numeric($anwesenheit_id) || $anwesenheit_id == '') + { + $this->errormsg = 'Anwesenheit_id muss eine Zahl sein'; + return false; + } + + //Daten aus der Datenbank lesen + $qry = "SELECT * FROM campus.tbl_anwesenheit WHERE anwesenheit_id=".$this->db_add_param($anwesenheit_id, FHC_INTEGER, false); + + if(!$this->db_query($qry)) + { + $this->errormsg = 'Fehler bei einer Datenbankabfrage'; + return false; + } + + if($row = $this->db_fetch_object()) + { + $this->anwesenheit_id = $row->anwesenheit_id; + $this->uid = $row->uid; + $this->einheiten = $row->einheiten; + $this->datum = $row->datum; + $this->anwesend = $this->db_parse_bool($row->anwesend); + $this->lehreinheit_id = $row->lehreinheit_id; + $this->anmerkung = $row->anmerkung; + $this->new=false; + } + else + { + $this->errormsg = 'Es ist kein Datensatz mit dieser ID vorhanden'; + return false; + } + + return true; + } + + /** + * Prueft die Variablen auf Gueltigkeit + * @return true wenn ok, false im Fehlerfall + */ + protected function validate() + { + //Zahlenfelder pruefen + if(!is_numeric($this->anwesenheit_id) && $this->anwesenheit_id!='') + { + $this->errormsg='anwesenheit_id enthaelt ungueltige Zeichen'; + return false; + } + + //Gesamtlaenge pruefen + if(mb_strlen($this->anmerkung)>255) + { + $this->errormsg = 'Anmerkung darf nicht länger als 255 Zeichen sein'; + return false; + } + + $this->errormsg = ''; + return true; + } + + /** + * Speichert den aktuellen Datensatz in die Datenbank + * Wenn $neu auf true gesetzt ist wird ein neuer Datensatz angelegt + * andernfalls wird der bestehende Datensatz aktualisiert + * @return true wenn ok, false im Fehlerfall + */ + public function save() + { + //Variablen pruefen + if(!$this->validate()) + return false; + + if($this->new) + { + //Neuen Datensatz einfuegen + $qry='BEGIN;INSERT INTO campus.tbl_anwesenheit (uid, einheiten, anwesend, datum, lehreinheit_id, anmerkung) VALUES('. + $this->db_add_param($this->uid).', '. + $this->db_add_param($this->einheiten).', '. + $this->db_add_param($this->anwesend, FHC_BOOLEAN).', '. + $this->db_add_param($this->datum).', '. + $this->db_add_param($this->lehreinheit_id).', '. + $this->db_add_param($this->anmerkung).');'; + } + else + { + //Pruefen ob id eine gueltige Zahl ist + if(!is_numeric($this->anwesenheit_id)) + { + $this->errormsg = 'anwesenheit_id muss eine gueltige Zahl sein'; + return false; + } + $qry='UPDATE campus.tbl_anwesenheit SET'. + ' uid='.$this->db_add_param($this->uid).', '. + ' einheiten='.$this->db_add_param($this->einheiten).', '. + ' anwesend='.$this->db_add_param($this->anwesend,FHC_BOOLEAN).', '. + ' datum='.$this->db_add_param($this->datum).', '. + ' lehreinheit_id='.$this->db_add_param($this->lehreinheit_id, FHC_INTEGER).', '. + ' anmerkung='.$this->db_add_param($this->anmerkung).' '. + 'WHERE anwesenheit_id='.$this->db_add_param($this->anwesenheit_id, FHC_INTEGER, false).';'; + } + + if($this->db_query($qry)) + { + if($this->new) + { + //naechste ID aus der Sequence holen + $qry="SELECT currval('campus.seq_anwesenheit_anwesenheit_id') as id;"; + if($this->db_query($qry)) + { + if($row = $this->db_fetch_object()) + { + $this->anwesenheit_id = $row->id; + $this->db_query('COMMIT'); + } + else + { + $this->db_query('ROLLBACK'); + $this->errormsg = "Fehler beim Auslesen der Sequence"; + return false; + } + } + else + { + $this->db_query('ROLLBACK'); + $this->errormsg = 'Fehler beim Auslesen der Sequence'; + return false; + } + } + + } + else + { + $this->errormsg = 'Fehler beim Speichern des Datensatzes'; + return false; + } + return $this->anwesenheit_id; + } + + /** + * Laedt die Anwesenheiten einer Lehreinheit/Datum + * @param $lehreinheit_id + * @param $datum + * @return boolean true wenn ok, false im Fehlerfall + */ + public function getAnwesenheitLehreinheit($lehreinheit_id, $datum=null) + { + $qry = "SELECT * FROM campus.tbl_anwesenheit + WHERE + lehreinheit_id=".$this->db_add_param($lehreinheit_id, FHC_INTEGER); + + if(!is_null($datum)) + $qry.=" AND datum=".$this->db_add_param($datum); + + if($result = $this->db_query($qry)) + { + while($row = $this->db_fetch_object($result)) + { + $obj = new anwesenheit(); + + $obj->anwesenheit_id = $row->anwesenheit_id; + $obj->uid = $row->uid; + $obj->einheiten = $row->einheiten; + $obj->datum = $row->datum; + $obj->anwesend = $this->db_parse_bool($row->anwesend); + $obj->lehreinheit_id = $row->lehreinheit_id; + $obj->anmerkung = $row->anmerkung; + + $this->result[] = $obj; + } + return true; + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + } + + public function loadAnwesenheitMitarbeiter($mitarbeiter_uid, $lehreinheit_id) + { + $qry = "SELECT + datum, a.einheiten, + (SELECT true FROM campus.tbl_anwesenheit + WHERE lehreinheit_id=".$this->db_add_param($lehreinheit_id)." AND datum=a.datum LIMIT 1) as anwesend, + (SELECT stundensatz FROM lehre.tbl_lehreinheitmitarbeiter WHERE lehreinheit_id=".$this->db_add_param($lehreinheit_id)." + AND mitarbeiter_uid=".$this->db_add_param($mitarbeiter_uid).") as stundensatz + FROM + (SELECT datum, count(distinct stunde) as einheiten FROM lehre.tbl_stundenplan + WHERE + lehreinheit_id=".$this->db_add_param($lehreinheit_id)." + AND mitarbeiter_uid=".$this->db_add_param($mitarbeiter_uid)." + GROUP by datum) as a + "; + + if($result = $this->db_query($qry)) + { + $this->anzahl_termine=0; + $this->anzahl_anwesend=0; + $this->anwesenheit = array(); + + while($row = $this->db_fetch_object($result)) + { + $anwesend = $this->db_parse_bool($row->anwesend); + $key = $lehreinheit_id.'/'.$row->datum; + + $this->anwesenheit[$key]['anwesend'] = ($anwesend?true:false); + $this->anwesenheit[$key]['lehreinheit_id'] = $lehreinheit_id; + $this->anwesenheit[$key]['datum']=$row->datum; + $this->anwesenheit[$key]['einheiten']=$row->einheiten; + $this->anwesenheit[$key]['stundensatz']=$row->stundensatz; + + $this->anzahl_termine++; + if($anwesend) + $this->anzahl_anwesend++; + } + if($this->anzahl_termine>0) + { + $this->prozent_anwesend=$this->anzahl_anwesend/$this->anzahl_termine*100; + } + return true; + } + else + { + $this->errormsg='Fehler beim Laden der Daten'; + return false; + } + } + + /** + * Liefert für Student und Einheit wieviel Einheiten als anwesend/abwesend + * eingetragen sind. + * + * @param string $uid + * @param int $lehreinheit_id + * @param bool $anwesend + * @return int + */ + public function getAnwesenheit($uid, $lehreinheit_id, $anwesend = FALSE) + { + $qry = 'SELECT sum(einheiten) AS einheiten ' + . 'FROM campus.tbl_anwesenheit ' + . 'WHERE uid = ' . $this->db_add_param($uid) + . ' AND lehreinheit_id = ' . $this->db_add_param($lehreinheit_id, FHC_INTEGER) + . ' AND anwesend = ' . $this->db_add_param($anwesend, FHC_BOOLEAN); + + $result = $this->db_query($qry); + $row = $this->db_fetch_object($result); + + return $row->einheiten; + } + + /** + * Liefert die Anwesenheiten/Abwesenheiten eines Studenten bei einer LV + * + * @param string $student_uid + * @param int $lehrveranstaltung_id + * @param string $studiensemester_kurzbz + * @param boolean $anwesend + * @return boolean + */ + public function getAnwesenheitLehrveranstaltung($student_uid, $lehrveranstaltung_id, $studiensemester_kurzbz, $anwesend=false) + { + $qry = 'SELECT + distinct tbl_anwesenheit.* + FROM + campus.tbl_anwesenheit + JOIN campus.vw_student_lehrveranstaltung USING(uid) + WHERE + uid='.$this->db_add_param($student_uid).' + AND vw_student_lehrveranstaltung.lehreinheit_id=tbl_anwesenheit.lehreinheit_id + AND lehrveranstaltung_id='.$this->db_add_param($lehrveranstaltung_id, FHC_INTEGER).' + AND studiensemester_kurzbz='.$this->db_add_param($studiensemester_kurzbz).' + AND anwesend=' . $this->db_add_param($anwesend, FHC_BOOLEAN).' + ORDER BY datum'; + + if($result = $this->db_query($qry)) + { + while($row = $this->db_fetch_object($result)) + { + $obj = new anwesenheit(); + + $obj->anwesenheit_id = $row->anwesenheit_id; + $obj->uid = $row->uid; + $obj->einheiten = $row->einheiten; + $obj->datum = $row->datum; + $obj->anwesend = $this->db_parse_bool($row->anwesend); + $obj->lehreinheit_id = $row->lehreinheit_id; + $obj->anmerkung = $row->anmerkung; + + $this->result[] = $obj; + } + return true; + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + } + + /** + * Liefert die Termine an denen eine Abwesenheit eingetragen ist. + * + * @param string $uid + * @param int $lehreinheit_id + * @return array + */ + public function getAbwesendTermine($uid, $lehreinheit_id) + { + + $qry = 'SELECT datum, einheiten ' + . 'FROM campus.tbl_anwesenheit ' + . 'WHERE uid = ' . $this->db_add_param($uid) + . ' AND lehreinheit_id = ' . $this->db_add_param($lehreinheit_id) + . ' AND anwesend = FALSE ' + . 'ORDER BY datum'; + + $result = $this->db_query($qry); + $ret_obj = array(); + + while($row = $this->db_fetch_object($result)) + { + $ret_obj[] = $row; + } + + return $ret_obj; + } + + public function getAmpel($anwesenheit_relativ) + { + + if($anwesenheit_relativ < FAS_ANWESENHEIT_ROT) + { + return 'red'; + } + elseif($anwesenheit_relativ < FAS_ANWESENHEIT_GELB) + { + return 'yellow'; + } + else + { + return 'green'; + } + } + + /** + * Prueft ob Anwesenheiten erfasst wurden + * @param $lehreinheit_id ID der Lehreinheit + * @param $datum Datum + * @param $uid UID des Studierenden + * @return boolean true wenn vorhanden, sonst false + */ + public function AnwesenheitExists($lehreinheit_id, $datum, $uid=null) + { + $qry = "SELECT + 1 + FROM + campus.tbl_anwesenheit + WHERE + anwesend=true + AND lehreinheit_id=".$this->db_add_param($lehreinheit_id)." + AND datum=".$this->db_add_param($datum); + + if($uid!='') + $qry.=" AND uid=".$this->db_add_param($uid); + + if($result = $this->db_query($qry)) + { + if($this->db_num_rows($result)>0) + return true; + else + return false; + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + } + + /** + * Prueft ob Anwesenheiten erfasst wurden + * @param $lehreinheit_id ID der Lehreinheit + * @param $datum Datum + * @param $uid UID des Studierenden + * @return boolean true wenn vorhanden, sonst false + */ + public function AnwesenheitEntryExists($lehreinheit_id, $datum, $uid=null) + { + $qry = "SELECT + 1 + FROM + campus.tbl_anwesenheit + WHERE + lehreinheit_id=".$this->db_add_param($lehreinheit_id)." + AND datum=".$this->db_add_param($datum)." + AND uid=".$this->db_add_param($uid); + + if($result = $this->db_query($qry)) + { + if($this->db_num_rows($result)>0) + return true; + else + return false; + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + } + + /** + * Laedt die Anwesenheiten in Prozent von Studierenden bei Lehrveranstaltungen + * Wenn die StudentUID uebergeben wird, werden alle Lehrveranstaltungen zu denen der Studierenden zugeteilt ist inkl Prozent der Anwesenheit + * Wenn die LehrveranstaltungID uebergeben wird, werden alle Studierenden geholt die zugeteilt sind inkl Prozent der Anwesenheit + * Es werden pro Student die Anwesenheiten berechnet aufgrund der Lehreinheit zu der sie zugeordnet sind + * @param $studiensemester_kurzbz + * @param $student_uid + * @param $lehrveranstaltung_id + * @return boolean true wenn ok, false im fehlerfall + */ + public function loadAnwesenheitStudiensemester($studiensemester_kurzbz, $student_uid=null, $lehrveranstaltung_id=null) + { + $qry = "SELECT + lehrveranstaltung_id, vorname, nachname, wahlname, student_uid as uid, bezeichnung, + gesamt as gesamtstunden, anwesend, nichtanwesend, trunc(100-(nichtanwesend/gesamt)*100,2) as prozent + FROM + ( + SELECT + vorname, nachname, wahlname, lehrveranstaltung_id, bezeichnung, gruppe, student_uid, + count(stundenplan_id) as gesamt, + case when anwesend.summe is null then 0 else anwesend.summe end as anwesend, + case when nichtanwesend.summe is null then 0 else nichtanwesend.summe end as nichtanwesend + FROM + ( + SELECT + sum(stundenplan_id) as stundenplan_id, datum, stunde, lehrveranstaltung_id, + bezeichnung, studiensemester_kurzbz, studiengang_kz, + TRIM( + CASE WHEN stp.gruppe_kurzbz is not null then stp.gruppe_kurzbz + else stp.semester||(case when verband is null then '' else stp.verband end)||(case when stp.gruppe is null then '' else stp.gruppe end) end) as gruppe + FROM + lehre.tbl_lehrveranstaltung lv + JOIN lehre.tbl_lehreinheit le using (lehrveranstaltung_id) + JOIN lehre.tbl_stundenplan stp using (lehreinheit_id,studiengang_kz) + WHERE + studiensemester_kurzbz = ".$this->db_add_param($studiensemester_kurzbz)." + AND (titel not like '%Nebenprüfung%' OR titel is null) + + group by datum, stunde, lehrveranstaltung_id, bezeichnung, studiensemester_kurzbz, studiengang_kz, stp.gruppe_kurzbz, stp.semester, stp.verband, stp.gruppe + )x + JOIN ( + SELECT semester::text as gruppe, public.tbl_studentlehrverband.studiensemester_kurzbz, student_uid, studiengang_kz + FROM + public.tbl_studentlehrverband + WHERE studiensemester_kurzbz = ".$this->db_add_param($studiensemester_kurzbz)." + + UNION + + SELECT semester||verband as gruppe, public.tbl_studentlehrverband.studiensemester_kurzbz, student_uid, studiengang_kz + FROM + public.tbl_studentlehrverband + WHERE + studiensemester_kurzbz = ".$this->db_add_param($studiensemester_kurzbz)." + + UNION + + SELECT semester||verband||gruppe as gruppe, public.tbl_studentlehrverband.studiensemester_kurzbz, student_uid, studiengang_kz + FROM + public.tbl_studentlehrverband + WHERE + studiensemester_kurzbz = ".$this->db_add_param($studiensemester_kurzbz)." + + UNION + + SELECT gruppe_kurzbz as gruppe, public.tbl_benutzergruppe.studiensemester_kurzbz, uid as student_uid, studiengang_kz + FROM + public.tbl_benutzergruppe + JOIN + public.tbl_gruppe using (gruppe_kurzbz) + WHERE studiensemester_kurzbz = ".$this->db_add_param($studiensemester_kurzbz)." + + )a using (gruppe, studiensemester_kurzbz, studiengang_kz) + JOIN public.tbl_benutzer b on b.uid = student_uid + JOIN public.tbl_person p using(person_id) + LEFT JOIN( + SELECT + lehrveranstaltung_id, studiensemester_kurzbz, uid as student_uid, sum(einheiten) as summe + FROM + campus.tbl_anwesenheit a + JOIN lehre.tbl_lehreinheit le using (lehreinheit_id) + JOIN lehre.tbl_lehrveranstaltung lv using (lehrveranstaltung_id) + WHERE + anwesend = true AND studiensemester_kurzbz = ".$this->db_add_param($studiensemester_kurzbz)." + GROUP BY + lehrveranstaltung_id, bezeichnung, uid, studiensemester_kurzbz + )anwesend using(lehrveranstaltung_id, student_uid, studiensemester_kurzbz) + LEFT JOIN( + SELECT lehrveranstaltung_id, studiensemester_kurzbz, uid as student_uid, sum(einheiten) as summe + FROM + campus.tbl_anwesenheit a + JOIN lehre.tbl_lehreinheit le using (lehreinheit_id) + JOIN lehre.tbl_lehrveranstaltung lv using (lehrveranstaltung_id) + WHERE + anwesend = false AND studiensemester_kurzbz = ".$this->db_add_param($studiensemester_kurzbz)." + GROUP BY + lehrveranstaltung_id, bezeichnung, uid, studiensemester_kurzbz + )nichtanwesend using(lehrveranstaltung_id, student_uid, studiensemester_kurzbz) + WHERE + lehrveranstaltung_id > 0 + "; + + if(!is_null($student_uid)) + $qry.=" AND student_uid=".$this->db_add_param($student_uid); + if(!is_null($lehrveranstaltung_id)) + $qry.=" AND lehrveranstaltung_id=".$this->db_add_param($lehrveranstaltung_id); + + $qry.="group by + vorname, nachname, wahlname, lehrveranstaltung_id, bezeichnung, gruppe, student_uid, anwesend.summe, nichtanwesend.summe + )m"; + + if($lehrveranstaltung_id != '') + $qry.=" order by nachname, vorname "; + elseif($student_uid != '') + $qry.=" order by bezeichnung"; + + if($result = $this->db_query($qry)) + { + while($row = $this->db_fetch_object($result)) + { + $obj = new stdClass(); + $obj->bezeichnung = $row->bezeichnung; + $obj->anwesend = $row->anwesend; + $obj->nichtanwesend = $row->nichtanwesend; + $obj->gesamtstunden = $row->gesamtstunden; + + $obj->erfassteanwesenheit = $row->anwesend+$row->nichtanwesend; + if($row->gesamtstunden=='' || $obj->erfassteanwesenheit=='') + $obj->prozent=100; + else + $obj->prozent = number_format(100-(100/$obj->gesamtstunden*$row->nichtanwesend),2); + $obj->vorname = $row->vorname; + $obj->wahlname = $row->wahlname; + $obj->nachname = $row->nachname; + $obj->uid = $row->uid; + $obj->lehrveranstaltung_id = $row->lehrveranstaltung_id; + $this->result[] = $obj; + } + return true; + } + else + { + $this->errormsg='Fehler beim Laden der Daten'; + return false; + } + } + + /** + * Aendert die bestehende Anwesenheit + * @param $lehreinheit_id ID der Lehreinheit + * @param $datum Datum + * @param $uid UID des Studierenden + * @return boolean true ok, sonst false + */ + public function AnwesenheitToggle($lehreinheit_id, $datum, $uid) + { + if($this->AnwesenheitEntryExists($lehreinheit_id, $datum, $uid)) + { + $qry = "UPDATE + campus.tbl_anwesenheit + SET anwesend= NOT anwesend + WHERE + lehreinheit_id=".$this->db_add_param($lehreinheit_id)." + AND datum=".$this->db_add_param($datum)." + AND uid=".$this->db_add_param($uid); + + if($result = $this->db_query($qry)) + { + if($this->db_affected_rows($result)>0) + return true; + else + { + $this->errormsg='Anwesenheitsliste wurde noch nicht erfasst'; + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + } + else + { + // Anwesenheitsliste wurde noch nicht erfasst. Eintrag neu anlegen + + // Einheiten ermitteln + $qry = "SELECT + distinct stunde + FROM + lehre.tbl_stundenplan + WHERE + lehreinheit_id=".$this->db_add_param($lehreinheit_id)." + AND datum=".$this->db_add_param($datum); + + if($result = $this->db_query($qry)) + { + if($anzahl = $this->db_num_rows($result)) + { + $einheiten = $anzahl; + } + } + if($einheiten>0) + { + $this->lehreinheit_id=$lehreinheit_id; + $this->datum = $datum; + $this->uid = $uid; + $this->anwesend=true; + $this->new=true; + $this->einheiten=$einheiten; + if($this->save()) + return true; + else + { + $this->errormsg = 'Fehler beim Speichern der Daten'; + return true; + } + } + else + { + $this->errormsg = 'Anzahl der Einheiten fuer diesen Tag konnte nicht ermittelt werden'; + return false; + } + } + } + + /** + * Loescht eine Anwesenheit + * @param anwesenheit_id integer ID der Anwesenheit. + * @return boolean true wenn ok , false im fehlerfall + */ + public function delete($anwesenheit_id) + { + $qry = "DELETE FROM campus.tbl_anwesenheit WHERE anwesenheit_id=".$this->db_add_param($anwesenheit_id, FHC_INTEGER).";"; + + if($this->db_query($qry)) + { + return true; + } + else + { + $this->errormsg = 'Fehler beim Löschen der Anwesenheit'; + return false; + } + } +} From fca341ccf4029186ee400e5a03c3935b772452a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Thu, 6 Apr 2023 07:34:26 +0200 Subject: [PATCH 131/176] =?UTF-8?q?Migration=20von=20Vertr=C3=A4gen=20spei?= =?UTF-8?q?chert=20nun=20die=20Eint=C3=A4ge=20auch=20in=20der=20DB=20Tippf?= =?UTF-8?q?ehler=20in=20Models=20behoben=20Berechtigungen=20f=C3=BCr=20DV?= =?UTF-8?q?=20und=20VBS=20Sequence=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controllers/system/MigrateContract.php | 170 +++++++++++++++++- .../VertragsbestandteilFreitext_model.php | 2 +- ...tragsbestandteilZeitaufzeichnung_model.php | 2 +- system/dbupdate_3.4/28260_vertraege.php | 3 + 4 files changed, 168 insertions(+), 9 deletions(-) diff --git a/application/controllers/system/MigrateContract.php b/application/controllers/system/MigrateContract.php index cefc080d6..8a1b6fff6 100644 --- a/application/controllers/system/MigrateContract.php +++ b/application/controllers/system/MigrateContract.php @@ -13,6 +13,7 @@ class MigrateContract extends CLI_Controller { private $matching_ba1_vertragsart; + private $OE_DEFAULT = 'gst'; /** * Constructor @@ -27,15 +28,15 @@ class MigrateContract extends CLI_Controller $this->matching_ba1_vertragsart = array( '101'=>'DV zum Bund', '102'=>'DV anderen Gebietskörperschaft', - '103'=>'EchterDV', + '103'=>'echterdv', '104'=>'Lehr- oder Ausbildungsverhältnis', - '105'=>'ext. LehrendeR (freier DV)', + '105'=>'freierdv', '106'=>'Andere Bildungseinrichtung', - '107'=>'Werkvertrag (Sonstiges)', - '108'=>'Stud. Hilfskraft (Echter DV)', - '109'=>'Überlassungsvertrag', - '110'=>'Echter Freier DV', - '111'=>'EchterDV', //All-In + '107'=>'werkvertrag', + '108'=>'studentischehilfskr', + '109'=>'ueberlassungsvertrag', + '110'=>'echterfreier', + '111'=>'echterdv', //All-In ); } @@ -55,6 +56,160 @@ class MigrateContract extends CLI_Controller */ //$this->outputJson($contracts); var_dump($contracts); + $this->_saveJSON($contracts); + } + + private function _saveJSON($contracts) + { + $this->load->model('vertragsbestandteil/Dienstverhaeltnis_model','DienstverhaeltnisModel'); + $this->load->model('vertragsbestandteil/Vertragsbestandteil_model','VertragsbestandteilModel'); + $this->load->model('vertragsbestandteil/VertragsbestandteilStunden_model','VertragsbestandteilStundenModel'); + $this->load->model('vertragsbestandteil/VertragsbestandteilZeitaufzeichnung_model','VertragsbestandteilZeitaufzeichnungModel'); + $this->load->model('vertragsbestandteil/VertragsbestandteilFreitext_model','VertragsbestandteilFreitextModel'); + $this->load->model('vertragsbestandteil/VertragsbestandteilFunktion_model','VertragsbestandteilFunktionModel'); + + $failed = false; + $this->db->trans_begin(); + + foreach($contracts['dv'] as $row_dv) + { + // Dienstvertrag erstellen + $resultDV = $this->DienstverhaeltnisModel->insert( + array( + 'mitarbeiter_uid' => $row_dv['mitarbeiter_uid'], + 'vertragsart_kurzbz' => $row_dv['vertragsart_kurzbz'], + 'oe_kurzbz' => $row_dv['oe_kurzbz'], + 'von' => $row_dv['von'], + 'bis' => $row_dv['bis'], + 'insertamum' => date('Y-m-d H:i:s'), + 'insertvon' => 'MigrateContract' + ) + ); + + if (isSuccess($resultDV) && hasData($resultDV)) + { + $dv_id = getData($resultDV); + + // Vertragsbetandteile erstellen + foreach($row_dv['vbs'] as $row_vbs) + { + $resultVBS = $this->VertragsbestandteilModel->insert( + array( + 'dienstverhaeltnis_id' => $dv_id, + 'vertragsbestandteiltyp_kurzbz' => $row_vbs['vertragsbestandteiltyp_kurzbz'], + 'von' => $row_vbs['von'], + 'bis' => $row_vbs['bis'], + 'insertamum' => date('Y-m-d H:i:s'), + 'insertvon' => 'MigrateContract' + ) + ); + + if (isSuccess($resultVBS) && hasData($resultVBS)) + { + $vbs_id = getData($resultVBS); + echo 'VBS:'.$vbs_id; + + switch($row_vbs['vertragsbestandteiltyp_kurzbz']) + { + case 'stunden': + $resultVBS = $this->_insertVBSStunden($vbs_id, $row_vbs); + break; + case 'zeitaufzeichnung': + $resultVBS = $this->_insertVBSZeitaufzeichnung($vbs_id, $row_vbs); + break; + case 'funktion': + $resultVBS = $this->_insertVBSFunktion($vbs_id, $row_vbs); + break; + case 'freitext': + $resultVBS = $this->_insertVBSFreitext($vbs_id, $row_vbs); + break; + case 'karenz': + $resultVBS = $this->_insertVBSKarenz($vbs_id, $row_vbs); + break; + } + + if (isError($resultVBS)) + { + echo "FAILED:".getError($resultVBS); + $failed = true; + } + } + else + { + $failed = true; + } + } + } + else + { + $failed = true; + } + } + + if(!$failed) + { + $this->db->trans_commit(); + } + else + { + echo "ROLLBACK"; + $this->db->trans_rollback(); + } + } + + private function _insertVBSKarenz($vbs_id, $row_vbs) + { + return $this->VertragsbestandteilKarenzModel->insert( + array( + 'vertragsbestandteil_id' => $vbs_id, + 'karenztyp_kurzbz' => $row_vbs['karenztyp_kurzbz'] + ) + ); + } + + private function _insertVBSFreitext($vbs_id, $row_vbs) + { + return $this->VertragsbestandteilFreitextModel->insert( + array( + 'vertragsbestandteil_id' => $vbs_id, + 'freitexttyp_kurzbz' => $row_vbs['freitexttyp_kurzbz'], + 'titel' => $row_vbs['titel'], + 'anmerkung' => $row_vbs['anmerkung'] + ) + ); + } + + private function _insertVBSFunktion($vbs_id, $row_vbs) + { + return $this->VertragsbestandteilFunktionModel->insert( + array( + 'vertragsbestandteil_id' => $vbs_id, + 'benutzerfunktion_id' => $row_vbs['benutzerfunktion_id'] + ) + ); + } + + private function _insertVBSZeitaufzeichnung($vbs_id, $row_vbs) + { + return $this->VertragsbestandteilZeitaufzeichnungModel->insert( + array( + 'vertragsbestandteil_id' => $vbs_id, + 'zeitaufzeichnung' => $row_vbs['zeitaufzeichnung'], + 'azgrelevant' => $row_vbs['azgrelevant'], + 'homeoffice' => $row_vbs['homeoffice'] + ) + ); + } + + private function _insertVBSStunden($vbs_id, $row_vbs) + { + return $this->VertragsbestandteilStundenModel->insert( + array( + 'vertragsbestandteil_id' => $vbs_id, + 'wochenstunden' => $row_vbs['wochenstunden'], + 'teilzeittyp_kurzbz' => $row_vbs['teilzeittyp_kurzbz'] + ) + ); } /** @@ -384,6 +539,7 @@ class MigrateContract extends CLI_Controller $contracts['dv'][$newDvIndex]['mitarbeiter_uid'] = $row_verwendung->mitarbeiter_uid; $contracts['dv'][$newDvIndex]['von'] = $row_verwendung->beginn; $contracts['dv'][$newDvIndex]['bis'] = $row_verwendung->ende; + $contracts['dv'][$newDvIndex]['oe_kurzbz'] = $this->OE_DEFAULT; $contracts['dv'][$newDvIndex]['vertragsart_kurzbz'] = $this->matching_ba1_vertragsart[$row_verwendung->ba1code]; return $newDvIndex; diff --git a/application/models/vertragsbestandteil/VertragsbestandteilFreitext_model.php b/application/models/vertragsbestandteil/VertragsbestandteilFreitext_model.php index d47ce53df..7da091f11 100644 --- a/application/models/vertragsbestandteil/VertragsbestandteilFreitext_model.php +++ b/application/models/vertragsbestandteil/VertragsbestandteilFreitext_model.php @@ -1,6 +1,6 @@ db_query("SELECT * FROM information_schema.tables WHERE table COMMENT ON TABLE hr.tbl_sachaufwand IS E'Zusatzvergütungen für Mitarbeiter'; COMMENT ON TABLE hr.tbl_sachaufwandtyp IS E'Key-Table for Sachaufwand'; COMMENT ON TABLE hr.tbl_teilzeittyp IS E'Key-Table Altersteilzeit, Elternteilzeit'; + + GRANT USAGE ON hr.tbl_dienstverhaeltnis_dienstverhaeltnis_id_seq TO vilesci; + GRANT USAGE ON hr.tbl_vertragsbestandteil_vertragsbestandteil_id_seq TO vilesci; "; if (! $db->db_query($qry)) From 025b58dee3b3057769d45c2fb8fdea1cdb1a64a7 Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Tue, 11 Apr 2023 11:05:15 +0200 Subject: [PATCH 132/176] throw Exception when storeVertragsbestandteil is rolled back to handle rollback in possible outer transaction --- .../libraries/vertragsbestandteil/VertragsbestandteilLib.php | 1 + 1 file changed, 1 insertion(+) diff --git a/application/libraries/vertragsbestandteil/VertragsbestandteilLib.php b/application/libraries/vertragsbestandteil/VertragsbestandteilLib.php index 8e5daa520..f527388c7 100644 --- a/application/libraries/vertragsbestandteil/VertragsbestandteilLib.php +++ b/application/libraries/vertragsbestandteil/VertragsbestandteilLib.php @@ -74,6 +74,7 @@ class VertragsbestandteilLib { log_message('debug', "Transaction rolled back. " . $ex->getMessage()); $this->CI->db->trans_rollback(); + throw new Exception('Storing Vertragsbestandteil failed.'); } } From ed2aa6620e079852e129e7bae161d53e836b8df1 Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Tue, 11 Apr 2023 12:53:56 +0200 Subject: [PATCH 133/176] vuedatepicker added --- composer.json | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 16da033db..229b83a98 100644 --- a/composer.json +++ b/composer.json @@ -348,6 +348,28 @@ } } }, + { + "type": "package", + "package": { + "name": "vuejs/vuedatepicker_js", + "version": "4.2.3", + "dist": { + "url": "https://unpkg.com/@vuepic/vue-datepicker@4.2.3/dist/vue-datepicker.iife.js", + "type": "file" + } + } + }, + { + "type": "package", + "package": { + "name": "vuejs/vuedatepicker_css", + "version": "4.2.3", + "dist": { + "url": "https://unpkg.com/@vuepic/vue-datepicker@4.2.3/dist/main.css", + "type": "file" + } + } + }, { "type": "composer", "url": "https://asset-packagist.org" @@ -420,7 +442,9 @@ "twbs/bootstrap5": "5.1.*", "vuejs/vuejs3": "3.2.33", - "vuejs/vuerouter4": "4.1.3" + "vuejs/vuerouter4": "4.1.3", + "vuejs/vuedatepicker_js": "4.2.3", + "vuejs/vuedatepicker_css": "4.2.3" }, "config": { "bin-dir": "vendor/bin" From b50ca57907740b5611b5ab68e571799b89ca8299 Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Tue, 11 Apr 2023 15:10:24 +0200 Subject: [PATCH 134/176] extend VertragsbestandteilFunktion to be able to create a Benutzerfunktion entry before being persited --- .../Vertragsbestandteil.php | 6 +- .../VertragsbestandteilFunktion.php | 71 +++++++++++-------- .../VertragsbestandteilLib.php | 2 + 3 files changed, 49 insertions(+), 30 deletions(-) diff --git a/application/libraries/vertragsbestandteil/Vertragsbestandteil.php b/application/libraries/vertragsbestandteil/Vertragsbestandteil.php index 9ada04329..1d1101e44 100644 --- a/application/libraries/vertragsbestandteil/Vertragsbestandteil.php +++ b/application/libraries/vertragsbestandteil/Vertragsbestandteil.php @@ -171,5 +171,9 @@ EOTXT; } - public abstract function toStdClass(); + public function beforePersist() { + // can be overridden in childs + } + + public abstract function toStdClass(); } diff --git a/application/libraries/vertragsbestandteil/VertragsbestandteilFunktion.php b/application/libraries/vertragsbestandteil/VertragsbestandteilFunktion.php index d59e1b158..388e4873a 100644 --- a/application/libraries/vertragsbestandteil/VertragsbestandteilFunktion.php +++ b/application/libraries/vertragsbestandteil/VertragsbestandteilFunktion.php @@ -12,22 +12,44 @@ use vertragsbestandteil\VertragsbestandteilFactory; class VertragsbestandteilFunktion extends Vertragsbestandteil { protected $benutzerfunktion_id; - protected $anmerkung; - protected $kuendigungsrelevant; + protected $benutzerfunktiondata; + protected $CI; + public function __construct() { + $this->benutzerfunktiondata = null; + $this->setVertragsbestandteiltyp_kurzbz( VertragsbestandteilFactory::VERTRAGSBESTANDTEIL_FUNKTION); + + $this->CI = get_instance(); + $this->CI->load->model('person/Benutzerfunktion_model', + 'BenutzerfunktionModel'); + } + + public function beforePersist() + { + if( $this->benutzerfunktiondata === null) + { + return; + } + + $ret = $this->BenutzerfunktionModel->insert($this->benutzerfunktiondata); + + if(isError($ret) ) + { + throw new Exception('failed to create Benutzerfunktion'); + } + + $this->setBenutzerfunktion_id(getData($ret)); } public function toStdClass() { $tmp = array( 'vertragsbestandteil_id' => $this->getVertragsbestandteil_id(), - 'benutzerfunktion_id' => $this->getBenutzerfunktion_id(), - 'anmerkung' => $this->getAnmerkung(), - 'kuendigungsrelevant' => $this->getKuendigungsrelevant() + 'benutzerfunktion_id' => $this->getBenutzerfunktion_id() ); $tmp = array_filter($tmp, function($v) { @@ -41,8 +63,6 @@ class VertragsbestandteilFunktion extends Vertragsbestandteil { $txt = <<getBenutzerfunktion_id()} - anmerkung: {$this->getAnmerkung()} - kuendigungsrelevant: {$this->getKuendigungsrelevant()} EOTXT; return parent::__toString() . $txt; @@ -52,39 +72,32 @@ EOTXT; { parent::hydrateByStdClass($data); isset($data->benutzerfunktion_id) && $this->setBenutzerfunktion_id($data->benutzerfunktion_id); - isset($data->anmerkung) && $this->setAnmerkung($data->anmerkung); - isset($data->kuendigungsrelevant) && $this->setKuendigungsrelevant($data->kuendigungsrelevant); + isset($data->funktion_kurzbz) && isset($data->oe_kurzbz) + && isset($mitarbeiter_uid) && $this->createBenutzerfunktionData($data); + } - + public function getBenutzerfunktion_id() { return $this->benutzerfunktion_id; } - - public function getAnmerkung() - { - return $this->anmerkung; - } - - public function getKuendigungsrelevant() - { - return $this->kuendigungsrelevant; - } public function setBenutzerfunktion_id($benutzerfunktion_id) { $this->benutzerfunktion_id = $benutzerfunktion_id; return $this; } - public function setAnmerkung($anmerkung) + + protected function createBenutzerfunktionData($data) { - $this->anmerkung = $anmerkung; - return $this; - } - - public function setKuendigungsrelevant($kuendigungsrelevant) - { - $this->kuendigungsrelevant = $kuendigungsrelevant; - return $this; + $this->benutzerfunktiondata = (object) array( + 'funktion_kurzbz' => $data->funktion_kurzbz, + 'oe_kurzbz' => $data->oe_kurzbz, + 'uid' => $data->mitarbeiter_uid, + 'datum_von' => $this->getVon(), + 'datum_bis' => $this->getBis(), + 'insertamum' => strftime('%Y-%m-%d %H:%M:%s'), + 'insertvon' => getAuthUID() + ); } } diff --git a/application/libraries/vertragsbestandteil/VertragsbestandteilLib.php b/application/libraries/vertragsbestandteil/VertragsbestandteilLib.php index f527388c7..50198f82f 100644 --- a/application/libraries/vertragsbestandteil/VertragsbestandteilLib.php +++ b/application/libraries/vertragsbestandteil/VertragsbestandteilLib.php @@ -81,6 +81,7 @@ class VertragsbestandteilLib protected function insertVertragsbestandteil(Vertragsbestandteil $vertragsbestandteil, Vertragsbestandteil $vertragsbestandteil_secondary = null /* i.e. Gehaltsbestandteil connected to Stunden*/) { + $vertragsbestandteil->beforePersist(); $ret = $this->VertragsbestandteilModel->insert($vertragsbestandteil->baseToStdClass()); if( hasData($ret) ) { @@ -134,6 +135,7 @@ class VertragsbestandteilLib { $vertragsbestandteil->setUpdateamum(strftime('%Y-%m-%d %H:%M')) ->setUpdatevon('ma0080'); + $vertragsbestandteil->beforePersist(); $ret = $this->VertragsbestandteilModel->update($vertragsbestandteil->getVertragsbestandteil_id(), $vertragsbestandteil->baseToStdClass()); From 12c712c1b4b5bb556c1eb0992478b87f6a9bb4ba Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Tue, 11 Apr 2023 15:22:40 +0200 Subject: [PATCH 135/176] changed property names to match gui input --- .../vertragsbestandteil/VertragsbestandteilFunktion.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/application/libraries/vertragsbestandteil/VertragsbestandteilFunktion.php b/application/libraries/vertragsbestandteil/VertragsbestandteilFunktion.php index 388e4873a..1ac6d96b0 100644 --- a/application/libraries/vertragsbestandteil/VertragsbestandteilFunktion.php +++ b/application/libraries/vertragsbestandteil/VertragsbestandteilFunktion.php @@ -72,7 +72,7 @@ EOTXT; { parent::hydrateByStdClass($data); isset($data->benutzerfunktion_id) && $this->setBenutzerfunktion_id($data->benutzerfunktion_id); - isset($data->funktion_kurzbz) && isset($data->oe_kurzbz) + isset($data->funktion) && isset($data->orget) && isset($mitarbeiter_uid) && $this->createBenutzerfunktionData($data); } @@ -91,8 +91,8 @@ EOTXT; protected function createBenutzerfunktionData($data) { $this->benutzerfunktiondata = (object) array( - 'funktion_kurzbz' => $data->funktion_kurzbz, - 'oe_kurzbz' => $data->oe_kurzbz, + 'funktion_kurzbz' => $data->funktion, + 'oe_kurzbz' => $data->orget, 'uid' => $data->mitarbeiter_uid, 'datum_von' => $this->getVon(), 'datum_bis' => $this->getBis(), From 234820490ccabd8a3b9b4f2ed6598b173004b8b0 Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Tue, 11 Apr 2023 15:44:34 +0200 Subject: [PATCH 136/176] variable names --- .../vertragsbestandteil/VertragsbestandteilFunktion.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/application/libraries/vertragsbestandteil/VertragsbestandteilFunktion.php b/application/libraries/vertragsbestandteil/VertragsbestandteilFunktion.php index 1ac6d96b0..5b24fa89e 100644 --- a/application/libraries/vertragsbestandteil/VertragsbestandteilFunktion.php +++ b/application/libraries/vertragsbestandteil/VertragsbestandteilFunktion.php @@ -71,9 +71,9 @@ EOTXT; public function hydrateByStdClass($data) { parent::hydrateByStdClass($data); - isset($data->benutzerfunktion_id) && $this->setBenutzerfunktion_id($data->benutzerfunktion_id); + isset($data->benutzerfunktionid) && $this->setBenutzerfunktion_id($data->benutzerfunktionid); isset($data->funktion) && isset($data->orget) - && isset($mitarbeiter_uid) && $this->createBenutzerfunktionData($data); + && isset($data->mitarbeiter_uid) && $this->createBenutzerfunktionData($data); } From 3ff024fc69c922763e76aa0138e8943ba13f673e Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Tue, 11 Apr 2023 15:51:23 +0200 Subject: [PATCH 137/176] fix date format --- .../vertragsbestandteil/VertragsbestandteilFunktion.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/application/libraries/vertragsbestandteil/VertragsbestandteilFunktion.php b/application/libraries/vertragsbestandteil/VertragsbestandteilFunktion.php index 5b24fa89e..a0ab364e0 100644 --- a/application/libraries/vertragsbestandteil/VertragsbestandteilFunktion.php +++ b/application/libraries/vertragsbestandteil/VertragsbestandteilFunktion.php @@ -35,7 +35,7 @@ class VertragsbestandteilFunktion extends Vertragsbestandteil return; } - $ret = $this->BenutzerfunktionModel->insert($this->benutzerfunktiondata); + $ret = $this->CI->BenutzerfunktionModel->insert($this->benutzerfunktiondata); if(isError($ret) ) { @@ -96,7 +96,7 @@ EOTXT; 'uid' => $data->mitarbeiter_uid, 'datum_von' => $this->getVon(), 'datum_bis' => $this->getBis(), - 'insertamum' => strftime('%Y-%m-%d %H:%M:%s'), + 'insertamum' => strftime('%Y-%m-%d %H:%M:%S'), 'insertvon' => getAuthUID() ); } From 92e23ea585ae6d3df08fe3cd2903910b2dbd24d4 Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Tue, 11 Apr 2023 16:47:44 +0200 Subject: [PATCH 138/176] add requires for vbs zeitaufzeichnung and kuendigungsfrist --- .../libraries/vertragsbestandteil/VertragsbestandteilLib.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/application/libraries/vertragsbestandteil/VertragsbestandteilLib.php b/application/libraries/vertragsbestandteil/VertragsbestandteilLib.php index 50198f82f..c0c3716e8 100644 --- a/application/libraries/vertragsbestandteil/VertragsbestandteilLib.php +++ b/application/libraries/vertragsbestandteil/VertragsbestandteilLib.php @@ -2,6 +2,8 @@ require_once __DIR__ . '/Vertragsbestandteil.php'; require_once __DIR__ . '/VertragsbestandteilStunden.php'; require_once __DIR__ . '/VertragsbestandteilFunktion.php'; +require_once __DIR__ . '/VertragsbestandteilZeitaufzeichnung.php'; +require_once __DIR__ . '/VertragsbestandteilKuendigungsfrist.php'; require_once __DIR__ . '/VertragsbestandteilFactory.php'; use vertragsbestandteil\Vertragsbestandteil; From c929fa87024640f1225356c3f91ed091ea97c2d2 Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Tue, 11 Apr 2023 16:59:21 +0200 Subject: [PATCH 139/176] add freitext require, adapt freitext to current db --- .../VertragsbestandteilFreitext.php | 28 +++++++++---------- .../VertragsbestandteilLib.php | 1 + 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/application/libraries/vertragsbestandteil/VertragsbestandteilFreitext.php b/application/libraries/vertragsbestandteil/VertragsbestandteilFreitext.php index b1beefa43..8109fb64c 100644 --- a/application/libraries/vertragsbestandteil/VertragsbestandteilFreitext.php +++ b/application/libraries/vertragsbestandteil/VertragsbestandteilFreitext.php @@ -6,9 +6,9 @@ use vertragsbestandteil\VertragsbestandteilFactory; class VertragsbestandteilFreitext extends Vertragsbestandteil { - protected $anmerkung; - protected $kuendigungrelevant; protected $freitexttyp_kurzbz; + protected $titel; + protected $anmerkung; public function __construct() { @@ -19,18 +19,18 @@ class VertragsbestandteilFreitext extends Vertragsbestandteil public function hydrateByStdClass($data) { parent::hydrateByStdClass($data); - isset($data->anmerkung) && $this->setAnmerkung($data->anmerkung); - isset($data->kuendigungrelevant) && $this->setKuendigungrelevant($data->kuendigungrelevant); isset($data->freitexttyp_kurzbz) && $this->setFreitexttypKurzbz($data->freitexttyp_kurzbz); + isset($data->titel) && $this->setTitel($data->titel); + isset($data->freitext) && $this->setAnmerkung($data->freitext); } public function toStdClass(): \stdClass { $tmp = array( 'vertragsbestandteil_id' => $this->getVertragsbestandteil_id(), - 'anmerkung' => $this->getAnmerkung(), - 'kuendigungrelevant' => $this->getKuendigungrelevant(), - 'freitexttyp_kurzbz' => $this->getFreitexttypKurzbz() + 'freitexttyp_kurzbz' => $this->getFreitexttypKurzbz(), + 'titel' => $this->getTitel(), + 'anmerkung' => $this->getAnmerkung() ); $tmp = array_filter($tmp, function($v) { @@ -44,7 +44,7 @@ class VertragsbestandteilFreitext extends Vertragsbestandteil { $txt = <<getAnmerkung()} - kuendigungrelevant: {$this->getKuendigungrelevant()} + titel: {$this->getTitel()} freitexttyp_kurzbz: {$this->getFreitexttypKurzbz()} EOTXT; @@ -70,19 +70,19 @@ EOTXT; } /** - * Get the value of kuendigungrelevant + * Get the value of titel */ - public function getKuendigungrelevant() + public function getTitel() { - return $this->kuendigungrelevant; + return $this->titel; } /** - * Set the value of kuendigungrelevant + * Set the value of titel */ - public function setKuendigungrelevant($kuendigungrelevant): self + public function setTitel($titel): self { - $this->kuendigungrelevant = $kuendigungrelevant; + $this->titel = $titel; return $this; } diff --git a/application/libraries/vertragsbestandteil/VertragsbestandteilLib.php b/application/libraries/vertragsbestandteil/VertragsbestandteilLib.php index c0c3716e8..38b152523 100644 --- a/application/libraries/vertragsbestandteil/VertragsbestandteilLib.php +++ b/application/libraries/vertragsbestandteil/VertragsbestandteilLib.php @@ -4,6 +4,7 @@ require_once __DIR__ . '/VertragsbestandteilStunden.php'; require_once __DIR__ . '/VertragsbestandteilFunktion.php'; require_once __DIR__ . '/VertragsbestandteilZeitaufzeichnung.php'; require_once __DIR__ . '/VertragsbestandteilKuendigungsfrist.php'; +require_once __DIR__ . '/VertragsbestandteilFreitext.php'; require_once __DIR__ . '/VertragsbestandteilFactory.php'; use vertragsbestandteil\Vertragsbestandteil; From e7f23643d442581425aa660b2df0c6f87c5cec5d Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Tue, 11 Apr 2023 17:05:20 +0200 Subject: [PATCH 140/176] fix data property name --- .../vertragsbestandteil/VertragsbestandteilFreitext.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/libraries/vertragsbestandteil/VertragsbestandteilFreitext.php b/application/libraries/vertragsbestandteil/VertragsbestandteilFreitext.php index 8109fb64c..c878dc24b 100644 --- a/application/libraries/vertragsbestandteil/VertragsbestandteilFreitext.php +++ b/application/libraries/vertragsbestandteil/VertragsbestandteilFreitext.php @@ -19,7 +19,7 @@ class VertragsbestandteilFreitext extends Vertragsbestandteil public function hydrateByStdClass($data) { parent::hydrateByStdClass($data); - isset($data->freitexttyp_kurzbz) && $this->setFreitexttypKurzbz($data->freitexttyp_kurzbz); + isset($data->freitexttyp) && $this->setFreitexttypKurzbz($data->freitexttyp); isset($data->titel) && $this->setTitel($data->titel); isset($data->freitext) && $this->setAnmerkung($data->freitext); } From fe6a8d56259687a24d69c2cf7964aa9d48d46587 Mon Sep 17 00:00:00 2001 From: Werner Masik Date: Mon, 10 Apr 2023 19:08:22 +0200 Subject: [PATCH 141/176] fixed wrong JSON-Mapping for GUIOptions --- .../vertragsbestandteil/gui/GUIGueltigkeit.php | 2 +- system/UnitTests/AppdatenTest.php | 10 ++++++---- system/UnitTests/FunctionsTest.php | 9 +++++---- .../UnitTests/vertragsbestandteil/gui/FormDataTest.php | 10 +++++----- 4 files changed, 17 insertions(+), 14 deletions(-) diff --git a/application/libraries/vertragsbestandteil/gui/GUIGueltigkeit.php b/application/libraries/vertragsbestandteil/gui/GUIGueltigkeit.php index c1acec672..0caee1114 100644 --- a/application/libraries/vertragsbestandteil/gui/GUIGueltigkeit.php +++ b/application/libraries/vertragsbestandteil/gui/GUIGueltigkeit.php @@ -38,7 +38,7 @@ class GUIGueltigkeit implements JsonSerializable { { throw new \Exception('missing guioptions'); } - $this->getJSONData($this->guioptions, $decodedData, 'guioptions'); + $this->guioptions = $decodedData; } private function mapData(&$decoded) diff --git a/system/UnitTests/AppdatenTest.php b/system/UnitTests/AppdatenTest.php index 30848cc12..2de140018 100644 --- a/system/UnitTests/AppdatenTest.php +++ b/system/UnitTests/AppdatenTest.php @@ -22,11 +22,13 @@ * Authors: Werner Masik * */ -require_once('../../config/system.config.inc.php'); -require_once('../../include/appdaten.class.php'); -require_once('../../include/benutzer.class.php'); +require_once( __DIR__.'/../../config/system.config.inc.php'); +require_once( __DIR__.'/../../include/appdaten.class.php'); +require_once( __DIR__.'/../../include/benutzer.class.php'); -class AppdatenTest extends PHPUnit_Framework_TestCase +use PHPUnit\Framework\TestCase; + +class AppdatenTest extends TestCase { protected $benutzer; protected $uid = 'unittest'; diff --git a/system/UnitTests/FunctionsTest.php b/system/UnitTests/FunctionsTest.php index 9531a22a7..3bb199422 100644 --- a/system/UnitTests/FunctionsTest.php +++ b/system/UnitTests/FunctionsTest.php @@ -18,12 +18,13 @@ * Authors: Werner Masik , */ + + +require_once(__DIR__.'/../../config/vilesci.config.inc.php'); +require_once(__DIR__.'/../../include/functions.inc.php'); + use PHPUnit\Framework\TestCase; - -require_once('../../config/vilesci.config.inc.php'); -require_once('../../include/functions.inc.php'); - class FunctionsTest extends TestCase { diff --git a/system/UnitTests/vertragsbestandteil/gui/FormDataTest.php b/system/UnitTests/vertragsbestandteil/gui/FormDataTest.php index c25892670..7bfaee017 100644 --- a/system/UnitTests/vertragsbestandteil/gui/FormDataTest.php +++ b/system/UnitTests/vertragsbestandteil/gui/FormDataTest.php @@ -19,17 +19,17 @@ class FormDataTest extends TestCase $decoded = json_decode($jsondata, true); $formDataMapper->mapJSON($decoded); // Dienstverhaeltnis - $dataDV = $formDataMapper->getData(); + $dataDV = $formDataMapper->getData(); $this->assertNotEmpty($dataDV); $this->assertNotEmpty($dataDV['unternehmen']); $this->assertEquals('gst', $dataDV['unternehmen']); $this->assertNull($dataDV['dienstverhaeltnisid']); $this->assertNotEmpty($dataDV['vertragsart_kurzbz']); - $this->assertEquals('echterDV', $dataDV['vertragsart_kurzbz']); + $this->assertEquals('echterdv', $dataDV['vertragsart_kurzbz']); $this->assertNotEmpty($dataDV['gueltigkeit']); - $this->assertNotEmpty($dataDV['gueltigkeit']['guioptions']); - $this->assertNotEmpty($dataDV['gueltigkeit']['data']); - $this->assertNotEmpty($dataDV['gueltigkeit']['data']['gueltig_ab']); + $this->assertNotEmpty($dataDV['gueltigkeit']->getGuioptions()); + $this->assertNotEmpty($dataDV['gueltigkeit']->getData()); + $this->assertNotEmpty($dataDV['gueltigkeit']->getData()['gueltig_ab']); // Vertragsbestandteile $vbs = $formDataMapper->getVbs(); $this->assertNotEmpty($vbs); From 2b03fcc930ab2e7ecda366657afa287811cc47f2 Mon Sep 17 00:00:00 2001 From: Werner Masik Date: Wed, 12 Apr 2023 09:41:07 +0200 Subject: [PATCH 142/176] removed GUI handling and renamed Gehaltsbestandteil to make it independend from Vertragsbestandteil --- .../vertragsbestandteil/Dienstverhaeltnis.php | 2 +- ...dteilGehalt.php => Gehaltsbestandteil.php} | 90 ++++---- .../gui/AbstractBestandteil.php | 86 ------- .../gui/AbstractGUIVertragsbestandteil.php | 143 ------------ .../vertragsbestandteil/gui/FormData.php | 109 --------- .../gui/GUIGehaltsbestandteil.php | 89 -------- .../gui/GUIGueltigkeit.php | 76 ------- .../vertragsbestandteil/gui/GUIHandler.php | 215 ------------------ .../gui/GUIHandlerFactory.php | 36 --- .../gui/GUIVertragsbestandteilFunktion.php | 135 ----------- ...GUIVertragsbestandteilKuendigungsfrist.php | 118 ---------- .../gui/GUIVertragsbestandteilStunden.php | 139 ----------- ...GUIVertragsbestandteilZeitaufzeichnung.php | 103 --------- ...IVertragsbestandteilZusatzvereinbarung.php | 139 ----------- .../vertragsbestandteil/gui/JSONData.php | 53 ----- .../vertragsbestandteil/gui/util.php | 8 - 16 files changed, 44 insertions(+), 1497 deletions(-) rename application/libraries/vertragsbestandteil/{VertragsbestandteilGehalt.php => Gehaltsbestandteil.php} (74%) delete mode 100644 application/libraries/vertragsbestandteil/gui/AbstractBestandteil.php delete mode 100644 application/libraries/vertragsbestandteil/gui/AbstractGUIVertragsbestandteil.php delete mode 100644 application/libraries/vertragsbestandteil/gui/FormData.php delete mode 100644 application/libraries/vertragsbestandteil/gui/GUIGehaltsbestandteil.php delete mode 100644 application/libraries/vertragsbestandteil/gui/GUIGueltigkeit.php delete mode 100644 application/libraries/vertragsbestandteil/gui/GUIHandler.php delete mode 100644 application/libraries/vertragsbestandteil/gui/GUIHandlerFactory.php delete mode 100644 application/libraries/vertragsbestandteil/gui/GUIVertragsbestandteilFunktion.php delete mode 100644 application/libraries/vertragsbestandteil/gui/GUIVertragsbestandteilKuendigungsfrist.php delete mode 100644 application/libraries/vertragsbestandteil/gui/GUIVertragsbestandteilStunden.php delete mode 100644 application/libraries/vertragsbestandteil/gui/GUIVertragsbestandteilZeitaufzeichnung.php delete mode 100644 application/libraries/vertragsbestandteil/gui/GUIVertragsbestandteilZusatzvereinbarung.php delete mode 100644 application/libraries/vertragsbestandteil/gui/JSONData.php delete mode 100644 application/libraries/vertragsbestandteil/gui/util.php diff --git a/application/libraries/vertragsbestandteil/Dienstverhaeltnis.php b/application/libraries/vertragsbestandteil/Dienstverhaeltnis.php index c7820f65a..aa89fe781 100644 --- a/application/libraries/vertragsbestandteil/Dienstverhaeltnis.php +++ b/application/libraries/vertragsbestandteil/Dienstverhaeltnis.php @@ -15,7 +15,7 @@ class Dienstverhaeltnis { /** @var integer */ protected $dienstverhaeltnis_id; /** @var integer */ - protected $unternehmen; // TODO link zu orgeinheit + protected $unternehmen; /** @var string */ protected $vertragsart_kurzbz; protected $gueltig_ab; diff --git a/application/libraries/vertragsbestandteil/VertragsbestandteilGehalt.php b/application/libraries/vertragsbestandteil/Gehaltsbestandteil.php similarity index 74% rename from application/libraries/vertragsbestandteil/VertragsbestandteilGehalt.php rename to application/libraries/vertragsbestandteil/Gehaltsbestandteil.php index cdb06b26b..e911c4228 100644 --- a/application/libraries/vertragsbestandteil/VertragsbestandteilGehalt.php +++ b/application/libraries/vertragsbestandteil/Gehaltsbestandteil.php @@ -1,17 +1,16 @@ setVertragsbestandteiltyp_kurzbz( - VertragsbestandteilFactory::VERTRAGSBESTANDTEIL_GEHALT); - } + { + } - public function hydrateByStdClass($data) - { - parent::hydrateByStdClass($data); - isset($data->gehalt_von) && $this->setGehaltVon($data->gehalt_von); - isset($data->gehalt_bis) && $this->setGehaltBis($data->gehalt_bis); - isset($data->anmerkung) && $this->setAnmerkung($data->anmerkung); - isset($data->gehalt_dienstverhaeltnis_id) && $this->setGehaltDienstverhaeltnisID($data->gehalt_dienstverhaeltnis_id); - isset($data->gehaltstyp_kurzbz) && $this->setGehaltstypKurzbz($data->gehaltstyp_kurzbz); - isset($data->valorisierungssperre) && $this->setValorisierungssperre($data->valorisierungssperre); - } - - public function getGehaltVon() - { - return $this->gehalt_von; - } - - public function getGehaltBis() - { - return $this->gehalt_bis; - } - - public function setGehaltVon($von) - { - $this->gehalt_von = $von; - return $this; - } - - public function setGehaltBis($bis) - { - $this->gehalt_bis = $bis; - return $this; - } /** * Get the value of gehaltsbestandteil_id @@ -203,16 +168,11 @@ class VertragsbestandteilGehalt extends Vertragsbestandteil return $this; } - - - public function toStdClass(): \stdClass { $tmp = array( - 'von' => $this->getVon(), - 'bis' => $this->getBis(), - 'gehalt_von' => $this->getGehaltVon(), - 'gehalt_bis' => $this->getGehaltBis(), + 'gueltig_ab' => $this->getGueltigAb(), + 'gueltig_bis' => $this->getGueltigBis(), 'gehalt_dienstverhaeltnis_id' => $this->getGehaltDienstverhaeltnisID(), 'grundbetrag' => $this->getGrundbetrag(), 'betrag_valorisiert' => $this->getBetragValorisiert(), @@ -242,4 +202,40 @@ EOTXT; } + + /** + * Get the value of gueltig_ab + */ + public function getGueltigAb() + { + return $this->gueltig_ab; + } + + /** + * Set the value of gueltig_ab + */ + public function setGueltigAb($gueltig_ab): self + { + $this->gueltig_ab = $gueltig_ab; + + return $this; + } + + /** + * Get the value of gueltig_bis + */ + public function getGueltigBis() + { + return $this->gueltig_bis; + } + + /** + * Set the value of gueltig_bis + */ + public function setGueltigBis($gueltig_bis): self + { + $this->gueltig_bis = $gueltig_bis; + + return $this; + } } diff --git a/application/libraries/vertragsbestandteil/gui/AbstractBestandteil.php b/application/libraries/vertragsbestandteil/gui/AbstractBestandteil.php deleted file mode 100644 index 861dcf11a..000000000 --- a/application/libraries/vertragsbestandteil/gui/AbstractBestandteil.php +++ /dev/null @@ -1,86 +0,0 @@ -getTypeString())) - { - throw new \Exception('wrong type string: "'.$decoded['type'].'" should be "'.$this->getTypeString().'"'); - } - } - - /** - * Get the value of type - */ - public function getType() - { - return $this->type; - } - - /** - * Set the value of type - */ - public function setType($type): self - { - $this->type = $type; - - return $this; - } - - /** - * Get the value of guioptions - */ - public function getGuioptions() - { - return $this->guioptions; - } - - /** - * Set the value of guioptions - */ - public function setGuioptions($guioptions): self - { - $this->guioptions = $guioptions; - - return $this; - } - - /** - * Get the value of data - */ - public function getData() - { - return $this->data; - } - - /** - * Set the value of data - */ - public function setData($data): self - { - $this->data = $data; - - return $this; - } -} \ No newline at end of file diff --git a/application/libraries/vertragsbestandteil/gui/AbstractGUIVertragsbestandteil.php b/application/libraries/vertragsbestandteil/gui/AbstractGUIVertragsbestandteil.php deleted file mode 100644 index 63906e42e..000000000 --- a/application/libraries/vertragsbestandteil/gui/AbstractGUIVertragsbestandteil.php +++ /dev/null @@ -1,143 +0,0 @@ -vbsLib = new VertragsbestandteilLib(); - } - - abstract public function generateVertragsbestandteil($id); - - /** - * Get the value of uuid - */ - public function getUuid() - { - return $this->uuid; - } - - /** - * Set the value of uuid - */ - public function setUuid($uuid): self - { - $this->uuid = $uuid; - - return $this; - } - - - - /** - * Get the value of hasGBS - */ - public function getHasGBS() - { - return $this->hasGBS; - } - - /** - * Set the value of hasGBS - */ - public function setHasGBS($hasGBS): self - { - $this->hasGBS = $hasGBS; - - return $this; - } - - - - /** - * Get the value of gbs - */ - public function getGbs() - { - return $this->gbs; - } - - /** - * Set the value of gbs - */ - public function setGbs($gbs): self - { - $this->gbs = $gbs; - - return $this; - } -} \ No newline at end of file diff --git a/application/libraries/vertragsbestandteil/gui/FormData.php b/application/libraries/vertragsbestandteil/gui/FormData.php deleted file mode 100644 index fe3f761f6..000000000 --- a/application/libraries/vertragsbestandteil/gui/FormData.php +++ /dev/null @@ -1,109 +0,0 @@ -checkType($decoded); - // preserve gui data - $this->mapChildren($decoded); - // data contains DV - $this->mapData($decoded); - // vbs array - $this->mapVbs($decoded); - } - - public function generateJSON() - { - $json = json_encode([ - "children" => $this->children, - "data" => $this->generateDvJSON(), - "vbs" => $this->generateVbsJSON() - ]); - return $json; - } - - private function mapChildren(&$decoded) - { - $decodedData = null; - if (!$this->getJSONData($decodedData, $decoded, 'children')) - { - throw new \Exception('missing children'); - } - $this->getJSONData($this->data['children'], $decodedData, 'children'); - } - - private function mapData(&$decoded) - { - $decodedData = null; - if (!$this->getJSONData($decodedData, $decoded, 'data')) - { - throw new \Exception('missing data'); - } - - $this->getJSONDataInt($this->data['dienstverhaeltnisid'], $decodedData, 'dienstverhaeltnisid'); - $this->getJSONData($this->data['unternehmen'], $decodedData, 'unternehmen'); - $this->getJSONData($this->data['vertragsart_kurzbz'], $decodedData, 'vertragsart_kurzbz'); - $gueltigkeit = new GUIGueltigkeit(); - $gueltigkeit->mapJSON($decodedData['gueltigkeit']); - $this->data['gueltigkeit'] = $gueltigkeit; - //$this->getJSONData($this->data['gueltigkeit'], $decodedData, 'gueltigkeit'); - } - - private function generateDvJSON() - { - return json_encode($this->data); - } - - - private function mapVbs(&$decoded) - { - if (!$this->getJSONData($this->vbs, $decoded, 'vbs')) - { - throw new \Exception('missing vbs'); - } - //$this->getJSONData($this->vbs, $decodedData, 'vbs'); - } - - private function generateVbsJSON() - { - return json_encode($this->vbs); - } - - /** - * Get the value of children - */ - public function getChildren() - { - return $this->children; - } - - - /** - * Get the value of vbs - */ - public function getVbs() - { - return $this->vbs; - } - - -} \ No newline at end of file diff --git a/application/libraries/vertragsbestandteil/gui/GUIGehaltsbestandteil.php b/application/libraries/vertragsbestandteil/gui/GUIGehaltsbestandteil.php deleted file mode 100644 index 713ee64a0..000000000 --- a/application/libraries/vertragsbestandteil/gui/GUIGehaltsbestandteil.php +++ /dev/null @@ -1,89 +0,0 @@ -type = GUIVertragsbestandteilStunden::TYPE_STRING; - $this-> guioptions = ["id" => null, "infos" => [], "errors" => [], "removeable" => true]; - $this->data = [ "gehaltstyp" => "", - "betrag" => "", - "gueltigkeit" => [ - "guioptions" => ["sharedstatemode" => "reflect"], - "data" => ["gueltig_ab" => "", "gueltig_bis" => ""] - ], - "valorisierung" => true - ]; - } - - public function getTypeString(): string - { - return GUIGehaltsbestandteil::TYPE_STRING; - } - - public function mapJSON(&$decoded) - { - //$decoded = json_decode($jsondata); - $this->checkType($decoded); - $this->mapGUIOptions($decoded); - $this->mapData($decoded); - } - - private function mapGUIOptions(&$decoded) - { - $decodedGUIOptions = null; - if (!$this->getJSONData($decodedGUIOptions, $decoded, 'guioptions')) - { - throw new \Exception('missing guioptions'); - } - $this->getJSONData($this->guioptions, $decodedGUIOptions, 'id'); - $this->getJSONData($this->guioptions, $decodedGUIOptions, 'infos'); - $this->getJSONData($this->guioptions, $decodedGUIOptions, 'errors'); - $this->getJSONData($this->guioptions, $decodedGUIOptions, 'removable'); - } - - private function mapData(&$decoded) - { - $decodedData = null; - if (!$this->getJSONData($decodedData, $decoded, 'data')) - { - throw new \Exception('missing data'); - } - $this->getJSONData($this->data['id'], $decodedData, 'id'); - $this->getJSONData($this->data['gehaltstyp'], $decodedData, 'gehaltstyp'); - $this->getJSONDataInt($this->data['betrag'], $decodedData, 'betrag'); - $gueltigkeit = new GUIGueltigkeit(); - $gueltigkeit->mapJSON($decodedData['gueltigkeit']); - $this->data['gueltigkeit'] = $gueltigkeit; - $this->getJSONData($this->data['valorisierung'], $decodedData, 'valorisierung'); - } - -} \ No newline at end of file diff --git a/application/libraries/vertragsbestandteil/gui/GUIGueltigkeit.php b/application/libraries/vertragsbestandteil/gui/GUIGueltigkeit.php deleted file mode 100644 index 0caee1114..000000000 --- a/application/libraries/vertragsbestandteil/gui/GUIGueltigkeit.php +++ /dev/null @@ -1,76 +0,0 @@ -mapGuioptions($decoded); - $this->mapData($decoded); - } - - private function mapGuioptions(&$decoded) - { - $decodedData = null; - if (!$this->getJSONData($decodedData, $decoded, 'guioptions')) - { - throw new \Exception('missing guioptions'); - } - $this->guioptions = $decodedData; - } - - private function mapData(&$decoded) - { - $decodedData = null; - if (!$this->getJSONData($decodedData, $decoded, 'data')) - { - throw new \Exception('missing data'); - } - $this->getJSONData($this->data['gueltig_ab'], $decodedData, 'gueltig_ab'); - $this->getJSONData($this->data['gueltig_bis'], $decodedData, 'gueltig_bis'); - - } - - /** - * Get the value of guioptions - */ - public function getGuioptions() - { - return $this->guioptions; - } - - /** - * Get the value of data - */ - public function getData() - { - return $this->data; - } - - public function jsonSerialize() { - return ["guioptions" => $this->guioptions, - "data" => $this->data]; - } -} \ No newline at end of file diff --git a/application/libraries/vertragsbestandteil/gui/GUIHandler.php b/application/libraries/vertragsbestandteil/gui/GUIHandler.php deleted file mode 100644 index 5ccf9d421..000000000 --- a/application/libraries/vertragsbestandteil/gui/GUIHandler.php +++ /dev/null @@ -1,215 +0,0 @@ -employeeUID = $employeeUID; - $this->userUID = $userUID; - $this->CI = get_instance(); - $this->CI->load->model('vertragsbestandteil/Dienstverhaeltnis_model', - 'Dienstverhaeltnis_model'); - $this->CI->load->library('vertragsbestandteil/VertragsbestandteilLib', - null, 'VertragsbestandteilLib'); - - - } - - /** - * main entry (called from VetragsbestandteilLib) - * @param string $guidata JSON submitted by editor - * @param string $employeeUID uid of the employee - * @param string $userUID uid of the user currently editing the employee data - * @return string JSON for GUI client - */ - public function handle($guidata) - { - $decoded = json_decode($guidata, true); - $formDataMapper = new FormData(); - $formDataMapper->mapJSON($decoded); - - // DV - $dvData = $formDataMapper->getData(); - $res = $this->handleDV($dvData); - - if ($res === false) - { - // TODO write error message - } else { - - // VBS - $vbsList = $formDataMapper->getVbs(); - - foreach ($vbsList as $vbsID => $vbs) { - $this->handleVBS($dvData['dienstverhaeltnisid'] ,$vbs); - } - } - - return $formDataMapper->generateJSON(); - } - - /** - * dienstverhaeltnisid - * unternehmen - * vertragsart_kurzbz - * gueltigkeit - */ - private function handleDV(&$dv) - { - $dienstverhaeltnisid = $dv['dienstverhaeltnisid']; - - if (isset($dienstverhaeltnisid) && intval($dienstverhaeltnisid > 0)) - { - // DV exists - $res = $this->updateDV($dv); - if (isSuccess($res)) - { - return true; - } - } else { - // DV is new - $res = $this->insertDV($dv); - if (isSuccess($res)) - { - // write back new id - $dv['dienstverhaeltnisid'] = $res->retval[0]->dienstverhaeltnis_id; - return true; - } - - } - - return false; - - } - - private function handleVBS($dienstverhaeltnis_id, $vbs) - { - /** @var GUIVertragsbestandteilFunktion */ - $vbsMapper = GUIHandlerFactory::getGUIHandler($vbs['type']); - $vbsMapper->mapJSON($vbs); - $vbsData = $vbsMapper->getData(); - - // merge GUI-Data with DB-Data - $vbsInstance = $vbsMapper->generateVertragsbestandteil(isset($vbsData['id'])?$vbsData['id']:null); - if ($vbsInstance->getDienstverhaeltnis_id() === null) - { - $vbsInstance->setDienstverhaeltnis_id($dienstverhaeltnis_id); - $vbsInstance->setInsertvon($this->userUID); - $vbsInstance->setInsertamum((new DateTime())->format("Y-m-d h:m:s")); - } else { - $vbsInstance->setUpdatevon($this->userUID); - $vbsInstance->setUpdateamum((new DateTime())->format("Y-m-d h:m:s")); - } - - // TODO Validate? - - // store - $this->CI->VertragsbestandteilLib->storeVertragsbestandteil($vbsInstance); - - // GBS - /* - foreach ($vbsMapper->getGbs() as $gbs) - { - $gbsData = $gbs->getData(); - $this->handleGBS($gbsData); - }*/ - } - - - // GBS without connection to VBS - private static function handleGBS($gbs) - { - // TODO - } - - - // ------------------------------------ - // DV does not have a dedicated handler - private function insertDV($dvJSON) - { - $dvJSON['mitarbeiter_uid'] = $this->employeeUID; - $now = new DateTime(); - $dvJSON['von'] = string2Date($dvJSON['gueltigkeit']->getData()['gueltig_ab']); - $dvJSON['bis'] = string2Date($dvJSON['gueltigkeit']->getData()['gueltig_bis']); - $dvJSON['oe_kurzbz'] = $dvJSON['unternehmen']; - $dvJSON['insertvon'] = $this->userUID; - $dvJSON['insertamum'] = $now->format(DateTime::ATOM); - - unset($dvJSON['dienstverhaeltnisid']); - unset($dvJSON['children']); - unset($dvJSON['gueltigkeit']); - unset($dvJSON['unternehmen']); - - $result = $this->CI->Dienstverhaeltnis_model->insert($dvJSON); - - if (isError($result)) - { - throw Exception($result->msg); - } - - $record = $this->CI->Dienstverhaeltnis_model->load($result->retval); - - return $record; - } - - private function updateDV($dvJSON) - { - $dvJSON['mitarbeiter_uid'] = $this->employeeUID; - $dvJSON['von'] = string2Date($dvJSON['gueltigkeit']->getData()['gueltig_ab']); - $dvJSON['bis'] = string2Date($dvJSON['gueltigkeit']->getData()['gueltig_bis']); - $dvJSON['oe_kurzbz'] = $dvJSON['unternehmen']; - $now = new DateTime(); - $dvJSON['updatevon'] = $this->userUID; - $dvJSON['updateamum'] = $now->format(DateTime::ATOM); - $dvJSON['dienstverhaeltnis_id'] = $dvJSON['dienstverhaeltnisid']; - - unset($dvJSON['insertamum']); - unset($dvJSON['insertvon']); - unset($dvJSON['dienstverhaeltnisid']); - unset($dvJSON['children']); - unset($dvJSON['gueltigkeit']); - unset($dvJSON['unternehmen']); - - $result = $this->CI->Dienstverhaeltnis_model->update($dvJSON); - //$result = $this->CI->Dienstverhaeltnis_model->update($dvJSON['kontakt_id'], $dvJSON); - - if (isError($result)) - { - return error($result->msg, EXIT_ERROR); - } - - $record = $this->CI->Dienstverhaeltnis_model->load($result->retval); - - return $record; - } - - private function deleteDV($dv_id) - { - $result = $this->CI->Dienstverhaeltnis_model->delete($dv_id); - - if (isError($result)) - { - return error($result->msg, EXIT_ERROR); - } - - return success($dv_id); - } - -} \ No newline at end of file diff --git a/application/libraries/vertragsbestandteil/gui/GUIHandlerFactory.php b/application/libraries/vertragsbestandteil/gui/GUIHandlerFactory.php deleted file mode 100644 index e0140755b..000000000 --- a/application/libraries/vertragsbestandteil/gui/GUIHandlerFactory.php +++ /dev/null @@ -1,36 +0,0 @@ -type = GUIVertragsbestandteilFunktion::TYPE_STRING; - $this->hasGBS = true; - $this-> guioptions = ["id" => null, "infos" => [], "errors" => [], "removeable" => false]; - $this->data = ["funktion" => "Leitung", - "orget" => "", - "gueltigkeit" => [ - "guioptions" => ["sharedstatemode" => "reflect"], - "data" => ["gueltig_ab" => "", "gueltig_bis" => ""] - ] - ]; - $this->gbs = []; - } - - public function getTypeString(): string - { - return GUIVertragsbestandteilFunktion::TYPE_STRING; - } - - /** - * parse JSON into object - * @param string $jsondata - */ - public function mapJSON(&$decoded) - { - $this->checkType($decoded); - $this->mapGUIOptions($decoded); - $this->mapData($decoded); - $this->mapGBS($decoded); - } - - /** - * ["id" => null, - * "infos" => [], - * "errors" => [], - * "removeable" => true - * ] - * @param mixed $decoded decoded JSON data (use associative array) - */ - private function mapGUIOptions(&$decoded) - { - $decodedGUIOptions = null; - if (!$this->getJSONData($decodedGUIOptions, $decoded, 'guioptions')) - { - throw new \Exception('missing guioptions'); - } - $this->getJSONData($this->guioptions, $decodedGUIOptions, 'id'); - $this->getJSONData($this->guioptions, $decodedGUIOptions, 'infos'); - $this->getJSONData($this->guioptions, $decodedGUIOptions, 'errors'); - $this->getJSONDataBool($this->guioptions, $decodedGUIOptions, 'removable'); - } - - /** - * { - * "funktion": "Leitung", - * "orget": "sdf", - * "gueltigkeit": { - * "guioptions": { - * "sharedstatemode": "reflect" - * }, - * "data": { - * "gueltig_ab": "", - * "gueltig_bis": "" - * } - * } - * } - */ - private function mapData(&$decoded) - { - $decodedData = null; - if (!$this->getJSONData($decodedData, $decoded, 'data')) - { - throw new \Exception('missing data'); - } - $this->getJSONData($this->data['funktion'], $decodedData, 'funktion'); - $this->getJSONData($this->data['orget'], $decodedData, 'orget'); - $gueltigkeit = new GUIGueltigkeit(); - $gueltigkeit->mapJSON($decodedData['gueltigkeit']); - $this->data['gueltigkeit'] = $gueltigkeit; - } - - private function mapGBS(&$decoded) - { - //echo "gbs: ";var_dump($decoded); - $decodedGbsList = []; - if (!$this->getJSONData($decodedGbsList, $decoded, 'gbs')) - { - throw new \Exception('missing gbs'); - } - $guiGBS = null; - foreach ($decodedGbsList as $decodedGbs) { - $guiGBS = new GUIGehaltsbestandteil(); - $guiGBS->mapJSON($decodedGbs); - $this->gbs[] = $guiGBS; - } - } - - - public function generateVertragsbestandteil($id) { - /** @var vertragsbestandteil\VertragsbestandteilFunktion */ - $vbs = null; - if (isset($vbsData['id']) && $vbsData['id'] > 0) - { - // load VBS - $vbs = $this->vbsLib->fetchVertragsbestandteil($vbsData['id']); - } else { - $vbs = new vertragsbestandteil\VertragsbestandteilFunktion(); - } - // merge - $vbs->setBenutzerfunktion_id($this->data['benutzerfunktionid']); - $vbs->setVon(string2Date($this->data['gueltigkeit']->getData()['gueltig_ab'])); - $vbs->setBis(string2Date($this->data['gueltigkeit']->getData()['gueltig_bis'])); - return $vbs; - } - - public function jsonSerialize() { - return [ - "type" => $this->type, - "guioptions" => $this->guioptions, - "data" => $this->data, - "gbs" => $this->gbs]; - } - -} \ No newline at end of file diff --git a/application/libraries/vertragsbestandteil/gui/GUIVertragsbestandteilKuendigungsfrist.php b/application/libraries/vertragsbestandteil/gui/GUIVertragsbestandteilKuendigungsfrist.php deleted file mode 100644 index 8d706ef26..000000000 --- a/application/libraries/vertragsbestandteil/gui/GUIVertragsbestandteilKuendigungsfrist.php +++ /dev/null @@ -1,118 +0,0 @@ -type = GUIVertragsbestandteilKuendigungsfrist::TYPE_STRING; - $this->hasGBS = false; - $this-> guioptions = ["id" => null, "infos" => [], "errors" => [], "removeable" => true]; - $this->data = ["arbeitnehmer_frist" => "", - "arbeitgeber_frist" => "", - "gueltigkeit" => [ - "guioptions" => ["sharedstatemode" => "reflect"], - "data" => ["gueltig_ab" => "", "gueltig_bis" => ""] - ] - ]; - } - - public function getTypeString(): string - { - return GUIVertragsbestandteilKuendigungsfrist::TYPE_STRING; - } - - /** - * parse JSON into object - * @param string $jsondata - */ - public function mapJSON(&$decoded) - { - $this->checkType($decoded); - $this->mapGUIOptions($decoded); - $this->mapData($decoded); - } - - /** - * ["id" => null, - * "infos" => [], - * "errors" => [], - * "removeable" => true - * ] - * @param mixed $decoded decoded JSON data (use associative array) - */ - private function mapGUIOptions(&$decoded) - { - $decodedGUIOptions = null; - if (!$this->getJSONData($decodedGUIOptions, $decoded, 'guioptions')) - { - throw new \Exception('missing guioptions'); - } - $this->getJSONData($this->guioptions, $decodedGUIOptions, 'id'); - $this->getJSONData($this->guioptions, $decodedGUIOptions, 'infos'); - $this->getJSONData($this->guioptions, $decodedGUIOptions, 'errors'); - $this->getJSONDataBool($this->guioptions, $decodedGUIOptions, 'removable'); - } - - /** - */ - private function mapData(&$decoded) - { - $decodedData = null; - if (!$this->getJSONData($decodedData, $decoded, 'data')) - { - throw new \Exception('missing data'); - } - $this->getJSONDataInt($this->data['arbeitnehmer_frist'], $decodedData, 'arbeitnehmer_frist'); - $this->getJSONDataInt($this->data['arbeitgeber_frist'], $decodedData, 'arbeitgeber_frist'); - $this->getJSONData($this->data['gueltigkeit'], $decodedData, 'gueltigkeit'); - } - - private function mapGBS() - { - $decodedGbsList = []; - if (!$this->getJSONData($decodedGbsList, $decoded, 'gbs')) - { - throw new \Exception('missing gbs'); - } - $guiGBS = null; - foreach ($decodedGbsList as $decodedGbs) { - $guiGBS = new GUIGehaltsbestandteil(); - $guiGBS->mapJSON($decodedGbs); - } - } - - public function generateVertragsbestandteil($id) { - // TODO - } - - public function jsonSerialize() { - return [ - "type" => $this->type, - "guioptions" => $this->guioptions, - "data" => $this->data]; - } - -} \ No newline at end of file diff --git a/application/libraries/vertragsbestandteil/gui/GUIVertragsbestandteilStunden.php b/application/libraries/vertragsbestandteil/gui/GUIVertragsbestandteilStunden.php deleted file mode 100644 index 0e94ca16d..000000000 --- a/application/libraries/vertragsbestandteil/gui/GUIVertragsbestandteilStunden.php +++ /dev/null @@ -1,139 +0,0 @@ -type = GUIVertragsbestandteilStunden::TYPE_STRING; - $this->hasGBS = true; - $this-> guioptions = ["id" => null, "infos" => [], "errors" => [], "removeable" => true]; - $this->data = ["stunden" => "", - "gueltigkeit" => [ - "guioptions" => ["sharedstatemode" => "reflect"], - "data" => ["gueltig_ab" => "", "gueltig_bis" => ""] - ] - ]; - $this->gbs = []; - } - - public function getTypeString(): string - { - return GUIVertragsbestandteilStunden::TYPE_STRING; - } - - /** - * parse JSON into object - * @param string $jsondata - */ - public function mapJSON(&$decoded) - { - $this->checkType($decoded); - $this->mapGUIOptions($decoded); - $this->mapData($decoded); - $this->mapGBS($decoded); - } - - /** - * ["id" => null, - * "infos" => [], - * "errors" => [], - * "removeable" => true - * ] - * @param mixed $decoded decoded JSON data (use associative array) - */ - private function mapGUIOptions(&$decoded) - { - $decodedGUIOptions = null; - if (!$this->getJSONData($decodedGUIOptions, $decoded, 'guioptions')) - { - throw new \Exception('missing guioptions'); - } - $this->getJSONData($this->guioptions, $decodedGUIOptions, 'id'); - $this->getJSONData($this->guioptions, $decodedGUIOptions, 'infos'); - $this->getJSONData($this->guioptions, $decodedGUIOptions, 'errors'); - $this->getJSONDataBool($this->guioptions, $decodedGUIOptions, 'removable'); - } - - /** - * { - * "stunden": "38,5", - * "gueltigkeit": { - * "guioptions": { - * "sharedstatemode": "reflect" - * }, - * "data": { - * "gueltig_ab": "1.1.2011", - * "gueltig_bis": "" - * } - * } - */ - private function mapData(&$decoded) - { - $decodedData = null; - if (!$this->getJSONData($decodedData, $decoded, 'data')) - { - throw new \Exception('missing data'); - } - $this->getJSONDataFloat($this->data['stunden'], $decodedData, 'stunden'); - $gueltigkeit = new GUIGueltigkeit(); - $gueltigkeit->mapJSON($decodedData['gueltigkeit']); - $this->data['gueltigkeit'] = $gueltigkeit; - } - - private function mapGBS(&$decoded) - { - $decodedGbsList = []; - if (!$this->getJSONData($decodedGbsList, $decoded, 'gbs')) - { - throw new \Exception('missing gbs'); - } - $guiGBS = null; - foreach ($decodedGbsList as $decodedGbs) { - $guiGBS = new GUIGehaltsbestandteil(); - $guiGBS->mapJSON($decodedGbs); - $this->gbs[] = $guiGBS; - } - } - - public function generateVertragsbestandteil($id) - { - $vbs = null; - if (isset($vbsData['id']) && $vbsData['id'] > 0) - { - // load VBS - $vbs = $this->vbsLib->fetchVertragsbestandteil($vbsData['id']); - } else { - $vbs = new vertragsbestandteil\VertragsbestandteilStunden(); - } - // merge - $vbs->setWochenstunden($this->data['stunden']); - $vbs->setVon(string2Date($this->data['gueltigkeit']->getData()['gueltig_ab'])); - $vbs->setBis(string2Date($this->data['gueltigkeit']->getData()['gueltig_bis'])); - return $vbs; - } - - public function jsonSerialize() { - return [ - "type" => $this->type, - "guioptions" => $this->guioptions, - "data" => $this->data, - "gbs" => $this->gbs]; - } - -} \ No newline at end of file diff --git a/application/libraries/vertragsbestandteil/gui/GUIVertragsbestandteilZeitaufzeichnung.php b/application/libraries/vertragsbestandteil/gui/GUIVertragsbestandteilZeitaufzeichnung.php deleted file mode 100644 index dacee544c..000000000 --- a/application/libraries/vertragsbestandteil/gui/GUIVertragsbestandteilZeitaufzeichnung.php +++ /dev/null @@ -1,103 +0,0 @@ -type = GUIVertragsbestandteilZeitaufzeichnung::TYPE_STRING; - $this->hasGBS = false; - $this-> guioptions = ["id" => null, "infos" => [], "errors" => [], "removeable" => true]; - $this->data = null; - } - - public function getTypeString(): string - { - return GUIVertragsbestandteilZeitaufzeichnung::TYPE_STRING; - } - - /** - * parse JSON into object - * @param string $jsondata - */ - public function mapJSON(&$decoded) - { - $this->checkType($decoded); - $this->mapGUIOptions($decoded); - $this->mapData($decoded); - } - - /** - * ["id" => null, - * "infos" => [], - * "errors" => [], - * "removeable" => true - * ] - * @param mixed $decoded decoded JSON data (use associative array) - */ - private function mapGUIOptions(&$decoded) - { - $decodedGUIOptions = null; - if (!$this->getJSONData($decodedGUIOptions, $decoded, 'guioptions')) - { - throw new \Exception('missing guioptions'); - } - $this->getJSONData($this->guioptions, $decodedGUIOptions, 'id'); - $this->getJSONData($this->guioptions, $decodedGUIOptions, 'infos'); - $this->getJSONData($this->guioptions, $decodedGUIOptions, 'errors'); - $this->getJSONDataBool($this->guioptions, $decodedGUIOptions, 'removable'); - } - - private function mapData(&$decoded) - { - $decodedData = null; - if (!$this->getJSONData($decodedData, $decoded, 'data')) - { - throw new \Exception('missing data'); - } - $this->getJSONDataBool($this->data['zeitaufzeichnung'], $decodedData, 'zeitaufzeichnung'); - $this->getJSONDataBool($this->data['azgrelevant'], $decodedData, 'azgrelevant'); - $this->getJSONDataBool($this->data['homeoffice'], $decodedData, 'homeoffice'); - $gueltigkeit = new GUIGueltigkeit(); - $gueltigkeit->mapJSON($decodedData['gueltigkeit']); - $this->data['gueltigkeit'] = $gueltigkeit; - } - - public function generateVertragsbestandteil($id) { - // TODO - } - - public function jsonSerialize() { - return [ - "type" => $this->type, - "guioptions" => $this->guioptions, - "data" => $this->data]; - } -} \ No newline at end of file diff --git a/application/libraries/vertragsbestandteil/gui/GUIVertragsbestandteilZusatzvereinbarung.php b/application/libraries/vertragsbestandteil/gui/GUIVertragsbestandteilZusatzvereinbarung.php deleted file mode 100644 index 606f57b0e..000000000 --- a/application/libraries/vertragsbestandteil/gui/GUIVertragsbestandteilZusatzvereinbarung.php +++ /dev/null @@ -1,139 +0,0 @@ -type = GUIVertragsbestandteilZusatzvereinbarung::TYPE_STRING; - $this->hasGBS = true; - $this-> guioptions = ["id" => null, "infos" => [], "errors" => [], "removeable" => true]; - $this->data = null; - $this->gbs = []; - } - - public function getTypeString(): string - { - return GUIVertragsbestandteilZusatzvereinbarung::TYPE_STRING; - } - - /** - * parse JSON into object - * @param string $jsondata - */ - public function mapJSON(&$decoded) - { - $this->checkType($decoded); - $this->mapGUIOptions($decoded); - $this->mapData($decoded); - $this->mapGBS($decoded); - } - - /** - * ["id" => null, - * "infos" => [], - * "errors" => [], - * "removeable" => true - * ] - * @param mixed $decoded decoded JSON data (use associative array) - */ - private function mapGUIOptions(&$decoded) - { - $decodedGUIOptions = null; - if (!$this->getJSONData($decodedGUIOptions, $decoded, 'guioptions')) - { - throw new \Exception('missing guioptions'); - } - $this->getJSONData($this->guioptions, $decodedGUIOptions, 'id'); - $this->getJSONData($this->guioptions, $decodedGUIOptions, 'infos'); - $this->getJSONData($this->guioptions, $decodedGUIOptions, 'errors'); - $this->getJSONDataBool($this->guioptions, $decodedGUIOptions, 'removable'); - } - - /** - * { - * "freitexttyp": "allin", - * "titel": "Lorem ipsum ", - * "freitext": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. \nAt vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. ", - * "kuendigungsrelevant": "", - * "gueltigkeit": { - * "guioptions": { - * "sharedstatemode": "reflect" - * }, - * "data": { - * "gueltig_ab": "1.1.2010", - * "gueltig_bis": "" - * } - */ - private function mapData(&$decoded) - { - $decodedData = null; - if (!$this->getJSONData($decodedData, $decoded, 'data')) - { - throw new \Exception('missing data'); - } - $this->getJSONDataString($this->data['freitexttyp'], $decodedData, 'freitexttyp'); - $this->getJSONDataString($this->data['titel'], $decodedData, 'titel'); - $this->getJSONDataString($this->data['freitext'], $decodedData, 'freitext'); - $gueltigkeit = new GUIGueltigkeit(); - $gueltigkeit->mapJSON($decodedData['gueltigkeit']); - $this->data['gueltigkeit'] = $gueltigkeit; - } - - private function mapGBS(&$decoded) - { - $decodedGbsList = []; - if (!$this->getJSONData($decodedGbsList, $decoded, 'gbs')) - { - throw new \Exception('missing gbs'); - } - $guiGBS = null; - foreach ($decodedGbsList as $decodedGbs) { - $guiGBS = new GUIGehaltsbestandteil(); - $guiGBS->mapJSON($decodedGbs); - $this->gbs[] = $guiGBS; - } - } - - public function generateVertragsbestandteil($id) { - // TODO - } - - public function jsonSerialize() { - return [ - "type" => $this->type, - "guioptions" => $this->guioptions, - "data" => $this->data, - "gbs" => $this->gbs]; - } - -} \ No newline at end of file diff --git a/application/libraries/vertragsbestandteil/gui/JSONData.php b/application/libraries/vertragsbestandteil/gui/JSONData.php deleted file mode 100644 index 77ea19ce4..000000000 --- a/application/libraries/vertragsbestandteil/gui/JSONData.php +++ /dev/null @@ -1,53 +0,0 @@ -format('Y-m-d'); -} \ No newline at end of file From 0061cf255c518b73b1effa7819218304756b0c1c Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Wed, 12 Apr 2023 15:22:10 +0200 Subject: [PATCH 143/176] add GehaltsbestandteilLib --- .../VertragsbestandteilTest.php | 27 ++ .../Gehaltsbestandteil.php | 380 ++++++++++-------- .../GehaltsbestandteilLib.php | 89 ++++ .../Vertragsbestandteil.php | 18 + .../VertragsbestandteilLib.php | 4 +- .../Gehaltsbestandteil_model.php | 11 +- 6 files changed, 353 insertions(+), 176 deletions(-) create mode 100644 application/libraries/vertragsbestandteil/GehaltsbestandteilLib.php diff --git a/application/controllers/jobs/vertragsbestandteil_test/VertragsbestandteilTest.php b/application/controllers/jobs/vertragsbestandteil_test/VertragsbestandteilTest.php index 407a5ba24..d22ddb85f 100644 --- a/application/controllers/jobs/vertragsbestandteil_test/VertragsbestandteilTest.php +++ b/application/controllers/jobs/vertragsbestandteil_test/VertragsbestandteilTest.php @@ -17,6 +17,8 @@ class VertragsbestandteilTest extends JOB_Controller $this->load->library('vertragsbestandteil/VertragsbestandteilLib', null, 'VertragsbestandteilLib'); + $this->load->library('vertragsbestandteil/GehaltsbestandteilLib', + null, 'GehaltsbestandteilLib'); } public function testFetch() @@ -84,4 +86,29 @@ class VertragsbestandteilTest extends JOB_Controller echo "Insert failed.\n"; } } + + public function testGehaltsbestandteilInsert() + { + $data = new stdClass(); + $data->gehaltsbestandteil_id = 2; + /* + $data->dienstverhaeltnis_id = 39; + $data->vertragsbestandteil_id = 123; + $data->gehaltstyp_kurzbz = 'zulage'; + $data->von = '2023-04-01'; + $data->bis = '2023-08-31'; + $data->anmerkung = 'test anmerkung'; + $data->grundbetrag = 100; + $data->betrag_valorisiert = 100; + $data->valorisierung = true; + */ + $data->auszahlungen = 12; + + $gb = new \vertragsbestandteil\Gehaltsbestandteil(); + $gb->hydrateByStdClass($data); + + print_r($gb->toStdClass()); + + $this->GehaltsbestandteilLib->storeGehaltsbestandteil($gb); + } } diff --git a/application/libraries/vertragsbestandteil/Gehaltsbestandteil.php b/application/libraries/vertragsbestandteil/Gehaltsbestandteil.php index e911c4228..0fc786124 100644 --- a/application/libraries/vertragsbestandteil/Gehaltsbestandteil.php +++ b/application/libraries/vertragsbestandteil/Gehaltsbestandteil.php @@ -1,185 +1,245 @@ gehaltsbestandteil_id) && $this->setGehaltsbestandteil_id($data->gehaltsbestandteil_id); + isset($data->dienstverhaeltnis_id) && $this->setDienstverhaeltnis_id($data->dienstverhaeltnis_id); + isset($data->vertragsbestandteil_id) && $this->setVertragsbestandteil_id($data->vertragsbestandteil_id); + isset($data->gehaltstyp_kurzbz) && $this->setGehaltstyp_kurzbz($data->gehaltstyp_kurzbz); + isset($data->von) && $this->setVon($data->von); + isset($data->bis) && $this->setBis($data->bis); + isset($data->anmerkung) && $this->setAnmerkung($data->anmerkung); + isset($data->grundbetrag) && $this->setGrundbetrag($data->grundbetrag); + isset($data->betrag_valorisiert) && $this->setBetrag_valorisiert($data->betrag_valorisiert); + isset($data->valorisierungssperre) && $this->setValorisierungssperre($data->valorisierungssperre); + isset($data->valorisierung) && $this->setValorisierung($data->valorisierung); + isset($data->auszahlungen) && $this->setAuszahlungen($data->auszahlungen); + + isset($data->insertamum) && $this->setInsertamum($data->insertamum); + isset($data->insertvon) && $this->setInsertvon($data->insertvon); + isset($data->updateamum) && $this->setUpdateamum($data->updateamum); + isset($data->updatevon) && $this->setUpdatevon($data->updatevon); + } + + public function getGehaltsbestandteil_id() { return $this->gehaltsbestandteil_id; } - /** - * Set the value of gehaltsbestandteil_id - */ - public function setGehaltsbestandteilId($gehaltsbestandteil_id): self + public function getDienstverhaeltnis_id() { - $this->gehaltsbestandteil_id = $gehaltsbestandteil_id; - - return $this; + return $this->dienstverhaeltnis_id; + } + + public function getVertragsbestandteil_id() + { + return $this->vertragsbestandteil_id; + } + + public function getGehaltstyp_kurzbz() + { + return $this->gehaltstyp_kurzbz; + } + + public function getVon() + { + return $this->von; + } + + public function getBis() + { + return $this->bis; } - /** - * Get the value of anmerkung - */ public function getAnmerkung() { return $this->anmerkung; } - /** - * Set the value of anmerkung - */ - public function setAnmerkung($anmerkung): self - { - $this->anmerkung = $anmerkung; - - return $this; - } - - /** - * Get the value of grundbetrag - */ public function getGrundbetrag() { return $this->grundbetrag; } - /** - * Set the value of grundbetrag - */ - public function setGrundbetrag($grundbetrag): self - { - $this->grundbetrag = $grundbetrag; - - return $this; - } - - /** - * Get the value of betrag_valorisiert - */ - public function getBetragValorisiert() + public function getBetrag_valorisiert() { return $this->betrag_valorisiert; } - /** - * Set the value of betrag_valorisiert - */ - public function setBetragValorisiert($betrag_valorisiert): self - { - $this->betrag_valorisiert = $betrag_valorisiert; - - return $this; - } - - /** - * Get the value of valorisieren - */ - public function getValorisieren() - { - return $this->valorisieren; - } - - /** - * Set the value of valorisieren - */ - public function setValorisieren($valorisieren): self - { - $this->valorisieren = $valorisieren; - - return $this; - } - - /** - * Get the value of dienstverhaeltnis_id - */ - public function getGehaltDienstverhaeltnisID() - { - return $this->gehalt_dienstverhaeltnis_id; - } - - /** - * Set the value of dienstverhaeltnis_id - */ - public function setGehaltDienstverhaeltnisID($dienstverhaeltnis_id): self - { - $this->gehalt_dienstverhaeltnis_id = $dienstverhaeltnis_id; - - return $this; - } - - /** - * Get the value of gehaltstyp_kurzbz - */ - public function getGehaltstypKurzbz() - { - return $this->gehaltstyp_kurzbz; - } - - /** - * Set the value of gehaltstyp_kurzbz - */ - public function setGehaltstypKurzbz($gehaltstyp_kurzbz): self - { - $this->gehaltstyp_kurzbz = $gehaltstyp_kurzbz; - - return $this; - } - - /** - * Get the value of valorisierungssperre - */ public function getValorisierungssperre() { return $this->valorisierungssperre; } - /** - * Set the value of valorisierungssperre - */ - public function setValorisierungssperre($valorisierungssperre): self + public function getValorisierung() { - $this->valorisierungssperre = $valorisierungssperre; + return $this->valorisierung; + } + public function getAuszahlungen() + { + return $this->auszahlungen; + } + + public function getInsertamum() + { + return $this->insertamum; + } + + public function getInsertvon() + { + return $this->insertvon; + } + + public function getUpdateamum() + { + return $this->updateamum; + } + + public function getUpdatevon() + { + return $this->updatevon; + } + + public function setGehaltsbestandteil_id($gehaltsbestandteil_id) + { + $this->gehaltsbestandteil_id = $gehaltsbestandteil_id; return $this; } + public function setDienstverhaeltnis_id($dienstverhaeltnis_id) + { + $this->dienstverhaeltnis_id = $dienstverhaeltnis_id; + return $this; + } + + public function setVertragsbestandteil_id($vertragsbestandteil_id) + { + $this->vertragsbestandteil_id = $vertragsbestandteil_id; + return $this; + } + + public function setGehaltstyp_kurzbz($gehaltstyp_kurzbz) + { + $this->gehaltstyp_kurzbz = $gehaltstyp_kurzbz; + return $this; + } + + public function setVon($von) + { + $this->von = $von; + return $this; + } + + public function setBis($bis) + { + $this->bis = $bis; + return $this; + } + + public function setAnmerkung($anmerkung) + { + $this->anmerkung = $anmerkung; + return $this; + } + + public function setGrundbetrag($grundbetrag) + { + $this->grundbetrag = $grundbetrag; + return $this; + } + + public function setBetrag_valorisiert($betrag_valorisiert) + { + $this->betrag_valorisiert = $betrag_valorisiert; + return $this; + } + + public function setValorisierungssperre($valorisierungssperre) + { + $this->valorisierungssperre = $valorisierungssperre; + return $this; + } + + public function setValorisierung($valorisierung) + { + $this->valorisierung = $valorisierung; + return $this; + } + + public function setAuszahlungen($auszahlungen) + { + $this->auszahlungen = $auszahlungen; + return $this; + } + + public function setInsertamum($insertamum) + { + $this->insertamum = $insertamum; + return $this; + } + + public function setInsertvon($insertvon) + { + $this->insertvon = $insertvon; + return $this; + } + + public function setUpdateamum($updateamum) + { + $this->updateamum = $updateamum; + return $this; + } + + public function setUpdatevon($updatevon) + { + $this->updatevon = $updatevon; + return $this; + } + public function toStdClass(): \stdClass { - $tmp = array( - 'gueltig_ab' => $this->getGueltigAb(), - 'gueltig_bis' => $this->getGueltigBis(), - 'gehalt_dienstverhaeltnis_id' => $this->getGehaltDienstverhaeltnisID(), + $tmp = array( + 'gehaltsbestandteil_id' => $this->getGehaltsbestandteil_id(), + 'dienstverhaeltnis_id' => $this->getDienstverhaeltnis_id(), + 'vertragsbestandteil_id' => $this->getVertragsbestandteil_id(), + 'gehaltstyp_kurzbz' => $this->getGehaltstyp_kurzbz(), + 'von' => $this->getVon(), + 'bis' => $this->getBis(), + 'anmerkung' => $this->getAnmerkung(), 'grundbetrag' => $this->getGrundbetrag(), - 'betrag_valorisiert' => $this->getBetragValorisiert(), - 'valorisieren' => $this->getValorisieren(), - 'gehaltstyp_kurzbz' => $this->getGehaltstypKurzbz(), + 'betrag_valorisiert' => $this->getBetrag_valorisiert(), 'valorisierungssperre' => $this->getValorisierungssperre(), - 'anmerkung' => $this->getAnmerkung() + 'valorisierung' => $this->getValorisierung(), + 'auszahlungen' => $this->getAuszahlungen(), + 'insertamum' => $this->getInsertamum(), + 'insertvon' => $this->getInsertvon(), + 'updateamum' => $this->getUpdateamum(), + 'updatevon' => $this->getUpdatevon() ); $tmp = array_filter($tmp, function($v) { @@ -192,50 +252,24 @@ class Gehaltsbestandteil public function __toString() { $txt = <<getGehaltsbestandteil_id()} + dienstverhaeltnis_id: {$this->getDienstverhaeltnis_id()} + vertragsbestandteil_id: {$this->getVertragsbestandteil_id()} + gehaltstyp_kurzbz: {$this->getGehaltstyp_kurzbz()} von: {$this->getVon()} bis: {$this->getBis()} + anmerkung: {$this->getAnmerkung()} grundbetrag: {$this->getGrundbetrag()} - valorisieren: {$this->getValorisieren()} + betrag_valorisiert: {$this->getBetrag_valorisiert()} + valorisierungssperre: {$this->getValorisierungssperre()} + valorisierung: {$this->getValorisierung()} + auszahlungen: {$this->getAuszahlungen()} + insertamum: {$this->getInsertamum()} + insertvon: {$this->getInsertvon()} + updateamum: {$this->getUpdateamum()} + updatevon: {$this->getUpdatevon()} EOTXT; - return parent::__toString() . $txt; + return $txt; } - - - - /** - * Get the value of gueltig_ab - */ - public function getGueltigAb() - { - return $this->gueltig_ab; - } - - /** - * Set the value of gueltig_ab - */ - public function setGueltigAb($gueltig_ab): self - { - $this->gueltig_ab = $gueltig_ab; - - return $this; - } - - /** - * Get the value of gueltig_bis - */ - public function getGueltigBis() - { - return $this->gueltig_bis; - } - - /** - * Set the value of gueltig_bis - */ - public function setGueltigBis($gueltig_bis): self - { - $this->gueltig_bis = $gueltig_bis; - - return $this; - } } diff --git a/application/libraries/vertragsbestandteil/GehaltsbestandteilLib.php b/application/libraries/vertragsbestandteil/GehaltsbestandteilLib.php new file mode 100644 index 000000000..ad5418738 --- /dev/null +++ b/application/libraries/vertragsbestandteil/GehaltsbestandteilLib.php @@ -0,0 +1,89 @@ +CI = get_instance(); + $this->CI->load->model('vertragsbestandteil/Gehaltsbestandteil_model', + 'GehaltsbestandteilModel'); + $this->GehaltsbestandteilModel = $this->CI->GehaltsbestandteilModel; + } + + public function fetchGehaltsbestandteile($dienstverhaeltnis_id, $stichtag=null) + { + return $this->GehaltsbestandteilModel->getGehaltsbestandteile($dienstverhaeltnis_id, $stichtag); + } + + public function fetchGehaltsbestandteil($gehaltsbestandteil_id) + { + return $this->GehaltsbestandteilModel->getGehaltsbestandteil($gehaltsbestandteil_id); + } + + public function storeGehaltsbestandteile($gehaltsbestandteile) + { + foreach( $gehaltsbestandteile as $gehaltsbestandteil ) + { + $this->storeGehaltsbestandteil($gehaltsbestandteil); + } + } + + public function storeGehaltsbestandteil(Gehaltsbestandteil $gehaltsbestandteil) + { + try + { + if( intval($gehaltsbestandteil->getGehaltsbestandteil_id()) > 0 ) + { + $this->updateGehaltsbestandteil($gehaltsbestandteil); + } + else + { + $this->insertGehaltsbestandteil($gehaltsbestandteil); + } + } + catch (Exception $ex) + { + log_message('debug', "Storing Gehaltsbestandteil failed. " . $ex->getMessage()); + throw new Exception('Storing Gehaltsbestandteil failed.'); + } + } + + protected function insertGehaltsbestandteil(Gehaltsbestandteil $gehaltsbestandteil) + { + $ret = $this->GehaltsbestandteilModel->insert($gehaltsbestandteil->toStdClass(), + $this->GehaltsbestandteilModel->getEncryptedColumns()); + if( hasData($ret) ) + { + $gehaltsbestandteil->setGehaltsbestandteil_id(getData($ret)); + } + else + { + throw new Exception('error inserting gehaltsbestandteil'); + } + } + + protected function updateGehaltsbestandteil(Gehaltsbestandteil $gehaltsbestandteil) + { + $gehaltsbestandteil->setUpdateamum(strftime('%Y-%m-%d %H:%M:%S')); + $ret = $this->GehaltsbestandteilModel->update($gehaltsbestandteil->getGehaltsbestandteil_id(), + $gehaltsbestandteil->toStdClass(), + $this->GehaltsbestandteilModel->getEncryptedColumns()); + + if(isError($ret) ) + { + throw new Exception('error updating gehaltsbestandteil'); + } + } +} diff --git a/application/libraries/vertragsbestandteil/Vertragsbestandteil.php b/application/libraries/vertragsbestandteil/Vertragsbestandteil.php index 1d1101e44..a8e600d7f 100644 --- a/application/libraries/vertragsbestandteil/Vertragsbestandteil.php +++ b/application/libraries/vertragsbestandteil/Vertragsbestandteil.php @@ -18,6 +18,13 @@ abstract class Vertragsbestandteil implements \JsonSerializable protected $updateamum; protected $updatevon; + protected $gehaltsbestandteile; + + public function __construct() + { + $this->gehaltsbestandteile = array(); + } + public function hydrateByStdClass($data) { isset($data->vertragsbestandteil_id) && $this->setVertragsbestandteil_id($data->vertragsbestandteil_id); @@ -30,6 +37,17 @@ abstract class Vertragsbestandteil implements \JsonSerializable isset($data->updatevon) && $this->setUpdatevon($data->updatevon); } + public function addGehaltsbestandteil(Gehaltsbestandteil $gehaltsbestandteil) + { + $this->gehaltsbestandteile[] = $gehaltsbestandteil; + return $this; + } + + public function getGehaltsbestandteile() + { + return $this->gehaltsbestandteile; + } + public function getVertragsbestandteil_id() { return $this->vertragsbestandteil_id; diff --git a/application/libraries/vertragsbestandteil/VertragsbestandteilLib.php b/application/libraries/vertragsbestandteil/VertragsbestandteilLib.php index 38b152523..fd65c3972 100644 --- a/application/libraries/vertragsbestandteil/VertragsbestandteilLib.php +++ b/application/libraries/vertragsbestandteil/VertragsbestandteilLib.php @@ -6,6 +6,7 @@ require_once __DIR__ . '/VertragsbestandteilZeitaufzeichnung.php'; require_once __DIR__ . '/VertragsbestandteilKuendigungsfrist.php'; require_once __DIR__ . '/VertragsbestandteilFreitext.php'; require_once __DIR__ . '/VertragsbestandteilFactory.php'; +require_once __DIR__ . '/GehaltsbestandteilLib.php'; use vertragsbestandteil\Vertragsbestandteil; use vertragsbestandteil\VertragsbestandteilFactory; @@ -136,8 +137,7 @@ class VertragsbestandteilLib protected function updateVertragsbestandteil(Vertragsbestandteil $vertragsbestandteil) { - $vertragsbestandteil->setUpdateamum(strftime('%Y-%m-%d %H:%M')) - ->setUpdatevon('ma0080'); + $vertragsbestandteil->setUpdateamum(strftime('%Y-%m-%d %H:%M:%S')); $vertragsbestandteil->beforePersist(); $ret = $this->VertragsbestandteilModel->update($vertragsbestandteil->getVertragsbestandteil_id(), $vertragsbestandteil->baseToStdClass()); diff --git a/application/models/vertragsbestandteil/Gehaltsbestandteil_model.php b/application/models/vertragsbestandteil/Gehaltsbestandteil_model.php index fce950012..ad48e68e0 100644 --- a/application/models/vertragsbestandteil/Gehaltsbestandteil_model.php +++ b/application/models/vertragsbestandteil/Gehaltsbestandteil_model.php @@ -14,7 +14,16 @@ class Gehaltsbestandteil_model extends DB_Model implements IEncryption public function getEncryptedColumns(): array { - return ['grundbetrag' => 'ENCRYPTIONKEY', 'betrag_valorisiert' => 'ENCRYPTIONKEY']; + return array( + 'grundbetrag' => array( + DB_Model::CRYPT_CAST => 'numeric', + DB_Model::CRYPT_PASSWORD_NAME => 'ENCRYPTIONKEY' + ), + 'betrag_valorisiert' => array( + DB_Model::CRYPT_CAST => 'numeric', + DB_Model::CRYPT_PASSWORD_NAME => 'ENCRYPTIONKEY' + ) + ); } public function getCurrentGBTByDV($dienstverhaeltnis_id) From c2e956f7f3f329980fa8a53367d38e17c4d64f1b Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Wed, 12 Apr 2023 15:32:22 +0200 Subject: [PATCH 144/176] use GehaltsbestandteilLib in VertragsbestandteilLib --- .../VertragsbestandteilLib.php | 61 +++++++++---------- 1 file changed, 30 insertions(+), 31 deletions(-) diff --git a/application/libraries/vertragsbestandteil/VertragsbestandteilLib.php b/application/libraries/vertragsbestandteil/VertragsbestandteilLib.php index fd65c3972..e154d0b43 100644 --- a/application/libraries/vertragsbestandteil/VertragsbestandteilLib.php +++ b/application/libraries/vertragsbestandteil/VertragsbestandteilLib.php @@ -6,7 +6,6 @@ require_once __DIR__ . '/VertragsbestandteilZeitaufzeichnung.php'; require_once __DIR__ . '/VertragsbestandteilKuendigungsfrist.php'; require_once __DIR__ . '/VertragsbestandteilFreitext.php'; require_once __DIR__ . '/VertragsbestandteilFactory.php'; -require_once __DIR__ . '/GehaltsbestandteilLib.php'; use vertragsbestandteil\Vertragsbestandteil; use vertragsbestandteil\VertragsbestandteilFactory; @@ -21,13 +20,20 @@ class VertragsbestandteilLib protected $CI; /** @var Vertragsbestandteil_model */ protected $VertragsbestandteilModel; - + /** + * @var GehaltsbestandteilLib + */ + protected $GehaltsbestandteilLib; + public function __construct() { $this->CI = get_instance(); $this->CI->load->model('vertragsbestandteil/Vertragsbestandteil_model', 'VertragsbestandteilModel'); $this->VertragsbestandteilModel = $this->CI->VertragsbestandteilModel; + $this->CI->load->library('vertragsbestandteil/GehaltsbestandteilLib', + null, 'GehaltsbestandteilLib'); + $this->GehaltsbestandteilLib = $this->CI->GehaltsbestandteilLib; } public function handleGUIData($guidata, $employeeUID, $userUID) @@ -82,8 +88,7 @@ class VertragsbestandteilLib } } - protected function insertVertragsbestandteil(Vertragsbestandteil $vertragsbestandteil, - Vertragsbestandteil $vertragsbestandteil_secondary = null /* i.e. Gehaltsbestandteil connected to Stunden*/) + protected function insertVertragsbestandteil(Vertragsbestandteil $vertragsbestandteil) { $vertragsbestandteil->beforePersist(); $ret = $this->VertragsbestandteilModel->insert($vertragsbestandteil->baseToStdClass()); @@ -105,34 +110,17 @@ class VertragsbestandteilLib throw new Exception('error updating vertragsbestandteil ' . $vertragsbestandteil->getVertragsbestandteiltyp_kurzbz()); } - - if ($vertragsbestandteil_secondary == null) return; - - if (!is_array($vertragsbestandteil_secondary)) - { - $vertragsbestandteil_secondary = [$vertragsbestandteil_secondary]; - } - - foreach ($vertragsbestandteil_secondary as $vb) - { - $specialisedModel = VertragsbestandteilFactory::getVertragsbestandteilDBModel( - $vb->getVertragsbestandteiltyp_kurzbz()); - - if ($specialisedModel instanceof IEncryption) - { - $retspecial = $specialisedModel->insert($vb->toStdClass(), $specialisedModel->getEncryptedColumns()); - } else - { - $retspecial = $specialisedModel->insert($vb->toStdClass()); - } - - if(isError($retspecial) ) - { - throw new Exception('error updating secondary vertragsbestandteil ' - . $vb->getVertragsbestandteiltyp_kurzbz()); - } - } + try + { + $gehaltsbestandteile = $vertragsbestandteil->getGehaltsbestandteile(); + $this->GehaltsbestandteilLib->storeGehaltsbestandteile($gehaltsbestandteile); + } + catch(Exception $ex) + { + throw new Exception('VertragsbestandteilLib insertVertragsbestandteil ' + . 'failed to store Gehaltsbestandteile. ' . $ex->getMessage()); + } } protected function updateVertragsbestandteil(Vertragsbestandteil $vertragsbestandteil) @@ -157,5 +145,16 @@ class VertragsbestandteilLib throw new Exception('error updating vertragsbestandteil ' . $vertragsbestandteil->getVertragsbestandteiltyp_kurzbz()); } + + try + { + $gehaltsbestandteile = $vertragsbestandteil->getGehaltsbestandteile(); + $this->GehaltsbestandteilLib->storeGehaltsbestandteile($gehaltsbestandteile); + } + catch(Exception $ex) + { + throw new Exception('VertragsbestandteilLib updateVertragsbestandteil ' + . 'failed to store Gehaltsbestandteile. ' . $ex->getMessage()); + } } } From 9e6d78dd1d7a13232b9c2bd7dd54cd9aecb76501 Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Wed, 12 Apr 2023 16:26:55 +0200 Subject: [PATCH 145/176] set Dienstverhaeltnis_id and Vertragsbestandteil_id on child Gehaltsbestandteile when added or changed --- .../vertragsbestandteil/Vertragsbestandteil.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/application/libraries/vertragsbestandteil/Vertragsbestandteil.php b/application/libraries/vertragsbestandteil/Vertragsbestandteil.php index a8e600d7f..e55337a01 100644 --- a/application/libraries/vertragsbestandteil/Vertragsbestandteil.php +++ b/application/libraries/vertragsbestandteil/Vertragsbestandteil.php @@ -39,6 +39,8 @@ abstract class Vertragsbestandteil implements \JsonSerializable public function addGehaltsbestandteil(Gehaltsbestandteil $gehaltsbestandteil) { + $gehaltsbestandteil->setDienstverhaeltnis_id($this->getDienstverhaeltnis_id()); + $gehaltsbestandteil->setVertragsbestandteil_id($this->getVertragsbestandteil_id()); $this->gehaltsbestandteile[] = $gehaltsbestandteil; return $this; } @@ -96,12 +98,20 @@ abstract class Vertragsbestandteil implements \JsonSerializable public function setVertragsbestandteil_id($vertragsbestandteil_id) { $this->vertragsbestandteil_id = $vertragsbestandteil_id; + foreach ($this->gehaltsbestandteile as $gehaltsbestandteil) + { + $gehaltsbestandteil->setVertragsbestandteil_id($vertragsbestandteil_id); + } return $this; } public function setDienstverhaeltnis_id($dienstverhaeltnis_id) { $this->dienstverhaeltnis_id = $dienstverhaeltnis_id; + foreach ($this->gehaltsbestandteile as $gehaltsbestandteil) + { + $gehaltsbestandteil->setDienstverhaeltnis_id($dienstverhaeltnis_id); + } return $this; } From e462a71b6d509e0c23e99ec6c0e766aef7910ba2 Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Wed, 12 Apr 2023 16:50:00 +0200 Subject: [PATCH 146/176] call parent constructor --- .../vertragsbestandteil/VertragsbestandteilBefristung.php | 1 + .../vertragsbestandteil/VertragsbestandteilFreitext.php | 1 + .../vertragsbestandteil/VertragsbestandteilFunktion.php | 1 + .../libraries/vertragsbestandteil/VertragsbestandteilKarenz.php | 1 + .../vertragsbestandteil/VertragsbestandteilKuendigungsfrist.php | 1 + .../libraries/vertragsbestandteil/VertragsbestandteilLehre.php | 1 + .../libraries/vertragsbestandteil/VertragsbestandteilStunden.php | 1 + .../vertragsbestandteil/VertragsbestandteilUrlaubsanspruch.php | 1 + .../vertragsbestandteil/VertragsbestandteilZeitaufzeichnung.php | 1 + 9 files changed, 9 insertions(+) diff --git a/application/libraries/vertragsbestandteil/VertragsbestandteilBefristung.php b/application/libraries/vertragsbestandteil/VertragsbestandteilBefristung.php index a2585b5e9..fb37a5a4b 100644 --- a/application/libraries/vertragsbestandteil/VertragsbestandteilBefristung.php +++ b/application/libraries/vertragsbestandteil/VertragsbestandteilBefristung.php @@ -11,6 +11,7 @@ class VertragsbestandteilBefristung extends Vertragsbestandteil public function __construct() { + parent::__construct(); $this->setVertragsbestandteiltyp_kurzbz( VertragsbestandteilFactory::VERTRAGSBESTANDTEIL_BEFRISTUNG); } diff --git a/application/libraries/vertragsbestandteil/VertragsbestandteilFreitext.php b/application/libraries/vertragsbestandteil/VertragsbestandteilFreitext.php index c878dc24b..5904ee1dd 100644 --- a/application/libraries/vertragsbestandteil/VertragsbestandteilFreitext.php +++ b/application/libraries/vertragsbestandteil/VertragsbestandteilFreitext.php @@ -12,6 +12,7 @@ class VertragsbestandteilFreitext extends Vertragsbestandteil public function __construct() { + parent::__construct(); $this->setVertragsbestandteiltyp_kurzbz( VertragsbestandteilFactory::VERTRAGSBESTANDTEIL_FREITEXT); } diff --git a/application/libraries/vertragsbestandteil/VertragsbestandteilFunktion.php b/application/libraries/vertragsbestandteil/VertragsbestandteilFunktion.php index a0ab364e0..54184dcb8 100644 --- a/application/libraries/vertragsbestandteil/VertragsbestandteilFunktion.php +++ b/application/libraries/vertragsbestandteil/VertragsbestandteilFunktion.php @@ -18,6 +18,7 @@ class VertragsbestandteilFunktion extends Vertragsbestandteil public function __construct() { + parent::__construct(); $this->benutzerfunktiondata = null; $this->setVertragsbestandteiltyp_kurzbz( diff --git a/application/libraries/vertragsbestandteil/VertragsbestandteilKarenz.php b/application/libraries/vertragsbestandteil/VertragsbestandteilKarenz.php index 3c9f7b38d..540389ae3 100644 --- a/application/libraries/vertragsbestandteil/VertragsbestandteilKarenz.php +++ b/application/libraries/vertragsbestandteil/VertragsbestandteilKarenz.php @@ -12,6 +12,7 @@ class VertragsbestandteilKarenz extends Vertragsbestandteil public function __construct() { + parent::__construct(); $this->setVertragsbestandteiltyp_kurzbz( VertragsbestandteilFactory::VERTRAGSBESTANDTEIL_KARENZ); } diff --git a/application/libraries/vertragsbestandteil/VertragsbestandteilKuendigungsfrist.php b/application/libraries/vertragsbestandteil/VertragsbestandteilKuendigungsfrist.php index 18b220b37..9fe99c6d9 100644 --- a/application/libraries/vertragsbestandteil/VertragsbestandteilKuendigungsfrist.php +++ b/application/libraries/vertragsbestandteil/VertragsbestandteilKuendigungsfrist.php @@ -11,6 +11,7 @@ class VertragsbestandteilKuendigungsfrist extends Vertragsbestandteil public function __construct() { + parent::__construct(); $this->setVertragsbestandteiltyp_kurzbz( VertragsbestandteilFactory::VERTRAGSBESTANDTEIL_KUENDIGUNGSFRIST); } diff --git a/application/libraries/vertragsbestandteil/VertragsbestandteilLehre.php b/application/libraries/vertragsbestandteil/VertragsbestandteilLehre.php index 2c665cbf5..2e6fe8bc3 100644 --- a/application/libraries/vertragsbestandteil/VertragsbestandteilLehre.php +++ b/application/libraries/vertragsbestandteil/VertragsbestandteilLehre.php @@ -10,6 +10,7 @@ class VertragsbestandteilLehre extends Vertragsbestandteil public function __construct() { + parent::__construct(); $this->setVertragsbestandteiltyp_kurzbz( VertragsbestandteilFactory::VERTRAGSBESTANDTEIL_LEHRE); } diff --git a/application/libraries/vertragsbestandteil/VertragsbestandteilStunden.php b/application/libraries/vertragsbestandteil/VertragsbestandteilStunden.php index 8aba3fc2e..741319140 100644 --- a/application/libraries/vertragsbestandteil/VertragsbestandteilStunden.php +++ b/application/libraries/vertragsbestandteil/VertragsbestandteilStunden.php @@ -19,6 +19,7 @@ class VertragsbestandteilStunden extends Vertragsbestandteil public function __construct() { + parent::__construct(); $this->setVertragsbestandteiltyp_kurzbz( VertragsbestandteilFactory::VERTRAGSBESTANDTEIL_STUNDEN); } diff --git a/application/libraries/vertragsbestandteil/VertragsbestandteilUrlaubsanspruch.php b/application/libraries/vertragsbestandteil/VertragsbestandteilUrlaubsanspruch.php index 285d7e8ad..69861c5d5 100644 --- a/application/libraries/vertragsbestandteil/VertragsbestandteilUrlaubsanspruch.php +++ b/application/libraries/vertragsbestandteil/VertragsbestandteilUrlaubsanspruch.php @@ -10,6 +10,7 @@ class VertragsbestandteilUrlaubsanspruch extends Vertragsbestandteil public function __construct() { + parent::__construct(); $this->setVertragsbestandteiltyp_kurzbz( VertragsbestandteilFactory::VERTRAGSBESTANDTEIL_URLAUBSANSPRUCH); } diff --git a/application/libraries/vertragsbestandteil/VertragsbestandteilZeitaufzeichnung.php b/application/libraries/vertragsbestandteil/VertragsbestandteilZeitaufzeichnung.php index fb715304c..a0365315e 100644 --- a/application/libraries/vertragsbestandteil/VertragsbestandteilZeitaufzeichnung.php +++ b/application/libraries/vertragsbestandteil/VertragsbestandteilZeitaufzeichnung.php @@ -12,6 +12,7 @@ class VertragsbestandteilZeitaufzeichnung extends Vertragsbestandteil public function __construct() { + parent::__construct(); $this->setVertragsbestandteiltyp_kurzbz( VertragsbestandteilFactory::VERTRAGSBESTANDTEIL_ZEITAUFZEICHNUNG); } From 5d668791f937706a9a235f18acff1bbd47753fc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Fri, 14 Apr 2023 14:37:52 +0200 Subject: [PATCH 147/176] =?UTF-8?q?Projektphase=20in=20der=20Zeiterfassung?= =?UTF-8?q?=20werden=20tempor=C3=A4r=207=20Monate=20in=20die=20Vergangenhe?= =?UTF-8?q?it=20anzgezeigt=20um=20die=20Erfassung=20von=20alten=20Eintr?= =?UTF-8?q?=C3=A4gen=20zu=20erm=C3=B6glichen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/projektphase.class.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/include/projektphase.class.php b/include/projektphase.class.php index 4e3c38b7c..c1cd8322c 100644 --- a/include/projektphase.class.php +++ b/include/projektphase.class.php @@ -718,10 +718,10 @@ class projektphase extends basis_db ( ( (tbl_projekt.beginn<=now() or tbl_projekt.beginn is null) - AND (tbl_projekt.ende + interval '1 month 1 day' >=now() OR tbl_projekt.ende is null) + AND (tbl_projekt.ende + interval '7 month 1 day' >=now() OR tbl_projekt.ende is null) ) AND ( (tbl_projektphase.start<=now() or tbl_projektphase.start is null) - AND (tbl_projektphase.ende + interval '1 month 1 day' >=now() OR tbl_projektphase.ende is null) + AND (tbl_projektphase.ende + interval '7 month 1 day' >=now() OR tbl_projektphase.ende is null) ) ) AND mitarbeiter_uid=" . $this->db_add_param($mitarbeiter_uid); @@ -787,10 +787,10 @@ class projektphase extends basis_db ( ( (tbl_projekt.beginn<=now() or tbl_projekt.beginn is null) - AND (tbl_projekt.ende + interval '1 month 1 day' >=now() OR tbl_projekt.ende is null) + AND (tbl_projekt.ende + interval '7 month 1 day' >=now() OR tbl_projekt.ende is null) ) AND ( (tbl_projektphase.start<=now() or tbl_projektphase.start is null) - AND (tbl_projektphase.ende + interval '1 month 1 day' >=now() OR tbl_projektphase.ende is null) + AND (tbl_projektphase.ende + interval '7 month 1 day' >=now() OR tbl_projektphase.ende is null) ) ) AND mitarbeiter_uid = ".$this->db_add_param($mitarbeiter_uid)." From 29485a090bd8dcc39e883e3dff6c2931d34b7bce Mon Sep 17 00:00:00 2001 From: Werner Masik Date: Fri, 14 Apr 2023 15:51:58 +0200 Subject: [PATCH 148/176] removed remaining unit test for GUI --- .../vertragsbestandteil/gui/FormDataTest.php | 40 -- .../GUIVertragsbestandteilFunktionTest.php | 39 -- ...ertragsbestandteilKuendigungsfristTest.php | 36 -- .../gui/GUIVertragsbestandteilStundenTest.php | 77 ---- ...ertragsbestandteilZeitaufzeichnungTest.php | 39 -- .../GUIVertragsbestandteilZusatzvbTest.php | 41 -- .../gui/GuiHandlerTest.php | 41 -- .../vertragsbestandteil/gui/funktion01.json | 241 ------------ .../gui/kuendigungsfrist01.json | 263 ------------- .../vertragsbestandteil/gui/readme.txt | 6 - .../vertragsbestandteil/gui/stunden01.json | 241 ------------ .../gui/zeitaufzeichnung01.json | 264 ------------- .../vertragsbestandteil/gui/zusatz01.json | 354 ------------------ 13 files changed, 1682 deletions(-) delete mode 100644 system/UnitTests/vertragsbestandteil/gui/FormDataTest.php delete mode 100644 system/UnitTests/vertragsbestandteil/gui/GUIVertragsbestandteilFunktionTest.php delete mode 100644 system/UnitTests/vertragsbestandteil/gui/GUIVertragsbestandteilKuendigungsfristTest.php delete mode 100644 system/UnitTests/vertragsbestandteil/gui/GUIVertragsbestandteilStundenTest.php delete mode 100644 system/UnitTests/vertragsbestandteil/gui/GUIVertragsbestandteilZeitaufzeichnungTest.php delete mode 100644 system/UnitTests/vertragsbestandteil/gui/GUIVertragsbestandteilZusatzvbTest.php delete mode 100644 system/UnitTests/vertragsbestandteil/gui/GuiHandlerTest.php delete mode 100644 system/UnitTests/vertragsbestandteil/gui/funktion01.json delete mode 100644 system/UnitTests/vertragsbestandteil/gui/kuendigungsfrist01.json delete mode 100644 system/UnitTests/vertragsbestandteil/gui/readme.txt delete mode 100644 system/UnitTests/vertragsbestandteil/gui/stunden01.json delete mode 100644 system/UnitTests/vertragsbestandteil/gui/zeitaufzeichnung01.json delete mode 100644 system/UnitTests/vertragsbestandteil/gui/zusatz01.json diff --git a/system/UnitTests/vertragsbestandteil/gui/FormDataTest.php b/system/UnitTests/vertragsbestandteil/gui/FormDataTest.php deleted file mode 100644 index 7bfaee017..000000000 --- a/system/UnitTests/vertragsbestandteil/gui/FormDataTest.php +++ /dev/null @@ -1,40 +0,0 @@ -mapJSON($decoded); - // Dienstverhaeltnis - $dataDV = $formDataMapper->getData(); - $this->assertNotEmpty($dataDV); - $this->assertNotEmpty($dataDV['unternehmen']); - $this->assertEquals('gst', $dataDV['unternehmen']); - $this->assertNull($dataDV['dienstverhaeltnisid']); - $this->assertNotEmpty($dataDV['vertragsart_kurzbz']); - $this->assertEquals('echterdv', $dataDV['vertragsart_kurzbz']); - $this->assertNotEmpty($dataDV['gueltigkeit']); - $this->assertNotEmpty($dataDV['gueltigkeit']->getGuioptions()); - $this->assertNotEmpty($dataDV['gueltigkeit']->getData()); - $this->assertNotEmpty($dataDV['gueltigkeit']->getData()['gueltig_ab']); - // Vertragsbestandteile - $vbs = $formDataMapper->getVbs(); - $this->assertNotEmpty($vbs); - } - - - -} \ No newline at end of file diff --git a/system/UnitTests/vertragsbestandteil/gui/GUIVertragsbestandteilFunktionTest.php b/system/UnitTests/vertragsbestandteil/gui/GUIVertragsbestandteilFunktionTest.php deleted file mode 100644 index 7369cd026..000000000 --- a/system/UnitTests/vertragsbestandteil/gui/GUIVertragsbestandteilFunktionTest.php +++ /dev/null @@ -1,39 +0,0 @@ -mapJSON($decoded); - // VBS - $vbs = $formDataMapper->getVbs(); - $this->assertNotEmpty($vbs); - $this->assertNotEmpty($vbs['fc5f4ab8-4652-40e4-9ac3-e76bbf7310af']); - $vbsMapper = new GUIVertragsbestandteilFunktion(); - $vbsMapper->mapJSON($vbs['fc5f4ab8-4652-40e4-9ac3-e76bbf7310af']); - $vbsData=$vbsMapper->getData(); - $this->assertNotEmpty($vbsData['funktion']); - $this->assertEquals('Leitung', $vbsData['funktion']); - // GBS - $this->assertEmpty($vbsMapper->getGbs()); - - - } - - - -} \ No newline at end of file diff --git a/system/UnitTests/vertragsbestandteil/gui/GUIVertragsbestandteilKuendigungsfristTest.php b/system/UnitTests/vertragsbestandteil/gui/GUIVertragsbestandteilKuendigungsfristTest.php deleted file mode 100644 index a36c749c9..000000000 --- a/system/UnitTests/vertragsbestandteil/gui/GUIVertragsbestandteilKuendigungsfristTest.php +++ /dev/null @@ -1,36 +0,0 @@ -mapJSON($decoded); - // VBS - $vbs = $formDataMapper->getVbs(); - $this->assertNotEmpty($vbs); - $this->assertNotEmpty($vbs['6ae61b45-99a8-406b-b583-9f0353dd834f']); - $vbsMapper = new GUIVertragsbestandteilKuendigungsfrist(); - $vbsMapper->mapJSON($vbs['6ae61b45-99a8-406b-b583-9f0353dd834f']); - $vbsData=$vbsMapper->getData(); - $this->assertNotEmpty($vbsData['arbeitgeber_frist']); - $this->assertNotEmpty($vbsData['arbeitnehmer_frist']); - - } - - - -} \ No newline at end of file diff --git a/system/UnitTests/vertragsbestandteil/gui/GUIVertragsbestandteilStundenTest.php b/system/UnitTests/vertragsbestandteil/gui/GUIVertragsbestandteilStundenTest.php deleted file mode 100644 index 5716d3bed..000000000 --- a/system/UnitTests/vertragsbestandteil/gui/GUIVertragsbestandteilStundenTest.php +++ /dev/null @@ -1,77 +0,0 @@ -mapJSON($decoded); - // VBS - $vbs = $formDataMapper->getVbs(); - $this->assertNotEmpty($vbs); - $this->assertNotEmpty($vbs['73a60d69-cbd5-40f0-bcb1-ed0ccdd4a9fd']); - $vbsMapper = new GUIVertragsbestandteilStunden(); - $vbsMapper->mapJSON($vbs['73a60d69-cbd5-40f0-bcb1-ed0ccdd4a9fd']); - $vbsData=$vbsMapper->getData(); - var_dump($vbsData); - $this->assertNotEmpty($vbsData['stunden']); - $this->assertEquals(38.5, $vbsData['stunden']); - // GBS - $this->assertNotEmpty($vbsMapper->getGbs()); - - foreach ($vbsMapper->getGbs() as $gbs) - { - $this->assertNotEmpty($gbs->getData()); - $gbsData = $gbs->getData(); - $this->assertNotEmpty($gbsData['gehaltstyp']); - $this->assertNotEmpty($gbsData['betrag']); - $this->assertNotEmpty($gbsData['gueltigkeit']); - $this->assertNotEmpty($gbsData['valorisierung']); - } - } - - public function testMapJSON_02() - { - $jsondata = file_get_contents('./system/UnitTests/vertragsbestandteil/gui/funktion01.json'); - $decoded = json_decode($jsondata, true); - $formDataMapper = new FormData(); - $formDataMapper->mapJSON($decoded); - // VBS - $vbs = $formDataMapper->getVbs(); - $this->assertNotEmpty($vbs); - $this->assertNotEmpty($vbs['98704748-0ef0-4a70-94b7-5d8e719c2b3e']); - $vbsMapper = new GUIVertragsbestandteilStunden(); - $vbsMapper->mapJSON($vbs['98704748-0ef0-4a70-94b7-5d8e719c2b3e']); - $vbsData=$vbsMapper->getData(); - $this->assertNotEmpty($vbsData['stunden']); - $this->assertEquals(38.5, $vbsData['stunden']); - $this->assertNotEmpty($vbsData['gueltigkeit']->getData()); - // GBS - $this->assertNotEmpty($vbsMapper->getGbs()); - - foreach ($vbsMapper->getGbs() as $gbs) - { - $this->assertNotEmpty($gbs->getData()); - $gbsData = $gbs->getData(); - $this->assertNotEmpty($gbsData['gehaltstyp']); - $this->assertNotEmpty($gbsData['betrag']); - $this->assertNotEmpty($gbsData['gueltigkeit']); - $this->assertEmpty($gbsData['valorisierung']); - $this->assertNotEmpty($gbsData['gueltigkeit']->getData()); - } - } - -} \ No newline at end of file diff --git a/system/UnitTests/vertragsbestandteil/gui/GUIVertragsbestandteilZeitaufzeichnungTest.php b/system/UnitTests/vertragsbestandteil/gui/GUIVertragsbestandteilZeitaufzeichnungTest.php deleted file mode 100644 index f76d65aee..000000000 --- a/system/UnitTests/vertragsbestandteil/gui/GUIVertragsbestandteilZeitaufzeichnungTest.php +++ /dev/null @@ -1,39 +0,0 @@ -mapJSON($decoded); - // VBS - $vbs = $formDataMapper->getVbs(); - $this->assertNotEmpty($vbs); - $this->assertNotEmpty($vbs['7625d25d-8fd9-476b-94a6-4fbb72c147d4']); - $vbsMapper = new GUIVertragsbestandteilZeitaufzeichnung(); - $vbsMapper->mapJSON($vbs['7625d25d-8fd9-476b-94a6-4fbb72c147d4']); - $vbsData=$vbsMapper->getData(); - $this->assertNotEmpty($vbsData['zeitaufzeichnung']); - $this->assertTrue($vbsData['zeitaufzeichnung']); - $this->assertEmpty($vbsData['azgrelevant']); - $this->assertNotEmpty($vbsData['homeoffice']); - $this->assertTrue($vbsData['homeoffice']); - - } - - - -} \ No newline at end of file diff --git a/system/UnitTests/vertragsbestandteil/gui/GUIVertragsbestandteilZusatzvbTest.php b/system/UnitTests/vertragsbestandteil/gui/GUIVertragsbestandteilZusatzvbTest.php deleted file mode 100644 index 705919f5a..000000000 --- a/system/UnitTests/vertragsbestandteil/gui/GUIVertragsbestandteilZusatzvbTest.php +++ /dev/null @@ -1,41 +0,0 @@ -mapJSON($decoded); - // VBS - $vbs = $formDataMapper->getVbs(); - $this->assertNotEmpty($vbs); - $this->assertNotEmpty($vbs['b168a3bb-d0e2-407f-8192-525a5ab59b22']); - $vbsMapper = new GUIVertragsbestandteilZusatzvereinbarung(); - $vbsMapper->mapJSON($vbs['b168a3bb-d0e2-407f-8192-525a5ab59b22']); - $vbsData=$vbsMapper->getData(); - $this->assertNotEmpty($vbsData['freitexttyp']); - $this->assertEquals('allin', $vbsData['freitexttyp']); - $this->assertNotEmpty($vbsData['titel']); - $this->assertEquals('Lorem ipsum', $vbsData['titel']); - // GBS - $this->assertEmpty($vbsMapper->getGbs()); - - - } - - - -} \ No newline at end of file diff --git a/system/UnitTests/vertragsbestandteil/gui/GuiHandlerTest.php b/system/UnitTests/vertragsbestandteil/gui/GuiHandlerTest.php deleted file mode 100644 index fa808ff1d..000000000 --- a/system/UnitTests/vertragsbestandteil/gui/GuiHandlerTest.php +++ /dev/null @@ -1,41 +0,0 @@ -load->helper('hlp_common'); - self::$CI->load->helper('hlp_return_object'); - } - - - public function testHandleInsert(): void - { - $jsondata = file_get_contents('./system/UnitTests/vertragsbestandteil/gui/stunden01.json'); - $this->assertNotEmpty($jsondata); - $GH = new GUIHandler($this->employeeUID, $this->userUID); - $res = $GH->handle($jsondata); - } - - - - public function test_true() - { - $this->assertTrue(true); - } - - - -} \ No newline at end of file diff --git a/system/UnitTests/vertragsbestandteil/gui/funktion01.json b/system/UnitTests/vertragsbestandteil/gui/funktion01.json deleted file mode 100644 index 5130a317e..000000000 --- a/system/UnitTests/vertragsbestandteil/gui/funktion01.json +++ /dev/null @@ -1,241 +0,0 @@ -{ - "type": "formdata", - "children": [ - { - "type": "tabs", - "guioptions": {}, - "children": [ - { - "type": "tab", - "guioptions": { - "title": "Allgemein", - "id": "allgemein" - }, - "children": [ - { - "type": "dv", - "guioptions": {}, - "children": [] - }, - { - "type": "vertragsbestandteillist", - "guioptions": { - "title": "Kündigungsfrist", - "vertragsbestandteiltyp": "vertragsbestandteilkuendigungsfrist" - }, - "children": [] - }, - { - "type": "vertragsbestandteillist", - "guioptions": { - "title": "Befristung", - "vertragsbestandteiltyp": "vertragsbestandteilfreitext", - "childdefaults": { - "guioptions": { - "canhavegehaltsbestandteile": false, - "disabled": [ - "freitexttyp" - ], - "hidden": [ - "titel", - "freitext" - ] - }, - "data": { - "freitexttyp": "befristung", - "titel": "Befristung", - "freitext": "befristeter Dienstvertrag" - } - } - }, - "children": [] - } - ] - }, - { - "type": "tab", - "guioptions": { - "title": "Arbeitszeit & Basisgehalt", - "id": "arbeitszeit" - }, - "children": [ - { - "type": "vertragsbestandteillist", - "guioptions": { - "title": "Arbeitszeit", - "vertragsbestandteiltyp": "vertragsbestandteilstunden", - "errors": [ - "test1", - "test2" - ], - "infos": [] - }, - "children": [ - "98704748-0ef0-4a70-94b7-5d8e719c2b3e" - ] - }, - { - "type": "vertragsbestandteillist", - "guioptions": { - "title": "Zeitaufzeichnung", - "vertragsbestandteiltyp": "vertragsbestandteilzeitaufzeichnung", - "errors": [], - "infos": [] - }, - "children": [] - } - ] - }, - { - "type": "tab", - "guioptions": { - "title": "Funktionen", - "id": "funktionen" - }, - "children": [ - { - "type": "vertragsbestandteillist", - "guioptions": { - "title": "Funktion", - "vertragsbestandteiltyp": "vertragsbestandteilfunktion", - "errors": [], - "infos": [] - }, - "children": [ - "fc5f4ab8-4652-40e4-9ac3-e76bbf7310af" - ] - } - ] - }, - { - "type": "tab", - "guioptions": { - "title": "Zusatzvereinbarungen", - "id": "zusatzvereinbarungen" - }, - "children": [ - { - "type": "vertragsbestandteillist", - "guioptions": { - "title": "Zusatzvereinbarungen", - "vertragsbestandteiltyp": "vertragsbestandteilfreitext" - }, - "children": [] - } - ] - }, - { - "type": "tab", - "guioptions": { - "title": "Sonstiges", - "id": "sonstiges" - }, - "children": [ - { - "type": "vertragsbestandteillist", - "guioptions": { - "title": "Kündigungsfrist", - "vertragsbestandteiltyp": "vertragsbestandteilkuendigungsfrist", - "errors": [], - "infos": [] - }, - "children": [] - } - ] - } - ] - } - ], - "data": { - "dienstverhaeltnisid": null, - "unternehmen": "gst", - "vertragsart_kurzbz": "echterdv", - "gueltigkeit": { - "guioptions": { - "sharedstatemode": "set" - }, - "data": { - "gueltig_ab": "1.1.2001", - "gueltig_bis": "" - } - } - }, - "vbs": { - "98704748-0ef0-4a70-94b7-5d8e719c2b3e": { - "type": "vertragsbestandteilstunden", - "guioptions": { - "id": "98704748-0ef0-4a70-94b7-5d8e719c2b3e", - "infos": [ - "test info 1", - "test info 2" - ], - "errors": [ - "test error 1", - "test error 2" - ] - }, - "data": { - "stunden": 38.5, - "gueltigkeit": { - "guioptions": { - "sharedstatemode": "reflect" - }, - "data": { - "gueltig_ab": "1.1.2001", - "gueltig_bis": "" - } - } - }, - "gbs": [ - { - "type": "gehaltsbestandteil", - "guioptions": { - "infos": [ - "test info 1", - "test info 2" - ], - "errors": [ - "test error 1", - "test error 2" - ] - }, - "data": { - "gehaltstyp": "grund", - "betrag": "3500", - "gueltigkeit": { - "guioptions": { - "sharedstatemode": "reflect" - }, - "data": { - "gueltig_ab": "1.1.2001", - "gueltig_bis": "" - } - }, - "valorisierung": "" - } - } - ] - }, - "fc5f4ab8-4652-40e4-9ac3-e76bbf7310af": { - "type": "vertragsbestandteilfunktion", - "guioptions": { - "id": "fc5f4ab8-4652-40e4-9ac3-e76bbf7310af" - }, - "data": { - "funktion": "Leitung", - "orget": "", - "gueltigkeit": { - "guioptions": { - "sharedstatemode": "reflect" - }, - "data": { - "gueltig_ab": "1.1.2001", - "gueltig_bis": "" - } - } - }, - "gbs": [] - } - } - } - \ No newline at end of file diff --git a/system/UnitTests/vertragsbestandteil/gui/kuendigungsfrist01.json b/system/UnitTests/vertragsbestandteil/gui/kuendigungsfrist01.json deleted file mode 100644 index 4e279a047..000000000 --- a/system/UnitTests/vertragsbestandteil/gui/kuendigungsfrist01.json +++ /dev/null @@ -1,263 +0,0 @@ -{ - "type": "formdata", - "children": [ - { - "type": "tabs", - "guioptions": {}, - "children": [ - { - "type": "tab", - "guioptions": { - "title": "Allgemein", - "id": "allgemein" - }, - "children": [ - { - "type": "dv", - "guioptions": {}, - "children": [] - }, - { - "type": "vertragsbestandteillist", - "guioptions": { - "title": "Kündigungsfrist", - "vertragsbestandteiltyp": "vertragsbestandteilkuendigungsfrist" - }, - "children": [ - "6ae61b45-99a8-406b-b583-9f0353dd834f" - ] - }, - { - "type": "vertragsbestandteillist", - "guioptions": { - "title": "Befristung", - "vertragsbestandteiltyp": "vertragsbestandteilfreitext", - "childdefaults": { - "guioptions": { - "canhavegehaltsbestandteile": false, - "disabled": [ - "freitexttyp" - ], - "hidden": [ - "titel", - "freitext" - ] - }, - "data": { - "freitexttyp": "befristung", - "titel": "Befristung", - "freitext": "befristeter Dienstvertrag" - } - } - }, - "children": [] - } - ] - }, - { - "type": "tab", - "guioptions": { - "title": "Arbeitszeit & Basisgehalt", - "id": "arbeitszeit" - }, - "children": [ - { - "type": "vertragsbestandteillist", - "guioptions": { - "title": "Arbeitszeit", - "vertragsbestandteiltyp": "vertragsbestandteilstunden", - "errors": [ - "test1", - "test2" - ], - "infos": [] - }, - "children": [ - "98704748-0ef0-4a70-94b7-5d8e719c2b3e" - ] - }, - { - "type": "vertragsbestandteillist", - "guioptions": { - "title": "Zeitaufzeichnung", - "vertragsbestandteiltyp": "vertragsbestandteilzeitaufzeichnung", - "errors": [], - "infos": [] - }, - "children": [] - } - ] - }, - { - "type": "tab", - "guioptions": { - "title": "Funktionen", - "id": "funktionen" - }, - "children": [ - { - "type": "vertragsbestandteillist", - "guioptions": { - "title": "Funktion", - "vertragsbestandteiltyp": "vertragsbestandteilfunktion", - "errors": [], - "infos": [] - }, - "children": [ - "fc5f4ab8-4652-40e4-9ac3-e76bbf7310af" - ] - } - ] - }, - { - "type": "tab", - "guioptions": { - "title": "Zusatzvereinbarungen", - "id": "zusatzvereinbarungen" - }, - "children": [ - { - "type": "vertragsbestandteillist", - "guioptions": { - "title": "Zusatzvereinbarungen", - "vertragsbestandteiltyp": "vertragsbestandteilfreitext" - }, - "children": [] - } - ] - }, - { - "type": "tab", - "guioptions": { - "title": "Sonstiges", - "id": "sonstiges" - }, - "children": [ - { - "type": "vertragsbestandteillist", - "guioptions": { - "title": "Kündigungsfrist", - "vertragsbestandteiltyp": "vertragsbestandteilkuendigungsfrist", - "errors": [], - "infos": [] - }, - "children": [] - } - ] - } - ] - } - ], - "data": { - "dienstverhaeltnisid": null, - "unternehmen": "gst", - "vertragsart_kurzbz": "echterdv", - "gueltigkeit": { - "guioptions": { - "sharedstatemode": "set" - }, - "data": { - "gueltig_ab": "1.1.2001", - "gueltig_bis": "" - } - } - }, - "vbs": { - "98704748-0ef0-4a70-94b7-5d8e719c2b3e": { - "type": "vertragsbestandteilstunden", - "guioptions": { - "id": "98704748-0ef0-4a70-94b7-5d8e719c2b3e", - "infos": [ - "test info 1", - "test info 2" - ], - "errors": [ - "test error 1", - "test error 2" - ] - }, - "data": { - "stunden": "38,5", - "gueltigkeit": { - "guioptions": { - "sharedstatemode": "reflect" - }, - "data": { - "gueltig_ab": "1.1.2001", - "gueltig_bis": "" - } - } - }, - "gbs": [ - { - "type": "gehaltsbestandteil", - "guioptions": { - "infos": [ - "test info 1", - "test info 2" - ], - "errors": [ - "test error 1", - "test error 2" - ] - }, - "data": { - "gehaltstyp": "grund", - "betrag": "3500", - "gueltigkeit": { - "guioptions": { - "sharedstatemode": "reflect" - }, - "data": { - "gueltig_ab": "1.1.2001", - "gueltig_bis": "" - } - }, - "valorisierung": "" - } - } - ] - }, - "fc5f4ab8-4652-40e4-9ac3-e76bbf7310af": { - "type": "vertragsbestandteilfunktion", - "guioptions": { - "id": "fc5f4ab8-4652-40e4-9ac3-e76bbf7310af" - }, - "data": { - "funktion": "Leitung", - "orget": "", - "gueltigkeit": { - "guioptions": { - "sharedstatemode": "reflect" - }, - "data": { - "gueltig_ab": "1.1.2001", - "gueltig_bis": "" - } - } - }, - "gbs": [] - }, - "6ae61b45-99a8-406b-b583-9f0353dd834f": { - "type": "vertragsbestandteilkuendigungsfrist", - "guioptions": { - "id": "6ae61b45-99a8-406b-b583-9f0353dd834f", - "removeable": true - }, - "data": { - "arbeitgeber_frist": "8", - "arbeitnehmer_frist": "4", - "gueltigkeit": { - "guioptions": { - "sharedstatemode": "reflect" - }, - "data": { - "gueltig_ab": "1.1.2001", - "gueltig_bis": "" - } - } - } - } - } - } - \ No newline at end of file diff --git a/system/UnitTests/vertragsbestandteil/gui/readme.txt b/system/UnitTests/vertragsbestandteil/gui/readme.txt deleted file mode 100644 index 7aaeab96f..000000000 --- a/system/UnitTests/vertragsbestandteil/gui/readme.txt +++ /dev/null @@ -1,6 +0,0 @@ - - -testen: - -./vendor/bin/phpunit system/UnitTests/vertragsbestandteil/gui/FormDataTest.php -./vendor/bin/phpunit system/UnitTests/vertragsbestandteil/gui/GuiHandlerTest.php \ No newline at end of file diff --git a/system/UnitTests/vertragsbestandteil/gui/stunden01.json b/system/UnitTests/vertragsbestandteil/gui/stunden01.json deleted file mode 100644 index 48295f742..000000000 --- a/system/UnitTests/vertragsbestandteil/gui/stunden01.json +++ /dev/null @@ -1,241 +0,0 @@ -{ - "type": "formdata", - "children": [ - { - "type": "tabs", - "guioptions": {}, - "children": [ - { - "type": "tab", - "guioptions": { - "title": "Allgemein", - "id": "allgemein" - }, - "children": [ - { - "type": "dv", - "guioptions": {}, - "children": [] - }, - { - "type": "vertragsbestandteillist", - "guioptions": { - "title": "Kündigungsfrist", - "vertragsbestandteiltyp": "vertragsbestandteilkuendigungsfrist" - }, - "children": [] - }, - { - "type": "vertragsbestandteillist", - "guioptions": { - "title": "Befristung", - "vertragsbestandteiltyp": "vertragsbestandteilfreitext", - "childdefaults": { - "guioptions": { - "canhavegehaltsbestandteile": false, - "disabled": [ - "freitexttyp" - ], - "hidden": [ - "titel", - "freitext" - ] - }, - "data": { - "freitexttyp": "befristung", - "titel": "Befristung", - "freitext": "befristeter Dienstvertrag" - } - } - }, - "children": [] - } - ] - }, - { - "type": "tab", - "guioptions": { - "title": "Arbeitszeit & Basisgehalt", - "id": "arbeitszeit" - }, - "children": [ - { - "type": "vertragsbestandteillist", - "guioptions": { - "title": "Arbeitszeit", - "vertragsbestandteiltyp": "vertragsbestandteilstunden", - "errors": [ - "test1", - "test2" - ], - "infos": [] - }, - "children": [ - "73a60d69-cbd5-40f0-bcb1-ed0ccdd4a9fd" - ] - }, - { - "type": "vertragsbestandteillist", - "guioptions": { - "title": "Zeitaufzeichnung", - "vertragsbestandteiltyp": "vertragsbestandteilzeitaufzeichnung", - "errors": [], - "infos": [] - }, - "children": [] - } - ] - }, - { - "type": "tab", - "guioptions": { - "title": "Funktionen", - "id": "funktionen" - }, - "children": [ - { - "type": "vertragsbestandteillist", - "guioptions": { - "title": "Funktion", - "vertragsbestandteiltyp": "vertragsbestandteilfunktion", - "errors": [], - "infos": [] - }, - "children": [ - "a0e35f18-e4d9-4dc3-8001-1b689360782a" - ] - } - ] - }, - { - "type": "tab", - "guioptions": { - "title": "Zusatzvereinbarungen", - "id": "zusatzvereinbarungen" - }, - "children": [ - { - "type": "vertragsbestandteillist", - "guioptions": { - "title": "Zusatzvereinbarungen", - "vertragsbestandteiltyp": "vertragsbestandteilfreitext" - }, - "children": [] - } - ] - }, - { - "type": "tab", - "guioptions": { - "title": "Sonstiges", - "id": "sonstiges" - }, - "children": [ - { - "type": "vertragsbestandteillist", - "guioptions": { - "title": "Kündigungsfrist", - "vertragsbestandteiltyp": "vertragsbestandteilkuendigungsfrist", - "errors": [], - "infos": [] - }, - "children": [] - } - ] - } - ] - } - ], - "data": { - "dienstverhaeltnisid": null, - "unternehmen": "gst", - "vertragsart_kurzbz": "echterdv", - "gueltigkeit": { - "guioptions": { - "sharedstatemode": "set" - }, - "data": { - "gueltig_ab": "1.1.2011", - "gueltig_bis": "" - } - } - }, - "vbs": { - "73a60d69-cbd5-40f0-bcb1-ed0ccdd4a9fd": { - "type": "vertragsbestandteilstunden", - "guioptions": { - "id": "73a60d69-cbd5-40f0-bcb1-ed0ccdd4a9fd", - "infos": [ - "test info 1", - "test info 2" - ], - "errors": [ - "test error 1", - "test error 2" - ] - }, - "data": { - "stunden": 38.5, - "gueltigkeit": { - "guioptions": { - "sharedstatemode": "reflect" - }, - "data": { - "gueltig_ab": "1.1.2011", - "gueltig_bis": "" - } - } - }, - "gbs": [ - { - "type": "gehaltsbestandteil", - "guioptions": { - "infos": [ - "test info 1", - "test info 2" - ], - "errors": [ - "test error 1", - "test error 2" - ] - }, - "data": { - "gehaltstyp": "grund", - "betrag": "3334", - "gueltigkeit": { - "guioptions": { - "sharedstatemode": "reflect" - }, - "data": { - "gueltig_ab": "1.1.2011", - "gueltig_bis": "" - } - }, - "valorisierung": true - } - } - ] - }, - "a0e35f18-e4d9-4dc3-8001-1b689360782a": { - "type": "vertragsbestandteilfunktion", - "guioptions": { - "id": "a0e35f18-e4d9-4dc3-8001-1b689360782a" - }, - "data": { - "funktion": "Leitung", - "orget": "", - "gueltigkeit": { - "guioptions": { - "sharedstatemode": "reflect" - }, - "data": { - "gueltig_ab": "1.1.2011", - "gueltig_bis": "" - } - } - }, - "gbs": [] - } - } -} - \ No newline at end of file diff --git a/system/UnitTests/vertragsbestandteil/gui/zeitaufzeichnung01.json b/system/UnitTests/vertragsbestandteil/gui/zeitaufzeichnung01.json deleted file mode 100644 index ce3d48a8d..000000000 --- a/system/UnitTests/vertragsbestandteil/gui/zeitaufzeichnung01.json +++ /dev/null @@ -1,264 +0,0 @@ -{ - "type": "formdata", - "children": [ - { - "type": "tabs", - "guioptions": {}, - "children": [ - { - "type": "tab", - "guioptions": { - "title": "Allgemein", - "id": "allgemein" - }, - "children": [ - { - "type": "dv", - "guioptions": {}, - "children": [] - }, - { - "type": "vertragsbestandteillist", - "guioptions": { - "title": "Kündigungsfrist", - "vertragsbestandteiltyp": "vertragsbestandteilkuendigungsfrist" - }, - "children": [] - }, - { - "type": "vertragsbestandteillist", - "guioptions": { - "title": "Befristung", - "vertragsbestandteiltyp": "vertragsbestandteilfreitext", - "childdefaults": { - "guioptions": { - "canhavegehaltsbestandteile": false, - "disabled": [ - "freitexttyp" - ], - "hidden": [ - "titel", - "freitext" - ] - }, - "data": { - "freitexttyp": "befristung", - "titel": "Befristung", - "freitext": "befristeter Dienstvertrag" - } - } - }, - "children": [] - } - ] - }, - { - "type": "tab", - "guioptions": { - "title": "Arbeitszeit & Basisgehalt", - "id": "arbeitszeit" - }, - "children": [ - { - "type": "vertragsbestandteillist", - "guioptions": { - "title": "Arbeitszeit", - "vertragsbestandteiltyp": "vertragsbestandteilstunden", - "errors": [ - "test1", - "test2" - ], - "infos": [] - }, - "children": [ - "439336ad-05ee-4b2a-9a0c-df7dc1c7245e" - ] - }, - { - "type": "vertragsbestandteillist", - "guioptions": { - "title": "Zeitaufzeichnung", - "vertragsbestandteiltyp": "vertragsbestandteilzeitaufzeichnung", - "errors": [], - "infos": [] - }, - "children": [ - "7625d25d-8fd9-476b-94a6-4fbb72c147d4" - ] - } - ] - }, - { - "type": "tab", - "guioptions": { - "title": "Funktionen", - "id": "funktionen" - }, - "children": [ - { - "type": "vertragsbestandteillist", - "guioptions": { - "title": "Funktion", - "vertragsbestandteiltyp": "vertragsbestandteilfunktion", - "errors": [], - "infos": [] - }, - "children": [ - "81c92565-82fe-40ec-ad35-454c3218fb3b" - ] - } - ] - }, - { - "type": "tab", - "guioptions": { - "title": "Zusatzvereinbarungen", - "id": "zusatzvereinbarungen" - }, - "children": [ - { - "type": "vertragsbestandteillist", - "guioptions": { - "title": "Zusatzvereinbarungen", - "vertragsbestandteiltyp": "vertragsbestandteilfreitext" - }, - "children": [] - } - ] - }, - { - "type": "tab", - "guioptions": { - "title": "Sonstiges", - "id": "sonstiges" - }, - "children": [ - { - "type": "vertragsbestandteillist", - "guioptions": { - "title": "Kündigungsfrist", - "vertragsbestandteiltyp": "vertragsbestandteilkuendigungsfrist", - "errors": [], - "infos": [] - }, - "children": [] - } - ] - } - ] - } - ], - "data": { - "dienstverhaeltnisid": null, - "unternehmen": "", - "vertragsart_kurzbz": "", - "gueltigkeit": { - "guioptions": { - "sharedstatemode": "set" - }, - "data": { - "gueltig_ab": "", - "gueltig_bis": "" - } - } - }, - "vbs": { - "439336ad-05ee-4b2a-9a0c-df7dc1c7245e": { - "type": "vertragsbestandteilstunden", - "guioptions": { - "id": "439336ad-05ee-4b2a-9a0c-df7dc1c7245e", - "infos": [ - "test info 1", - "test info 2" - ], - "errors": [ - "test error 1", - "test error 2" - ] - }, - "data": { - "stunden": "38,5", - "gueltigkeit": { - "guioptions": { - "sharedstatemode": "reflect" - }, - "data": { - "gueltig_ab": "", - "gueltig_bis": "" - } - } - }, - "gbs": [ - { - "type": "gehaltsbestandteil", - "guioptions": { - "infos": [ - "test info 1", - "test info 2" - ], - "errors": [ - "test error 1", - "test error 2" - ] - }, - "data": { - "gehaltstyp": "", - "betrag": "", - "gueltigkeit": { - "guioptions": { - "sharedstatemode": "reflect" - }, - "data": { - "gueltig_ab": "", - "gueltig_bis": "" - } - }, - "valorisierung": true - } - } - ] - }, - "81c92565-82fe-40ec-ad35-454c3218fb3b": { - "type": "vertragsbestandteilfunktion", - "guioptions": { - "id": "81c92565-82fe-40ec-ad35-454c3218fb3b" - }, - "data": { - "funktion": "Leitung", - "orget": "", - "gueltigkeit": { - "guioptions": { - "sharedstatemode": "reflect" - }, - "data": { - "gueltig_ab": "", - "gueltig_bis": "" - } - } - }, - "gbs": [] - }, - "7625d25d-8fd9-476b-94a6-4fbb72c147d4": { - "type": "vertragsbestandteilzeitaufzeichnung", - "guioptions": { - "id": "7625d25d-8fd9-476b-94a6-4fbb72c147d4", - "removeable": true - }, - "data": { - "zeitaufzeichnung": true, - "azgrelevant": "", - "homeoffice": true, - "gueltigkeit": { - "guioptions": { - "sharedstatemode": "reflect" - }, - "data": { - "gueltig_ab": "", - "gueltig_bis": "" - } - } - } - } - } - } - \ No newline at end of file diff --git a/system/UnitTests/vertragsbestandteil/gui/zusatz01.json b/system/UnitTests/vertragsbestandteil/gui/zusatz01.json deleted file mode 100644 index b5d63b0a2..000000000 --- a/system/UnitTests/vertragsbestandteil/gui/zusatz01.json +++ /dev/null @@ -1,354 +0,0 @@ -{ - "type": "formdata", - "children": [ - { - "type": "tabs", - "guioptions": {}, - "children": [ - { - "type": "tab", - "guioptions": { - "title": "Allgemein", - "id": "allgemein" - }, - "children": [ - { - "type": "dv", - "guioptions": {}, - "children": [] - }, - { - "type": "vertragsbestandteillist", - "guioptions": { - "title": "Kündigungsfrist", - "vertragsbestandteiltyp": "vertragsbestandteilkuendigungsfrist" - }, - "children": [] - }, - { - "type": "vertragsbestandteillist", - "guioptions": { - "title": "Befristung", - "vertragsbestandteiltyp": "vertragsbestandteilfreitext", - "childdefaults": { - "guioptions": { - "canhavegehaltsbestandteile": false, - "disabled": [ - "freitexttyp" - ], - "hidden": [ - "titel", - "freitext" - ] - }, - "data": { - "freitexttyp": "befristung", - "titel": "Befristung", - "freitext": "befristeter Dienstvertrag" - } - } - }, - "children": [] - } - ] - }, - { - "type": "tab", - "guioptions": { - "title": "Arbeitszeit & Basisgehalt", - "id": "arbeitszeit" - }, - "children": [ - { - "type": "vertragsbestandteillist", - "guioptions": { - "title": "Arbeitszeit", - "vertragsbestandteiltyp": "vertragsbestandteilstunden", - "errors": [ - "test1", - "test2" - ], - "infos": [] - }, - "children": [ - "5671ff88-9580-4b20-8bbf-a744bc353485" - ] - }, - { - "type": "vertragsbestandteillist", - "guioptions": { - "title": "Zeitaufzeichnung", - "vertragsbestandteiltyp": "vertragsbestandteilzeitaufzeichnung", - "errors": [], - "infos": [] - }, - "children": [ - "484f7166-7792-4cc7-b906-0db09c65bbf4" - ] - } - ] - }, - { - "type": "tab", - "guioptions": { - "title": "Funktionen", - "id": "funktionen" - }, - "children": [ - { - "type": "vertragsbestandteillist", - "guioptions": { - "title": "Funktion", - "vertragsbestandteiltyp": "vertragsbestandteilfunktion", - "errors": [], - "infos": [] - }, - "children": [ - "2c38c937-3157-4404-ad33-dfad2ed15633", - "b983791e-ff2e-4eeb-891e-b786c90daf69" - ] - } - ] - }, - { - "type": "tab", - "guioptions": { - "title": "Zusatzvereinbarungen", - "id": "zusatzvereinbarungen" - }, - "children": [ - { - "type": "vertragsbestandteillist", - "guioptions": { - "title": "Zusatzvereinbarungen", - "vertragsbestandteiltyp": "vertragsbestandteilfreitext" - }, - "children": [ - "b168a3bb-d0e2-407f-8192-525a5ab59b22" - ] - } - ] - }, - { - "type": "tab", - "guioptions": { - "title": "Sonstiges", - "id": "sonstiges" - }, - "children": [ - { - "type": "vertragsbestandteillist", - "guioptions": { - "title": "Kündigungsfrist", - "vertragsbestandteiltyp": "vertragsbestandteilkuendigungsfrist", - "errors": [], - "infos": [] - }, - "children": [ - "b7c613f2-f82b-45af-bc6a-9c5cefb41e91" - ] - } - ] - } - ] - } - ], - "data": { - "dienstverhaeltnisid": null, - "unternehmen": "", - "vertragsart_kurzbz": "", - "gueltigkeit": { - "guioptions": { - "sharedstatemode": "set" - }, - "data": { - "gueltig_ab": "1.1.2010", - "gueltig_bis": "" - } - } - }, - "vbs": { - "5671ff88-9580-4b20-8bbf-a744bc353485": { - "type": "vertragsbestandteilstunden", - "guioptions": { - "id": "5671ff88-9580-4b20-8bbf-a744bc353485", - "infos": [ - "test info 1", - "test info 2" - ], - "errors": [ - "test error 1", - "test error 2" - ] - }, - "data": { - "stunden": "38,5", - "gueltigkeit": { - "guioptions": { - "sharedstatemode": "reflect" - }, - "data": { - "gueltig_ab": "1.1.2010", - "gueltig_bis": "" - } - } - }, - "gbs": [ - { - "type": "gehaltsbestandteil", - "guioptions": { - "infos": [ - "test info 1", - "test info 2" - ], - "errors": [ - "test error 1", - "test error 2" - ] - }, - "data": { - "gehaltstyp": "", - "betrag": "", - "gueltigkeit": { - "guioptions": { - "sharedstatemode": "reflect" - }, - "data": { - "gueltig_ab": "1.1.2010", - "gueltig_bis": "" - } - }, - "valorisierung": "" - } - } - ] - }, - "2c38c937-3157-4404-ad33-dfad2ed15633": { - "type": "vertragsbestandteilfunktion", - "guioptions": { - "id": "2c38c937-3157-4404-ad33-dfad2ed15633" - }, - "data": { - "funktion": "Leitung", - "orget": "sdf", - "gueltigkeit": { - "guioptions": { - "sharedstatemode": "reflect" - }, - "data": { - "gueltig_ab": "1.1.2010", - "gueltig_bis": "" - } - } - }, - "gbs": [ - { - "type": "gehaltsbestandteil", - "guioptions": { - "id": "a5df7915-6935-47d8-9751-f8f8d63d188b", - "removeable": true - }, - "data": { - "gehaltstyp": "zulage", - "betrag": "111", - "gueltigkeit": { - "guioptions": { - "sharedstatemode": "reflect" - }, - "data": { - "gueltig_ab": "1.1.2010", - "gueltig_bis": "" - } - }, - "valorisierung": true - } - } - ] - }, - "b983791e-ff2e-4eeb-891e-b786c90daf69": { - "type": "vertragsbestandteilfunktion", - "guioptions": { - "id": "b983791e-ff2e-4eeb-891e-b786c90daf69", - "removeable": true - }, - "data": { - "funktion": "", - "orget": "", - "gueltigkeit": { - "guioptions": { - "sharedstatemode": "reflect" - }, - "data": { - "gueltig_ab": "1.1.2010", - "gueltig_bis": "" - } - } - }, - "gbs": [] - }, - "b168a3bb-d0e2-407f-8192-525a5ab59b22": { - "type": "vertragsbestandteilfreitext", - "guioptions": { - "id": "b168a3bb-d0e2-407f-8192-525a5ab59b22", - "removeable": true - }, - "data": { - "freitexttyp": "allin", - "titel": "Lorem ipsum", - "freitext": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. \nAt vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. ", - "kuendigungsrelevant": "", - "gueltigkeit": { - "guioptions": { - "sharedstatemode": "reflect" - }, - "data": { - "gueltig_ab": "1.1.2010", - "gueltig_bis": "" - } - } - }, - "gbs": [] - }, - "b7c613f2-f82b-45af-bc6a-9c5cefb41e91": { - "type": "vertragsbestandteilkuendigungsfrist", - "guioptions": { - "id": "b7c613f2-f82b-45af-bc6a-9c5cefb41e91", - "removeable": true - }, - "data": { - "arbeitgeber_frist": "", - "arbeitnehmer_frist": "", - "gueltigkeit": { - "guioptions": { - "sharedstatemode": "reflect" - }, - "data": { - "gueltig_ab": "1.1.2010", - "gueltig_bis": "" - } - } - } - }, - "484f7166-7792-4cc7-b906-0db09c65bbf4": { - "type": "vertragsbestandteilzeitaufzeichnung", - "guioptions": { - "id": "484f7166-7792-4cc7-b906-0db09c65bbf4", - "removeable": true - }, - "data": { - "zeitaufzeichnung": true, - "azgrelevant": false, - "homeoffice": true, - "gueltigkeit": { - "guioptions": { - "sharedstatemode": "reflect" - }, - "data": { - "gueltig_ab": "1.1.2010", - "gueltig_bis": "" - } - } - } - } - } - } \ No newline at end of file From c90da4b50e808fd130c8051957eb323f47c13adc Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Tue, 18 Apr 2023 13:26:08 +0200 Subject: [PATCH 149/176] start to implement validation --- .../Vertragsbestandteil.php | 19 +++++++++++++++++++ .../VertragsbestandteilFunktion.php | 10 ++++++++++ 2 files changed, 29 insertions(+) diff --git a/application/libraries/vertragsbestandteil/Vertragsbestandteil.php b/application/libraries/vertragsbestandteil/Vertragsbestandteil.php index e55337a01..0070babe7 100644 --- a/application/libraries/vertragsbestandteil/Vertragsbestandteil.php +++ b/application/libraries/vertragsbestandteil/Vertragsbestandteil.php @@ -20,9 +20,14 @@ abstract class Vertragsbestandteil implements \JsonSerializable protected $gehaltsbestandteile; + protected $isvalid; + protected $validationerrors; + public function __construct() { $this->gehaltsbestandteile = array(); + $this->isvalid = false; + $this->validationerrors = array(); } public function hydrateByStdClass($data) @@ -203,5 +208,19 @@ EOTXT; // can be overridden in childs } + public function isValid() + { + return $this->isvalid; + } + + public function getValidationErrors() + { + return $this->validationerrors; + } + + public function validate() { + return array(); + } + public abstract function toStdClass(); } diff --git a/application/libraries/vertragsbestandteil/VertragsbestandteilFunktion.php b/application/libraries/vertragsbestandteil/VertragsbestandteilFunktion.php index 54184dcb8..25135cfd1 100644 --- a/application/libraries/vertragsbestandteil/VertragsbestandteilFunktion.php +++ b/application/libraries/vertragsbestandteil/VertragsbestandteilFunktion.php @@ -101,4 +101,14 @@ EOTXT; 'insertvon' => getAuthUID() ); } + + public function validate() + { + if( (inval($this->benutzerfunktion_id) < 1) + && ($this->benutzerfunktiondata === NULL) ) { + $this->isvalid = false; + $this->validationerrors[] = 'Eine bestehende Funktion oder eine ' + . 'Funktion und eine Organisationseinheit müssen ausgewählt sein.'; + } + } } From 535578c399cccdba7007dd69c5884ad04209f676 Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Tue, 18 Apr 2023 13:30:56 +0200 Subject: [PATCH 150/176] validation --- .../libraries/vertragsbestandteil/Vertragsbestandteil.php | 8 +++++++- .../vertragsbestandteil/VertragsbestandteilFunktion.php | 5 +++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/application/libraries/vertragsbestandteil/Vertragsbestandteil.php b/application/libraries/vertragsbestandteil/Vertragsbestandteil.php index 0070babe7..161fc65f4 100644 --- a/application/libraries/vertragsbestandteil/Vertragsbestandteil.php +++ b/application/libraries/vertragsbestandteil/Vertragsbestandteil.php @@ -219,7 +219,13 @@ EOTXT; } public function validate() { - return array(); + if( count($this->validationerrors) > 0 ) { + $this->isvalid = false; + } else { + $this->isvalid = true; + } + + return $this->isvalid; } public abstract function toStdClass(); diff --git a/application/libraries/vertragsbestandteil/VertragsbestandteilFunktion.php b/application/libraries/vertragsbestandteil/VertragsbestandteilFunktion.php index 25135cfd1..0e3475fa5 100644 --- a/application/libraries/vertragsbestandteil/VertragsbestandteilFunktion.php +++ b/application/libraries/vertragsbestandteil/VertragsbestandteilFunktion.php @@ -104,11 +104,12 @@ EOTXT; public function validate() { - if( (inval($this->benutzerfunktion_id) < 1) + if( (intval($this->benutzerfunktion_id) < 1) && ($this->benutzerfunktiondata === NULL) ) { - $this->isvalid = false; $this->validationerrors[] = 'Eine bestehende Funktion oder eine ' . 'Funktion und eine Organisationseinheit müssen ausgewählt sein.'; } + + parent::validate(); } } From 138cfd662d721c3a26e601d6c2ac6e4a50df3321 Mon Sep 17 00:00:00 2001 From: Werner Masik Date: Tue, 18 Apr 2023 13:50:07 +0200 Subject: [PATCH 151/176] added return --- .../vertragsbestandteil/VertragsbestandteilFunktion.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/libraries/vertragsbestandteil/VertragsbestandteilFunktion.php b/application/libraries/vertragsbestandteil/VertragsbestandteilFunktion.php index 0e3475fa5..facc0cbd0 100644 --- a/application/libraries/vertragsbestandteil/VertragsbestandteilFunktion.php +++ b/application/libraries/vertragsbestandteil/VertragsbestandteilFunktion.php @@ -110,6 +110,6 @@ EOTXT; . 'Funktion und eine Organisationseinheit müssen ausgewählt sein.'; } - parent::validate(); + return parent::validate(); } } From 1fa215103ce941ebd0e38f07ff6c86bff3f3e4e6 Mon Sep 17 00:00:00 2001 From: Manfred Date: Wed, 19 Apr 2023 15:42:51 +0200 Subject: [PATCH 152/176] Insert- und Update-Daten bei Prestudentstatus im FAS --- content/student/studentdetailoverlay.xul.php | 20 ++++++++++++++++++++ rdf/prestudentrolle.rdf.php | 4 ++++ 2 files changed, 24 insertions(+) diff --git a/content/student/studentdetailoverlay.xul.php b/content/student/studentdetailoverlay.xul.php index ec72ee756..845d48397 100644 --- a/content/student/studentdetailoverlay.xul.php +++ b/content/student/studentdetailoverlay.xul.php @@ -783,6 +783,22 @@ echo ''; class="sortDirectionIndicator" sort="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#statusgrund" /> +