From d9d71c42ce26b92735ec420c54964f1822ddbd36 Mon Sep 17 00:00:00 2001 From: Cris Date: Wed, 17 Feb 2021 18:54:53 +0100 Subject: [PATCH 001/127] Added feature to withdraw approvals/rejections for STGL Signed-off-by: cris-technikum --- .../anrechnung/ApproveAnrechnungDetail.php | 44 +++++++++++- .../models/education/Anrechnung_model.php | 15 ++++ .../anrechnung/approveAnrechnungDetail.php | 11 ++- .../anrechnung/approveAnrechnungDetail.js | 69 +++++++++++++++++++ system/phrasesupdate.php | 60 ++++++++++++++++ 5 files changed, 197 insertions(+), 2 deletions(-) diff --git a/application/controllers/lehre/anrechnung/ApproveAnrechnungDetail.php b/application/controllers/lehre/anrechnung/ApproveAnrechnungDetail.php index c5e4b94d8..0b79c3b89 100644 --- a/application/controllers/lehre/anrechnung/ApproveAnrechnungDetail.php +++ b/application/controllers/lehre/anrechnung/ApproveAnrechnungDetail.php @@ -25,7 +25,8 @@ class approveAnrechnungDetail extends Auth_Controller 'download' => 'lehre/anrechnung_genehmigen:rw', 'approve' => 'lehre/anrechnung_genehmigen:rw', 'reject' => 'lehre/anrechnung_genehmigen:rw', - 'requestRecommendation' => 'lehre/anrechnung_genehmigen:rw' + 'requestRecommendation' => 'lehre/anrechnung_genehmigen:rw', + 'withdraw' => 'lehre/anrechnung_genehmigen:rw' ) ); @@ -275,6 +276,47 @@ class approveAnrechnungDetail extends Auth_Controller return $this->outputJsonError('Es wurden keine Empfehlungen angefordert'); } } + + /** + * Withdraw approved / rejected Anrechnung and reset to 'inProgressDP'. + */ + public function withdraw() + { + $anrechnung_id = $this->input->post('anrechnung_id'); + + if (!is_numeric($anrechnung_id)) + { + show_error('Wrong parameter.'); + } + + // Get last Anrechnungstatus + if (!$result = getData($this->AnrechnungModel->getLastAnrechnungstatus($anrechnung_id))[0]) + { + show_error('Failed loading Anrechnung'); + } + + $last_status = $result->status_kurzbz; + $anrechnungstatus_id = $result->anrechnungstatus_id; + + // Return if last status is not approved / rejected + if ($last_status != self::ANRECHNUNGSTATUS_APPROVED && $last_status != self::ANRECHNUNGSTATUS_REJECTED) + { + return $this->outputJsonError('Nothing to withdraw. Application is still in progress.'); + } + + // Withdraw status approved / rejected + $result = $this->AnrechnungModel->deleteAnrechnungstatus($anrechnungstatus_id); + + if (isError($result)) + { + return $this->outputJsonError('Could not withdraw this application.'); + } + + // Success output to AJAX + return $this->outputJsonSuccess(array( + 'status_bezeichnung' => $this->anrechnunglib->getLastAnrechnungstatus($anrechnung_id)) + ); + } /** * Download and open uploaded document (Nachweisdokument). diff --git a/application/models/education/Anrechnung_model.php b/application/models/education/Anrechnung_model.php index b4c7de835..ce0cfe8d8 100644 --- a/application/models/education/Anrechnung_model.php +++ b/application/models/education/Anrechnung_model.php @@ -83,4 +83,19 @@ class Anrechnung_model extends DB_Model return $this->execQuery($qry, array($anrechnung_id)); } + + /** + * Delete Anrechnungstatus. + * + * @param $anrechnungstatus_id + */ + public function deleteAnrechnungstatus($anrechnungstatus_id){ + + $qry = ' + DELETE FROM lehre.tbl_anrechnung_anrechnungstatus + WHERE anrechnungstatus_id = ? + '; + + return $this->execQuery($qry, array($anrechnungstatus_id)); + } } diff --git a/application/views/lehre/anrechnung/approveAnrechnungDetail.php b/application/views/lehre/anrechnung/approveAnrechnungDetail.php index 75059ec69..e30fb8da5 100644 --- a/application/views/lehre/anrechnung/approveAnrechnungDetail.php +++ b/application/views/lehre/anrechnung/approveAnrechnungDetail.php @@ -36,7 +36,11 @@ $this->load->view( 'lehrveranstaltung', 'ects', 'lektor', - ) + ), + 'anrechnung' => array( + 'genehmigungAblehnungWirklichZuruecknehmen', + 'erfolgreichZurueckgenommen' + ) ), 'customCSSs' => array( 'public/css/Tabulator.css' @@ -327,6 +331,11 @@ $this->load->view(
+
+
@@ -311,11 +311,11 @@ $this->load->view(
@@ -333,14 +333,17 @@ $this->load->view(
diff --git a/application/views/lehre/anrechnung/approveAnrechnungUebersicht.php b/application/views/lehre/anrechnung/approveAnrechnungUebersicht.php index 91d821fde..7ec175384 100644 --- a/application/views/lehre/anrechnung/approveAnrechnungUebersicht.php +++ b/application/views/lehre/anrechnung/approveAnrechnungUebersicht.php @@ -155,11 +155,12 @@ $this->load->view(
-
@@ -173,11 +174,12 @@ $this->load->view(
-
@@ -221,11 +223,14 @@ $this->load->view(
+ class="btn btn-default btn-w200 btn-mr50" type="button"> + p->t('anrechnung', 'empfehlungAnfordern')); ?> + class="btn btn-danger btn-w200" type="button"> + p->t('global', 'ablehnen')); ?> + class="btn btn-primary btn-w200" type="button"> + p->t('global', 'genehmigen')); ?>
diff --git a/application/views/lehre/anrechnung/reviewAnrechnungDetail.php b/application/views/lehre/anrechnung/reviewAnrechnungDetail.php index 455c31e65..8e0fc4b46 100644 --- a/application/views/lehre/anrechnung/reviewAnrechnungDetail.php +++ b/application/views/lehre/anrechnung/reviewAnrechnungDetail.php @@ -209,11 +209,11 @@ $this->load->view(
@@ -229,11 +229,11 @@ $this->load->view(
@@ -248,10 +248,12 @@ $this->load->view(
diff --git a/application/views/lehre/anrechnung/reviewAnrechnungUebersicht.php b/application/views/lehre/anrechnung/reviewAnrechnungUebersicht.php index 55c82b4e3..c3ca0754a 100644 --- a/application/views/lehre/anrechnung/reviewAnrechnungUebersicht.php +++ b/application/views/lehre/anrechnung/reviewAnrechnungUebersicht.php @@ -154,11 +154,12 @@ $this->load->view(
-
@@ -172,11 +173,12 @@ $this->load->view(
-
@@ -222,9 +224,11 @@ $this->load->view(
+ class="btn btn-danger btn-w200" type="button"> + p->t('anrechnung', 'nichtEmpfehlen')); ?> + class="btn btn-primary btn-w200" type="button"> + p->t('anrechnung', 'empfehlen')); ?>
diff --git a/public/js/lehre/anrechnung/approveAnrechnungDetail.js b/public/js/lehre/anrechnung/approveAnrechnungDetail.js index 33cce7118..872da890b 100644 --- a/public/js/lehre/anrechnung/approveAnrechnungDetail.js +++ b/public/js/lehre/anrechnung/approveAnrechnungDetail.js @@ -43,9 +43,6 @@ $(function(){ // Approve Anrechnungen $("#approveAnrechnungDetail-approve-anrechnung-confirm").click(function(e){ - // Avoid form redirecting automatically - e.preventDefault(); - // Avoid bubbling click event to sibling break button e.stopImmediatePropagation(); @@ -107,9 +104,6 @@ $(function(){ // Reject Anrechnungen $("#approveAnrechnungDetail-reject-anrechnung-confirm").click(function(e){ - // Avoid form redirecting automatically - e.preventDefault(); - // Avoid bubbling click event to sibling break button e.stopImmediatePropagation(); @@ -167,10 +161,7 @@ $(function(){ }); // Request Recommendation for Anrechnungen - $("#approveAnrechnungDetail-request-recommendation").click(function(e){ - - // Avoid form redirecting automatically - e.preventDefault(); + $("#approveAnrechnungDetail-request-recommendation").click(function(){ // Get form data let form_data = $('form').serializeArray(); @@ -212,10 +203,7 @@ $(function(){ }); // Request Recommendation for Anrechnungen - $("#approveAnrechnungDetail-withdraw-anrechnung-approvement").click(function(e){ - - // Avoid form redirecting automatically - e.preventDefault(); + $("#approveAnrechnungDetail-withdraw-anrechnung-approvement").click(function(){ if(!confirm(FHC_PhrasesLib.t("anrechnung", "genehmigungAblehnungWirklichZuruecknehmen"))) { @@ -276,7 +264,7 @@ $(function(){ // Break Begruendung abgeben $('#approveAnrechnungDetail-begruendung-abbrechen').click(function(){ - $('#approveAnrechnungDetail-begruendung').val(''); + begruendung_panel.slideUp('slow'); }) diff --git a/public/js/lehre/anrechnung/approveAnrechnungUebersicht.js b/public/js/lehre/anrechnung/approveAnrechnungUebersicht.js index b5be4c3a2..112d48f85 100644 --- a/public/js/lehre/anrechnung/approveAnrechnungUebersicht.js +++ b/public/js/lehre/anrechnung/approveAnrechnungUebersicht.js @@ -223,9 +223,6 @@ $(function(){ // Approve Anrechnungen $("#approveAnrechnungUebersicht-approve-anrechnungen-confirm").click(function(e){ - // Avoid form redirecting automatically - e.preventDefault(); - // Avoid bubbling click event to sibling break button e.stopImmediatePropagation(); @@ -298,9 +295,6 @@ $(function(){ // Reject Anrechnungen $("#approveAnrechnungUebersicht-reject-anrechnungen-confirm").click(function(e){ - // Avoid form redirecting automatically - e.preventDefault(); - // Avoid bubbling click event to sibling break button e.stopImmediatePropagation(); @@ -370,10 +364,7 @@ $(function(){ }); // Request Recommendation for Anrechnungen - $("#approveAnrechnungUebersicht-request-recommendation").click(function(e){ - - // Avoid form redirecting automatically - e.preventDefault(); + $("#approveAnrechnungUebersicht-request-recommendation").click(function(){ // Get selected rows data let selected_data = $('#tableWidgetTabulator').tabulator('getSelectedData'); @@ -444,7 +435,7 @@ $(function(){ // Break Ablehnung abgeben $('#approveAnrechnungUebersicht-begruendung-abbrechen').click(function(){ - $('#approveAnrechnungUebersicht-begruendung').val(''); + begruendung_panel.slideUp('slow'); }) diff --git a/public/js/lehre/anrechnung/reviewAnrechnungDetail.js b/public/js/lehre/anrechnung/reviewAnrechnungDetail.js index 6648792bd..d4f8ec5a7 100644 --- a/public/js/lehre/anrechnung/reviewAnrechnungDetail.js +++ b/public/js/lehre/anrechnung/reviewAnrechnungDetail.js @@ -49,9 +49,6 @@ $(function(){ // Recommend Anrechnung $("#reviewAnrechnungDetail-recommend-anrechnung-confirm").click(function(e){ - // Avoid form redirecting automatically - e.preventDefault(); - // Avoid bubbling click event to sibling break button e.stopImmediatePropagation(); @@ -113,9 +110,6 @@ $(function(){ // Dont recommend Anrechnung $("#reviewAnrechnungDetail-dont-recommend-anrechnung-confirm").click(function(e){ - // Avoid form redirecting automatically - e.preventDefault(); - // Avoid bubbling click event to sibling break button e.stopImmediatePropagation(); @@ -180,7 +174,7 @@ $(function(){ // Break Begruendung abgeben $('#reviewAnrechnungDetail-begruendung-abbrechen').click(function(){ - $('#reviewAnrechnungDetail-begruendung').val(''); + begruendung_panel.slideUp('slow'); }) diff --git a/public/js/lehre/anrechnung/reviewAnrechnungUebersicht.js b/public/js/lehre/anrechnung/reviewAnrechnungUebersicht.js index b4efd2cf7..1785bc6b1 100644 --- a/public/js/lehre/anrechnung/reviewAnrechnungUebersicht.js +++ b/public/js/lehre/anrechnung/reviewAnrechnungUebersicht.js @@ -221,9 +221,6 @@ $(function(){ // Recommend Anrechnungen $("#reviewAnrechnungUebersicht-recommend-anrechnungen-confirm").click(function(e){ - // Avoid form redirecting automatically - e.preventDefault(); - // Avoid bubbling click event to sibling break button e.stopImmediatePropagation(); @@ -297,9 +294,6 @@ $(function(){ // Dont recommend Anrechnungen $("#reviewAnrechnungUebersicht-dont-recommend-anrechnungen-confirm").click(function(e){ - // Avoid form redirecting automatically - e.preventDefault(); - // Avoid bubbling click event to sibling break button e.stopImmediatePropagation(); @@ -376,7 +370,7 @@ $(function(){ // Break Begruendung abgeben $('#reviewAnrechnungUebersicht-begruendung-abbrechen').click(function(){ - $('#reviewAnrechnungUebersicht-begruendung').val(''); + begruendung_panel.slideUp('slow'); }) From 83b1286e085b016954328c37b79e7302ddf34683 Mon Sep 17 00:00:00 2001 From: Cris Date: Tue, 23 Feb 2021 14:21:21 +0100 Subject: [PATCH 010/127] Added column Antragsdatum to STGL/Lector Overview Signed-off-by: cris-technikum --- .../anrechnung/approveAnrechnungUebersichtData.php | 3 +++ .../anrechnung/reviewAnrechnungUebersichtData.php | 3 +++ .../anrechnung/approveAnrechnungUebersicht.js | 14 ++++++++++++++ .../lehre/anrechnung/reviewAnrechnungUebersicht.js | 14 ++++++++++++++ 4 files changed, 34 insertions(+) diff --git a/application/views/lehre/anrechnung/approveAnrechnungUebersichtData.php b/application/views/lehre/anrechnung/approveAnrechnungUebersichtData.php index 0ee3fdc57..10521b100 100644 --- a/application/views/lehre/anrechnung/approveAnrechnungUebersichtData.php +++ b/application/views/lehre/anrechnung/approveAnrechnungUebersichtData.php @@ -20,6 +20,7 @@ $query = ' begruendung.bezeichnung AS "begruendung", dmsversion.name AS "dokument_bezeichnung", anrechnung.anmerkung_student, + anrechnung.insertamum::date AS "antragsdatum", empfehlung_anrechnung, (SELECT status_kurzbz FROM lehre.tbl_anrechnungstatus @@ -65,6 +66,7 @@ $filterWidgetArray = array( ucfirst($this->p->t('global', 'begruendung')), ucfirst($this->p->t('anrechnung', 'nachweisdokumente')), ucfirst($this->p->t('anrechnung', 'herkunft')), + ucfirst($this->p->t('anrechnung', 'antragdatum')), ucfirst($this->p->t('anrechnung', 'empfehlung')), 'status_kurzbz', 'Status' @@ -117,6 +119,7 @@ $filterWidgetArray = array( target:"_blank" }}, anmerkung_student: {headerFilter:"input"}, + antragsdatum: {align:"center", headerFilter:"input", mutator: mut_formatStringDate}, empfehlung_anrechnung: {headerFilter:"input", align:"center", formatter: format_empfehlung_anrechnung, headerFilterFunc: hf_filterTrueFalse}, status_kurzbz: {visible: false}, status_bezeichnung: {headerFilter:"input"} diff --git a/application/views/lehre/anrechnung/reviewAnrechnungUebersichtData.php b/application/views/lehre/anrechnung/reviewAnrechnungUebersichtData.php index 7382df85b..5f8e2b9d0 100644 --- a/application/views/lehre/anrechnung/reviewAnrechnungUebersichtData.php +++ b/application/views/lehre/anrechnung/reviewAnrechnungUebersichtData.php @@ -20,6 +20,7 @@ $query = ' begruendung.bezeichnung AS "begruendung", dmsversion.name AS "dokument_bezeichnung", anrechnung.anmerkung_student, + anrechnung.insertamum::date AS "antragsdatum", empfehlung_anrechnung, (SELECT status_kurzbz FROM lehre.tbl_anrechnungstatus @@ -75,6 +76,7 @@ $filterWidgetArray = array( ucfirst($this->p->t('global', 'begruendung')), ucfirst($this->p->t('anrechnung', 'nachweisdokumente')), ucfirst($this->p->t('anrechnung', 'herkunft')), + ucfirst($this->p->t('anrechnung', 'antragdatum')), ucfirst($this->p->t('anrechnung', 'empfehlung')), 'status_kurzbz', 'Status' @@ -127,6 +129,7 @@ $filterWidgetArray = array( target:"_blank" }}, anmerkung_student: {headerFilter:"input"}, + antragsdatum: {align:"center", headerFilter:"input", mutator: mut_formatStringDate}, empfehlung_anrechnung: {headerFilter:"input", align:"center", formatter: format_empfehlung_anrechnung, headerFilterFunc: hf_filterTrueFalse}, status_kurzbz: {visible: false}, status_bezeichnung: {headerFilter:"input"} diff --git a/public/js/lehre/anrechnung/approveAnrechnungUebersicht.js b/public/js/lehre/anrechnung/approveAnrechnungUebersicht.js index 112d48f85..6e4474026 100644 --- a/public/js/lehre/anrechnung/approveAnrechnungUebersicht.js +++ b/public/js/lehre/anrechnung/approveAnrechnungUebersicht.js @@ -9,6 +9,20 @@ const ANRECHNUNGSTATUS_REJECTED = 'rejected'; const COLOR_LIGHTGREY = "#f5f5f5"; +// ----------------------------------------------------------------------------------------------------------------- +// Mutators - setter methods to manipulate table data when entering the tabulator +// ----------------------------------------------------------------------------------------------------------------- + +// Converts string date postgre style to string DD.MM.YYYY. +// This will allow correct filtering. +var mut_formatStringDate = function(value, data, type, params, component) { + if (value != null) + { + var d = new Date(value); + return ("0" + (d.getDate())).slice(-2) + "." + ("0" + (d.getMonth() + 1)).slice(-2) + "." + d.getFullYear(); + } +} + // TABULATOR FUNCTIONS // --------------------------------------------------------------------------------------------------------------------- // Returns relative height (depending on screen size) diff --git a/public/js/lehre/anrechnung/reviewAnrechnungUebersicht.js b/public/js/lehre/anrechnung/reviewAnrechnungUebersicht.js index 1785bc6b1..379358eea 100644 --- a/public/js/lehre/anrechnung/reviewAnrechnungUebersicht.js +++ b/public/js/lehre/anrechnung/reviewAnrechnungUebersicht.js @@ -9,6 +9,20 @@ const ANRECHNUNGSTATUS_REJECTED = 'rejected'; const COLOR_LIGHTGREY = "#f5f5f5"; +// ----------------------------------------------------------------------------------------------------------------- +// Mutators - setter methods to manipulate table data when entering the tabulator +// ----------------------------------------------------------------------------------------------------------------- + +// Converts string date postgre style to string DD.MM.YYYY. +// This will allow correct filtering. +var mut_formatStringDate = function(value, data, type, params, component) { + if (value != null) + { + var d = new Date(value); + return ("0" + (d.getDate())).slice(-2) + "." + ("0" + (d.getMonth() + 1)).slice(-2) + "." + d.getFullYear(); + } +} + // TABULATOR FUNCTIONS // --------------------------------------------------------------------------------------------------------------------- // Returns relative height (depending on screen size) From 6f27fccc090d0173f205826cf2dc7e64e280c760 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Tue, 23 Feb 2021 17:55:41 +0100 Subject: [PATCH 011/127] - Corrected Permissions for Anrechnungen - Removed Useless Sequence --- system/dbupdate_3.3.php | 76 ++++++++++------------------------------- 1 file changed, 18 insertions(+), 58 deletions(-) diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php index b68d36bfa..d7467ae2c 100644 --- a/system/dbupdate_3.3.php +++ b/system/dbupdate_3.3.php @@ -212,21 +212,21 @@ if(!$result = @$db->db_query("SELECT 1 FROM public.vw_msg_vars_user LIMIT 1")) JOIN public.tbl_mitarbeiter ma ON ma.mitarbeiter_uid = b.uid WHERE ma.personalnummer > 0 );'; - + if(!$db->db_query($qry)) echo 'public.vw_msg_vars_user: '.$db->db_last_error().'
'; else echo '
public.vw_msg_vars_user view created'; - + $qry = 'GRANT SELECT ON TABLE public.vw_msg_vars_user TO web;'; - + if(!$db->db_query($qry)) echo 'public.vw_msg_vars_user: '.$db->db_last_error().'
'; else echo '
Granted privileges to web on public.vw_msg_vars_user'; - + $qry = 'GRANT SELECT ON TABLE public.vw_msg_vars_user TO vilesci;'; - + if(!$db->db_query($qry)) echo 'public.vw_msg_vars_user: '.$db->db_last_error().'
'; else @@ -4482,8 +4482,8 @@ if(!$result = @$db->db_query("SELECT dms_id FROM lehre.tbl_anrechnung")) ALTER TABLE lehre.tbl_anrechnung ALTER COLUMN begruendung_id DROP NOT NULL; ALTER TABLE lehre.tbl_anrechnung ALTER COLUMN insertamum SET DEFAULT NOW(); "; - - + + if(!$db->db_query($qry)) echo 'lehre.tbl_anrechnung: '.$db->db_last_error().'
'; else @@ -4558,58 +4558,17 @@ if(!$result = @$db->db_query("SELECT 1 FROM lehre.tbl_anrechnungstatus LIMIT 1;" INSERT INTO lehre.tbl_anrechnungstatus(status_kurzbz, bezeichnung_mehrsprachig) VALUES('inProgressLektor', '{\"Empfehlung angefordert\",\"recommendation requested\"}'); INSERT INTO lehre.tbl_anrechnungstatus(status_kurzbz, bezeichnung_mehrsprachig) VALUES('approved', '{\"genehmigt\",\"approved\"}'); INSERT INTO lehre.tbl_anrechnungstatus(status_kurzbz, bezeichnung_mehrsprachig) VALUES('rejected', '{\"abgelehnt\",\"rejected\"}'); - + GRANT SELECT ON lehre.tbl_anrechnungstatus TO web; GRANT SELECT, UPDATE, INSERT, DELETE ON lehre.tbl_anrechnungstatus TO vilesci; "; - + if(!$db->db_query($qry)) echo 'lehre.tbl_anrechnungstatus: '.$db->db_last_error().'
'; else echo ' lehre.tbl_anrechnungstatus: Tabelle hinzugefuegt
'; } -// GRANT INSERT, UPDATE, DELETE ON TABLE lehre.tbl_anrechnungstatus TO web; (SELECT was granted while adding table anrechnungstatus) -if($result = @$db->db_query("SELECT * FROM information_schema.role_table_grants WHERE table_name='tbl_anrechnungstatus' AND table_schema='lehre' AND grantee='web' AND privilege_type='INSERT'")) -{ - if($db->db_num_rows($result) == 0) - { - $qry = 'GRANT INSERT, UPDATE, DELETE ON TABLE lehre.tbl_anrechnungstatus TO web;'; - if (!$db->db_query($qry)) - echo 'lehre.tbl_anrechnungstatus '.$db->db_last_error().'
'; - else - echo '
Granted privileges to web on lehre.tbl_anrechnungstatus'; - } -} - -// SEQUENCE seq_anrechnungstatus_status_kurzbz -if ($result = $db->db_query("SELECT 0 FROM pg_class WHERE relname = 'seq_anrechnungstatus_status_kurzbz'")) -{ - if ($db->db_num_rows($result) == 0) - { - $qry = ' - CREATE SEQUENCE lehre.seq_anrechnungstatus_status_kurzbz - START WITH 1 - INCREMENT BY 1 - NO MAXVALUE - NO MINVALUE - CACHE 1; - '; - - if(!$db->db_query($qry)) - echo 'lehre.seq_anrechnungstatus_status_kurzbz '.$db->db_last_error().'
'; - else - echo '
Created sequence: lehre.seq_anrechnungstatus_status_kurzbz'; - - // GRANT SELECT, UPDATE ON SEQUENCE lehre.tbl_anrechnungstatus_status_kurzbz_seq to web; - $qry = 'GRANT SELECT, UPDATE ON SEQUENCE lehre.seq_anrechnungstatus_status_kurzbz TO web;'; - if (!$db->db_query($qry)) - echo 'lehre.seq_anrechnungstatus_status_kurzbz '.$db->db_last_error().'
'; - else - echo '
Granted privileges to vilesci on lehre.seq_anrechnungstatus_status_kurzbz'; - } -} - // Add table anrechnung_anrechnungstatus // Für bestehende genehmigte Anrechnungsanträge wird ein Eintrag mit dem Status 'approved' angelegt if(!$result = @$db->db_query("SELECT 1 FROM lehre.tbl_anrechnung_anrechnungstatus LIMIT 1;")) @@ -4628,7 +4587,7 @@ if(!$result = @$db->db_query("SELECT 1 FROM lehre.tbl_anrechnung_anrechnungstatu ALTER TABLE lehre.tbl_anrechnung_anrechnungstatus ADD CONSTRAINT pk_anrechnung_anrechnungstatus PRIMARY KEY (anrechnungstatus_id); ALTER TABLE lehre.tbl_anrechnung_anrechnungstatus ADD CONSTRAINT fk_anrechnung_anrechnungstatus_anrechnung FOREIGN KEY (anrechnung_id) REFERENCES lehre.tbl_anrechnung(anrechnung_id) ON DELETE RESTRICT ON UPDATE CASCADE; ALTER TABLE lehre.tbl_anrechnung_anrechnungstatus ADD CONSTRAINT fk_anrechnung_anrechnungstatus_anrechnungstatus FOREIGN KEY (status_kurzbz) REFERENCES lehre.tbl_anrechnungstatus (status_kurzbz) ON DELETE RESTRICT ON UPDATE CASCADE; - + CREATE SEQUENCE lehre.seq_anrechnung_anrechnungstatus_anrechnungstatus_id START WITH 1 INCREMENT BY 1 @@ -4636,14 +4595,15 @@ if(!$result = @$db->db_query("SELECT 1 FROM lehre.tbl_anrechnung_anrechnungstatu NO MINVALUE CACHE 1; ALTER TABLE lehre.tbl_anrechnung_anrechnungstatus ALTER COLUMN anrechnungstatus_id SET DEFAULT nextval('lehre.seq_anrechnung_anrechnungstatus_anrechnungstatus_id'); - + INSERT INTO lehre.tbl_anrechnung_anrechnungstatus(anrechnung_id, status_kurzbz) SELECT anrechnung_id, 'approved' as status_kurzbz FROM lehre.tbl_anrechnung WHERE genehmigt_von is not null; - - GRANT SELECT ON lehre.tbl_anrechnung_anrechnungstatus TO web; + + GRANT SELECT, UPDATE, INSERT, DELETE ON lehre.tbl_anrechnung_anrechnungstatus TO web; GRANT SELECT, UPDATE, INSERT, DELETE ON lehre.tbl_anrechnung_anrechnungstatus TO vilesci; GRANT SELECT, UPDATE ON lehre.seq_anrechnung_anrechnungstatus_anrechnungstatus_id TO vilesci; + GRANT SELECT, UPDATE ON lehre.seq_anrechnung_anrechnungstatus_anrechnungstatus_id TO web; "; - + if(!$db->db_query($qry)) echo 'lehre.tbl_anrechnung_anrechnungstatus: '.$db->db_last_error().'
'; else @@ -4669,7 +4629,7 @@ if($result = @$db->db_query("SELECT 1 FROM system.tbl_berechtigung WHERE berecht if($db->db_num_rows($result) == 0) { $qry = "INSERT INTO system.tbl_berechtigung(berechtigung_kurzbz, beschreibung) VALUES('student/anrechnung_beantragen', 'Anrechnung beantragen');"; - + if(!$db->db_query($qry)) echo 'system.tbl_berechtigung '.$db->db_last_error().'
'; else @@ -4683,7 +4643,7 @@ if($result = @$db->db_query("SELECT 1 FROM system.tbl_berechtigung WHERE berecht if($db->db_num_rows($result) == 0) { $qry = "INSERT INTO system.tbl_berechtigung(berechtigung_kurzbz, beschreibung) VALUES('lehre/anrechnung_genehmigen', 'Anrechnung genehmigen');"; - + if(!$db->db_query($qry)) echo 'system.tbl_berechtigung '.$db->db_last_error().'
'; else @@ -4697,7 +4657,7 @@ if($result = @$db->db_query("SELECT 1 FROM system.tbl_berechtigung WHERE berecht if($db->db_num_rows($result) == 0) { $qry = "INSERT INTO system.tbl_berechtigung(berechtigung_kurzbz, beschreibung) VALUES('lehre/anrechnung_empfehlen', 'Anrechnung empfehlen');"; - + if(!$db->db_query($qry)) echo 'system.tbl_berechtigung '.$db->db_last_error().'
'; else From 7340564d1e71f4ca925dfcfa05ca595ac0a40798 Mon Sep 17 00:00:00 2001 From: Cris Date: Tue, 16 Mar 2021 17:42:46 +0100 Subject: [PATCH 012/127] Added job to send mail to STGL with yesterdays new Anrechnungen . added AnrechnungJob sendMailToSTGL() . removed functions to send mail from CTRL Signed-off-by: cris-technikum --- .../controllers/jobs/AnrechnungJob.php | 142 ++++++++++++++++++ .../lehre/anrechnung/RequestAnrechnung.php | 93 +----------- .../models/organisation/Studiengang_model.php | 2 +- 3 files changed, 145 insertions(+), 92 deletions(-) diff --git a/application/controllers/jobs/AnrechnungJob.php b/application/controllers/jobs/AnrechnungJob.php index 2868a8052..98c85d592 100644 --- a/application/controllers/jobs/AnrechnungJob.php +++ b/application/controllers/jobs/AnrechnungJob.php @@ -15,6 +15,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); class AnrechnungJob extends JOB_Controller { + const APPROVE_ANRECHNUNG_URI = '/lehre/anrechnung/ApproveAnrechnungUebersicht'; /** * Constructor @@ -23,6 +24,11 @@ class AnrechnungJob extends JOB_Controller { parent::__construct(); $this->load->model('education/Zeugnisnote_model', 'ZeugnisnoteModel'); + $this->load->model('education/Anrechnung_model', 'AnrechnungModel'); + $this->load->model('organisation/Studiengang_model', 'StudiengangModel'); + + $this->load->helper('url'); + $this->load->helper('hlp_sancho_helper'); } /** @@ -84,4 +90,140 @@ class AnrechnungJob extends JOB_Controller } $this->logInfo('End Anrechnung Grades Job', array('Number of Grades added'=>$cnt)); } + + // Send Sancho mail to STGL with yesterdays new Anrechnungen + public function sendMailToSTGL() + { + $this->logInfo('Start AnrechnungJob to send emails to STGL about yesterdays new Anrechnungen.'); + + // Get all yesterdays Anrechnungen + $this->AnrechnungModel->addSelect('anrechnung_id, studiensemester_kurzbz, lv.studiengang_kz, lv.bezeichnung, vorname, nachname'); + $this->AnrechnungModel->addJoin('lehre.tbl_lehrveranstaltung lv', 'lehrveranstaltung_id'); + $this->AnrechnungModel->addJoin('public.tbl_student student', 'prestudent_id'); + $this->AnrechnungModel->addJoin('public.tbl_benutzer benutzer', 'ON (benutzer.uid = student.student_uid)'); + $this->AnrechnungModel->addJoin('public.tbl_person person', 'person_id'); + $this->AnrechnungModel->addOrder('lv.studiengang_kz, lv.bezeichnung'); + + $result = $this->AnrechnungModel->loadWhere( + '(lehre.tbl_anrechnung.insertamum)::date = (NOW() - INTERVAL \'1 DAY\')::DATE' + ); + + // Exit if there are no Anrechnungen + if (!$anrechnungen = getData($result)) { + $this->logInfo('ABORTED: Sending emails to STGL about yesterdays new Anrechnungen aborted - No new Anrechnungen found.'); + exit; + } + + $unique_studiengang_kz_arr = array_unique(array_column($anrechnungen, 'studiengang_kz')); + + foreach ($unique_studiengang_kz_arr as $studiengang_kz) + { + // Get STG bezeichnung + $this->StudiengangModel->addSelect('UPPER( typ || kurzbz ) AS "stg_bezeichnung"'); + $studiengang_bezeichnung = $this->StudiengangModel->load($studiengang_kz)->retval[0]->stg_bezeichnung; + + // Get STGL mail address + list ($to, $vorname) = self::_getSTGLMailAddress($studiengang_kz); + + // Get HTML table with new Anrechnungen of that STG plus amount of them + list ($anrechnungen_amount, $anrechnungen_table) = self::_getSTGLMailDataTable($studiengang_kz, $anrechnungen); + + // Link to Antrag genehmigen dashboard + $url = + CIS_ROOT. 'cis/index.php?menu='. + CIS_ROOT. 'cis/menu.php?content_id=&content='. + CIS_ROOT. index_page(). self::APPROVE_ANRECHNUNG_URI; + + // Prepare mail content + $body_fields = array( + 'vorname' => $vorname, + 'studiengang' => $studiengang_bezeichnung, + 'anzahl' => $anrechnungen_amount, + 'datentabelle' => $anrechnungen_table, + 'link' => anchor($url, 'Anrechnungsanträge Übersicht') + ); + + // Send mail + sendSanchoMail( + 'AnrechnungAntragStellen', + $body_fields, + $to, + 'Anerkennung nachgewiesener Kenntnisse: Neuer Antrag wurde gestellt' + ); + } + + $this->logInfo('SUCCEDED: Sending emails to STGL about yesterdays new Anrechnungen succeded.'); + } + + // Get STGL mail address + private function _getSTGLMailAddress($studiengang_kz) + { + $result = $this->StudiengangModel->getLeitung($studiengang_kz); + + // Get STGL mail address + if (hasData($result)) + { + return array( + $result->retval[0]->uid. '@'. DOMAIN, + $result->retval[0]->vorname + ); + } + // If not available, get assistance mail address + else + { + $result = $this->StudiengangModel->load($studiengang_kz); + + if (hasData($result)) + { + return array( + $result->retval[0]->email, + '' + ); + } + } + } + + // Build HTML table with yesterdays new Anrechnungen of the given STG + private function _getSTGLMailDataTable($studiengang_kz, $anrechnungen) + { + $html = ''; + $lv_bezeichnung = ''; + + // Filter Anrechnungen of given STG + $anrechnungen = array_filter( + $anrechnungen, + function ($anrechnung) use (&$studiengang_kz) { + return $anrechnung->studiengang_kz == $studiengang_kz; + }); + + // Amount of Anrechnungen + $amount = count($anrechnungen); + + // HTML table body + $html .= ' + + + '; + + foreach ($anrechnungen as $anrechnung) + { + // Head line for each LV bezeichnung + if ($anrechnung->bezeichnung != $lv_bezeichnung) + { + $html .= ''; + } + + $lv_bezeichnung = $anrechnung->bezeichnung; + + // Row for each Anrechnung / student + $html .= ''; + } + + $html .= ' + +
' . $anrechnung->bezeichnung . '
'. $anrechnung->vorname. ' '. $anrechnung->nachname. '
+ '; + + return array($amount, $html); + } } diff --git a/application/controllers/lehre/anrechnung/RequestAnrechnung.php b/application/controllers/lehre/anrechnung/RequestAnrechnung.php index 4f589e5f5..dabedb641 100644 --- a/application/controllers/lehre/anrechnung/RequestAnrechnung.php +++ b/application/controllers/lehre/anrechnung/RequestAnrechnung.php @@ -200,21 +200,8 @@ class requestAnrechnung extends Auth_Controller $this->db->trans_rollback(); show_error($result->msg, EXIT_ERROR); } - - // Send mail to STGL - $mail_params = array( - 'studiengang_kz' => $prestudent->studiengang_kz, - 'lehrveranstaltung_id' => $lehrveranstaltung_id - ); - - if(!$this->_sendSanchoMail($mail_params)) - { - show_error('Failed sending mail'); - } - else - { - redirect(site_url(). self::REQUEST_ANRECHNUNG_URI. '?studiensemester='. $studiensemester_kurzbz. '&lv_id='. $lehrveranstaltung_id); - } + + redirect(site_url(). self::REQUEST_ANRECHNUNG_URI. '?studiensemester='. $studiensemester_kurzbz. '&lv_id='. $lehrveranstaltung_id); } /** @@ -330,80 +317,4 @@ class requestAnrechnung extends Auth_Controller return $result; } - - /** - * Send mail to STGL (if not available, send to STGL assistance) - * @param $mail_params - */ - private function _sendSanchoMail($mail_params) - { - // Get STGL mail address, if available, otherwise get assistance mail address - list ($to, $vorname) = $this->_getSTGLMailAddress($mail_params['studiengang_kz']); - - // Get full name of student - $this->load->model('person/Person_model', 'PersonModel'); - if (!$student_name = getData($this->PersonModel->getFullName($this->_uid))) - { - show_error ('Failed retrieving person'); - } - - // Get lehrveranstaltung bezeichnung - $this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel'); - if (!$lehrveranstaltung = getData($this->LehrveranstaltungModel->load($mail_params['lehrveranstaltung_id']))[0]) - { - show_error ('Failed retrieving person'); - } - - // Link to Antrag genehmigen - $url = - CIS_ROOT. 'cis/index.php?menu='. - CIS_ROOT. 'cis/menu.php?content_id=&content='. - CIS_ROOT. index_page(). self::APPROVE_ANRECHNUNG_URI; - - // Prepare mail content - $body_fields = array( - 'vorname' => $vorname, - 'student_name' => $student_name, - 'lehrveranstaltung_bezeichnung' => $lehrveranstaltung->bezeichnung, - 'link' => anchor($url, 'Anrechnungsanträge Übersicht') - ); - - sendSanchoMail( - 'AnrechnungAntragStellen', - $body_fields, - $to, - 'Anerkennung nachgewiesener Kenntnisse: Neuer Antrag wurde gestellt' - ); - - return true; - } - - // Get STGL mail address, if available, otherwise get assistance mail address - private function _getSTGLMailAddress($stg_kz) - { - $this->load->model('organisation/Studiengang_model', 'StudiengangModel'); - $result = $this->StudiengangModel->getLeitung($stg_kz); - - // Get STGL mail address, if available - if (hasData($result)) - { - return array( - $result->retval[0]->uid. '@'. DOMAIN, - $result->retval[0]->vorname - ); - } - // ...otherwise get assistance mail address - else - { - $result = $this->StudiengangModel->load($stg_kz); - - if (hasData($result)) - { - return array( - $result->retval[0]->email, - '' - ); - } - } - } } diff --git a/application/models/organisation/Studiengang_model.php b/application/models/organisation/Studiengang_model.php index 8b8be0366..c1e2b76a4 100644 --- a/application/models/organisation/Studiengang_model.php +++ b/application/models/organisation/Studiengang_model.php @@ -475,7 +475,7 @@ class Studiengang_model extends DB_Model funktion_kurzbz = \'Leitung\' AND ( datum_von <= NOW() OR datum_von IS NULL ) AND ( datum_bis >= NOW() OR datum_bis IS NULL ) - AND studiengang_kz = ' . $this->db->escape($studiengang_kz, FHC_INTEGER) + AND studiengang_kz = ' . $this->db->escape($studiengang_kz) ; } From d345cbb43bb0690177cb08876d81d742e17f6f79 Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 18 Mar 2021 10:55:58 +0100 Subject: [PATCH 013/127] =?UTF-8?q?Added=20'Zur=C3=BCcknehmen'-button=20fo?= =?UTF-8?q?r=20recommendation=20in=20STGL=20Detail=20View?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Requested recommendations can now be withdrawn. Now a button 'Zurücknehmen' is displayed as long as the Anrechnung is processed by the lector and only as long the lector has not provided a recommendation. Signed-off-by: cris-technikum --- .../anrechnung/ApproveAnrechnungDetail.php | 53 ++++++++++++++- .../anrechnung/approveAnrechnungDetail.php | 7 ++ .../anrechnung/approveAnrechnungDetail.js | 65 ++++++++++++++++++- system/phrasesupdate.php | 20 ++++++ 4 files changed, 143 insertions(+), 2 deletions(-) diff --git a/application/controllers/lehre/anrechnung/ApproveAnrechnungDetail.php b/application/controllers/lehre/anrechnung/ApproveAnrechnungDetail.php index a280d0da1..85fb2812f 100644 --- a/application/controllers/lehre/anrechnung/ApproveAnrechnungDetail.php +++ b/application/controllers/lehre/anrechnung/ApproveAnrechnungDetail.php @@ -26,7 +26,8 @@ class approveAnrechnungDetail extends Auth_Controller 'approve' => 'lehre/anrechnung_genehmigen:rw', 'reject' => 'lehre/anrechnung_genehmigen:rw', 'requestRecommendation' => 'lehre/anrechnung_genehmigen:rw', - 'withdraw' => 'lehre/anrechnung_genehmigen:rw' + 'withdraw' => 'lehre/anrechnung_genehmigen:rw', + 'withdrawRequestRecommendation' => 'lehre/anrechnung_genehmigen:rw' ) ); @@ -317,6 +318,56 @@ class approveAnrechnungDetail extends Auth_Controller 'status_bezeichnung' => $this->anrechnunglib->getLastAnrechnungstatus($anrechnung_id)) ); } + + /** + * Withdraw request for reommendation and reset to 'inProgressDP'. + * This is only possible if the lector has not provided a recommendation yet. + */ + public function withdrawRequestRecommendation() + { + $anrechnung_id = $this->input->post('anrechnung_id'); + + if (!is_numeric($anrechnung_id)) + { + show_error('Wrong parameter.'); + } + + // Get boolean empfehlung of given Anrechnung + if (!$result = getData($this->AnrechnungModel->load($anrechnung_id))[0]) + { + show_error('Failed loading Anrechnung'); + } + + $empfehlung = $result->empfehlung_anrechnung; + + // Get last Anrechnungstatus + if (!$result = getData($this->AnrechnungModel->getLastAnrechnungstatus($anrechnung_id))[0]) + { + show_error('Failed loading last Anrechnungstatus'); + } + + $last_status = $result->status_kurzbz; + $anrechnungstatus_id = $result->anrechnungstatus_id; + + // Return if Anrechnung was not waiting for recommendation or if Anrechnung has already been recommended + if ($last_status != self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR && !is_null($empfehlung)) + { + return $this->outputJsonError('No recommendation to withdraw.'); + } + + // Reset status to 'inProgressDP' + $result = $this->AnrechnungModel->deleteAnrechnungstatus($anrechnungstatus_id); + + if (isError($result)) + { + return $this->outputJsonError('Could not withdraw this application.'); + } + + // Success output to AJAX + return $this->outputJsonSuccess(array( + 'status_bezeichnung' => $this->anrechnunglib->getLastAnrechnungstatus($anrechnung_id)) + ); + } /** * Download and open uploaded document (Nachweisdokument). diff --git a/application/views/lehre/anrechnung/approveAnrechnungDetail.php b/application/views/lehre/anrechnung/approveAnrechnungDetail.php index f5ab892f0..773cb290f 100644 --- a/application/views/lehre/anrechnung/approveAnrechnungDetail.php +++ b/application/views/lehre/anrechnung/approveAnrechnungDetail.php @@ -39,6 +39,7 @@ $this->load->view( ), 'anrechnung' => array( 'genehmigungAblehnungWirklichZuruecknehmen', + 'empfehlungsanforderungWirklichZuruecknehmen', 'erfolgreichZurueckgenommen' ) ), @@ -199,6 +200,12 @@ $this->load->view(
+
- - 'requestAnrechnung-form'], - ['lv_id' => $antragData->lv_id, 'studiensemester' => $antragData->studiensemester_kurzbz] - ); ?>
@@ -68,149 +68,151 @@ $this->load->view(
- -
-
-
-
- p->t('anrechnung', 'antrag'); ?>  - - - - p->t('anrechnung', 'antragdatum'); ?>: anrechnung_id) ? $anrechnungData->insertamum : '-' ?> -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
p->t('person', 'student')); ?>vorname . ' ' . $antragData->nachname; ?>
p->t('person', 'personenkennzeichen'); ?>matrikelnr ?>
p->t('lehre', 'studiensemester')); ?>studiensemester_kurzbz ?>
p->t('lehre', 'studiengang')); ?>stg_bezeichnung ?>
p->t('lehre', 'lehrveranstaltung'); ?>lv_bezeichnung ?>
p->t('lehre', 'ects'); ?>ects ?>
p->t('lehre', 'lektor')); ?> - lektoren) - 1 ?> - lektoren as $key => $lektor): ?> - vorname . ' ' . $lektor->nachname; - echo $key === $len ? '' : ', ' ?> - -
-
-
-
- -
-
-
- p->t('anrechnung', 'antragStellenText'); ?>  -
- -
-
- -
-
-
-
- -
-
-
-
- p->t('anrechnung', 'nachweisdokumente'); ?>  - - - -
-
-
- > +
+ + + +
+
+
+
+ p->t('anrechnung', 'antrag'); ?>  + + + + p->t('anrechnung', 'antragdatum'); ?>: anrechnung_id) ? $anrechnungData->insertamum : '-' ?>
- - - - dms_id)): ?> - dokumentname) ?> - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
p->t('person', 'student')); ?>vorname . ' ' . $antragData->nachname; ?>
p->t('person', 'personenkennzeichen'); ?>matrikelnr ?>
p->t('lehre', 'studiensemester')); ?>studiensemester_kurzbz ?>
p->t('lehre', 'studiengang')); ?>stg_bezeichnung ?>
p->t('lehre', 'lehrveranstaltung'); ?>lv_bezeichnung ?>
p->t('lehre', 'ects'); ?>ects ?>
p->t('lehre', 'lektor')); ?> + lektoren) - 1 ?> + lektoren as $key => $lektor): ?> + vorname . ' ' . $lektor->nachname; + echo $key === $len ? '' : ', ' ?> + +
-
- -
-
-
-
-
-
- p->t('anrechnung', 'herkunftDerKenntnisse'); ?>  - - - + +
+
+
+ p->t('anrechnung', 'antragStellenText'); ?>  +
+ +
+
+ +
+
+
+
+ +
+
+
+
+ p->t('anrechnung', 'nachweisdokumente'); ?>  + + + +
+
+
+
-
- + + + + dms_id)): ?> + dokumentname) ?> + +
+
+
+
+ +
+
+
+
+
+
+ p->t('anrechnung', 'herkunftDerKenntnisse'); ?>  + + + +
+
+ +
-
- -
- > -
+ +
+ +
+
@@ -234,7 +236,6 @@ $this->load->view( load->view('lehre/anrechnung/requestAnrechnungImportant'); ?>
-
diff --git a/public/js/lehre/anrechnung/requestAnrechnung.js b/public/js/lehre/anrechnung/requestAnrechnung.js index 1f9f8b51b..6c4c5c9ca 100644 --- a/public/js/lehre/anrechnung/requestAnrechnung.js +++ b/public/js/lehre/anrechnung/requestAnrechnung.js @@ -5,10 +5,46 @@ $(function(){ // Set status alert color requestAnrechnung.setStatusAlertColor(); + // Disable Form fields if Anrechnung was already applied + requestAnrechnung.disableFormFieldsIfAntragIsApplied(); + // Init tooltips requestAnrechnung.initTooltips(); + $('#requestAnrechnung-apply-anrechnung').click(function(e){ + // Avoid form redirecting automatically + e.preventDefault(); + + // Get form data + let formdata = new FormData($('#requestAnrechnung-form')[0]); + + $.ajax({ + url : "RequestAnrechnung/apply", + type: "POST", + data : formdata, + processData: false, // needed to pass uploaded file with FormData + contentType: false, // needed to pass uploaded file with FormData + success:function(data, textStatus, jqXHR){ + if (data.error && data.retval != null) + { + FHC_DialogLib.alertWarning(data.retval); + } + + if (!data.error && data.retval != null) + { + requestAnrechnung.formatAnrechnungIsApplied( + data.retval.antragdatum + ); + + FHC_DialogLib.alertSuccess(FHC_PhrasesLib.t("global", "antragWurdeGestellt")); + } + }, + error: function(jqXHR, textStatus, errorThrown){ + FHC_DialogLib.alertWarning(FHC_PhrasesLib.t("ui", "systemfehler")); + } + }); + }); }) var requestAnrechnung = { @@ -24,9 +60,20 @@ var requestAnrechnung = { break; case '': $('#requestAnrechnung-status_kurzbz').closest('div').addClass('alert-info'); + $('#requestAnrechnung-status_kurzbz').text(FHC_PhrasesLib.t("ui", "neu")); break; default: $('#requestAnrechnung-status_kurzbz').closest('div').addClass('alert-warning'); + $('#requestAnrechnung-status_kurzbz').text(FHC_PhrasesLib.t("ui", "inBearbeitung")); + } + }, + disableFormFieldsIfAntragIsApplied: function(){ + let status_kurzbz = $('#requestAnrechnung-status_kurzbz').data('status_kurzbz'); + + if (status_kurzbz != '') + { + // Disable all form elements + $("#requestAnrechnung-form :input").prop("disabled", true); } }, initTooltips: function (){ @@ -35,5 +82,13 @@ var requestAnrechnung = { html: true } ); + }, + formatAnrechnungIsApplied: function (antragdatum){ + $('#requestAnrechnung-antragdatum').text(antragdatum); + $('#requestAnrechnung-status_kurzbz').text(FHC_PhrasesLib.t("ui", "inBearbeitung")); + $('#requestAnrechnung-status_kurzbz').closest('div').addClass('alert-warning'); + + // Disable all form elements + $("#requestAnrechnung-form :input").prop("disabled", true); } } \ No newline at end of file diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index d88514ece..fce82a1d5 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -10350,7 +10350,87 @@ array( ) ) ), - + array( + 'app' => 'core', + 'category' => 'ui', + 'phrase' => 'neu', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => "Neu", + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => "New", + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'ui', + 'phrase' => 'inBearbeitung', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => "in Bearbeitung", + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => "in process", + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'global', + 'phrase' => 'antragWurdeGestellt', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => "Antrag wurde gestellt.", + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => "Application was submitted successfully.", + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'global', + 'phrase' => 'antragBereitsGestellt', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => "Der Antrag wurde bereits gestellt.", + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => "Application has already been submitted.", + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + ); From faf253c15933f9f376138e2cb7e1242d45c3b7ed Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 25 Mar 2021 16:41:41 +0100 Subject: [PATCH 022/127] Adapted to keep individual filters by opening views in new tabs When Detail Views were opened within the same browser window, individual filters of the overview site were lost when returning to the overview. Fixed by opening detail views in new tab. Signed-off-by: cris-technikum --- .../lehre/anrechnung/approveAnrechnungUebersichtData.php | 1 + public/js/lehre/anrechnung/approveAnrechnungUebersicht.js | 2 +- public/js/lehre/anrechnung/reviewAnrechnungUebersicht.js | 4 ++-- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/application/views/lehre/anrechnung/approveAnrechnungUebersichtData.php b/application/views/lehre/anrechnung/approveAnrechnungUebersichtData.php index af77358ef..d6bab0e82 100644 --- a/application/views/lehre/anrechnung/approveAnrechnungUebersichtData.php +++ b/application/views/lehre/anrechnung/approveAnrechnungUebersichtData.php @@ -83,6 +83,7 @@ $filterWidgetArray = array( layout: "fitColumns", // fit columns to width of table persistentLayout:true, persistentSort:true, + persistentFilter:true, autoResize: false, // prevent auto resizing of table (false to allow adapting table size when cols are (de-)activated headerFilterPlaceholder: " ", index: "anrechnung_id", // assign specific column as unique id (important for row indexing) diff --git a/public/js/lehre/anrechnung/approveAnrechnungUebersicht.js b/public/js/lehre/anrechnung/approveAnrechnungUebersicht.js index 7f777178d..ffb2c2a41 100644 --- a/public/js/lehre/anrechnung/approveAnrechnungUebersicht.js +++ b/public/js/lehre/anrechnung/approveAnrechnungUebersicht.js @@ -63,7 +63,7 @@ function func_tableBuilt(table) { url:function(cell){ return BASE_URL + "/" + APPROVE_ANRECHNUNG_DETAIL_URI + "?anrechnung_id=" + cell.getData().anrechnung_id }, - // target:"_blank" + target:"_blank" } }, false, "status" // place column after status ); diff --git a/public/js/lehre/anrechnung/reviewAnrechnungUebersicht.js b/public/js/lehre/anrechnung/reviewAnrechnungUebersicht.js index 379358eea..ddf7a55d3 100644 --- a/public/js/lehre/anrechnung/reviewAnrechnungUebersicht.js +++ b/public/js/lehre/anrechnung/reviewAnrechnungUebersicht.js @@ -62,8 +62,8 @@ function func_tableBuilt(table) { label:"Details", url:function(cell){ return BASE_URL + "/" + APPROVE_ANRECHNUNG_DETAIL_URI + "?anrechnung_id=" + cell.getData().anrechnung_id - } - // target:"_blank" + }, + target:"_blank" } }, false, "status" // place column after status ); From f9cbd9caf5686ee2703afaf4d1cf8f6f95c0d46f Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 25 Mar 2021 16:51:11 +0100 Subject: [PATCH 023/127] Refactored code Signed-off-by: cris-technikum --- .../anrechnung/ApproveAnrechnungDetail.php | 30 ++- .../lehre/anrechnung/RequestAnrechnung.php | 196 ++++++++---------- .../anrechnung/ReviewAnrechnungDetail.php | 23 +- application/libraries/AnrechnungLib.php | 27 ++- 4 files changed, 128 insertions(+), 148 deletions(-) diff --git a/application/controllers/lehre/anrechnung/ApproveAnrechnungDetail.php b/application/controllers/lehre/anrechnung/ApproveAnrechnungDetail.php index bbaab393b..51d0617c9 100644 --- a/application/controllers/lehre/anrechnung/ApproveAnrechnungDetail.php +++ b/application/controllers/lehre/anrechnung/ApproveAnrechnungDetail.php @@ -82,29 +82,23 @@ class approveAnrechnungDetail extends Auth_Controller self::_checkIfEntitledToReadAnrechnung($anrechnung_id); // Get Anrechung data - if (!$anrechnungData = getData($this->anrechnunglib->getAnrechnungData($anrechnung_id))) - { - show_error('Missing data for Anrechnung.'); - } + $anrechnungData = $this->anrechnunglib->getAnrechnungData($anrechnung_id); + + // Get Antrag data + $antragData = $this->anrechnunglib->getAntragData( + $student_uid = $this->StudentModel->getUID($anrechnungData->prestudent_id), + $anrechnungData->studiensemester_kurzbz, + $anrechnungData->lehrveranstaltung_id + ); // Get Empfehlung data - if(!$empfehlungData = getData($this->anrechnunglib->getEmpfehlungData($anrechnung_id))) - { - show_error('Missing data for recommendation'); - } + $empfehlungData = $this->anrechnunglib->getEmpfehlungData($anrechnung_id); // Get Genehmigung data - if(!$genehmigungData = getData($this->anrechnunglib->getGenehmigungData($anrechnung_id))) - { - show_error('Missing data for recommendation'); - } - + $genehmigungData = $this->anrechnunglib->getGenehmigungData($anrechnung_id); + $viewData = array( - 'antragData' => $this->anrechnunglib->getAntragData( - $student_uid = $this->StudentModel->getUID($anrechnungData->prestudent_id), - $anrechnungData->studiensemester_kurzbz, - $anrechnungData->lehrveranstaltung_id - ), + 'antragData' => $antragData, 'anrechnungData' => $anrechnungData, 'empfehlungData' => $empfehlungData, 'genehmigungData' => $genehmigungData diff --git a/application/controllers/lehre/anrechnung/RequestAnrechnung.php b/application/controllers/lehre/anrechnung/RequestAnrechnung.php index c4c3a145d..1b305d186 100644 --- a/application/controllers/lehre/anrechnung/RequestAnrechnung.php +++ b/application/controllers/lehre/anrechnung/RequestAnrechnung.php @@ -6,15 +6,15 @@ class requestAnrechnung extends Auth_Controller { const REQUEST_ANRECHNUNG_URI = '/lehre/anrechnung/RequestAnrechnung'; const APPROVE_ANRECHNUNG_URI = '/lehre/anrechnung/ApproveAnrechnungUebersicht'; - + const ANRECHNUNGSTATUS_PROGRESSED_BY_STGL = 'inProgressDP'; const ANRECHNUNGSTATUS_PROGRESSED_BY_KF = 'inProgressKF'; const ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR = 'inProgressLektor'; const ANRECHNUNGSTATUS_APPROVED = 'approved'; const ANRECHNUNGSTATUS_REJECTED = 'rejected'; - + const DEADLINE_INTERVAL_NACH_SEMESTERSTART = 'P1M'; // Deadline for application - + public function __construct() { // Set required permissions @@ -25,22 +25,22 @@ class requestAnrechnung extends Auth_Controller 'download' => 'student/anrechnung_beantragen:rw', ) ); - + // Load models $this->load->model('education/Anrechnung_model', 'AnrechnungModel'); $this->load->model('content/DmsVersion_model', 'DmsVersionModel'); - + // Load libraries $this->load->library('WidgetLib'); $this->load->library('PermissionLib'); $this->load->library('AnrechnungLib'); $this->load->library('DmsLib'); - + // Load helpers $this->load->helper('form'); $this->load->helper('url'); $this->load->helper('hlp_sancho_helper'); - + // Load language phrases $this->loadPhrases( array( @@ -51,53 +51,52 @@ class requestAnrechnung extends Auth_Controller 'lehre' ) ); - + $this->_setAuthUID(); - + $this->setControllerId(); } - + public function index() { $studiensemester_kurzbz = $this->input->get('studiensemester'); $lehrveranstaltung_id = $this->input->get('lv_id'); - - if (!is_numeric($lehrveranstaltung_id) || !is_string($studiensemester_kurzbz)) + + if (isEmptyString($lehrveranstaltung_id) || isEmptyString($studiensemester_kurzbz)) { show_error('Missing correct parameter'); } - + + // Exit if user is not a student + $result = $this->StudentModel->load(array('student_uid' => $this->_uid)); + + if (!hasData($result)) + { + show_error('Cant load user'); + } + + // Get Prestudent ID + $prestudent_id = getData($result)[0]->prestudent_id; + // Check if application deadline is expired - // $is_expired = $this->_checkAntragDeadline($studiensemester_kurzbz); - $is_expired = false; // Set to false until Deadline is defined - - $student = $this->StudentModel->load(array('student_uid' => $this->_uid)); - if (isSuccess($student) && hasData($student)) - { - $prestudent_id = getData($student)[0]->prestudent_id; - } - else - show_error('Cant load User'); - + // $is_expired = self::_checkAntragDeadline($studiensemester_kurzbz); + $is_expired = false; + // Get Anrechung data - $result = $this->anrechnunglib->getAnrechnungDataByLv($lehrveranstaltung_id, $studiensemester_kurzbz, $prestudent_id); - if (!$anrechnungData = getData($result)) - { - show_error(getError($anrechnungData)); - } + $anrechnungData = $this->anrechnunglib->getAnrechnungDataByLv($lehrveranstaltung_id, $studiensemester_kurzbz, $prestudent_id); // Get Antrag data $antragData = $this->anrechnunglib->getAntragData($this->_uid, $studiensemester_kurzbz, $lehrveranstaltung_id); - + $viewData = array( 'antragData' => $antragData, 'anrechnungData' => $anrechnungData, 'is_expired' => $is_expired ); - + $this->load->view('lehre/anrechnung/requestAnrechnung.php', $viewData); } - + /** * Apply Anrechnungsantrag and send to STGL */ @@ -108,12 +107,13 @@ class requestAnrechnung extends Auth_Controller $lehrveranstaltung_id = $this->input->post('lv_id'); $studiensemester_kurzbz = $this->input->post('studiensemester'); + // Validate data if (empty($_FILES['uploadfile']['name'])) { show_error('Missing upload file'); } - if (!is_numeric($begruendung_id) || !is_numeric($lehrveranstaltung_id) || !is_string($studiensemester_kurzbz)) + if (isEmptyString($begruendung_id) || isEmptyString($lehrveranstaltung_id) || isEmptyString($studiensemester_kurzbz)) { show_error('Missing correct parameter'); } @@ -140,64 +140,34 @@ class requestAnrechnung extends Auth_Controller { return $this->outputJsonError($this->p->t('anrechnung', 'antragNurImAktSS')); } - + + // Upload document + $lastInsert_dms_id = self::_uploadFile(); + // Start DB transaction $this->db->trans_start(false); - - // Upload document - $dms = array( - 'kategorie_kurzbz' => 'anrechnung', - 'version' => 0, - 'name' => $_FILES['uploadfile']['name'], - 'mimetype' => $_FILES['uploadfile']['type'], - 'insertamum' => (new DateTime())->format('Y-m-d H:i:s'), - 'insertvon' => $this->_uid - ); - - if(isError($uploaddata = $this->dmslib->upload($dms, array('pdf')))) - { - show_error(getError($uploaddata)); - } - - // Get PrestudentID - $result = $this->_loadPrestudent($this->_uid, $studiensemester_kurzbz); - - if (!$prestudent = getData($result)[0]) - { - show_error('Failed retrieving prestudent'); - } - + // Save Anrechnung $result = $this->AnrechnungModel->insert(array( - 'prestudent_id' => $prestudent->prestudent_id, + 'prestudent_id' => $prestudent_id, 'lehrveranstaltung_id' => $lehrveranstaltung_id, 'begruendung_id' => $begruendung_id, - 'dms_id' => $uploaddata->retval['dms_id'], + 'dms_id' => $lastInsert_dms_id, 'studiensemester_kurzbz' => $studiensemester_kurzbz, 'anmerkung_student' => $anmerkung, 'insertvon' => $this->_uid )); - - if (isError($result)) - { - show_error('Failed inserting Anrechnung'); - } - + // Save Anrechnungstatus 'inProgressSTGL' - $result = $this->AnrechnungModel->saveAnrechnungstatus($result->retval, self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL); - - if (isError($result)) - { - show_error('Failed saving Anrechnungstatus'); - } - - // Transaction complete! + $this->AnrechnungModel->saveAnrechnungstatus($result->retval, self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL); + + // Transaction complete $this->db->trans_complete(); - if ($this->db->trans_status() === false || isError($result)) + if ($this->db->trans_status() === false) { $this->db->trans_rollback(); - show_error($result->msg, EXIT_ERROR); + show_error('Failed inserting Anrechnung', EXIT_ERROR); } // Output to AJAX @@ -230,31 +200,13 @@ class requestAnrechnung extends Auth_Controller private function _setAuthUID() { $this->_uid = getAuthUID(); - + if (!$this->_uid) show_error('User authentification failed'); } - /** - * Load Prestudent by uid and Studiensemester. - * @param $uid - * @param $studiensemester_kurzbz - * @return mixed - */ - private function _loadPrestudent($uid, $studiensemester_kurzbz) - { - $this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel'); - $this->load->model('crm/Student_model', 'StudentModel'); - - $this->PrestudentstatusModel->addJoin('public.tbl_student', 'prestudent_id'); - return $this->PrestudentstatusModel->loadWhere(array( - 'student_uid' => $uid, - 'studiensemester_kurzbz' => $studiensemester_kurzbz - ) - ); - } - /** * Check if application deadline is expired. + * * @param $studiensemester_kurzbz * @return bool True if semester start is more then 1 week ago * @throws Exception @@ -270,13 +222,14 @@ class requestAnrechnung extends Auth_Controller $start = new DateTime($start[0]->start); $today = new DateTime('today midnight'); - + // True if today > application deadline return ($today > $start->add((new DateInterval(self::DEADLINE_INTERVAL_NACH_SEMESTERSTART)))); } - + /** - * Check if user is entitled to read dms doc + * Check if user is entitled to read dms doc. + * * @param $dms_id */ private function _checkIfEntitledToReadDMSDoc($dms_id) @@ -287,7 +240,7 @@ class requestAnrechnung extends Auth_Controller } $result = $this->AnrechnungModel->loadWhere(array('dms_id' => $dms_id)); - + if($result = getData($result)[0]) { if ($result->prestudent_id == $student->prestudent_id) @@ -295,14 +248,17 @@ class requestAnrechnung extends Auth_Controller return; } } - + show_error('You are not entitled to read this document'); } - + /** - * Get Anrechnung by Lehrveranstaltung + * Check if application already exists. + * * @param $lehrveranstaltung_id - * @return mixed + * @param $studiensemester_kurzbz + * @param $prestudent_id + * @return bool */ private function _applicationExists($lehrveranstaltung_id, $studiensemester_kurzbz, $prestudent_id) { @@ -311,7 +267,7 @@ class requestAnrechnung extends Auth_Controller 'studiensemester_kurzbz' => $studiensemester_kurzbz, 'prestudent_id' => $prestudent_id )); - + if (isError($result)) { show_error(getError($result)); @@ -321,7 +277,8 @@ class requestAnrechnung extends Auth_Controller } /** - * Check, if applications' study semester is actual study semester + * Check if applications' study semester is actual study semester. + * * @param $studiensemester_kurzbz * @return bool */ @@ -333,4 +290,29 @@ class requestAnrechnung extends Auth_Controller return $studiensemester_kurzbz == $actual_ss; } -} + + private function _uploadFile(){ + + if (empty($_FILES['uploadfile']['name'])) + { + show_error('Missing upload file'); + } + + // Upload document + $dms = array( + 'kategorie_kurzbz' => 'anrechnung', + 'version' => 0, + 'name' => $_FILES['uploadfile']['name'], + 'mimetype' => $_FILES['uploadfile']['type'], + 'insertamum' => (new DateTime())->format('Y-m-d H:i:s'), + 'insertvon' => $this->_uid + ); + + if (isError($uploaddata = $this->dmslib->upload($dms, array('pdf')))) + { + show_error(getError($uploaddata)); + } + + return $uploaddata->retval['dms_id']; + } +} \ No newline at end of file diff --git a/application/controllers/lehre/anrechnung/ReviewAnrechnungDetail.php b/application/controllers/lehre/anrechnung/ReviewAnrechnungDetail.php index 156c17334..865a2b3ae 100644 --- a/application/controllers/lehre/anrechnung/ReviewAnrechnungDetail.php +++ b/application/controllers/lehre/anrechnung/ReviewAnrechnungDetail.php @@ -78,23 +78,20 @@ class reviewAnrechnungDetail extends Auth_Controller self::_checkIfEntitledToReadAnrechnung($anrechnung_id); // Get Anrechung data - if (!$anrechnungData = getData($this->anrechnunglib->getAnrechnungData($anrechnung_id))) - { - show_error('Missing data for Anrechnung.'); - } + $anrechnungData = $this->anrechnunglib->getAnrechnungData($anrechnung_id); + + // Get Antrag data + $antragData = $this->anrechnunglib->getAntragData( + $student_uid = $this->StudentModel->getUID($anrechnungData->prestudent_id), + $anrechnungData->studiensemester_kurzbz, + $anrechnungData->lehrveranstaltung_id + ); // Get Empfehlung data - if(!$empfehlungData = getData($this->anrechnunglib->getEmpfehlungData($anrechnung_id))) - { - show_error('Missing data for recommendation'); - } + $empfehlungData = $this->anrechnunglib->getEmpfehlungData($anrechnung_id); $viewData = array( - 'antragData' => $this->anrechnunglib->getAntragData( - $student_uid = $this->StudentModel->getUID($anrechnungData->prestudent_id), - $anrechnungData->studiensemester_kurzbz, - $anrechnungData->lehrveranstaltung_id - ), + 'antragData' => $antragData, 'anrechnungData' => $anrechnungData, 'empfehlungData' => $empfehlungData ); diff --git a/application/libraries/AnrechnungLib.php b/application/libraries/AnrechnungLib.php index 295426b86..93d128bb7 100644 --- a/application/libraries/AnrechnungLib.php +++ b/application/libraries/AnrechnungLib.php @@ -23,6 +23,8 @@ class AnrechnungLib $this->ci->load->model('organisation/Studiengang_model', 'StudiengangModel'); $this->ci->load->model('crm/Student_model', 'StudentModel'); $this->ci->load->model('content/DmsVersion_model', 'DmsVersionModel'); + + $this->ci->load->library('DmsLib'); } /** @@ -109,8 +111,12 @@ class AnrechnungLib { $anrechnung_data = $this->_setAnrechnungDataObject($anrechnung); } + else + { + show_error('No Anrechnung with this anrechnung_id.'); + } - return success($anrechnung_data); + return $anrechnung_data; } @@ -155,7 +161,7 @@ class AnrechnungLib $anrechnung_data = $this->_setAnrechnungDataObject($anrechnung); } - return success($anrechnung_data); + return $anrechnung_data; } /** @@ -173,8 +179,8 @@ class AnrechnungLib $this->ci->AnrechnungModel->addSelect('tbl_benutzer.uid, tbl_prestudent.prestudent_id, tbl_person.person_id, tbl_anrechnung.studiensemester_kurzbz, vorname, nachname, geschlecht, tbl_lehrveranstaltung.bezeichnung AS "lv_bezeichnung"'); $this->ci->AnrechnungModel->addJoin('public.tbl_prestudent', 'prestudent_id'); $this->ci->AnrechnungModel->addJoin('public.tbl_student', 'prestudent_id'); - $this->ci->AnrechnungModel->addJoin('public.tbl_benutzer', 'uid=student_uid'); - $this->ci->AnrechnungModel->addJoin('public.tbl_person', 'tbl_benutzer.person_id=tbl_person.person_id'); + $this->ci->AnrechnungModel->addJoin('public.tbl_benutzer', 'uid = student_uid'); + $this->ci->AnrechnungModel->addJoin('public.tbl_person', 'tbl_benutzer.person_id = tbl_person.person_id'); $this->ci->AnrechnungModel->addJoin('lehre.tbl_lehrveranstaltung', 'lehrveranstaltung_id'); $result = $this->ci->AnrechnungModel->load($anrechnung_id); @@ -230,7 +236,7 @@ class AnrechnungLib if (is_null($anrechnung->empfehlung_anrechnung)) { - return success($empfehlung_data); + return $empfehlung_data; } // If Empfehlung is true or false @@ -270,7 +276,7 @@ class AnrechnungLib } } - return success($empfehlung_data); + return $empfehlung_data; } @@ -302,9 +308,10 @@ class AnrechnungLib // Get date of approvement or rejection $result = $this->ci->AnrechnungModel->getApprovedOrRejected($anrechnung_id); + // If no approved or rejected Anrechnung exist, return basic genehmigung data object if (!$result = getData($result)[0]) { - return success($genehmigung_data); + return $genehmigung_data; } @@ -333,7 +340,7 @@ class AnrechnungLib } } - return success($genehmigung_data); + return $genehmigung_data; } @@ -564,7 +571,7 @@ class AnrechnungLib // Exit if already approved or rejected if ($status_kurzbz == self::ANRECHNUNGSTATUS_APPROVED || $status_kurzbz == self::ANRECHNUNGSTATUS_REJECTED) { - return success(false); // dont approve + return false; // dont approve } // Start DB transaction @@ -601,7 +608,7 @@ class AnrechnungLib return error($result->msg, EXIT_ERROR); } - return success(true); // recommended + return true; // recommended } /** From 279157b920a2130b7f8a851e136e4f9484ae8101 Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 25 Mar 2021 17:12:38 +0100 Subject: [PATCH 024/127] Added button to copy Empfehlungstext into reason textarea when rejecting Signed-off-by: cris-technikum --- .../anrechnung/approveAnrechnungDetail.php | 8 ++++++++ .../anrechnung/approveAnrechnungDetail.js | 13 ++++++++++-- system/phrasesupdate.php | 20 +++++++++++++++++++ 3 files changed, 39 insertions(+), 2 deletions(-) diff --git a/application/views/lehre/anrechnung/approveAnrechnungDetail.php b/application/views/lehre/anrechnung/approveAnrechnungDetail.php index 773cb290f..39c1c47d8 100644 --- a/application/views/lehre/anrechnung/approveAnrechnungDetail.php +++ b/application/views/lehre/anrechnung/approveAnrechnungDetail.php @@ -286,6 +286,14 @@ $this->load->view( +
  • + p->t('anrechnung', 'genehmigungNegativEmpfehlungstextUebernehmen'); ?> + + + +
  • p->t('anrechnung', 'andereBegruendung'); ?>

  • diff --git a/public/js/lehre/anrechnung/approveAnrechnungDetail.js b/public/js/lehre/anrechnung/approveAnrechnungDetail.js index 3fd469294..107bc6a31 100644 --- a/public/js/lehre/anrechnung/approveAnrechnungDetail.js +++ b/public/js/lehre/anrechnung/approveAnrechnungDetail.js @@ -351,8 +351,17 @@ var approveAnrechnungDetail = { // Find closest textarea let textarea = $(elem).closest('div').find('textarea'); - // Copy begruendung into textarea - textarea.val($.trim($(elem).parent().find('span:first').text())); + if (elem.id.length && elem.id == 'empfehlungstextUebernehmen') + { + // Copy Empfehlungstext into textarea + textarea.val($('#approveAnrechnungDetail-empfehlungDetail-begruendung').text()); + return; + } + else + { + // Copy begruendung into textarea + textarea.val($.trim($(elem).parent().find('span:first').text())); + } }, formatEmpfehlungIsRequested: function(empfehlungAngefordertAm, statusBezeichnung) { $('#approveAnrechnungDetail-empfehlungDetail').children().addClass('hidden'); diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index fce82a1d5..6d8651603 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -10430,6 +10430,26 @@ array( ) ) ), + array( + 'app' => 'core', + 'category' => 'anrechnung', + 'phrase' => 'genehmigungNegativEmpfehlungstextUebernehmen', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => "Empfehlungstext des Lektors als Begründung übernehmen.", + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => "Copy the lectors recommendation text as reason for the rejection.", + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), ); From 2c091cd405a67da72d0c9734a239aca974bccf6c Mon Sep 17 00:00:00 2001 From: cris-technikum Date: Mon, 29 Mar 2021 13:05:27 +0200 Subject: [PATCH 025/127] Fixed: Recommendation button was not enabled correctly after withdrawing approvement Now, if approvment is withdrawn, the recommendation button is enabled again ONLY if no recommendation was submitted until yet. Signed-off-by: cris-technikum --- .../views/lehre/anrechnung/approveAnrechnungDetail.php | 3 ++- public/js/lehre/anrechnung/approveAnrechnungDetail.js | 8 +++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/application/views/lehre/anrechnung/approveAnrechnungDetail.php b/application/views/lehre/anrechnung/approveAnrechnungDetail.php index 39c1c47d8..1aa0ee672 100644 --- a/application/views/lehre/anrechnung/approveAnrechnungDetail.php +++ b/application/views/lehre/anrechnung/approveAnrechnungDetail.php @@ -145,7 +145,8 @@ $this->load->view(
    -
    +
    p->t('anrechnung', 'empfehlung'); ?>  diff --git a/public/js/lehre/anrechnung/approveAnrechnungDetail.js b/public/js/lehre/anrechnung/approveAnrechnungDetail.js index 107bc6a31..f52a0006f 100644 --- a/public/js/lehre/anrechnung/approveAnrechnungDetail.js +++ b/public/js/lehre/anrechnung/approveAnrechnungDetail.js @@ -403,6 +403,8 @@ var approveAnrechnungDetail = { $('#approveAnrechnungDetail-withdraw-anrechnung-approvement').removeClass('hidden'); }, formatGenehmigungIsWithdrawed: function (statusBezeichnung){ + let empfehlung = $('#approveAnrechnungDetail-empfehlung').data('empfehlung'); // null / false / true + $('#approveAnrechnungDetail-status_kurzbz').text(statusBezeichnung); $('#approveAnrechnungDetail-status_kurzbz').closest('div').removeClass('alert-danger').removeClass('alert-success'); $('#approveAnrechnungDetail-status_kurzbz').closest('div').addClass('alert-warning'); @@ -414,7 +416,11 @@ var approveAnrechnungDetail = { $('#approveAnrechnungDetail-abgeschlossenAm').text('-'); $('#approveAnrechnungDetail-abgeschlossenVon').text('-'); - $('#approveAnrechnungDetail-request-recommendation').prop('disabled', false); + // Only enable recommendation button again if no recommendation was submitted until now + if (empfehlung === null) + { + $('#approveAnrechnungDetail-request-recommendation').prop('disabled', false); + } $('#approveAnrechnungDetail-approve-anrechnung-ask').prop('disabled', false); $('#approveAnrechnungDetail-reject-anrechnung-ask').prop('disabled', false); // Hide button to withdraw approval From c4557787313424095a0346aad7d3794f77a288c3 Mon Sep 17 00:00:00 2001 From: Cris Date: Mon, 29 Mar 2021 17:50:19 +0200 Subject: [PATCH 026/127] Fixed: Added formatted download-document-link after application was done After refactoring the code and doing the application via AJAX call, the document-download-link must be created on ajax success. This was missing and is fixed now. Signed-off-by: cris-technikum --- .../lehre/anrechnung/RequestAnrechnung.php | 10 ++++++---- public/js/lehre/anrechnung/requestAnrechnung.js | 12 ++++++++++-- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/application/controllers/lehre/anrechnung/RequestAnrechnung.php b/application/controllers/lehre/anrechnung/RequestAnrechnung.php index 1b305d186..cd2c995d3 100644 --- a/application/controllers/lehre/anrechnung/RequestAnrechnung.php +++ b/application/controllers/lehre/anrechnung/RequestAnrechnung.php @@ -110,12 +110,13 @@ class requestAnrechnung extends Auth_Controller // Validate data if (empty($_FILES['uploadfile']['name'])) { - show_error('Missing upload file'); + return $this->outputJsonError($this->p->t('ui', 'errorUploadFehlt')); } - if (isEmptyString($begruendung_id) || isEmptyString($lehrveranstaltung_id) || isEmptyString($studiensemester_kurzbz)) + if (isEmptyString($begruendung_id) || isEmptyString($anmerkung) || + isEmptyString($lehrveranstaltung_id) || isEmptyString($studiensemester_kurzbz)) { - show_error('Missing correct parameter'); + return $this->outputJsonError($this->p->t('ui', 'errorFelderFehlen')); } // Exit if user is not a student @@ -172,7 +173,8 @@ class requestAnrechnung extends Auth_Controller // Output to AJAX return $this->outputJsonSuccess(array( - 'antragdatum' => (new DateTime())->format('d.m.Y') + 'antragdatum' => (new DateTime())->format('d.m.Y'), + 'dms_id' => $lastInsert_dms_id )); } diff --git a/public/js/lehre/anrechnung/requestAnrechnung.js b/public/js/lehre/anrechnung/requestAnrechnung.js index 6c4c5c9ca..b7b1229da 100644 --- a/public/js/lehre/anrechnung/requestAnrechnung.js +++ b/public/js/lehre/anrechnung/requestAnrechnung.js @@ -34,7 +34,9 @@ $(function(){ if (!data.error && data.retval != null) { requestAnrechnung.formatAnrechnungIsApplied( - data.retval.antragdatum + data.retval.antragdatum, + data.retval.dms_id, + formdata.get('uploadfile').name ); FHC_DialogLib.alertSuccess(FHC_PhrasesLib.t("global", "antragWurdeGestellt")); @@ -83,11 +85,17 @@ var requestAnrechnung = { } ); }, - formatAnrechnungIsApplied: function (antragdatum){ + formatAnrechnungIsApplied: function (antragdatum, dms_id, filename){ $('#requestAnrechnung-antragdatum').text(antragdatum); $('#requestAnrechnung-status_kurzbz').text(FHC_PhrasesLib.t("ui", "inBearbeitung")); $('#requestAnrechnung-status_kurzbz').closest('div').addClass('alert-warning'); + // Display File-Downloadlink + $('#requestAnrechnung-downloadDocLink') + .removeClass('hidden') + .attr('href', 'RequestAnrechnung/download?dms_id=' + dms_id) + .html(filename); + // Disable all form elements $("#requestAnrechnung-form :input").prop("disabled", true); } From 287b9616978af5f934ec76354a952fe1b5a2a8bf Mon Sep 17 00:00:00 2001 From: Cris Date: Mon, 29 Mar 2021 17:55:50 +0200 Subject: [PATCH 027/127] Fixed: Added serversite check on required form fields After refactoring code to apply via AJAX call, required fields have to be direclty validated in JS or on serversite. Now fixed by checking on serversite. Signed-off-by: cris-technikum --- .../lehre/anrechnung/requestAnrechnung.php | 14 +++---- system/phrasesupdate.php | 40 +++++++++++++++++++ 2 files changed, 47 insertions(+), 7 deletions(-) diff --git a/application/views/lehre/anrechnung/requestAnrechnung.php b/application/views/lehre/anrechnung/requestAnrechnung.php index af10ef891..749b0f1d5 100644 --- a/application/views/lehre/anrechnung/requestAnrechnung.php +++ b/application/views/lehre/anrechnung/requestAnrechnung.php @@ -133,10 +133,10 @@ $this->load->view(
    @@ -176,11 +176,11 @@ $this->load->view( title="p->t('ui', 'uploadTooltipText'); ?>"> - dms_id)): ?> - dokumentname) ?> - + dokumentname) ?> +
    diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index 6d8651603..effc3127f 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -10450,6 +10450,46 @@ array( ) ) ), + array( + 'app' => 'core', + 'category' => 'ui', + 'phrase' => 'errorFelderFehlen', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => "Daten fehlen.
    Bitte füllen Sie alle Formularfelder aus", + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => "Missing data.
    Please fill in all form fields", + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'ui', + 'phrase' => 'errorUploadFehlt', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => "Dokument fehlt.
    Bitte laden Sie noch die entsprechenden Dokumente hoch.", + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => "Missing document.
    Please upload the required documents.", + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), ); From d183dda815e3a7216f59b92772debf5fb7f9da2c Mon Sep 17 00:00:00 2001 From: Cris Date: Mon, 29 Mar 2021 18:48:26 +0200 Subject: [PATCH 028/127] Fixed: Anrechnunglib returning values, Adapted error messages Fixed: method getData in Controller was producing wrong returning message. Fixed by removing, as library is returning boolean value now. Adapted few error functions to be more generic and bilingual. Signed-off-by: cris-technikum --- .../anrechnung/ApproveAnrechnungDetail.php | 4 ++-- .../anrechnung/ReviewAnrechnungDetail.php | 16 +++++++-------- .../anrechnung/ReviewAnrechnungUebersicht.php | 9 ++++----- application/libraries/AnrechnungLib.php | 6 +++--- system/phrasesupdate.php | 20 +++++++++++++++++++ 5 files changed, 37 insertions(+), 18 deletions(-) diff --git a/application/controllers/lehre/anrechnung/ApproveAnrechnungDetail.php b/application/controllers/lehre/anrechnung/ApproveAnrechnungDetail.php index 51d0617c9..fc990cf6f 100644 --- a/application/controllers/lehre/anrechnung/ApproveAnrechnungDetail.php +++ b/application/controllers/lehre/anrechnung/ApproveAnrechnungDetail.php @@ -213,7 +213,7 @@ class approveAnrechnungDetail extends Auth_Controller } else { - return $this->outputJsonError('Es wurden keine Anrechnungen genehmigt.'); + return $this->outputJsonError($this->p->t('ui', 'errorNichtAusgefuehrt')); } } @@ -285,7 +285,7 @@ class approveAnrechnungDetail extends Auth_Controller ); } - return $this->outputJsonError('Es wurden keine Empfehlungen angefordert'); + return $this->outputJsonError($this->p->t('ui', 'errorNichtAusgefuehrt')); } /** diff --git a/application/controllers/lehre/anrechnung/ReviewAnrechnungDetail.php b/application/controllers/lehre/anrechnung/ReviewAnrechnungDetail.php index 865a2b3ae..b335b022c 100644 --- a/application/controllers/lehre/anrechnung/ReviewAnrechnungDetail.php +++ b/application/controllers/lehre/anrechnung/ReviewAnrechnungDetail.php @@ -120,13 +120,13 @@ class reviewAnrechnungDetail extends Auth_Controller if (!$person = getData($this->PersonModel->getByUID($this->_uid))[0]) { - show_error('Failed retrieving person data'); + return $this->outputJsonError('Failed retrieving person data'); } foreach ($data as $item) { // Approve Anrechnung - if(getData($this->anrechnunglib->recommendAnrechnung($item['anrechnung_id']))) + if($this->anrechnunglib->recommendAnrechnung($item['anrechnung_id'])) { $json[]= array( 'anrechnung_id' => $item['anrechnung_id'], @@ -148,14 +148,14 @@ class reviewAnrechnungDetail extends Auth_Controller * */ if (!$this->_sendSanchoMails($json, true)) { - show_error('Failed sending emails'); + return $this->outputJsonError('Failed sending emails'); } return $this->outputJsonSuccess($json); } else { - return $this->outputJsonError('Empfehlungen wurden nicht durchgeführt'); + return $this->outputJsonError($this->p->t('ui', 'errorNichtAusgefuehrt')); } } @@ -180,13 +180,13 @@ class reviewAnrechnungDetail extends Auth_Controller if (!$person = getData($this->PersonModel->getByUID($this->_uid))[0]) { - show_error('Failed retrieving person data'); + return $this->outputJsonError('Failed retrieving person data'); } foreach ($data as $item) { // Approve Anrechnung - if(getData($this->anrechnunglib->dontRecommendAnrechnung($item['anrechnung_id'], $item['begruendung']))) + if($this->anrechnunglib->dontRecommendAnrechnung($item['anrechnung_id'], $item['begruendung'])) { $json[]= array( 'anrechnung_id' => $item['anrechnung_id'], @@ -205,14 +205,14 @@ class reviewAnrechnungDetail extends Auth_Controller // Send mails to STGL (if not present STGL, send to STGL assistance) if (!$this->_sendSanchoMails($json, false)) { - show_error('Failed sending emails'); + return $this->outputJsonError('Failed sending emails'); } return $this->outputJsonSuccess($json); } else { - return $this->outputJsonError('Empfehlungen wurden nicht durchgeführt'); + return $this->outputJsonError($this->p->t('ui', 'errorNichtAusgefuehrt')); } } diff --git a/application/controllers/lehre/anrechnung/ReviewAnrechnungUebersicht.php b/application/controllers/lehre/anrechnung/ReviewAnrechnungUebersicht.php index 1d10a0bad..72a955897 100644 --- a/application/controllers/lehre/anrechnung/ReviewAnrechnungUebersicht.php +++ b/application/controllers/lehre/anrechnung/ReviewAnrechnungUebersicht.php @@ -100,7 +100,7 @@ class reviewAnrechnungUebersicht extends Auth_Controller foreach ($data as $item) { // Approve Anrechnung - if(getData($this->anrechnunglib->recommendAnrechnung($item['anrechnung_id']))) + if($this->anrechnunglib->recommendAnrechnung($item['anrechnung_id'])) { $json[]= array( 'anrechnung_id' => $item['anrechnung_id'], @@ -127,7 +127,7 @@ class reviewAnrechnungUebersicht extends Auth_Controller } else { - return $this->outputJsonError('Empfehlungen wurden nicht durchgeführt'); + return $this->outputJsonError($this->p->t('ui', 'errorNichtAusgefuehrt')); } } @@ -153,8 +153,7 @@ class reviewAnrechnungUebersicht extends Auth_Controller foreach ($data as $item) { // Approve Anrechnung - if(getData($this->anrechnunglib - ->dontRecommendAnrechnung($item['anrechnung_id'], $item['begruendung']))) + if($this->anrechnunglib->dontRecommendAnrechnung($item['anrechnung_id'], $item['begruendung'])) { $json[]= array( 'anrechnung_id' => $item['anrechnung_id'], @@ -178,7 +177,7 @@ class reviewAnrechnungUebersicht extends Auth_Controller } else { - return $this->outputJsonError('Empfehlungen wurden nicht durchgeführt'); + return $this->outputJsonError($this->p->t('ui', 'errorNichtAusgefuehrt')); } } diff --git a/application/libraries/AnrechnungLib.php b/application/libraries/AnrechnungLib.php index 93d128bb7..7e3419bef 100644 --- a/application/libraries/AnrechnungLib.php +++ b/application/libraries/AnrechnungLib.php @@ -546,10 +546,10 @@ class AnrechnungLib if ($this->ci->db->trans_status() === false) { $this->ci->db->trans_rollback(); - return error($result->msg, EXIT_ERROR); + return false; } - return success(true); // recommended + return true; // recommended } /** @@ -605,7 +605,7 @@ class AnrechnungLib if ($this->ci->db->trans_status() === false) { $this->ci->db->trans_rollback(); - return error($result->msg, EXIT_ERROR); + return false; } return true; // recommended diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index effc3127f..7e306c974 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -10490,6 +10490,26 @@ array( ) ) ), + array( + 'app' => 'core', + 'category' => 'ui', + 'phrase' => 'errorNichtAusgefuehrt', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => "Ihre Anfrage konnte nicht ausgefuehrt werden.
    Bitte wenden Sie sich an den IT-Support.", + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => "Your request could not be processed.
    Please contact the IT Support team.", + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), ); From 7690a122b8688c58535b63da23c8284f14b823d4 Mon Sep 17 00:00:00 2001 From: Cris Date: Tue, 30 Mar 2021 13:57:43 +0200 Subject: [PATCH 029/127] Refactored: Moved getAnrechnungstatusbezeichnung to AnrechnungLib This method retrieves the Anrechnungstatusbezeichnung in the users language. It is used multiple times -> moved to library. Signed-off-by: cris-technikum --- .../anrechnung/ApproveAnrechnungDetail.php | 37 +++++-------------- .../ApproveAnrechnungUebersicht.php | 27 ++------------ .../anrechnung/ReviewAnrechnungDetail.php | 22 +++-------- .../anrechnung/ReviewAnrechnungUebersicht.php | 18 +-------- application/libraries/AnrechnungLib.php | 21 +++++++++++ 5 files changed, 40 insertions(+), 85 deletions(-) diff --git a/application/controllers/lehre/anrechnung/ApproveAnrechnungDetail.php b/application/controllers/lehre/anrechnung/ApproveAnrechnungDetail.php index fc990cf6f..faad790ec 100644 --- a/application/controllers/lehre/anrechnung/ApproveAnrechnungDetail.php +++ b/application/controllers/lehre/anrechnung/ApproveAnrechnungDetail.php @@ -118,14 +118,8 @@ class approveAnrechnungDetail extends Auth_Controller { return $this->outputJsonError('Fehler beim Übertragen der Daten.'); } - - // Get statusbezeichnung for 'approved' - $this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig'); - $approved = getData($this->AnrechnungstatusModel->load('approved'))[0]; - $approved = getUserLanguage() == 'German' - ? $approved->bezeichnung_mehrsprachig[0] - : $approved->bezeichnung_mehrsprachig[1]; - + + // Get STGLs person data if (!$person = getData($this->PersonModel->getByUID($this->_uid))[0]) { show_error('Failed retrieving person data'); @@ -139,9 +133,9 @@ class approveAnrechnungDetail extends Auth_Controller $json[]= array( 'anrechnung_id' => $item['anrechnung_id'], 'status_kurzbz' => self::ANRECHNUNGSTATUS_APPROVED, - 'status_bezeichnung' => $approved, - 'abgeschlossen_am' => (new DateTime())->format('d.m.Y'), - 'abgeschlossen_von' => $person->vorname. ' '. $person->nachname + 'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_APPROVED), + 'abgeschlossen_am' => (new DateTime())->format('d.m.Y'), + 'abgeschlossen_von' => $person->vorname. ' '. $person->nachname ); if(!$this->_sendSanchoMailToStudent($item['anrechnung_id'], self::ANRECHNUNGSTATUS_APPROVED)) @@ -173,14 +167,8 @@ class approveAnrechnungDetail extends Auth_Controller { return $this->outputJsonError('Fehler beim Übertragen der Daten.'); } - - // Get statusbezeichnung for 'rejected' - $this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig'); - $rejected = getData($this->AnrechnungstatusModel->load('rejected'))[0]; - $rejected = getUserLanguage() == 'German' - ? $rejected->bezeichnung_mehrsprachig[0] - : $rejected->bezeichnung_mehrsprachig[1]; - + + // Get STGLs person data if (!$person = getData($this->PersonModel->getByUID($this->_uid))[0]) { show_error('Failed retrieving person data'); @@ -194,7 +182,7 @@ class approveAnrechnungDetail extends Auth_Controller $json[]= array( 'anrechnung_id' => $item['anrechnung_id'], 'status_kurzbz' => self::ANRECHNUNGSTATUS_REJECTED, - 'status_bezeichnung' => $rejected, + 'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_REJECTED), 'abgeschlossen_am' => (new DateTime())->format('d.m.Y'), 'abgeschlossen_von' => $person->vorname. ' '. $person->nachname ); @@ -228,13 +216,6 @@ class approveAnrechnungDetail extends Auth_Controller { return $this->outputJsonError('Fehler beim Übertragen der Daten.'); } - - // Get statusbezeichnung for 'inProgressLektor' - $this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig'); - $inProgressLektor = getData($this->AnrechnungstatusModel->load('inProgressLektor'))[0]; - $inProgressLektor = getUserLanguage() == 'German' - ? $inProgressLektor->bezeichnung_mehrsprachig[0] - : $inProgressLektor->bezeichnung_mehrsprachig[1]; $retval = array(); $counter = 0; @@ -257,7 +238,7 @@ class approveAnrechnungDetail extends Auth_Controller $retval[]= array( 'anrechnung_id' => $item['anrechnung_id'], 'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR, - 'status_bezeichnung' => $inProgressLektor, + 'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR), 'empfehlung_anrechnung' => null, 'empfehlung_angefordert_am' => (new DateTime())->format('d.m.Y') ); diff --git a/application/controllers/lehre/anrechnung/ApproveAnrechnungUebersicht.php b/application/controllers/lehre/anrechnung/ApproveAnrechnungUebersicht.php index b45c998f4..32d1f7900 100644 --- a/application/controllers/lehre/anrechnung/ApproveAnrechnungUebersicht.php +++ b/application/controllers/lehre/anrechnung/ApproveAnrechnungUebersicht.php @@ -96,13 +96,6 @@ class approveAnrechnungUebersicht extends Auth_Controller { return $this->outputJsonError('Fehler beim Übertragen der Daten.'); } - - // Get statusbezeichnung for 'approved' - $this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig'); - $approved = getData($this->AnrechnungstatusModel->load('approved'))[0]; - $approved = getUserLanguage() == 'German' - ? $approved->bezeichnung_mehrsprachig[0] - : $approved->bezeichnung_mehrsprachig[1]; foreach ($data as $item) { @@ -112,7 +105,7 @@ class approveAnrechnungUebersicht extends Auth_Controller $json[]= array( 'anrechnung_id' => $item['anrechnung_id'], 'status_kurzbz' => self::ANRECHNUNGSTATUS_APPROVED, - 'status_bezeichnung' => $approved + 'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_APPROVED) ); if(!$this->_sendSanchoMailToStudent($item['anrechnung_id'], self::ANRECHNUNGSTATUS_APPROVED)) @@ -145,13 +138,6 @@ class approveAnrechnungUebersicht extends Auth_Controller return $this->outputJsonError('Fehler beim Übertragen der Daten.'); } - // Get statusbezeichnung for 'rejected' - $this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig'); - $rejected = getData($this->AnrechnungstatusModel->load('rejected'))[0]; - $rejected = getUserLanguage() == 'German' - ? $rejected->bezeichnung_mehrsprachig[0] - : $rejected->bezeichnung_mehrsprachig[1]; - foreach ($data as $item) { // Reject Anrechnung @@ -160,7 +146,7 @@ class approveAnrechnungUebersicht extends Auth_Controller $json[]= array( 'anrechnung_id' => $item['anrechnung_id'], 'status_kurzbz' => self::ANRECHNUNGSTATUS_REJECTED, - 'status_bezeichnung' => $rejected + 'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_REJECTED) ); if(!$this->_sendSanchoMailToStudent($item['anrechnung_id'], self::ANRECHNUNGSTATUS_REJECTED)) @@ -193,13 +179,6 @@ class approveAnrechnungUebersicht extends Auth_Controller return $this->outputJsonError('Fehler beim Übertragen der Daten.'); } - // Get statusbezeichnung for 'inProgressLektor' - $this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig'); - $inProgressLektor = getData($this->AnrechnungstatusModel->load('inProgressLektor'))[0]; - $inProgressLektor = getUserLanguage() == 'German' - ? $inProgressLektor->bezeichnung_mehrsprachig[0] - : $inProgressLektor->bezeichnung_mehrsprachig[1]; - $retval = array(); $counter = 0; @@ -221,7 +200,7 @@ class approveAnrechnungUebersicht extends Auth_Controller $retval[]= array( 'anrechnung_id' => $item['anrechnung_id'], 'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR, - 'status_bezeichnung' => $inProgressLektor, + 'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR), 'empfehlung_anrechnung' => null ); } diff --git a/application/controllers/lehre/anrechnung/ReviewAnrechnungDetail.php b/application/controllers/lehre/anrechnung/ReviewAnrechnungDetail.php index b335b022c..0c6a1b8f7 100644 --- a/application/controllers/lehre/anrechnung/ReviewAnrechnungDetail.php +++ b/application/controllers/lehre/anrechnung/ReviewAnrechnungDetail.php @@ -110,14 +110,8 @@ class reviewAnrechnungDetail extends Auth_Controller { return $this->outputJsonError('Fehler beim Übertragen der Daten.'); } - - // Get statusbezeichnung for 'inProgressDP' - $this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig'); - $inProgressDP = getData($this->AnrechnungstatusModel->load('inProgressDP'))[0]; - $inProgressDP = getUserLanguage() == 'German' - ? $inProgressDP->bezeichnung_mehrsprachig[0] - : $inProgressDP->bezeichnung_mehrsprachig[1]; - + + // Get lectors person data if (!$person = getData($this->PersonModel->getByUID($this->_uid))[0]) { return $this->outputJsonError('Failed retrieving person data'); @@ -132,7 +126,7 @@ class reviewAnrechnungDetail extends Auth_Controller 'anrechnung_id' => $item['anrechnung_id'], 'empfehlung_anrechnung' => 'true', 'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL, - 'status_bezeichnung' => $inProgressDP, + 'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL), 'empfehlung_am' => (new DateTime())->format('d.m.Y'), 'empfehlung_von' => $person->vorname. ' '. $person->nachname ); @@ -171,13 +165,7 @@ class reviewAnrechnungDetail extends Auth_Controller return $this->outputJsonError('Fehler beim Übertragen der Daten.'); } - // Get statusbezeichnung for 'inProgressDP' - $this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig'); - $inProgressDP = getData($this->AnrechnungstatusModel->load('inProgressDP'))[0]; - $inProgressDP = getUserLanguage() == 'German' - ? $inProgressDP->bezeichnung_mehrsprachig[0] - : $inProgressDP->bezeichnung_mehrsprachig[1]; - + // Get lectors person data if (!$person = getData($this->PersonModel->getByUID($this->_uid))[0]) { return $this->outputJsonError('Failed retrieving person data'); @@ -192,7 +180,7 @@ class reviewAnrechnungDetail extends Auth_Controller 'anrechnung_id' => $item['anrechnung_id'], 'empfehlung_anrechnung' => 'false', 'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL, - 'status_bezeichnung' => $inProgressDP, + 'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL), 'empfehlumg_am' => (new DateTime())->format('d.m.Y'), 'empfehlung_von' => $person->vorname. ' '. $person->nachname ); diff --git a/application/controllers/lehre/anrechnung/ReviewAnrechnungUebersicht.php b/application/controllers/lehre/anrechnung/ReviewAnrechnungUebersicht.php index 72a955897..cd0b7afaf 100644 --- a/application/controllers/lehre/anrechnung/ReviewAnrechnungUebersicht.php +++ b/application/controllers/lehre/anrechnung/ReviewAnrechnungUebersicht.php @@ -89,13 +89,6 @@ class reviewAnrechnungUebersicht extends Auth_Controller { return $this->outputJsonError('Fehler beim Übertragen der Daten.'); } - - // Get statusbezeichnung for 'inProgressDP' - $this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig'); - $inProgressDP = getData($this->AnrechnungstatusModel->load('inProgressDP'))[0]; - $inProgressDP = getUserLanguage() == 'German' - ? $inProgressDP->bezeichnung_mehrsprachig[0] - : $inProgressDP->bezeichnung_mehrsprachig[1]; foreach ($data as $item) { @@ -106,7 +99,7 @@ class reviewAnrechnungUebersicht extends Auth_Controller 'anrechnung_id' => $item['anrechnung_id'], 'empfehlung_anrechnung' => 'true', 'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL, - 'status_bezeichnung' => $inProgressDP + 'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL) ); } } @@ -143,13 +136,6 @@ class reviewAnrechnungUebersicht extends Auth_Controller return $this->outputJsonError('Fehler beim Übertragen der Daten.'); } - // Get statusbezeichnung for 'inProgressDP' - $this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig'); - $inProgressDP = getData($this->AnrechnungstatusModel->load('inProgressDP'))[0]; - $inProgressDP = getUserLanguage() == 'German' - ? $inProgressDP->bezeichnung_mehrsprachig[0] - : $inProgressDP->bezeichnung_mehrsprachig[1]; - foreach ($data as $item) { // Approve Anrechnung @@ -159,7 +145,7 @@ class reviewAnrechnungUebersicht extends Auth_Controller 'anrechnung_id' => $item['anrechnung_id'], 'empfehlung_anrechnung' => 'false', 'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL, - 'status_bezeichnung' => $inProgressDP + 'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL) ); } } diff --git a/application/libraries/AnrechnungLib.php b/application/libraries/AnrechnungLib.php index 7e3419bef..cecff2405 100644 --- a/application/libraries/AnrechnungLib.php +++ b/application/libraries/AnrechnungLib.php @@ -343,6 +343,27 @@ class AnrechnungLib return $genehmigung_data; } + + /** + * Get Anrechnungstatusbezeichnung of given status_kurzbz in users language. + * + * @param $status_kurzbz + * @return mixed + */ + public function getStatusbezeichnung ($status_kurzbz) + { + $this->ci->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig'); + $result = $this->ci->AnrechnungstatusModel->load($status_kurzbz); + + if (!hasData($result)) + { + show_error('Failed retrieving Anrechnungstatusbezeichung'); + } + + return getUserLanguage() == 'German' + ? $result->retval[0]->bezeichnung_mehrsprachig[0] + : $result->retval[0]->bezeichnung_mehrsprachig[1]; + } /** * Get last Anrechnungstatusbezeichnung in users language. From 9ee473d9bd37a7a2bc63a435fcd1d0b92cb782aa Mon Sep 17 00:00:00 2001 From: Cris Date: Tue, 30 Mar 2021 16:41:02 +0200 Subject: [PATCH 030/127] Usability: Added Link to Anrechnungen in CIS LV Menu (for lectors) Signed-off-by: cris-technikum --- include/tw/cis_menu_lv.inc.php | 16 +++++++++++++++- locale/de-AT/lehre.php | 1 + locale/en-US/lehre.php | 1 + 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/include/tw/cis_menu_lv.inc.php b/include/tw/cis_menu_lv.inc.php index e91431a8e..4b3005c07 100644 --- a/include/tw/cis_menu_lv.inc.php +++ b/include/tw/cis_menu_lv.inc.php @@ -465,7 +465,7 @@ function checkZeilenUmbruch() } } - // Anerkennung nachgewiesener Kenntnisse (Anrechnung) + // Anerkennung nachgewiesener Kenntnisse (Anrechnung) - Anzeige fuer Studenten if((!defined('CIS_LEHRVERANSTALTUNG_ANRECHNUNG_ANZEIGEN') || CIS_LEHRVERANSTALTUNG_ANRECHNUNG_ANZEIGEN) && $rechte->isBerechtigt('student/anrechnung_beantragen')) { @@ -479,6 +479,20 @@ function checkZeilenUmbruch() ); } +// Anerkennung nachgewiesener Kenntnisse (Anrechnung) - Anzeige fuer LektorInnen +if((!defined('CIS_LEHRVERANSTALTUNG_ANRECHNUNG_ANZEIGEN') || CIS_LEHRVERANSTALTUNG_ANRECHNUNG_ANZEIGEN) + && $rechte->isBerechtigt('lehre/anrechnung_empfehlen')) +{ + $menu[]=array + ( + 'id'=>'core_menu_anerkennungNachgewiesenerKenntnisse_empfehlen', + 'position'=>'128', + 'name'=>$p->t('lehre/anrechnungen'), + 'icon'=>'../../../skin/images/button_listen.png', + 'link' => APP_ROOT. 'index.ci.php/lehre/anrechnung/ReviewAnrechnungUebersicht?studiensemester='.urlencode($angezeigtes_stsem) + ); +} + //************* Menuepunkte anzeigen **************** diff --git a/locale/de-AT/lehre.php b/locale/de-AT/lehre.php index 3f44edcb9..fb938322f 100644 --- a/locale/de-AT/lehre.php +++ b/locale/de-AT/lehre.php @@ -42,4 +42,5 @@ $this->phrasen['lehre/studienplan']='Studienplan'; $this->phrasen['lehre/noteneingabedeaktiviert']='Noteneingabe deaktiviert'; $this->phrasen['lehre/anerkennungNachgewiesenerKenntnisse']='Anerkennung nachgewiesener Kenntnisse'; $this->phrasen['lehre/anrechnung']='Anrechnung'; +$this->phrasen['lehre/anrechnungen']='Anrechnungen'; ?> diff --git a/locale/en-US/lehre.php b/locale/en-US/lehre.php index 603492c84..1fd41700f 100644 --- a/locale/en-US/lehre.php +++ b/locale/en-US/lehre.php @@ -42,5 +42,6 @@ $this->phrasen['lehre/studienplan']='Studienplan'; $this->phrasen['lehre/noteneingabedeaktiviert']='Grading disabled'; $this->phrasen['lehre/anerkennungNachgewiesenerKenntnisse']='Crediting for proven knowledge'; $this->phrasen['lehre/anrechnung']='Exemption'; +$this->phrasen['lehre/anrechnungen']='Exemptions'; ?> From d53d91d7d14a535dba2268b5cc8e52d4ea3425fc Mon Sep 17 00:00:00 2001 From: Cris Date: Tue, 30 Mar 2021 17:02:15 +0200 Subject: [PATCH 031/127] Usability: Added filterbutton 'Alle anzeigen, die auf Empfehlung von LektorIn warten' The filterbutton was added to the STGLs Overview site. Signed-off-by: cris-technikum --- .../approveAnrechnungUebersicht.php | 5 +++++ .../anrechnung/approveAnrechnungUebersicht.js | 10 ++++++++++ system/phrasesupdate.php | 20 +++++++++++++++++++ 3 files changed, 35 insertions(+) diff --git a/application/views/lehre/anrechnung/approveAnrechnungUebersicht.php b/application/views/lehre/anrechnung/approveAnrechnungUebersicht.php index 1c88fc643..8da2b5410 100644 --- a/application/views/lehre/anrechnung/approveAnrechnungUebersicht.php +++ b/application/views/lehre/anrechnung/approveAnrechnungUebersicht.php @@ -197,6 +197,11 @@ $this->load->view( title="p->t('ui', 'alleInBearbeitungSTGL'); ?>"> + '; + } + else + { + echo ' Keine Berechtigung zum Vorrücken von Studienplänen'; + } + + echo ''; } - echo ""; - if($rechte->isBerechtigt('lehre/studienordnung', null, 'suid')) - { - echo ''; - } - else - { - echo ' Keine Berechtigung zum Vorrücken von Studienplänen'; - } - - echo ''; } } From 4e7da23bf5dfe09e88271c98497f05c15a1ac729 Mon Sep 17 00:00:00 2001 From: Manfred Kindl Date: Wed, 8 Sep 2021 09:24:18 +0200 Subject: [PATCH 120/127] =?UTF-8?q?Option=20auch=20Pr=C3=BCfling=20zu=20l?= =?UTF-8?q?=C3=B6schen=20in=20RT-Administration?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reihungstest_administration.php | 53 ++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/vilesci/stammdaten/reihungstest_administration.php b/vilesci/stammdaten/reihungstest_administration.php index b1db58e5e..658f01b31 100644 --- a/vilesci/stammdaten/reihungstest_administration.php +++ b/vilesci/stammdaten/reihungstest_administration.php @@ -330,7 +330,7 @@ if($result = $db->db_query($qry)) } echo ''; } - +echo '   Auch Prüfling löschen  '; echo '        '; if(isset($_POST['deleteteilgebiet'])) { @@ -526,6 +526,57 @@ if(isset($_POST['delete_all'])) $db->errormsg = 'Fehler beim Loeschen der Daten'; $db->db_query('ROLLBACK'); } + + // Wenn Option angeklickt ist, auch den Prüfling löschen + if (isset($_POST['deletePruefling']) && $_POST['deletePruefling'] == 'on') + { + $qry = "SELECT * FROM testtool.tbl_pruefling WHERE prestudent_id=".$db->db_add_param($_POST['prestudent'])."; + "; + + if($db->db_query($qry)) + { + while($row = $db->db_fetch_object()) + { + $undo=" INSERT INTO testtool.tbl_pruefling(pruefling_id, studiengang_kz, idnachweis, registriert, prestudent_id, semester) VALUES (". + $db->db_add_param($row->pruefling_id, FHC_INTEGER).', '. + $db->db_add_param($row->studiengang_kz, FHC_INTEGER).', '. + $db->db_add_param($row->idnachweis).', '. + $db->db_add_param($row->registriert).', '. + $db->db_add_param($row->prestudent_id, FHC_INTEGER).', '. + $db->db_add_param($row->semester, FHC_INTEGER).');'; + } + } + else + { + $db->errormsg = 'Fehler beim Erstellen des UNDO Befehls fuer testtool.tbl_pruefling'; + $db->db_query('ROLLBACK'); + return false; + } + $qry = "DELETE FROM testtool.tbl_pruefling WHERE prestudent_id=".$db->db_add_param($_POST['prestudent']).";"; + + if($result = $db->db_query($qry)) + { + //Log schreiben + $log = new log(); + + $log->new = true; + $log->sql = $qry; + $log->sqlundo = $undo; + $log->executetime = date('Y-m-d H:i:s'); + $log->mitarbeiter_uid = $user; + $log->beschreibung = "Prüfling von Prestudent ".$_POST['prestudent']." geloescht"; + + if(!$log->save()) + { + $db->errormsg = 'Fehler beim Schreiben des Log-Eintrages'; + $db->db_query('ROLLBACK'); + return false; + } + + $db->db_query('COMMIT;'); + echo '
    Prüfling wurde gelöscht'; + } + } } else echo 'Um alle Antworten eines Prüflings zu löschen, wählen Sie im DropDown bitte "Alle Gebiete" aus'; From 6cd81ac96e7be3b635d698b2b7fc20c45f1ae878 Mon Sep 17 00:00:00 2001 From: Manfred Kindl Date: Wed, 8 Sep 2021 09:27:32 +0200 Subject: [PATCH 121/127] Warnung im FAS, wenn inaktive BenutzerInnen gespeichert werden --- content/lvplanung/lehrveranstaltungDBDML.php | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/content/lvplanung/lehrveranstaltungDBDML.php b/content/lvplanung/lehrveranstaltungDBDML.php index 9d9461c70..f764545a6 100644 --- a/content/lvplanung/lehrveranstaltungDBDML.php +++ b/content/lvplanung/lehrveranstaltungDBDML.php @@ -402,6 +402,20 @@ if(!$error) } } } + + //Pruefen, ob Benutzer inaktiv ist. Wenn ja, eine Warnung ausgeben + $benutzerAktiv = false; + if(!$error) + { + $benutzer = new benutzer($lem->mitarbeiter_uid); + $benutzerAktiv = $benutzer->bnaktiv; + if (!$benutzerAktiv) + { + $return = true; + $warnung = true; + $errormsg = "Achtung: Der/Die Benutzer*in ist inaktiv!\nBitte informieren Sie die Personalbteilung.\n\nDaten wurden gespeichert.\n\n"; + } + } } if(!$error) From b6ae992c3c560a0e13204d833d3580ec4d3abef4 Mon Sep 17 00:00:00 2001 From: ma0048 Date: Wed, 8 Sep 2021 11:41:45 +0200 Subject: [PATCH 122/127] getrennte msg bei freigabe qualikurs und einstieg anderes semester --- .../views/system/infocenter/zgvpruefungen.php | 2 +- public/js/infocenter/infocenterDetails.js | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/application/views/system/infocenter/zgvpruefungen.php b/application/views/system/infocenter/zgvpruefungen.php index 05c94c384..a2b2f8da8 100644 --- a/application/views/system/infocenter/zgvpruefungen.php +++ b/application/views/system/infocenter/zgvpruefungen.php @@ -414,7 +414,7 @@ selected="selected">p->t('ui', 'freigabeart')) . '...' ?> - + diff --git a/public/js/infocenter/infocenterDetails.js b/public/js/infocenter/infocenterDetails.js index 70f5ed982..79129f3e2 100644 --- a/public/js/infocenter/infocenterDetails.js +++ b/public/js/infocenter/infocenterDetails.js @@ -10,6 +10,7 @@ const RTFREIGABE_MESSAGE_VORLAGE_QUER_KURZ = "InfocenterRTfreigegQuerKurz"; const STGFREIGABE_MESSAGE_VORLAGE = "InfocenterSTGfreigegeben"; const STGFREIGABE_MESSAGE_VORLAGE_MASTER = "InfocenterSTGfreigegebenM"; const STGFREIGABE_MESSAGE_VORLAGE_MASTER_ENGLISCH = "InfocenterSTGfreigegebenMEng"; +const STGFREIGABE_MESSAGE_VORLAGE_ANDERES_SEMESTER = "InfocenterSTGfreigegebenSemester"; //Statusgründe for which no Studiengang Freigabe Message should be sent const FIT_PROGRAMM_STUDIENGAENGE = [10021, 10027]; @@ -653,7 +654,7 @@ var InfocenterDetails = { } else { - if (receiverPrestudent.studiengangtyp === 'm' && (freigabedata.statusgrundbezeichnung === 'Ergänzungsprüfungen' || freigabedata.statusgrundbezeichnung === 'Supplementary exams')) + if (receiverPrestudent.studiengangtyp === 'm' && freigabedata.statuskurzbz === 'ergPruefung') { msgvars = { 'studiengangbezeichnung': studiengangbezeichnung, @@ -671,7 +672,11 @@ var InfocenterDetails = { //if Freigabe to Studiengang, send StgFreigabe Message if not already sent and allowed to send else if (!stgFreigegeben && receiverPrestudent.sendStgFreigabeMsg === true) { - InfocenterDetails.sendFreigabeMessage(prestudent_id, STGFREIGABE_MESSAGE_VORLAGE, msgvars); + if (receiverPrestudent.studiengangtyp === 'b' && freigabedata.statuskurzbz === 'anderesSemester') + vorlage = STGFREIGABE_MESSAGE_VORLAGE_ANDERES_SEMESTER + else + vorlage = STGFREIGABE_MESSAGE_VORLAGE + InfocenterDetails.sendFreigabeMessage(prestudent_id, vorlage, msgvars); } } }; @@ -847,7 +852,8 @@ var InfocenterDetails = { var statusgrundel = $("#frgstatusgrselect_" + prestudent_id + " select[name=frgstatusgrund]"); var statusgrund_id = statusgrundel.val(); var statusgrundbezeichnung = statusgrundel.find("option[value="+statusgrund_id+"]").text(); - var data = {"prestudent_id": prestudent_id, "statusgrund_id": statusgrund_id, "statusgrundbezeichnung": statusgrundbezeichnung}; + var statuskurzbz = statusgrundel.find(':selected').data('kurzbz'); + var data = {"prestudent_id": prestudent_id, "statusgrund_id": statusgrund_id, "statusgrundbezeichnung": statusgrundbezeichnung, "statuskurzbz" : statuskurzbz}; InfocenterDetails.saveFreigabe(data);//Studiengangfreigabe } ); From 602eb5873a69a969e7879c5649cb27d9b3d26c9c Mon Sep 17 00:00:00 2001 From: Manfred Date: Wed, 8 Sep 2021 19:16:39 +0200 Subject: [PATCH 123/127] =?UTF-8?q?Kopierbutton=20f=C3=BCr=20Funktionen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/funktionen.js.php | 6 +++++- content/funktionen.xul.php | 3 ++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/content/funktionen.js.php b/content/funktionen.js.php index e77c47548..ae9edd2af 100644 --- a/content/funktionen.js.php +++ b/content/funktionen.js.php @@ -270,7 +270,7 @@ function FunktionDelete() // **** // * Speichert die Daten // **** -function FunktionDetailSpeichern() +function FunktionDetailSpeichern(kopie) { var funktion_kurzbz = document.getElementById('funktion-menulist-funktion').value; var oe_kurzbz = document.getElementById('funktion-menulist-oe_kurzbz').value; @@ -283,6 +283,9 @@ function FunktionDetailSpeichern() var bezeichnung = document.getElementById('funktion-textbox-bezeichnung').value; var wochenstunden = document.getElementById('funktion-textbox-wochenstunden').value; + if(kopie == true) + var neu = true; + //Bei Mitarbeitern wird kein Studiengang mitgeschickt if(window.parent.document.getElementById('main-content-tabs').selectedItem==window.parent.document.getElementById('tab-mitarbeiter')) studiengang_kz_berecht=''; @@ -412,6 +415,7 @@ function FunktionDetailDisableFields(val) document.getElementById('funktion-menulist-semester').disabled=val; document.getElementById('funktion-menulist-funktion').disabled=val; document.getElementById('funktion-button-speichern').disabled=val; + document.getElementById('funktion-button-kopiespeichern').disabled=val; document.getElementById('funktion-box-datum_von').disabled=val; document.getElementById('funktion-box-datum_bis').disabled=val; document.getElementById('funktion-textbox-bezeichnung').disabled=val; diff --git a/content/funktionen.xul.php b/content/funktionen.xul.php index 9bbe10686..b80cdd455 100644 --- a/content/funktionen.xul.php +++ b/content/funktionen.xul.php @@ -289,7 +289,8 @@ else -