mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-16 14:32:18 +00:00
Merge branch 'feature-3994/Digitaler_Lehrauftrag'
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -93,6 +93,18 @@ $this->load->view(
|
||||
</ul>
|
||||
</div>
|
||||
<br>
|
||||
|
||||
<h4>Ansicht</h4>
|
||||
<div class="panel panel-body">
|
||||
<b>Spaltenbreite verändern</b>
|
||||
<p>
|
||||
Um die Spaltenbreite zu verändern, fährt man im Spaltenkopf langsam mit dem Mauszeiger auf
|
||||
den rechten Rand der entprechenden Spalte. <br>
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
<br>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -120,7 +132,7 @@ $this->load->view(
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- tabulator data table -->
|
||||
<!-- tabulator data table 'Lehrauftraege annehmen'-->
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<?php $this->load->view('lehre/lehrauftrag/acceptLehrauftragData.php'); ?>
|
||||
@@ -133,11 +145,24 @@ $this->load->view(
|
||||
<div class="col-xs-6">
|
||||
<div class="btn-toolbar" role="toolbar">
|
||||
<div class="btn-group" role="group">
|
||||
<button id="show-all" class="btn btn-default btn-lehrauftrag active focus" type="button" data-toggle="tooltip" data-placement="left" title="Alle anzeigen"><i class='fa fa-users'></i></button>
|
||||
<button id="show-ordered" class="btn btn-default btn-lehrauftrag" type="button" data-toggle="tooltip" data-placement="left" title="Nur bestellte anzeigen"></button><!-- png img set in javascript -->
|
||||
<button id="show-approved" class="btn btn-default btn-lehrauftrag" type="button" data-toggle="tooltip" data-placement="left" title="Nur erteilte anzeigen"></button><!-- png img set in javascript -->
|
||||
<button id="show-accepted" class="btn btn-default btn-lehrauftrag" type="button" data-toggle="tooltip" data-placement="left" title="Nur angenommene anzeigen"><i class='fa fa-handshake-o'></i></button>
|
||||
<button id="show-all" class="btn btn-default btn-lehrauftrag active focus" type="button"
|
||||
data-toggle="tooltip" data-placement="left" title="Alle anzeigen"><i class='fa fa-users'></i>
|
||||
</button>
|
||||
<button id="show-ordered" class="btn btn-default btn-lehrauftrag" type="button"
|
||||
data-toggle="tooltip" data-placement="left" title="Nur bestellte anzeigen">
|
||||
</button><!-- png img set in javascript -->
|
||||
<button id="show-approved" class="btn btn-default btn-lehrauftrag" type="button"
|
||||
data-toggle="tooltip" data-placement="left" title="Nur erteilte anzeigen">
|
||||
</button><!-- png img set in javascript -->
|
||||
<button id="show-accepted" class="btn btn-default btn-lehrauftrag" type="button"
|
||||
data-toggle="tooltip" data-placement="left" title="Nur angenommene anzeigen"><i class='fa fa-handshake-o'></i>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<button id="show-cancelled" class="btn btn-default btn-lehrauftrag" type="button" style="margin-left: 20px;"
|
||||
data-toggle="collapse" data-placement="left" title="Stornierte anzeigen"
|
||||
data-target ="#collapseCancelledLehrauftraege" aria-expanded="false" aria-controls="collapseExample">
|
||||
</button><!-- png img set in javascript -->
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-offset-2 col-md-4 col-xs-6">
|
||||
@@ -149,7 +174,28 @@ $this->load->view(
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<br>
|
||||
|
||||
<!-- collapse module with data table 'Stornierte Lehrauftraege' (collapsed by default until opened on buttonclick)-->
|
||||
<div class="row">
|
||||
<div class="col-lg-12 collapse" id="collapseCancelledLehrauftraege">
|
||||
<h4>
|
||||
<?php echo ucfirst($this->p->t('global', 'stornierteLehrauftraege')); ?>:
|
||||
<small>
|
||||
<abbr title="Anderes Studiensemester? Bitte oben im Dropdown wählen." >
|
||||
<?php echo $studiensemester_selected ?>
|
||||
</abbr>
|
||||
</small>
|
||||
</h4>
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<?php $this->load->view('lehre/lehrauftrag/cancelledLehrauftragData.php'); ?>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- end container -->
|
||||
</div><!-- end page-wrapper -->
|
||||
<br>
|
||||
|
||||
@@ -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},
|
||||
|
||||
@@ -133,6 +133,18 @@ $this->load->view(
|
||||
</div>
|
||||
<br>
|
||||
|
||||
<h4>Ansicht</h4>
|
||||
<div class="panel panel-body">
|
||||
<b>Spaltenbreite verändern</b>
|
||||
<p>
|
||||
Um die Spaltenbreite zu verändern, fährt man im Spaltenkopf langsam mit dem Mauszeiger auf
|
||||
den rechten Rand der entprechenden Spalte. <br>
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
<br>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -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}},
|
||||
|
||||
@@ -0,0 +1,105 @@
|
||||
<?php
|
||||
|
||||
$STUDIENSEMESTER = $studiensemester_selected;
|
||||
$UID = getAuthUID();
|
||||
|
||||
$query = '
|
||||
SELECT
|
||||
vertrag_id,
|
||||
vertragsstunden_studiensemester_kurzbz,
|
||||
vertragstyp_kurzbz,
|
||||
bezeichnung,
|
||||
vertragsstunden,
|
||||
betrag,
|
||||
datum AS "storniert",
|
||||
(
|
||||
SELECT
|
||||
vorname || \' \' || nachname
|
||||
FROM
|
||||
public.tbl_person
|
||||
JOIN public.tbl_benutzer benutzer USING (person_id)
|
||||
WHERE benutzer.uid = (
|
||||
SELECT
|
||||
insertvon
|
||||
FROM
|
||||
lehre.tbl_vertrag_vertragsstatus
|
||||
WHERE vertragsstatus_kurzbz = \'storno\'
|
||||
AND vertrag_id = vvs.vertrag_id
|
||||
)
|
||||
) AS "storniert_von",
|
||||
(
|
||||
SELECT
|
||||
vertragsstatus_kurzbz
|
||||
FROM
|
||||
lehre.tbl_vertrag_vertragsstatus
|
||||
WHERE vertrag_id = vvs.vertrag_id
|
||||
AND vertragsstatus_kurzbz != \'storno\'
|
||||
ORDER BY datum DESC
|
||||
LIMIT 1
|
||||
) AS "letzterStatus_vorStorniert"
|
||||
FROM lehre.tbl_vertrag_vertragsstatus vvs
|
||||
JOIN lehre.tbl_vertrag USING (vertrag_id)
|
||||
WHERE
|
||||
/* filter lector */
|
||||
uid = \'' . $UID . '\'
|
||||
/* filter studiensemester */
|
||||
AND vertragsstunden_studiensemester_kurzbz = \'' . $STUDIENSEMESTER . '\'
|
||||
/* filter cancelled only */
|
||||
AND vertragsstatus_kurzbz = \'storno\'
|
||||
';
|
||||
|
||||
$tableWidgetArray = array(
|
||||
'query' => $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);
|
||||
|
||||
?>
|
||||
@@ -135,6 +135,18 @@ $this->load->view(
|
||||
</div>
|
||||
<br>
|
||||
|
||||
<h4>Ansicht</h4>
|
||||
<div class="panel panel-body">
|
||||
<b>Spaltenbreite verändern</b>
|
||||
<p>
|
||||
Um die Spaltenbreite zu verändern, fährt man im Spaltenkopf langsam mit dem Mauszeiger auf
|
||||
den rechten Rand der entprechenden Spalte. <br>
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
<br>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -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}},
|
||||
|
||||
@@ -17,7 +17,7 @@ const COLOR_LIGHTGREY = "#f5f5f5";
|
||||
const ICON_LEHRAUFTRAG_ORDERED = '<img src="../../../public/images/icons/fa-user-tag.png" style="height: 30px; width: 30px; margin: -6px;">';
|
||||
const ICON_LEHRAUFTRAG_APPROVED = '<img src="../../../public/images/icons/fa-user-check.png" style="height: 30px; width: 30px; margin: -6px;">';
|
||||
const ICON_LEHRAUFTRAG_CHANGED = '<img src="../../../public/images/icons/fa-user-edit.png" style="height: 30px; width: 30px; margin: -6px;">';
|
||||
|
||||
const ICON_LEHRAUFTRAG_CANCELLED = '<img src="../../../public/images/icons/fa-user-times.png" style="height: 30px; width: 30px; margin: -6px;">';
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
// Mutators - setter methods to manipulate table data when entering the tabulator
|
||||
@@ -26,11 +26,11 @@ const ICON_LEHRAUFTRAG_CHANGED = '<img src="../../../public/images/icons/fa-user
|
||||
// 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();
|
||||
}
|
||||
if (value != null)
|
||||
{
|
||||
var d = new Date(value);
|
||||
return ("0" + (d.getDate())).slice(-2) + "." + ("0"+(d.getMonth()+1)).slice(-2) + "." + d.getFullYear();
|
||||
}
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
@@ -39,16 +39,16 @@ var mut_formatStringDate = function(value, data, type, params, component) {
|
||||
|
||||
// Formats null values to a string number '0.00'
|
||||
var form_formatNulltoStringNumber = function(cell, formatterParams){
|
||||
if (cell.getValue() == null){
|
||||
if (formatterParams.precision == 1)
|
||||
{
|
||||
return '0.0';
|
||||
}
|
||||
return '0.00';
|
||||
}
|
||||
else {
|
||||
return cell.getValue();
|
||||
}
|
||||
if (cell.getValue() == null){
|
||||
if (formatterParams.precision == 1)
|
||||
{
|
||||
return '0.0';
|
||||
}
|
||||
return '0.00';
|
||||
}
|
||||
else {
|
||||
return cell.getValue();
|
||||
}
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
@@ -58,191 +58,200 @@ var form_formatNulltoStringNumber = function(cell, formatterParams){
|
||||
// Filters values using comparison operator or just by string comparison
|
||||
function hf_filterStringnumberWithOperator(headerValue, rowValue, rowData){
|
||||
|
||||
// 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];
|
||||
// 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 "<h4>Keine Daten vorhanden.</h4>";
|
||||
}
|
||||
|
||||
// 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: "<i class='fa fa-user-o'></i>",
|
||||
field: "status",
|
||||
width:40,
|
||||
align:"center",
|
||||
downloadTitle: 'Status',
|
||||
formatter: status_formatter,
|
||||
tooltip: status_tooltip
|
||||
}, true
|
||||
);
|
||||
// Add status column to table
|
||||
table.addColumn(
|
||||
{
|
||||
title: "<i class='fa fa-user-o'></i>",
|
||||
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<br>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<br>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 = '<div class="row">';
|
||||
footer_html += '<div class="col-lg-12" style="padding: 5px;">';
|
||||
var footer_html = '<div class="row">';
|
||||
footer_html += '<div class="col-lg-12" style="padding: 5px;">';
|
||||
|
||||
footer_html += '<div class="btn-toolbar pull-right" role="toolbar">';
|
||||
footer_html += '<div class="btn-group" role="group">';
|
||||
footer_html += '<button id="download-csv" class="btn btn-default" type="button" data-toggle="tooltip" data-placement="left" title="Download CSV" onclick="footer_downloadCSV()"><small>CSV </small><i class="fa fa-arrow-down"></i></button>';
|
||||
footer_html += '</div>';
|
||||
footer_html += '</div>';
|
||||
footer_html += '<div class="btn-toolbar pull-right" role="toolbar">';
|
||||
footer_html += '<div class="btn-group" role="group">';
|
||||
footer_html += '<button id="download-csv" class="btn btn-default" type="button" data-toggle="tooltip" data-placement="left" title="Download CSV" onclick="footer_downloadCSV()"><small>CSV </small><i class="fa fa-arrow-down"></i></button>';
|
||||
footer_html += '</div>';
|
||||
footer_html += '</div>';
|
||||
|
||||
footer_html += '<div class="btn-toolbar" role="toolbar">';
|
||||
footer_html += '<div class="btn-group" role="group">';
|
||||
footer_html += '<button id="select-all" class="btn btn-default pull-left" type="button" onclick="footer_selectAll()">Alle auswählen</button>';
|
||||
footer_html += '<button id="deselect-all" class="btn btn-default pull-left" type="button" onclick="footer_deselectAll()">Alle abwählen</button>';
|
||||
footer_html += '<span id="number-selected" style="margin-left: 20px; line-height: 2; font-weight: normal"></span>';
|
||||
footer_html += '</div>';
|
||||
footer_html += '</div>';
|
||||
footer_html += '<div class="btn-toolbar" role="toolbar">';
|
||||
footer_html += '<div class="btn-group" role="group">';
|
||||
footer_html += '<button id="select-all" class="btn btn-default pull-left" type="button" onclick="footer_selectAll()">Alle auswählen</button>';
|
||||
footer_html += '<button id="deselect-all" class="btn btn-default pull-left" type="button" onclick="footer_deselectAll()">Alle abwählen</button>';
|
||||
footer_html += '<span id="number-selected" style="margin-left: 20px; line-height: 2; font-weight: normal"></span>';
|
||||
footer_html += '</div>';
|
||||
footer_html += '</div>';
|
||||
|
||||
footer_html += '</div>';
|
||||
footer_html += '</div>';
|
||||
footer_html += '</div>';
|
||||
footer_html += '</div>';
|
||||
|
||||
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: <strong>" + rows.length + "</strong>");
|
||||
$('#number-selected').html("Für Annehmen ausgewählt: <strong>" + rows.length + "</strong>");
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
@@ -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 "<i class='fas fa-user-minus'></i>"; // kein Vertrag
|
||||
}
|
||||
else if (bestellt != null && (betrag != vertrag_betrag) ||
|
||||
bestellt != null && stunden != vertrag_stunden)
|
||||
{
|
||||
return ICON_LEHRAUFTRAG_CHANGED; // geaendert
|
||||
// return "<i class='fas fa-user-edit'></i>";
|
||||
}
|
||||
else if (bestellt == null && erteilt == null && akzeptiert == null)
|
||||
{
|
||||
return "<i class='fa fa-user-plus'></i>"; // neu
|
||||
}
|
||||
else if (bestellt != null && erteilt == null && akzeptiert == null)
|
||||
{
|
||||
return ICON_LEHRAUFTRAG_ORDERED; // bestellt
|
||||
// return "<i class='fa fa-user-tag'></i>";
|
||||
}
|
||||
else if (bestellt != null && erteilt != null && akzeptiert == null)
|
||||
{
|
||||
return ICON_LEHRAUFTRAG_APPROVED; // erteilt
|
||||
// return "<i class='fas fa-user-check'></i>";
|
||||
}
|
||||
else if (bestellt != null && erteilt != null && akzeptiert != null)
|
||||
{
|
||||
return "<i class='fa fa-handshake-o'></i>"; // akzeptiert
|
||||
// return "<i class='fas fa-user-graduate'></i>";
|
||||
}
|
||||
else
|
||||
{
|
||||
return "<i class='fa fa-user'></i>"; // default
|
||||
}
|
||||
// commented icons would be so nice to have with fontawsome 5.11...
|
||||
if (bestellt != null && isNaN(vertrag_betrag))
|
||||
{
|
||||
return "<i class='fas fa-user-minus'></i>"; // kein Vertrag
|
||||
}
|
||||
else if (bestellt != null && (betrag != vertrag_betrag) ||
|
||||
bestellt != null && stunden != vertrag_stunden)
|
||||
{
|
||||
return ICON_LEHRAUFTRAG_CHANGED; // geaendert
|
||||
// return "<i class='fas fa-user-edit'></i>";
|
||||
}
|
||||
else if (bestellt == null && erteilt == null && akzeptiert == null && !is_storniert)
|
||||
{
|
||||
return "<i class='fa fa-user-plus'></i>"; // neu
|
||||
}
|
||||
else if (bestellt != null && erteilt == null && akzeptiert == null)
|
||||
{
|
||||
return ICON_LEHRAUFTRAG_ORDERED; // bestellt
|
||||
// return "<i class='fa fa-user-tag'></i>";
|
||||
}
|
||||
else if (bestellt != null && erteilt != null && akzeptiert == null)
|
||||
{
|
||||
return ICON_LEHRAUFTRAG_APPROVED; // erteilt
|
||||
// return "<i class='fas fa-user-check'></i>";
|
||||
}
|
||||
else if (bestellt != null && erteilt != null && akzeptiert != null)
|
||||
{
|
||||
return "<i class='fa fa-handshake-o'></i>"; // akzeptiert
|
||||
// return "<i class='fas fa-user-graduate'></i>";
|
||||
}
|
||||
else if (is_storniert)
|
||||
{
|
||||
return ICON_LEHRAUFTRAG_CANCELLED; // storniert
|
||||
}
|
||||
else
|
||||
{
|
||||
return "<i class='fa fa-user'></i>"; // 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<br>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<br>Bitte kontaktieren Sie Ihren Administrator.");
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
// Empty password field
|
||||
$("#password").val('');
|
||||
// Empty password field
|
||||
$("#password").val('');
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
@@ -94,6 +94,13 @@ function func_initialFilter(){
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
// Tabulator table format functions
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
|
||||
// Displays text when table is empty
|
||||
function func_placeholder()
|
||||
{
|
||||
return "<h4>Keine Daten vorhanden.</h4>";
|
||||
}
|
||||
|
||||
// Formats the group header
|
||||
function func_groupHeader(data){
|
||||
return data[0].lv_bezeichnung + " " + ' ( LV-ID: ' + data[0].lehrveranstaltung_id + ' )'; // change name to lehrveranstaltung;
|
||||
|
||||
@@ -99,6 +99,13 @@ function func_dataLoaded(data, table){
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
// Tabulator table format functions
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
|
||||
// Displays text when table is empty
|
||||
function func_placeholder()
|
||||
{
|
||||
return "<h4>Keine Daten vorhanden.</h4>";
|
||||
}
|
||||
|
||||
// Formats the group header
|
||||
function func_groupHeader(data) {
|
||||
return data[0].lv_bezeichnung + " " + ' ( LV-ID: ' + data[0].lehrveranstaltung_id + ' )'; // change name to lehrveranstaltung;
|
||||
|
||||
@@ -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'
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user