diff --git a/application/controllers/lehre/lehrauftrag/Lehrauftrag.php b/application/controllers/lehre/lehrauftrag/Lehrauftrag.php index 9ff6d59b5..db20b6897 100644 --- a/application/controllers/lehre/lehrauftrag/Lehrauftrag.php +++ b/application/controllers/lehre/lehrauftrag/Lehrauftrag.php @@ -229,12 +229,6 @@ class Lehrauftrag extends Auth_Controller { $this->outputJsonSuccess($json); } - - // Send email to Mitarbeiter - // if(!$this->_sendMail($new_lehrvertrag_data_arr)) // TODO: slows down Bestell-process -> better chronjob? - { - // return error information // TODO: implement after decision regarding communication process - } } // ----------------------------------------------------------------------------------------------------------------- @@ -329,41 +323,4 @@ class Lehrauftrag extends Auth_Controller return $unique_new_lehrvertrag_data_arr; } - - private function validateGetPost($lehrauftrag){ - $lehreinheit_id = (isset($lehrauftrag['lehreinheit_id']) && is_numeric($lehrauftrag['lehreinheit_id'])) ? $lehrauftrag['lehreinheit_id'] : null; - $lehrveranstaltung_id = (isset($lehrauftrag['lehrveranstaltung_id']) && is_numeric($lehrauftrag['lehrveranstaltung_id'])) ? $lehrauftrag['lehrveranstaltung_id'] : null; - $person_id = (isset($lehrauftrag['person_id']) && is_numeric($lehrauftrag['person_id'])) ? $lehrauftrag['person_id'] : null; - $mitarbeiter_uid = (isset($lehrauftrag['mitarbeiter_uid']) && is_string($lehrauftrag['mitarbeiter_uid'])) ? $lehrauftrag['mitarbeiter_uid'] : null; - $vertrag_id = (isset($lehrauftrag['vertrag_id']) && is_numeric($lehrauftrag['vertrag_id'])) ? $lehrauftrag['vertrag_id'] : null; - $projektarbeit_id = (isset($lehrauftrag['projektarbeit_id']) && is_numeric($lehrauftrag['projektarbeit_id'])) ? $lehrauftrag['projektarbeit_id'] : null; - $stunden = (isset($lehrauftrag['stunden']) && is_numeric($lehrauftrag['stunden'])) ? $lehrauftrag['stunden'] : null; - $betrag = (isset($lehrauftrag['betrag']) && is_numeric($lehrauftrag['betrag'])) ? $lehrauftrag['betrag'] : null; - $studiensemester_kurzbz = (isset($lehrauftrag['studiensemester_kurzbz']) && is_string($lehrauftrag['studiensemester_kurzbz'])) ? $lehrauftrag['betrag'] : null; - - return array( - $lehreinheit_id, - $lehrveranstaltung_id, - $person_id, - $mitarbeiter_uid, - $vertrag_id, - $projektarbeit_id, - $stunden, - $betrag, - $studiensemester_kurzbz - ); - -// LIST IS TO BE SET ABOVE!!!: -// list( -// $lehreinheit_id, -// $lehrveranstaltung_id, -// $person_id, -// $mitarbeiter_uid, -// $vertrag_id, -// $projektarbeit_id, -// $stunden, -// $betrag, -// $studiensemester_kurzbz -// ) = $this->_validateGetPost($lehrauftrag); - } } diff --git a/application/views/lehre/lehrauftrag/acceptLehrauftrag.php b/application/views/lehre/lehrauftrag/acceptLehrauftrag.php index 49c1e2ea1..14ebacecb 100644 --- a/application/views/lehre/lehrauftrag/acceptLehrauftrag.php +++ b/application/views/lehre/lehrauftrag/acceptLehrauftrag.php @@ -93,6 +93,18 @@ $this->load->view(
+ +

Ansicht

+
+ Spaltenbreite verändern +

+ Um die Spaltenbreite zu verändern, fährt man im Spaltenkopf langsam mit dem Mauszeiger auf + den rechten Rand der entprechenden Spalte.
+ Sobald sich der Mauszeiger in einen Doppelpfeil verwandelt, wird die Maustaste geklickt und + mit gedrückter Maustaste die Spalte nach rechts erweitert oder nach links verkleinert. +

+
+
@@ -120,7 +132,7 @@ $this->load->view( - +
load->view('lehre/lehrauftrag/acceptLehrauftragData.php'); ?> @@ -133,11 +145,24 @@ $this->load->view(
@@ -149,7 +174,28 @@ $this->load->view(
+
+
+ +
+
+

+ p->t('global', 'stornierteLehrauftraege')); ?>: + + + + + +

+
+
+ load->view('lehre/lehrauftrag/cancelledLehrauftragData.php'); ?> +
+
+
+
+

diff --git a/application/views/lehre/lehrauftrag/acceptLehrauftragData.php b/application/views/lehre/lehrauftrag/acceptLehrauftragData.php index 2a2e348dd..27a348ae7 100644 --- a/application/views/lehre/lehrauftrag/acceptLehrauftragData.php +++ b/application/views/lehre/lehrauftrag/acceptLehrauftragData.php @@ -15,11 +15,11 @@ SELECT studiensemester_kurzbz, studiengang_kz, stg_typ_kurzbz, + semester, orgform_kurzbz, person_id, typ, auftrag, - semester, lv_oe_kurzbz, gruppe, stunden, @@ -305,11 +305,11 @@ $filterWidgetArray = array( 'Studiensemester', 'Studiengang-KZ', 'Studiengang', + 'Semester', 'OrgForm', 'Person-ID', 'Typ', 'LV- / Projektbezeichnung', - 'Semester', 'Organisationseinheit', 'Gruppe', 'Stunden', @@ -330,6 +330,7 @@ $filterWidgetArray = array( layout: "fitColumns", // fit columns to width of table responsiveLayout: "hide", // hide columns that dont fit on the table movableColumns: true, // allows changing column + placeholder: func_placeholder(), headerFilterPlaceholder: " ", index: "row_index", // assign specific column as unique id (important for row indexing) selectable: true, // allow row selection @@ -366,11 +367,11 @@ $filterWidgetArray = array( studiensemester_kurzbz: {visible: false}, studiengang_kz: {visible: false}, stg_typ_kurzbz: {headerFilter:"input", width: "5%"}, + semester: {headerFilter:"input"}, orgform_kurzbz: {headerFilter:"input"}, person_id: {visible: false}, typ: {headerFilter:"input", width: "7%"}, auftrag: {headerFilter:"input", width: "15%"}, - semester: {headerFilter:"input"}, lv_oe_kurzbz: {headerFilter:"input", width: "8%"}, gruppe: {headerFilter:"input", width: "5%"}, stunden: {align:"right", formatter: form_formatNulltoStringNumber, formatterParams:{precision:1}, diff --git a/application/views/lehre/lehrauftrag/approveLehrauftrag.php b/application/views/lehre/lehrauftrag/approveLehrauftrag.php index 71c1840c6..f36ae7dc7 100644 --- a/application/views/lehre/lehrauftrag/approveLehrauftrag.php +++ b/application/views/lehre/lehrauftrag/approveLehrauftrag.php @@ -133,6 +133,18 @@ $this->load->view(
+

Ansicht

+
+ Spaltenbreite verändern +

+ Um die Spaltenbreite zu verändern, fährt man im Spaltenkopf langsam mit dem Mauszeiger auf + den rechten Rand der entprechenden Spalte.
+ Sobald sich der Mauszeiger in einen Doppelpfeil verwandelt, wird die Maustaste geklickt und + mit gedrückter Maustaste die Spalte nach rechts erweitert oder nach links verkleinert. +

+
+
+ diff --git a/application/views/lehre/lehrauftrag/approveLehrauftragData.php b/application/views/lehre/lehrauftrag/approveLehrauftragData.php index 43eb2aa13..fbc30db1c 100644 --- a/application/views/lehre/lehrauftrag/approveLehrauftragData.php +++ b/application/views/lehre/lehrauftrag/approveLehrauftragData.php @@ -16,11 +16,11 @@ SELECT studiensemester_kurzbz, studiengang_kz, stg_typ_kurzbz, + semester, orgform_kurzbz, person_id, typ, auftrag, - semester, lv_oe_kurzbz, gruppe, lektor, @@ -147,7 +147,7 @@ FROM WHEN oe.organisationseinheittyp_kurzbz = \'Department\' THEN (\'DEP \' || oe.bezeichnung) ELSE (oe.organisationseinheittyp_kurzbz || \' \' || oe.bezeichnung) END AS "lv_oe_kurzbz", - (person.vorname || \' \' || person.nachname) AS "lektor", + (person.nachname || \' \' || person.vorname) AS "lektor", TRUNC(lema.semesterstunden, 1) AS "stunden", TRUNC((lema.semesterstunden * lema.stundensatz), 2) AS "betrag", vertrag_id, @@ -267,7 +267,7 @@ FROM ELSE (oe.organisationseinheittyp_kurzbz || \' \' || oe.bezeichnung) END AS "lv_oe_kurzbz", - (vorname || \' \' || nachname) AS "lektor", + (nachname || \' \' || vorname) AS "lektor", TRUNC(pb.stunden, 1) AS "stunden", TRUNC((pb.stunden * pb.stundensatz), 2) AS "betrag", vertrag_id, @@ -315,11 +315,11 @@ $filterWidgetArray = array( 'Studiensemester', 'Studiengang-KZ', 'Studiengang', + 'Semester', 'OrgForm', 'Person-ID', 'Typ', 'LV- / Projektbezeichnung', - 'Semester', 'Organisationseinheit', 'Gruppe', 'Lektor', @@ -341,6 +341,7 @@ $filterWidgetArray = array( layout: "fitColumns", // fit columns to width of table responsiveLayout: "hide", // hide columns that dont fit on the table movableColumns: true, // allows changing column + placeholder: func_placeholder(), headerFilterPlaceholder: " ", groupBy:"lehrveranstaltung_id", groupToggleElement:"header", //toggle group on click anywhere in the group header @@ -386,14 +387,14 @@ $filterWidgetArray = array( studiensemester_kurzbz: {headerFilter:"input"}, studiengang_kz: {visible: false}, stg_typ_kurzbz: {headerFilter:"input", width: "5%"}, + semester: {headerFilter:"input"}, orgform_kurzbz: {headerFilter:"input"}, person_id: {visible: false}, typ: {headerFilter:"input"}, auftrag: {headerFilter:"input", width:"20%"}, - semester: {headerFilter:"input"}, lv_oe_kurzbz: {headerFilter:"input"}, gruppe: {headerFilter:"input"}, - lektor: {headerFilter:"input"}, + lektor: {headerFilter:"input", widthGrow: 3}, stunden: {align:"right", formatter: form_formatNulltoStringNumber, formatterParams:{precision:1}, headerFilter:"input", headerFilterFunc: hf_filterStringnumberWithOperator, bottomCalc:"sum", bottomCalcParams:{precision:1}}, diff --git a/application/views/lehre/lehrauftrag/cancelledLehrauftragData.php b/application/views/lehre/lehrauftrag/cancelledLehrauftragData.php new file mode 100644 index 000000000..04d314636 --- /dev/null +++ b/application/views/lehre/lehrauftrag/cancelledLehrauftragData.php @@ -0,0 +1,105 @@ + $query, + 'tableUniqueId' => 'cancelledLehrauftrag', + 'requiredPermissions' => 'lehre/lehrauftrag_akzeptieren', + 'datasetRepresentation' => 'tabulator', + 'reloadDataset' => true, // reload query on page refresh + 'columnsAliases' => array( // TODO: use phrasen + 'Status', + 'Studiensemester', + 'Typ', + 'LV- / Projektbezeichnung', + 'Stunden', + 'Betrag', + 'Storniert am' + ), + 'datasetRepOptions' => '{ + layout: "fitColumns", // fit columns to width of table + responsiveLayout: "hide", // hide columns that dont fit on the table + movableColumns: true, // allows changing column + placeholder: func_placeholder(), + rowFormatter:function(row){ + func_rowFormatter(row); + }, + selectableCheck: function(row){ + return func_selectableCheck(row); + }, + renderComplete:function(){ + func_renderComplete(this); + }, + tableBuilt: function(){ + func_tableBuilt(this); + } + }', // tabulator properties + 'datasetRepFieldsDefs' => '{ + vertrag_id: {visible: false}, + vertragsstunden_studiensemester_kurzbz: {visible: false}, + vertragstyp_kurzbz: {widthGrow: 2}, + bezeichnung: {widthGrow: 2}, + vertragsstunden: { + align:"right", formatter: form_formatNulltoStringNumber, formatterParams:{precision:1}, + bottomCalc:"sum", bottomCalcParams:{precision:1} + }, + betrag: { + align:"right", formatter: form_formatNulltoStringNumber, + bottomCalc:"sum", bottomCalcParams:{precision:2}, bottomCalcFormatter:"money", bottomCalcFormatterParams:{decimal: ",", thousand: ".", symbol:"€"} + }, + storniert: {align:"center", mutator: mut_formatStringDate, tooltip: storniert_tooltip}, + storniert_von: {visible: false}, + letzterStatus_vorStorniert: {visible: false} + }', // col properties +); + +echo $this->widgetlib->widget('TableWidget', $tableWidgetArray); + +?> diff --git a/application/views/lehre/lehrauftrag/orderLehrauftrag.php b/application/views/lehre/lehrauftrag/orderLehrauftrag.php index 8938a305c..b04aa7985 100644 --- a/application/views/lehre/lehrauftrag/orderLehrauftrag.php +++ b/application/views/lehre/lehrauftrag/orderLehrauftrag.php @@ -135,6 +135,18 @@ $this->load->view(
+

Ansicht

+
+ Spaltenbreite verändern +

+ Um die Spaltenbreite zu verändern, fährt man im Spaltenkopf langsam mit dem Mauszeiger auf + den rechten Rand der entprechenden Spalte.
+ Sobald sich der Mauszeiger in einen Doppelpfeil verwandelt, wird die Maustaste geklickt und + mit gedrückter Maustaste die Spalte nach rechts erweitert oder nach links verkleinert. +

+
+
+ diff --git a/application/views/lehre/lehrauftrag/orderLehrauftragData.php b/application/views/lehre/lehrauftrag/orderLehrauftragData.php index 76c6c14b3..b2fa3ac2f 100644 --- a/application/views/lehre/lehrauftrag/orderLehrauftragData.php +++ b/application/views/lehre/lehrauftrag/orderLehrauftragData.php @@ -16,6 +16,7 @@ SELECT studiensemester_kurzbz, studiengang_kz, stg_typ_kurzbz, + semester, /* get valid STPL(s), to which the lehrveranstaltung is assigned to (can be more) */ /* therefore join over lv, studiensemester and semester */ ( @@ -50,7 +51,6 @@ SELECT person_id, typ, auftrag, - semester, lv_oe_kurzbz, gruppe, lektor, @@ -178,7 +178,7 @@ FROM WHEN oe.organisationseinheittyp_kurzbz = \'Department\' THEN (\'DEP \' || oe.bezeichnung) ELSE (oe.organisationseinheittyp_kurzbz || \' \' || oe.bezeichnung) END AS "lv_oe_kurzbz", - (person.vorname || \' \' || person.nachname) AS "lektor", + (person.nachname || \' \' || person.vorname) AS "lektor", TRUNC(lema.semesterstunden, 1) AS "stunden", lema.stundensatz, TRUNC((lema.semesterstunden * lema.stundensatz), 2) AS "betrag", @@ -299,7 +299,7 @@ FROM ELSE (oe.organisationseinheittyp_kurzbz || \' \' || oe.bezeichnung) END AS "lv_oe_kurzbz", - (vorname || \' \' || nachname) AS "lektor", + (nachname || \' \' || vorname) AS "lektor", TRUNC(pb.stunden, 1) AS "stunden", pb.stundensatz, TRUNC((pb.stunden * pb.stundensatz), 2) AS "betrag", @@ -347,12 +347,12 @@ $filterWidgetArray = array( 'Studiensemester', 'Studiengang-KZ', 'Studiengang', + 'Semester', 'Studienplan', 'OrgForm', 'Person-ID', 'Typ', 'LV- / Projektbezeichnung', - 'Semester', 'Organisationseinheit', 'Gruppe', 'Lektor', @@ -375,6 +375,7 @@ $filterWidgetArray = array( layout:"fitColumns", // fit columns to width of table responsiveLayout:"hide", // hide columns that dont fit on the table movableColumns: true, // allows changing column + placeholder: func_placeholder(), headerFilterPlaceholder: " ", groupBy:"lehrveranstaltung_id", groupToggleElement:"header", //toggle group on click anywhere in the group header @@ -421,15 +422,15 @@ $filterWidgetArray = array( studiensemester_kurzbz: {headerFilter:"input"}, studiengang_kz: {visible: false}, stg_typ_kurzbz: {headerFilter:"input", width: "5%"}, + semester: {headerFilter:"input"}, studienplan_bezeichnung: {headerFilter:"input", width: "7%"}, orgform_kurzbz: {headerFilter:"input"}, person_id: {visible: false}, typ: {headerFilter:"input"}, auftrag: {headerFilter:"input", width:"15%"}, - semester: {headerFilter:"input"}, lv_oe_kurzbz: {headerFilter:"input"}, gruppe: {headerFilter:"input"}, - lektor: {headerFilter:"input"}, + lektor: {headerFilter:"input", widthGrow: 3}, stunden: {align:"right", formatter: form_formatNulltoStringNumber, formatterParams:{precision:1}, headerFilter:"input", headerFilterFunc: hf_filterStringnumberWithOperator, bottomCalc:"sum", bottomCalcParams:{precision:1}}, diff --git a/public/js/lehre/lehrauftrag/acceptLehrauftrag.js b/public/js/lehre/lehrauftrag/acceptLehrauftrag.js index ea96a8c7c..03c72e2f2 100644 --- a/public/js/lehre/lehrauftrag/acceptLehrauftrag.js +++ b/public/js/lehre/lehrauftrag/acceptLehrauftrag.js @@ -17,7 +17,7 @@ const COLOR_LIGHTGREY = "#f5f5f5"; const ICON_LEHRAUFTRAG_ORDERED = ''; const ICON_LEHRAUFTRAG_APPROVED = ''; const ICON_LEHRAUFTRAG_CHANGED = ''; - +const ICON_LEHRAUFTRAG_CANCELLED = ''; // ----------------------------------------------------------------------------------------------------------------- // Mutators - setter methods to manipulate table data when entering the tabulator @@ -26,11 +26,11 @@ const ICON_LEHRAUFTRAG_CHANGED = ', >=, !=, ==, compare values with that operator - var operator = ''; - if (headerValue.match(/([<=>!]{1,2})/g)) { - var operator_arr = headerValue.match(/([<=>!]{1,2})/g); - operator = operator_arr[0]; + // If string starts with <, <=, >, >=, !=, ==, compare values with that operator + var operator = ''; + if (headerValue.match(/([<=>!]{1,2})/g)) { + var operator_arr = headerValue.match(/([<=>!]{1,2})/g); + operator = operator_arr[0]; - headerValue = headerValue - .replace(operator, '') - .trim() - ; + headerValue = headerValue + .replace(operator, '') + .trim() + ; - // return if value comparison is true - return eval(rowValue + operator + headerValue); - } + // return if value comparison is true + return eval(rowValue + operator + headerValue); + } - // If just a stringnumber, return if exact match found - return parseFloat(rowValue) == headerValue; + // If just a stringnumber, return if exact match found + return parseFloat(rowValue) == headerValue; } // ----------------------------------------------------------------------------------------------------------------- // Tabulator table format functions // ----------------------------------------------------------------------------------------------------------------- +// Displays text when table is empty +function func_placeholder() +{ + return "

Keine Daten vorhanden.

"; +} + // Formats the rows function func_rowFormatter(row){ - var bestellt = row.getData().bestellt; - var erteilt = row.getData().erteilt; - var akzeptiert = row.getData().akzeptiert; + var bestellt = row.getData().bestellt; + var erteilt = row.getData().erteilt; + var akzeptiert = row.getData().akzeptiert; - var stunden = parseFloat(row.getData().stunden); - var vertrag_stunden = parseFloat(row.getData().vertrag_stunden); + var stunden = parseFloat(row.getData().stunden); + var vertrag_stunden = parseFloat(row.getData().vertrag_stunden); - var betrag = parseFloat(row.getData().betrag); - var vertrag_betrag = parseFloat(row.getData().vertrag_betrag); + var betrag = parseFloat(row.getData().betrag); + var vertrag_betrag = parseFloat(row.getData().vertrag_betrag); - if (isNaN(betrag)) - { - betrag = 0; - } + if (isNaN(betrag)) + { + betrag = 0; + } - /* - Formats the color of the rows depending on their status - - orange: geaendert - - default: bestellte und erteilte (= zu akzeptierende) - - green: akzeptierte - - grey: all other (marks unselectable) - */ - row.getCells().forEach(function(cell){ - if (bestellt != null && (betrag != vertrag_betrag) || - bestellt != null && stunden != vertrag_stunden) - { - cell.getElement().classList.add('bg-warning'); // geaenderte - } - else if(bestellt != null && erteilt != null && akzeptiert == null) - { - return; // bestellte + erteilte - } - else if(bestellt != null && erteilt != null && akzeptiert != null) - { - cell.getElement().classList.add('bg-success') // akzeptierte - } - else - { - row.getElement().style["background-color"] = COLOR_LIGHTGREY; // default - } - }); + /* + Formats the color of the rows depending on their status + - orange: geaendert + - default: bestellte und erteilte (= zu akzeptierende) + - green: akzeptierte + - grey: all other (marks unselectable) + */ + row.getCells().forEach(function(cell){ + if (bestellt != null && (betrag != vertrag_betrag) || + bestellt != null && stunden != vertrag_stunden) + { + cell.getElement().classList.add('bg-warning'); // geaenderte + } + else if(bestellt != null && erteilt != null && akzeptiert == null) + { + return; // bestellte + erteilte + } + else if(bestellt != null && erteilt != null && akzeptiert != null) + { + cell.getElement().classList.add('bg-success') // akzeptierte + } + else + { + row.getElement().style["background-color"] = COLOR_LIGHTGREY; // default + } + }); } // Formats row selectable/unselectable function func_selectableCheck(row){ - var stunden = parseFloat(row.getData().stunden); - var vertrag_stunden = parseFloat(row.getData().vertrag_stunden); + var stunden = parseFloat(row.getData().stunden); + var vertrag_stunden = parseFloat(row.getData().vertrag_stunden); - var betrag = parseFloat(row.getData().betrag); - var vertrag_betrag = parseFloat(row.getData().vertrag_betrag); + var betrag = parseFloat(row.getData().betrag); + var vertrag_betrag = parseFloat(row.getData().vertrag_betrag); - if (isNaN(betrag)) - { - betrag = 0; - } + var is_storniert = row.getData().storniert != undefined; - // only allow to select bestellte && erteilte && nicht geaenderte Lehraufträge - return row.getData().bestellt != null && // bestellt - row.getData().erteilt != null && // AND erteilt - row.getData().akzeptiert == null && // AND nicht akzeptiert - betrag == vertrag_betrag && - stunden == vertrag_stunden; // OR nicht geaenderte + if (isNaN(betrag)) + { + betrag = 0; + } + + // only allow to select bestellte && erteilte && nicht geaenderte Lehraufträge + return row.getData().bestellt != null && // bestellt + row.getData().erteilt != null && // AND erteilt + row.getData().akzeptiert == null && // AND nicht akzeptiert + betrag == vertrag_betrag && + stunden == vertrag_stunden && // AND nicht geaendert + !is_storniert; // AND nicht storniert } // Adds column status function func_tableBuilt(table) { - // Add status column to table - table.addColumn( - { - title: "", - field: "status", - width:40, - align:"center", - downloadTitle: 'Status', - formatter: status_formatter, - tooltip: status_tooltip - }, true - ); + // Add status column to table + table.addColumn( + { + title: "", + field: "status", + width:40, + align:"center", + downloadTitle: 'Status', + formatter: status_formatter, + tooltip: status_tooltip + }, true + ); } // Sets status values into column status function func_renderStarted(table){ - // Set literally status to each row - this enables sorting by status despite using icons - table.getRows().forEach(function(row){ - var bestellt = row.getData().bestellt; - var erteilt = row.getData().erteilt; - var akzeptiert = row.getData().akzeptiert; + // Set literally status to each row - this enables sorting by status despite using icons + table.getRows().forEach(function(row){ + var bestellt = row.getData().bestellt; + var erteilt = row.getData().erteilt; + var akzeptiert = row.getData().akzeptiert; - var stunden = parseFloat(row.getData().stunden); - var vertrag_stunden = parseFloat(row.getData().vertrag_stunden); + var stunden = parseFloat(row.getData().stunden); + var vertrag_stunden = parseFloat(row.getData().vertrag_stunden); - var betrag = parseFloat(row.getData().betrag); - var vertrag_betrag = parseFloat(row.getData().vertrag_betrag); + var betrag = parseFloat(row.getData().betrag); + var vertrag_betrag = parseFloat(row.getData().vertrag_betrag); - if (isNaN(betrag)) - { - betrag = 0; - } + if (isNaN(betrag)) + { + betrag = 0; + } - if ((bestellt != null && betrag != vertrag_betrag) || - (bestellt != null && stunden != vertrag_stunden)) - { - row.getData().status = 'Geändert'; // geaendert - } - else if (bestellt == null && erteilt == null && akzeptiert == null) - { - row.getData().status = 'Neu'; // neu - } - else if (bestellt != null && erteilt == null && akzeptiert == null) - { - row.getData().status = 'Bestellt'; // bestellt - } - else if (bestellt != null && erteilt != null && akzeptiert == null) - { - row.getData().status = 'Erteilt'; // erteilt - } - else if (bestellt != null && erteilt != null && akzeptiert != null) - { - row.getData().status = 'Akzeptiert'; // akzeptiert - } - else - { - row.getData().status = null; // default - } - }); + if ((bestellt != null && betrag != vertrag_betrag) || + (bestellt != null && stunden != vertrag_stunden)) + { + row.getData().status = 'Geändert'; // geaendert + } + else if (bestellt == null && erteilt == null && akzeptiert == null) + { + row.getData().status = 'Neu'; // neu + } + else if (bestellt != null && erteilt == null && akzeptiert == null) + { + row.getData().status = 'Bestellt'; // bestellt + } + else if (bestellt != null && erteilt != null && akzeptiert == null) + { + row.getData().status = 'Erteilt'; // erteilt + } + else if (bestellt != null && erteilt != null && akzeptiert != null) + { + row.getData().status = 'Akzeptiert'; // akzeptiert + } + else + { + row.getData().status = null; // default + } + }); } // Performes after row was updated function func_rowUpdated(row){ - // Refresh status icon and row color - row.reformat(); // retriggers cell formatters and rowFormatter callback + // Refresh status icon and row color + row.reformat(); // retriggers cell formatters and rowFormatter callback - // Deselect and disable new selection of updated rows - row.deselect(); - row.getElement().style["pointerEvents"] = "none"; + // Deselect and disable new selection of updated rows + row.deselect(); + row.getElement().style["pointerEvents"] = "none"; } // Hide betrag, if lector has inkludierte Lehre function func_renderComplete(table){ - // Check if the lectors actual Verwendung has inkludierte Lehre - FHC_AjaxClient.ajaxCallGet( - FHC_JS_DATA_STORAGE_OBJECT.called_path + "/checkInkludierteLehre", - null, - { - successCallback: function (data, textStatus, jqXHR) - { - // If lector has inkludierte Lehre, hide the column betrag - if (data.retval) - { - table.hideColumn("betrag"); - } - }, - errorCallback: function (jqXHR, textStatus, errorThrown) - { - FHC_DialogLib.alertError("Systemfehler
Bitte kontaktieren Sie Ihren Administrator."); - } - } - ); + // Check if the lectors actual Verwendung has inkludierte Lehre + FHC_AjaxClient.ajaxCallGet( + FHC_JS_DATA_STORAGE_OBJECT.called_path + "/checkInkludierteLehre", + null, + { + successCallback: function (data, textStatus, jqXHR) + { + // If lector has inkludierte Lehre, hide the column betrag + if (data.retval) + { + table.hideColumn("betrag"); + } + }, + errorCallback: function (jqXHR, textStatus, errorThrown) + { + FHC_DialogLib.alertError("Systemfehler
Bitte kontaktieren Sie Ihren Administrator."); + } + } + ); } // Tabulator footer element @@ -251,32 +260,32 @@ function func_renderComplete(table){ // Adds a footer with buttons select all / deselect all / download function func_footerElement(){ - var footer_html = '
'; - footer_html += '
'; + var footer_html = '
'; + footer_html += '
'; - footer_html += ''; + footer_html += ''; - footer_html += ''; + footer_html += ''; - footer_html += '
'; - footer_html += '
'; + footer_html += '
'; + footer_html += '
'; - return footer_html; + return footer_html; } // Performs download CSV function footer_downloadCSV(){ - $('#tableWidgetTabulator').tabulator("download", "csv", "data.csv", {bom:true}); // BOM for correct UTF-8 char output + $('#tableWidgetTabulator').tabulator("download", "csv", "data.csv", {bom:true}); // BOM for correct UTF-8 char output } /* @@ -284,12 +293,12 @@ function footer_downloadCSV(){ * Select all (filtered) rows and ignore rows that are bestellt and erteilt */ function footer_selectAll(){ - $('#tableWidgetTabulator').tabulator('getRows', true) - .filter(row => row.getData().bestellt != null && // bestellt - row.getData().erteilt != null && // AND erteilt - row.getData().akzeptiert == null && // AND NOT akzeptiert - row.getData().status != 'Geändert') // AND NOT geändert - .forEach((row => row.select())); + $('#tableWidgetTabulator').tabulator('getRows', true) + .filter(row => row.getData().bestellt != null && // bestellt + row.getData().erteilt != null && // AND erteilt + row.getData().akzeptiert == null && // AND NOT akzeptiert + row.getData().status != 'Geändert') // AND NOT geändert + .forEach((row => row.select())); } /* @@ -297,12 +306,12 @@ function footer_selectAll(){ * Deselect all (filtered) rows */ function footer_deselectAll(){ - $('#tableWidgetTabulator').tabulator('deselectRow'); + $('#tableWidgetTabulator').tabulator('deselectRow'); } // Displays number of selected rows on row selection change function func_rowSelectionChanged(data, rows){ - $('#number-selected').html("Für Annehmen ausgewählt: " + rows.length + ""); + $('#number-selected').html("Für Annehmen ausgewählt: " + rows.length + ""); } // ----------------------------------------------------------------------------------------------------------------- @@ -311,253 +320,285 @@ function func_rowSelectionChanged(data, rows){ // Generates status icons status_formatter = function(cell, formatterParams, onRendered){ - var bestellt = cell.getRow().getData().bestellt; - var erteilt = cell.getRow().getData().erteilt; - var akzeptiert = cell.getRow().getData().akzeptiert; + var bestellt = cell.getRow().getData().bestellt; + var erteilt = cell.getRow().getData().erteilt; + var akzeptiert = cell.getRow().getData().akzeptiert; + var is_storniert = cell.getRow().getData().storniert != undefined; - var stunden = parseFloat(cell.getRow().getData().stunden); - var vertrag_stunden = parseFloat(cell.getRow().getData().vertrag_stunden); + var stunden = parseFloat(cell.getRow().getData().stunden); + var vertrag_stunden = parseFloat(cell.getRow().getData().vertrag_stunden); - var betrag = parseFloat(cell.getRow().getData().betrag); - var vertrag_betrag = parseFloat(cell.getRow().getData().vertrag_betrag); + var betrag = parseFloat(cell.getRow().getData().betrag); + var vertrag_betrag = parseFloat(cell.getRow().getData().vertrag_betrag); - if (isNaN(betrag)) - { - betrag = 0; - } + if (isNaN(betrag)) + { + betrag = 0; + } - // commented icons would be so nice to have with fontawsome 5.11... - if (bestellt != null && isNaN(vertrag_betrag)) - { - return ""; // kein Vertrag - } - else if (bestellt != null && (betrag != vertrag_betrag) || - bestellt != null && stunden != vertrag_stunden) - { - return ICON_LEHRAUFTRAG_CHANGED; // geaendert - // return ""; - } - else if (bestellt == null && erteilt == null && akzeptiert == null) - { - return ""; // neu - } - else if (bestellt != null && erteilt == null && akzeptiert == null) - { - return ICON_LEHRAUFTRAG_ORDERED; // bestellt - // return ""; - } - else if (bestellt != null && erteilt != null && akzeptiert == null) - { - return ICON_LEHRAUFTRAG_APPROVED; // erteilt - // return ""; - } - else if (bestellt != null && erteilt != null && akzeptiert != null) - { - return ""; // akzeptiert - // return ""; - } - else - { - return ""; // default - } + // commented icons would be so nice to have with fontawsome 5.11... + if (bestellt != null && isNaN(vertrag_betrag)) + { + return ""; // kein Vertrag + } + else if (bestellt != null && (betrag != vertrag_betrag) || + bestellt != null && stunden != vertrag_stunden) + { + return ICON_LEHRAUFTRAG_CHANGED; // geaendert + // return ""; + } + else if (bestellt == null && erteilt == null && akzeptiert == null && !is_storniert) + { + return ""; // neu + } + else if (bestellt != null && erteilt == null && akzeptiert == null) + { + return ICON_LEHRAUFTRAG_ORDERED; // bestellt + // return ""; + } + else if (bestellt != null && erteilt != null && akzeptiert == null) + { + return ICON_LEHRAUFTRAG_APPROVED; // erteilt + // return ""; + } + else if (bestellt != null && erteilt != null && akzeptiert != null) + { + return ""; // akzeptiert + // return ""; + } + else if (is_storniert) + { + return ICON_LEHRAUFTRAG_CANCELLED; // storniert + } + else + { + return ""; // default + } }; // Generates status tooltip status_tooltip = function(cell){ - var bestellt = cell.getRow().getData().bestellt; - var erteilt = cell.getRow().getData().erteilt; - var akzeptiert = cell.getRow().getData().akzeptiert; + var bestellt = cell.getRow().getData().bestellt; + var erteilt = cell.getRow().getData().erteilt; + var akzeptiert = cell.getRow().getData().akzeptiert; + var is_storniert = cell.getRow().getData().storniert != undefined; + var letzterStatus_vorStorniert = cell.getRow().getData().letzterStatus_vorStorniert; - var stunden = parseFloat(cell.getRow().getData().stunden); - var vertrag_stunden = parseFloat(cell.getRow().getData().vertrag_stunden); - var betrag = parseFloat(cell.getRow().getData().betrag); - var vertrag_betrag = parseFloat(cell.getRow().getData().vertrag_betrag); + var stunden = parseFloat(cell.getRow().getData().stunden); + var vertrag_stunden = parseFloat(cell.getRow().getData().vertrag_stunden); - if (isNaN(betrag)) - { - betrag = 0; - } + var betrag = parseFloat(cell.getRow().getData().betrag); + var vertrag_betrag = parseFloat(cell.getRow().getData().vertrag_betrag); - var text = 'Lehrauftrag in Bearbeitung. '; + if (isNaN(betrag)) + { + betrag = 0; + } - if (bestellt != null && erteilt == null && akzeptiert == null - && (betrag != vertrag_betrag || stunden != vertrag_stunden)) // geaendert (when never erteilt before) - { - text += 'Wartet auf Erteilung.'; - return text; - } - else if (bestellt != null && erteilt != null && akzeptiert == null - && (betrag != vertrag_betrag || stunden != vertrag_stunden)) // geaendert (when has been erteilt once) - { - text += 'Wartet auf erneute Erteilung.'; - return text; - } - else if (bestellt != null && erteilt == null && akzeptiert == null) // bestellt - { - return 'Letzter Status: Bestellt. Wartet auf Erteilung.'; - } - else if (bestellt != null && erteilt != null && akzeptiert == null) // erteilt - { - return 'Letzter Status: Erteilt. Wartet auf Annahme durch Lektor.'; - } - else if (bestellt != null && erteilt != null && akzeptiert != null) // akzeptiert - { - return 'Letzter Status: Angenommen. Vertrag wurde beidseitig abgeschlossen.'; - } + if (letzterStatus_vorStorniert != undefined && letzterStatus_vorStorniert == 'akzeptiert') + { + letzterStatus_vorStorniert = 'angenommen'; + } + + var text = 'Lehrauftrag in Bearbeitung. '; + + if (bestellt != null && erteilt == null && akzeptiert == null + && (betrag != vertrag_betrag || stunden != vertrag_stunden)) // geaendert (when never erteilt before) + { + text += 'Wartet auf Erteilung.'; + return text; + } + else if (bestellt != null && erteilt != null && akzeptiert == null + && (betrag != vertrag_betrag || stunden != vertrag_stunden)) // geaendert (when has been erteilt once) + { + text += 'Wartet auf erneute Erteilung.'; + return text; + } + else if (bestellt != null && erteilt == null && akzeptiert == null) // bestellt + { + return 'Letzter Status: Bestellt. Wartet auf Erteilung.'; + } + else if (bestellt != null && erteilt != null && akzeptiert == null) // erteilt + { + return 'Letzter Status: Erteilt. Wartet auf Annahme durch Lektor.'; + } + else if (bestellt != null && erteilt != null && akzeptiert != null) // akzeptiert + { + return 'Letzter Status: Angenommen. Vertrag wurde beidseitig abgeschlossen.'; + } + else if (is_storniert) + { + return 'Dieser Vertrag wurde storniert. Letzter Status vor Stornierung war: ' + + letzterStatus_vorStorniert; // storniert + } } // Generates bestellt tooltip bestellt_tooltip = function(cell){ - if (cell.getRow().getData().bestellt_von != null) - { - return 'Bestellt von: ' + cell.getRow().getData().bestellt_von; - } + if (cell.getRow().getData().bestellt_von != null) + { + return 'Bestellt von: ' + cell.getRow().getData().bestellt_von; + } } // Generates erteilt tooltip erteilt_tooltip = function(cell){ - if (cell.getRow().getData().erteilt_von != null) { - return 'Erteilt von: ' + cell.getRow().getData().erteilt_von; - } + if (cell.getRow().getData().erteilt_von != null) { + return 'Erteilt von: ' + cell.getRow().getData().erteilt_von; + } } // Generates akzeptiert tooltip akzeptiert_tooltip = function(cell){ - if (cell.getRow().getData().akzeptiert_von != null) { - return 'Angenommen von: ' + cell.getRow().getData().akzeptiert_von; - } + if (cell.getRow().getData().akzeptiert_von != null) { + return 'Angenommen von: ' + cell.getRow().getData().akzeptiert_von; + } +} + +// Generates storniert tooltip +storniert_tooltip = function(cell){ + if (cell.getRow().getData().storniert_von != null) { + return 'Storniert von: ' + cell.getRow().getData().storniert_von; + } } $(function() { + // Show all rows + $("#show-all").click(function(){ + $('#tableWidgetTabulator').tabulator('clearFilter'); + }); - // Show all rows - $("#show-all").click(function(){ - $('#tableWidgetTabulator').tabulator('clearFilter'); - }); + // Show only rows with ordered lehrauftraege + $("#show-ordered").click(function(){ + $('#tableWidgetTabulator').tabulator('setFilter', + [ + {field: 'bestellt', type: '!=', value: null}, + {field: 'erteilt', type: '=', value: null}, + {field: 'akzeptiert', type: '=', value: null} + ] + ); + }); - // Show only rows with ordered lehrauftraege - $("#show-ordered").click(function(){ - $('#tableWidgetTabulator').tabulator('setFilter', - [ - {field: 'bestellt', type: '!=', value: null}, - {field: 'erteilt', type: '=', value: null}, - {field: 'akzeptiert', type: '=', value: null} - ] - ); - }); + // Show only rows with erteilte lehrauftraege + $("#show-approved").click(function(){ + $('#tableWidgetTabulator').tabulator('setFilter', [ + {field: 'bestellt', type: '!=', value: null}, // filter when is bestellt + {field: 'erteilt', type: '!=', value: null}, // and is erteilt + {field: 'akzeptiert', type: '=', value: null} // and is not akzeptiert + ] + ); + }); - // Show only rows with erteilte lehrauftraege - $("#show-approved").click(function(){ - $('#tableWidgetTabulator').tabulator('setFilter', [ - {field: 'bestellt', type: '!=', value: null}, // filter when is bestellt - {field: 'erteilt', type: '!=', value: null}, // and is erteilt - {field: 'akzeptiert', type: '=', value: null} // and is not akzeptiert - ] - ); - }); + // Show only rows with akzeptierte lehrauftraege + $("#show-accepted").click(function(){ + $('#tableWidgetTabulator').tabulator('setFilter', + [ + {field: 'bestellt', type: '!=', value: null}, + {field: 'erteilt', type: '!=', value: null}, + {field: 'akzeptiert', type: '!=', value: null} + ] + ); + }); - // Show only rows with akzeptierte lehrauftraege - $("#show-accepted").click(function(){ - $('#tableWidgetTabulator').tabulator('setFilter', - [ - {field: 'bestellt', type: '!=', value: null}, - {field: 'erteilt', type: '!=', value: null}, - {field: 'akzeptiert', type: '!=', value: null} - ] - ); - }); + // Set png-icons into filter-buttons + $(".btn-lehrauftrag").each(function(){ + switch(this.id) { + case 'show-ordered': + this.innerHTML = ICON_LEHRAUFTRAG_ORDERED; + break; + case 'show-approved': + this.innerHTML = ICON_LEHRAUFTRAG_APPROVED; + break; + case 'show-cancelled': + this.innerHTML = ICON_LEHRAUFTRAG_CANCELLED; + break; + } + }); - // Set png-icons into filter-buttons - $(".btn-lehrauftrag").each(function(){ - switch(this.id) { - case 'show-ordered': - this.innerHTML = ICON_LEHRAUFTRAG_ORDERED; - break; - case 'show-approved': - this.innerHTML = ICON_LEHRAUFTRAG_APPROVED; - break; - } - }); + // De/activate and un/focus on clicked button + $(".btn-lehrauftrag").click(function() { - // De/activate and un/focus on clicked button - $(".btn-lehrauftrag").click(function() { + // De/activate and un/focus on clicked button + $(".btn-lehrauftrag").removeClass('focus').removeClass('active'); + $(this).addClass('focus').addClass('active'); + }); - // De/activate and un/focus on clicked button - $(".btn-lehrauftrag").removeClass('focus').removeClass('active'); - $(this).addClass('focus').addClass('active'); - }); + // Redraw table stornierte lehrauftraege on button click + $('#collapseCancelledLehrauftraege').on('shown.bs.collapse', function () { + $('[tableuniqueid = cancelledLehrauftrag] #tableWidgetTabulator').tabulator('redraw', true); + }); - // Approve Lehrauftraege - $("#accept-lehrauftraege").click(function(){ + // Approve Lehrauftraege + $("#accept-lehrauftraege").click(function(){ - // Get selected rows data - var selected_data = $('#tableWidgetTabulator').tabulator('getSelectedData') - .map(function(data){ - // reduce to necessary fields - return { - 'row_index' : data.row_index, - 'vertrag_id' : data.vertrag_id - } - }); + // Get selected rows data + var selected_data = $('#tableWidgetTabulator').tabulator('getSelectedData') + .map(function(data){ + // reduce to necessary fields + return { + 'row_index' : data.row_index, + 'vertrag_id' : data.vertrag_id + } + }); - // Alert and exit if no lehraufgang is selected - if (selected_data.length == 0) - { - FHC_DialogLib.alertInfo('Bitte wählen Sie erst zumindest einen Lehrauftrag'); + // Alert and exit if no lehraufgang is selected + if (selected_data.length == 0) + { + FHC_DialogLib.alertInfo('Bitte wählen Sie erst zumindest einen Lehrauftrag'); - // Emtpy password field - $("#password").val(''); + // Emtpy password field + $("#password").val(''); - return; - } + return; + } - // Get password for verification - var password = $("#password").val(); - if (password == '') - { - FHC_DialogLib.alertInfo('Bitte verifizieren Sie sich mit Ihrem Login Passwort.'); + // Get password for verification + var password = $("#password").val(); + if (password == '') + { + FHC_DialogLib.alertInfo('Bitte verifizieren Sie sich mit Ihrem Login Passwort.'); - // Focus on password field - $("#password").focus(); + // Focus on password field + $("#password").focus(); - return; - } + return; + } - // Prepare data object for ajax call - var data = { - 'password': password, - 'selected_data': selected_data - }; + // Prepare data object for ajax call + var data = { + 'password': password, + 'selected_data': selected_data + }; - FHC_AjaxClient.ajaxCallPost( - FHC_JS_DATA_STORAGE_OBJECT.called_path + "/acceptLehrauftrag", - data, - { - successCallback: function (data, textStatus, jqXHR) - { - if (data.error) - { - // Password not verified - FHC_DialogLib.alertWarning(data.retval); - } - if (!data.error && data.retval != null) - { - // Update status 'Erteilt' - $('#tableWidgetTabulator').tabulator('updateData', data.retval); - FHC_DialogLib.alertSuccess(data.retval.length + " Lehraufträge wurden akzeptiert."); - } - }, - errorCallback: function (jqXHR, textStatus, errorThrown) - { - FHC_DialogLib.alertError("Systemfehler
Bitte kontaktieren Sie Ihren Administrator."); - } - } - ); + FHC_AjaxClient.ajaxCallPost( + FHC_JS_DATA_STORAGE_OBJECT.called_path + "/acceptLehrauftrag", + data, + { + successCallback: function (data, textStatus, jqXHR) + { + if (data.error) + { + // Password not verified + FHC_DialogLib.alertWarning(data.retval); + } + if (!data.error && data.retval != null) + { + // Update status 'Erteilt' + $('#tableWidgetTabulator').tabulator('updateData', data.retval); + FHC_DialogLib.alertSuccess(data.retval.length + " Lehraufträge wurden akzeptiert."); + } + }, + errorCallback: function (jqXHR, textStatus, errorThrown) + { + FHC_DialogLib.alertError("Systemfehler
Bitte kontaktieren Sie Ihren Administrator."); + } + } + ); - // Empty password field - $("#password").val(''); + // Empty password field + $("#password").val(''); - }); + }); }); diff --git a/public/js/lehre/lehrauftrag/approveLehrauftrag.js b/public/js/lehre/lehrauftrag/approveLehrauftrag.js index da3697adf..94e6af473 100644 --- a/public/js/lehre/lehrauftrag/approveLehrauftrag.js +++ b/public/js/lehre/lehrauftrag/approveLehrauftrag.js @@ -94,6 +94,13 @@ function func_initialFilter(){ // ----------------------------------------------------------------------------------------------------------------- // Tabulator table format functions // ----------------------------------------------------------------------------------------------------------------- + +// Displays text when table is empty +function func_placeholder() +{ + return "

Keine Daten vorhanden.

"; +} + // Formats the group header function func_groupHeader(data){ return data[0].lv_bezeichnung + "  " + ' ( LV-ID: ' + data[0].lehrveranstaltung_id + ' )'; // change name to lehrveranstaltung; diff --git a/public/js/lehre/lehrauftrag/orderLehrauftrag.js b/public/js/lehre/lehrauftrag/orderLehrauftrag.js index d27da0e4e..4e58272e5 100644 --- a/public/js/lehre/lehrauftrag/orderLehrauftrag.js +++ b/public/js/lehre/lehrauftrag/orderLehrauftrag.js @@ -99,6 +99,13 @@ function func_dataLoaded(data, table){ // ----------------------------------------------------------------------------------------------------------------- // Tabulator table format functions // ----------------------------------------------------------------------------------------------------------------- + +// Displays text when table is empty +function func_placeholder() +{ + return "

Keine Daten vorhanden.

"; +} + // Formats the group header function func_groupHeader(data) { return data[0].lv_bezeichnung + "  " + ' ( LV-ID: ' + data[0].lehrveranstaltung_id + ' )'; // change name to lehrveranstaltung; diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index e68011401..4dbfbebe0 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -4094,7 +4094,27 @@ When on hold, the date is only a reminder.', 'insertvon' => 'system' ) ) - ) + ), + array( + 'app' => 'core', + 'category' => 'global', + 'phrase' => 'stornierteLehrauftraege', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Stornierte Lehraufträge', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Cancelled lectureships', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ) );