diff --git a/.gitignore b/.gitignore index 84957a801..7688849af 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ documents/ vendor/ +public/vendor /nbproject/ .vscode diff --git a/application/config/routes.php b/application/config/routes.php index a58fded36..bb0b0f65e 100644 --- a/application/config/routes.php +++ b/application/config/routes.php @@ -91,11 +91,13 @@ $route['api/frontend/v1/treemenudata/stv/stdsem/(:any)/inout/1/incoming/1'] = 'a $route['api/frontend/v1/treemenudata/stv/stdsem/(:any)/inout/1/outgoing/1'] = 'api/frontend/v1/stv/students/getOutgoing/$1'; $route['api/frontend/v1/treemenudata/stv/stdsem/(:any)/inout/1/shared_studies/1'] = 'api/frontend/v1/stv/students/getGemeinsamestudien/$1'; +$route['api/frontend/v1/treemenudata/stv/stdsem/:any/stg/(:any)/prestudent/1/stdsem/(:any)/:any/1/:any/1/(:any)/1'] = 'api/frontend/v1/stv/students/getPrestudents/$1/$2/$3'; $route['api/frontend/v1/treemenudata/stv/stdsem/:any/stg/(:any)/prestudent/1/stdsem/(:any)/:any/1/(:any)/1'] = 'api/frontend/v1/stv/students/getPrestudents/$1/$2/$3'; $route['api/frontend/v1/treemenudata/stv/stdsem/:any/stg/(:any)/prestudent/1/stdsem/(:any)/(:any)/1'] = 'api/frontend/v1/stv/students/getPrestudents/$1/$2/$3'; $route['api/frontend/v1/treemenudata/stv/stdsem/:any/stg/(:any)/prestudent/1/stdsem/(:any)'] = 'api/frontend/v1/stv/students/getPrestudents/$1/$2'; $route['api/frontend/v1/treemenudata/stv/stdsem/:any/stg/(:any)/prestudent/1'] = 'api/frontend/v1/stv/students/getPrestudents/$1'; +$route['api/frontend/v1/treemenudata/stv/stdsem/:any/stg/(:any)/orgform/(:any)/prestudent/1/stdsem/(:any)/:any/1/:any/1/(:any)/1'] = 'api/frontend/v1/stv/students/getPrestudentsOrgform/$1/$2/$3/$4'; $route['api/frontend/v1/treemenudata/stv/stdsem/:any/stg/(:any)/orgform/(:any)/prestudent/1/stdsem/(:any)/:any/1/(:any)/1'] = 'api/frontend/v1/stv/students/getPrestudentsOrgform/$1/$2/$3/$4'; $route['api/frontend/v1/treemenudata/stv/stdsem/:any/stg/(:any)/orgform/(:any)/prestudent/1/stdsem/(:any)/(:any)/1'] = 'api/frontend/v1/stv/students/getPrestudentsOrgform/$1/$2/$3/$4'; $route['api/frontend/v1/treemenudata/stv/stdsem/:any/stg/(:any)/orgform/(:any)/prestudent/1/stdsem/(:any)'] = 'api/frontend/v1/stv/students/getPrestudentsOrgform/$1/$2/$3'; diff --git a/application/controllers/api/frontend/v1/OtherLvPlan.php b/application/controllers/api/frontend/v1/OtherLvPlan.php index af075fbc3..1807f0a4a 100644 --- a/application/controllers/api/frontend/v1/OtherLvPlan.php +++ b/application/controllers/api/frontend/v1/OtherLvPlan.php @@ -62,6 +62,8 @@ class OtherLvPlan extends FHCAPI_Controller "foto" => $profileData->data->foto, "vorname" => $profileData->data->vorname, "nachname" => $profileData->data->nachname, + "titel" => $profileData->data->titel, + "postnomen" => $profileData->data->postnomen, ], ]; diff --git a/application/libraries/stv/StudentListLib.php b/application/libraries/stv/StudentListLib.php index 8826b50b8..9365ddc9a 100644 --- a/application/libraries/stv/StudentListLib.php +++ b/application/libraries/stv/StudentListLib.php @@ -77,7 +77,7 @@ class StudentListLib CASE WHEN pls.status_kurzbz IN ('Interessent','Aufgenommener','Bewerber','Wartender') THEN pls.ausbildungssemester - ELSE s.semester + ELSE v.semester END AS semester_berechnet "); $this->addSelect( diff --git a/application/libraries/vertragsbestandteil/Gehaltsbestandteil.php b/application/libraries/vertragsbestandteil/Gehaltsbestandteil.php index 95bbdd908..869ed1c2b 100644 --- a/application/libraries/vertragsbestandteil/Gehaltsbestandteil.php +++ b/application/libraries/vertragsbestandteil/Gehaltsbestandteil.php @@ -13,6 +13,7 @@ class Gehaltsbestandteil extends AbstractBestandteil implements \JsonSerializabl protected $dienstverhaeltnis_id; protected $vertragsbestandteil_id; protected $gehaltstyp_kurzbz; + protected $gehaltsanpassungtyp_kurzbz = ''; protected $von; protected $bis; protected $anmerkung; @@ -21,6 +22,7 @@ class Gehaltsbestandteil extends AbstractBestandteil implements \JsonSerializabl protected $valorisierungssperre; protected $valorisierung; protected $auszahlungen; + protected $gehaltstyp_bezeichnung; protected $insertamum; protected $insertvon; @@ -39,6 +41,10 @@ class Gehaltsbestandteil extends AbstractBestandteil implements \JsonSerializabl 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->gehaltsanpassungtyp_kurzbz) && $this->setGehaltsanpassungtyp_kurzbz($data->gehaltsanpassungtyp_kurzbz); + if (!empty($data->gehaltsanpassungtyp_kurzbz)) { + $this->setGehaltsanpassungtyp_kurzbz($data->gehaltsanpassungtyp_kurzbz); + } isset($data->von) && $this->setVon($data->von); isset($data->bis) && $this->setBis($data->bis); isset($data->anmerkung) && $this->setAnmerkung($data->anmerkung); @@ -47,7 +53,8 @@ class Gehaltsbestandteil extends AbstractBestandteil implements \JsonSerializabl isset($data->valorisierungssperre) && $this->setValorisierungssperre($data->valorisierungssperre); isset($data->valorisierung) && $this->setValorisierung($data->valorisierung); isset($data->auszahlungen) && $this->setAuszahlungen($data->auszahlungen); - + isset($data->gehaltstyp_bezeichnung) && $this->setGehaltstyp_bezeichnung($data->gehaltstyp_bezeichnung); + isset($data->insertamum) && $this->setInsertamum($data->insertamum); isset($data->insertvon) && $this->setInsertvon($data->insertvon); isset($data->updateamum) && $this->setUpdateamum($data->updateamum); @@ -75,6 +82,11 @@ class Gehaltsbestandteil extends AbstractBestandteil implements \JsonSerializabl return $this->gehaltstyp_kurzbz; } + public function getGehaltsanpassungtyp_kurzbz() + { + return $this->gehaltsanpassungtyp_kurzbz; + } + public function getVon() { return $this->von; @@ -178,6 +190,13 @@ class Gehaltsbestandteil extends AbstractBestandteil implements \JsonSerializabl return $this; } + public function setGehaltsanpassungtyp_kurzbz($gehaltsanpassungtyp_kurzbz) + { + $this->markDirty('gehaltsanpassungtyp_kurzbz', $this->gehaltsanpassungtyp_kurzbz, $gehaltsanpassungtyp_kurzbz); + $this->gehaltsanpassungtyp_kurzbz = $gehaltsanpassungtyp_kurzbz; + return $this; + } + public function setVon($von) { $this->markDirty('von', $this->von, $von); @@ -206,6 +225,10 @@ class Gehaltsbestandteil extends AbstractBestandteil implements \JsonSerializabl $grundbetrag = number_format($grundbetrag, 2, '.', ''); } $this->markDirty('grundbetrag', $this->grundbetrag, $grundbetrag); + if(in_array('grundbetrag', $this->modifiedcolumns)) + { + $this->setBetrag_valorisiert($grundbetrag); + } $this->grundbetrag = $grundbetrag; return $this; } @@ -242,6 +265,13 @@ class Gehaltsbestandteil extends AbstractBestandteil implements \JsonSerializabl return $this; } + public function setGehaltstyp_bezeichnung($gehaltstyp_bezeichnung) + { + $this->markDirty('gehaltstyp_bezeichnung', $this->gehaltstyp_bezeichnung, $gehaltstyp_bezeichnung); + $this->gehaltstyp_bezeichnung = $gehaltstyp_bezeichnung; + return $this; + } + public function setInsertamum($insertamum) { $this->markDirty('insertamum', $this->insertamum, $insertamum); @@ -284,6 +314,7 @@ class Gehaltsbestandteil extends AbstractBestandteil implements \JsonSerializabl 'dienstverhaeltnis_id' => $this->getDienstverhaeltnis_id(), 'vertragsbestandteil_id' => $this->getVertragsbestandteil_id(), 'gehaltstyp_kurzbz' => $this->getGehaltstyp_kurzbz(), + 'gehaltsanpassungtyp_kurzbz' => $this->getGehaltsanpassungtyp_kurzbz(), 'von' => $this->getVon(), 'bis' => $this->getBis(), 'anmerkung' => $this->getAnmerkung(), @@ -312,6 +343,7 @@ class Gehaltsbestandteil extends AbstractBestandteil implements \JsonSerializabl dienstverhaeltnis_id: {$this->getDienstverhaeltnis_id()} vertragsbestandteil_id: {$this->getVertragsbestandteil_id()} gehaltstyp_kurzbz: {$this->getGehaltstyp_kurzbz()} + gehaltsanpassungtyp_kurzbz: {$this->getGehaltsanpassungtyp_kurzbz()} von: {$this->getVon()} bis: {$this->getBis()} anmerkung: {$this->getAnmerkung()} diff --git a/application/models/organisation/Studiengang_model.php b/application/models/organisation/Studiengang_model.php index 1db658596..db0996319 100644 --- a/application/models/organisation/Studiengang_model.php +++ b/application/models/organisation/Studiengang_model.php @@ -457,6 +457,7 @@ class Studiengang_model extends DB_Model */ public function getLeitung($studiengang_kz = null) { + $this->addDistinct(); $this->addSelect('uid, studiengang_kz, oe_kurzbz, vorname, nachname, email, titelpre, titelpost, alias'); $this->addJoin('public.tbl_benutzerfunktion', 'oe_kurzbz'); $this->addJoin('public.tbl_benutzer', 'uid'); diff --git a/application/models/vertragsbestandteil/Gehaltsbestandteil_model.php b/application/models/vertragsbestandteil/Gehaltsbestandteil_model.php index 2669105a1..3918e98e1 100644 --- a/application/models/vertragsbestandteil/Gehaltsbestandteil_model.php +++ b/application/models/vertragsbestandteil/Gehaltsbestandteil_model.php @@ -41,6 +41,7 @@ with gbt as ( gb.anmerkung, gb.dienstverhaeltnis_id, gb.gehaltstyp_kurzbz, + gb.gehaltsanpassungtyp_kurzbz, gb.valorisierungssperre, gb.valorisierung, gb.grundbetrag as grund_betrag_decrypted, @@ -76,11 +77,13 @@ select gbt.anmerkung, gbt.dienstverhaeltnis_id, gbt.gehaltstyp_kurzbz, + gbt.gehaltsanpassungtyp_kurzbz, gbt.valorisierungssperre, gbt.valorisierung, gbt.grund_betrag_decrypted, gbt.betrag_val_decrypted, gt.bezeichnung as gehaltstyp_bezeichnung, + ga.bezeichnung as gehaltsanpassungtyp_bezeichnung, vb.vertragsbestandteiltyp_kurzbz, bf.funktion_kurzbz, bf.oe_kurzbz, @@ -93,6 +96,8 @@ from gbt LEFT JOIN hr.tbl_gehaltstyp gt using(gehaltstyp_kurzbz) +LEFT JOIN + hr.tbl_gehaltsanpassungtyp ga using(gehaltsanpassungtyp_kurzbz) LEFT JOIN hr.tbl_vertragsbestandteil vb using(vertragsbestandteil_id) LEFT JOIN @@ -177,7 +182,8 @@ LEFT JOIN $stichtagclause .= ')'; } - $this->addSelect('*'); + $this->addSelect('tbl_gehaltsbestandteil.*, tbl_gehaltstyp.bezeichnung AS gehaltstyp_bezeichnung'); + $this->addJoin('hr.tbl_gehaltstyp', 'gehaltstyp_kurzbz'); $where = <<escape($dienstverhaeltnis_id)} {$stichtagclause} @@ -202,6 +208,7 @@ SELECT g.dienstverhaeltnis_id, g.vertragsbestandteil_id, g.gehaltstyp_kurzbz, + g.gehaltsanpassungtyp_kurzbz, g.von, g.bis, g.anmerkung, @@ -213,9 +220,11 @@ SELECT g.updateamum, g.updatevon, g.valorisierung, - g.auszahlungen + g.auszahlungen, + gt.bezeichnung AS gehaltstyp_bezeichnung FROM - hr.tbl_gehaltsbestandteil g + hr.tbl_gehaltsbestandteil g + JOIN hr.tbl_gehaltstyp gt USING (gehaltstyp_kurzbz) LEFT JOIN hr.tbl_valorisierung_historie vh ON vh.gehaltsbestandteil_id = g.gehaltsbestandteil_id AND vh.valorisierungsdatum = ( SELECT @@ -263,7 +272,7 @@ EOSQL; // Note: replaced gb.betrag_valorisiert with vh.betrag_valorisiert! $qry = " SELECT - gb.gehaltsbestandteil_id,gb.dienstverhaeltnis_id,gb.vertragsbestandteil_id,gb.gehaltstyp_kurzbz, + gb.gehaltsbestandteil_id,gb.dienstverhaeltnis_id,gb.vertragsbestandteil_id,gb.gehaltstyp_kurzbz,gb.gehaltsanpassungtyp_kurzbz, gb.von,gb.bis,gb.anmerkung,gb.grundbetrag as grundbetrag,gb.valorisierungssperre,gb.insertamum, gb.insertvon,gb.updateamum,gb.updatevon,gb.valorisierung,gb.auszahlungen, vh.valorisierungsdatum, vh.betrag_valorisiert as betrag_valorisiert diff --git a/public/js/components/Calendar/LvPlan.js b/public/js/components/Calendar/LvPlan.js index 97246a5d4..198415714 100644 --- a/public/js/components/Calendar/LvPlan.js +++ b/public/js/components/Calendar/LvPlan.js @@ -174,6 +174,9 @@ export default { > {{ $p.t('lehre/noLvFound') }} +
+ +
{{ $p.t('lehre/noLvFound') }}
+
+ +
!!fragment, + ); + this.otherPersonData.fullNameWithTitle = + fullNameWithTitleFragments.join(" "); this.otherPersonData.photo = viewData?.user_data?.foto; }, async redirectToMyLvPlanIfAuthUid() { @@ -225,12 +232,21 @@ export default { this.$router.push({ name: "MyLvPlan" }); } }, + copyFullNameWithTitleToClipboard() { + navigator.clipboard.writeText( + this.otherPersonData.fullNameWithTitle, + ); + this.$fhcAlert.alertSuccess( + this.$p.t("profil/name_title_clipboard_copy_confirmation"), + ); + }, }, async created() { await this.redirectToMyLvPlanIfAuthUid(); await this.fetchViewData(); + await this.$p.loadCategory(["profil"]); }, - template: ` + template: /*html*/ `

@@ -238,8 +254,11 @@ export default { {{ $p.t('lehre/stundenplan') + (studiensemester_kurzbz ? " " + studiensemester_kurzbz : "") }}
- - {{ otherPersonData.fullName }} + + {{ otherPersonData.fullNameWithTitle }} + + + profile picture
diff --git a/public/js/components/Cis/Profil/ProfilComponents/ProfilInformation.js b/public/js/components/Cis/Profil/ProfilComponents/ProfilInformation.js index d714c9faa..2df4024ca 100644 --- a/public/js/components/Cis/Profil/ProfilComponents/ProfilInformation.js +++ b/public/js/components/Cis/Profil/ProfilComponents/ProfilInformation.js @@ -67,6 +67,21 @@ export default { return res; }, }, + methods: { + copyFullNameWithTitleToClipboard() { + let fragments = [ + this.$props.data.Titel, + this.$props.data.Vorname, + this.$props.data.Nachname, + this.$props.data.Postnomen, + ]; + fragments = fragments.filter((fragment) => !!fragment); + navigator.clipboard.writeText(fragments.join(" ")); + this.$fhcAlert.alertSuccess( + this.$p.t("profil/name_title_clipboard_copy_confirmation"), + ); + }, + }, template: /*html*/ `
@@ -124,6 +139,16 @@ export default { {{wert?wert:'-'}}
+ + + + + {{ $p.t("profil/name_title_copy") }} +

diff --git a/public/js/components/Cis/Renderer/Lehreinheit/modalContent.js b/public/js/components/Cis/Renderer/Lehreinheit/modalContent.js index 738c0c75c..eb8908648 100644 --- a/public/js/components/Cis/Renderer/Lehreinheit/modalContent.js +++ b/public/js/components/Cis/Renderer/Lehreinheit/modalContent.js @@ -51,6 +51,16 @@ export default { return numberPadding(this.event.ende.getHours()) + ":" + numberPadding(this.event.ende.getMinutes()); } }, + watch: { + event: { + async handler() { + if (this.$props.event.type == "lehreinheit") { + await this.getLvMenu(); + } + }, + deep: true, + }, + }, methods: { mehtodNumberPadding: function (number) { return numberPadding(number); @@ -58,21 +68,31 @@ export default { methodFormatDate: function (d) { return formatDate(d); }, + async getLvMenu() { + const semesterResponse = await this.$api.call( + ApiLvPlan.getLehreinheitStudiensemester( + Array.isArray(this.event.lehreinheit_id) + ? this.event.lehreinheit_id[0] + : this.event.lehreinheit_id, + ), + ); + if (semesterResponse.meta.status !== "success") return; + + const studiensemesterKurzbz = semesterResponse.data; + const lvMenuResponse = await this.$api.call( + ApiAddons.getLvMenu( + this.event.lehrveranstaltung_id, + studiensemesterKurzbz, + ), + ); + if (lvMenuResponse.meta.status !== "success") return; + + this.lvMenu = lvMenuResponse.data; + }, }, - created() { - if (this.event.type == 'lehreinheit') { - this.$api - .call(ApiLvPlan.getLehreinheitStudiensemester(Array.isArray(this.event.lehreinheit_id) ? this.event.lehreinheit_id[0] : this.event.lehreinheit_id)) - .then(res => res.data) - .then(studiensemester_kurzbz => this.$api.call( - ApiAddons.getLvMenu( - this.event.lehrveranstaltung_id, - studiensemester_kurzbz - ) - )) - .then(res => { - this.lvMenu = res.data; - }); + async created() { + if (this.$props.event.type == 'lehreinheit') { + await this.getLvMenu(); } }, template: ` diff --git a/public/js/components/Cis/Studium/Studium.js b/public/js/components/Cis/Studium/Studium.js index c70646608..721fec8ad 100644 --- a/public/js/components/Cis/Studium/Studium.js +++ b/public/js/components/Cis/Studium/Studium.js @@ -381,13 +381,13 @@ export default {