mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-06-01 12:19:28 +00:00
421 lines
20 KiB
PHP
421 lines
20 KiB
PHP
<?php
|
|
|
|
$STUDIENSEMESTER = $studiensemester_selected;
|
|
$ORGANISATIONSEINHEIT = (isset($organisationseinheit_selected) && !is_null($organisationseinheit_selected)) ? array($organisationseinheit_selected) : $organisationseinheit;
|
|
$AUSBILDUNGSSEMESTER = (isset($ausbildungssemester_selected) && !is_null($ausbildungssemester_selected)) ? $ausbildungssemester_selected : '1,2,3,4,5,6,7,8';
|
|
|
|
$query = '
|
|
SELECT
|
|
/* provide extra row index for tabulator, because no other column has unique ids */
|
|
ROW_NUMBER() OVER () AS "row_index",
|
|
personalnummer,
|
|
auftrag,
|
|
stg_typ_kurzbz,
|
|
gruppe,
|
|
typ,
|
|
lehreinheit_id,
|
|
lehrveranstaltung_id,
|
|
lv_bezeichnung,
|
|
projektarbeit_id,
|
|
studiensemester_kurzbz,
|
|
studiengang_kz,
|
|
semester,
|
|
orgform_kurzbz,
|
|
person_id,
|
|
lv_oe_kurzbz,
|
|
lektor,
|
|
stunden,
|
|
betrag,
|
|
vertrag_id,
|
|
vertrag_stunden,
|
|
vertrag_betrag,
|
|
mitarbeiter_uid,
|
|
bestellt,
|
|
erteilt,
|
|
akzeptiert,
|
|
(SELECT
|
|
nachname || \' \' || vorname
|
|
FROM
|
|
public.tbl_person
|
|
JOIN public.tbl_benutzer benutzer USING (person_id)
|
|
WHERE
|
|
benutzer.uid = (
|
|
SELECT
|
|
insertvon
|
|
FROM
|
|
lehre.tbl_vertrag_vertragsstatus vvs
|
|
WHERE
|
|
vvs.vertragsstatus_kurzbz = \'bestellt\'
|
|
AND vvs.vertrag_id = auftraege.vertrag_id
|
|
)
|
|
) AS "bestellt_von",
|
|
(SELECT
|
|
nachname || \' \' || vorname
|
|
FROM
|
|
public.tbl_person
|
|
JOIN public.tbl_benutzer benutzer USING (person_id)
|
|
WHERE
|
|
benutzer.uid = (
|
|
SELECT
|
|
insertvon
|
|
FROM
|
|
lehre.tbl_vertrag_vertragsstatus vvs
|
|
WHERE
|
|
vvs.vertragsstatus_kurzbz = \'erteilt\'
|
|
AND vvs.vertrag_id = auftraege.vertrag_id
|
|
)
|
|
) AS "erteilt_von",
|
|
(SELECT
|
|
nachname || \' \' || vorname
|
|
FROM
|
|
public.tbl_person
|
|
JOIN public.tbl_benutzer benutzer USING (person_id)
|
|
WHERE
|
|
benutzer.uid = (
|
|
SELECT
|
|
insertvon
|
|
FROM
|
|
lehre.tbl_vertrag_vertragsstatus vvs
|
|
WHERE
|
|
vvs.vertragsstatus_kurzbz = \'akzeptiert\'
|
|
AND vvs.vertrag_id = auftraege.vertrag_id
|
|
)
|
|
) AS "akzeptiert_von"
|
|
FROM
|
|
(
|
|
/* Lehraufträge and -vertragsstati */
|
|
SELECT *,
|
|
/* concatinated and aggregated gruppen */
|
|
(SELECT
|
|
string_agg(
|
|
CASE WHEN gruppe_kurzbz is null THEN
|
|
concat(upper(grpstg.typ || grpstg.kurzbz), \'-\', semester, verband, gruppe)
|
|
ELSE
|
|
gruppe_kurzbz
|
|
END
|
|
, \', \')
|
|
FROM
|
|
lehre.tbl_lehreinheitgruppe
|
|
JOIN public.tbl_studiengang grpstg USING(studiengang_kz)
|
|
WHERE
|
|
lehreinheit_id = tmp_lehrauftraege.lehreinheit_id
|
|
) AS "gruppe",
|
|
/* existing contracts with status bestellt */
|
|
(SELECT
|
|
datum
|
|
FROM
|
|
lehre.tbl_vertrag_vertragsstatus
|
|
WHERE
|
|
tbl_vertrag_vertragsstatus.vertragsstatus_kurzbz = \'bestellt\'
|
|
AND vertrag_id = tmp_lehrauftraege.vertrag_id) AS "bestellt",
|
|
/* existing contracts with status erteilt */
|
|
(SELECT
|
|
datum
|
|
FROM
|
|
lehre.tbl_vertrag_vertragsstatus
|
|
WHERE
|
|
tbl_vertrag_vertragsstatus.vertragsstatus_kurzbz = \'erteilt\'
|
|
AND vertrag_id = tmp_lehrauftraege.vertrag_id) AS "erteilt",
|
|
/* existing contracts with status akzeptiert */
|
|
(SELECT
|
|
datum
|
|
FROM
|
|
lehre.tbl_vertrag_vertragsstatus
|
|
WHERE
|
|
tbl_vertrag_vertragsstatus.vertragsstatus_kurzbz = \'akzeptiert\'
|
|
AND vertrag_id = tmp_lehrauftraege.vertrag_id) AS "akzeptiert"
|
|
FROM
|
|
(
|
|
SELECT
|
|
/* lehrauftraege also planned with dummies, therefore personalnummer is needed */
|
|
(ma.personalnummer::text),
|
|
lema.lehreinheit_id,
|
|
lv.lehrveranstaltung_id,
|
|
lv.bezeichnung AS "lv_bezeichnung",
|
|
NULL AS "projektarbeit_id",
|
|
le.studiensemester_kurzbz,
|
|
stg.studiengang_kz,
|
|
upper(stg.typ || stg.kurzbz) AS "stg_typ_kurzbz",
|
|
lv.orgform_kurzbz,
|
|
person.person_id,
|
|
upper(lv.lehrtyp_kurzbz) AS "typ",
|
|
(lv.bezeichnung || \' [\' || le.lehrform_kurzbz ||
|
|
\']\') AS "auftrag",
|
|
lv.semester,
|
|
CASE
|
|
WHEN oe.organisationseinheittyp_kurzbz = \'Kompetenzfeld\' THEN (\'KF \' || oe.bezeichnung)
|
|
WHEN oe.organisationseinheittyp_kurzbz = \'Department\' THEN (\'DEP \' || oe.bezeichnung)
|
|
ELSE (oe.organisationseinheittyp_kurzbz || \' \' || oe.bezeichnung)
|
|
END AS "lv_oe_kurzbz",
|
|
(person.nachname || \' \' || person.vorname) AS "lektor",
|
|
TRUNC(lema.semesterstunden, 1) AS "stunden",
|
|
TRUNC((lema.semesterstunden * lema.stundensatz), 2) AS "betrag",
|
|
vertrag_id,
|
|
vertragsstunden AS "vertrag_stunden",
|
|
vertrag.betrag AS "vertrag_betrag",
|
|
mitarbeiter_uid
|
|
FROM
|
|
lehre.tbl_lehreinheitmitarbeiter lema
|
|
JOIN lehre.tbl_lehreinheit le USING (lehreinheit_id)
|
|
JOIN lehre.tbl_lehrveranstaltung lv USING (lehrveranstaltung_id)
|
|
JOIN PUBLIC.tbl_organisationseinheit oe USING (oe_kurzbz)
|
|
JOIN PUBLIC.tbl_mitarbeiter ma USING (mitarbeiter_uid)
|
|
JOIN PUBLIC.tbl_benutzer benutzer
|
|
ON ma.mitarbeiter_uid = benutzer.uid
|
|
JOIN PUBLIC.tbl_person person USING (person_id)
|
|
LEFT JOIN lehre.tbl_vertrag vertrag USING (vertrag_id)
|
|
JOIN PUBLIC.tbl_studiengang stg ON stg.studiengang_kz = lv.studiengang_kz
|
|
WHERE
|
|
/* filter organisationseinheit */
|
|
lv.oe_kurzbz IN (\'' . implode('\',\'', $ORGANISATIONSEINHEIT) . '\')
|
|
/* filter studiensemester */
|
|
AND le.studiensemester_kurzbz = \'' . $STUDIENSEMESTER . '\'
|
|
/* filter active lehrveranstaltungen */
|
|
AND lv.aktiv = TRUE
|
|
/* filter active organisationseinheiten */
|
|
AND oe.aktiv = TRUE
|
|
/* filter ausbildungssemester */
|
|
AND lv.semester IN ('. $AUSBILDUNGSSEMESTER . ')
|
|
) tmp_lehrauftraege
|
|
|
|
UNION
|
|
|
|
/* Projektbetreuungsaufträge and -vertragsstati */
|
|
SELECT *,
|
|
/* mitarbeiter uid retrieved by person_id */
|
|
/* NOTE: mitarbeiter MUST come after Select * to ensure correct order with select for tmp_lehrauftraege*/
|
|
(SELECT
|
|
uid
|
|
FROM
|
|
public.tbl_benutzer JOIN public.tbl_mitarbeiter ma
|
|
ON tbl_benutzer.uid = ma.mitarbeiter_uid
|
|
WHERE
|
|
person_id = tmp_projektbetreuung.person_id
|
|
ORDER BY aktiv DESC, updateaktivam DESC -- accept inactive as some person_ids have no active, but order them last
|
|
LIMIT 1) AS "mitarbeiter_uid",
|
|
/* concatinated and aggregated gruppen */
|
|
(SELECT
|
|
string_agg(
|
|
CASE WHEN gruppe_kurzbz is null THEN
|
|
concat(upper(grpstg.typ || grpstg.kurzbz), \'-\', semester, verband, gruppe)
|
|
ELSE
|
|
gruppe_kurzbz
|
|
END
|
|
, \', \')
|
|
FROM
|
|
lehre.tbl_lehreinheitgruppe
|
|
JOIN public.tbl_studiengang grpstg USING(studiengang_kz)
|
|
WHERE
|
|
lehreinheit_id = tmp_projektbetreuung.lehreinheit_id
|
|
) AS "gruppe",
|
|
/* existing contracts with status bestellt */
|
|
(SELECT
|
|
datum
|
|
FROM
|
|
lehre.tbl_vertrag_vertragsstatus
|
|
WHERE
|
|
tbl_vertrag_vertragsstatus.vertragsstatus_kurzbz = \'bestellt\'
|
|
AND vertrag_id = tmp_projektbetreuung.vertrag_id) AS "bestellt",
|
|
/* existing contracts with status erteilt */
|
|
(SELECT
|
|
datum
|
|
FROM
|
|
lehre.tbl_vertrag_vertragsstatus
|
|
WHERE
|
|
tbl_vertrag_vertragsstatus.vertragsstatus_kurzbz = \'erteilt\'
|
|
AND vertrag_id = tmp_projektbetreuung.vertrag_id) AS "erteilt",
|
|
/* existing contracts with status akzeptiert */
|
|
(SELECT
|
|
datum
|
|
FROM
|
|
lehre.tbl_vertrag_vertragsstatus
|
|
WHERE
|
|
tbl_vertrag_vertragsstatus.vertragsstatus_kurzbz = \'akzeptiert\'
|
|
AND vertrag_id = tmp_projektbetreuung.vertrag_id) AS "akzeptiert"
|
|
FROM
|
|
(
|
|
SELECT
|
|
/* projektbetreuung does not plan with dummies, therefore no need to retrieve personalnummer */
|
|
NULL AS personalnummer,
|
|
pa.lehreinheit_id,
|
|
lv.lehrveranstaltung_id,
|
|
lv.bezeichnung AS "lv_bezeichnung",
|
|
(pa.projektarbeit_id::text) AS "projektarbeit_id",
|
|
le.studiensemester_kurzbz,
|
|
stg.studiengang_kz,
|
|
upper(stg.typ || stg.kurzbz) AS "stg_typ_kurzbz",
|
|
lv.orgform_kurzbz,
|
|
person.person_id,
|
|
\'Betreuung\' AS "typ",
|
|
(betreuerart_kurzbz || \' \' ||
|
|
(SELECT
|
|
nachname || \' \' || vorname
|
|
FROM
|
|
PUBLIC.tbl_person
|
|
JOIN PUBLIC.tbl_benutzer USING (person_id)
|
|
WHERE
|
|
uid = pa.student_uid
|
|
)
|
|
|| \' [\' || projekttyp_kurzbz || \'arbeit]\') AS "auftrag",
|
|
lv.semester,
|
|
CASE
|
|
WHEN oe.organisationseinheittyp_kurzbz =
|
|
\'Kompetenzfeld\' THEN (
|
|
\'KF \' || oe.bezeichnung)
|
|
WHEN oe.organisationseinheittyp_kurzbz =
|
|
\'Department\' THEN (
|
|
\'DEP \' || oe.bezeichnung)
|
|
ELSE (oe.organisationseinheittyp_kurzbz ||
|
|
\' \' || oe.bezeichnung)
|
|
END AS "lv_oe_kurzbz",
|
|
(vorname || \' \' || nachname) AS "lektor",
|
|
TRUNC(pb.stunden, 1) AS "stunden",
|
|
TRUNC((pb.stunden * pb.stundensatz), 2) AS "betrag",
|
|
vertrag_id,
|
|
vertragsstunden AS "vertrag_stunden",
|
|
vertrag.betrag AS "vertrag_betrag"
|
|
FROM
|
|
lehre.tbl_projektbetreuer pb
|
|
JOIN lehre.tbl_projektarbeit pa USING (projektarbeit_id)
|
|
JOIN lehre.tbl_lehreinheit le USING (lehreinheit_id)
|
|
JOIN lehre.tbl_lehrveranstaltung lv USING (lehrveranstaltung_id)
|
|
JOIN PUBLIC.tbl_organisationseinheit oe USING (oe_kurzbz)
|
|
JOIN PUBLIC.tbl_person person USING (person_id)
|
|
LEFT JOIN lehre.tbl_vertrag vertrag USING (vertrag_id)
|
|
JOIN PUBLIC.tbl_studiengang stg
|
|
ON stg.studiengang_kz = lv.studiengang_kz
|
|
WHERE
|
|
/* filter organisationseinheit */
|
|
lv.oe_kurzbz IN (\'' . implode('\',\'', $ORGANISATIONSEINHEIT) . '\')
|
|
/* filter studiensemester */
|
|
AND le.studiensemester_kurzbz = \'' . $STUDIENSEMESTER . '\'
|
|
/* filter active lehrveranstaltungen */
|
|
AND lv.aktiv = TRUE
|
|
/* filter active organisationseinheiten */
|
|
AND oe.aktiv = TRUE
|
|
/* filter ausbildungssemester */
|
|
AND lv.semester IN ('. $AUSBILDUNGSSEMESTER . ')
|
|
) tmp_projektbetreuung
|
|
) auftraege
|
|
ORDER BY "typ" DESC, "auftrag", "personalnummer" DESC, "lektor", "bestellt", "erteilt"
|
|
';
|
|
|
|
$filterWidgetArray = array(
|
|
'query' => $query,
|
|
'tableUniqueId' => 'approveLehrauftrag',
|
|
'requiredPermissions' => 'lehre/lehrauftrag_erteilen',
|
|
'datasetRepresentation' => 'tabulator',
|
|
'columnsAliases' => array(
|
|
'Status', // alias for row_index, because row_index is formatted to display the status icons
|
|
ucfirst($this->p->t('global', 'personalnummer')),
|
|
ucfirst($this->p->t('lehre', 'lehrveranstaltung')). '- / '.
|
|
ucfirst($this->p->t('ui', 'projekt')). lcfirst($this->p->t('ui', 'bezeichnung')),
|
|
ucfirst($this->p->t('lehre', 'studiengang')),
|
|
ucfirst($this->p->t('lehre', 'gruppe')),
|
|
ucfirst($this->p->t('global', 'typ')),
|
|
ucfirst($this->p->t('lehre', 'lehreinheit')),
|
|
ucfirst($this->p->t('lehre', 'lehrveranstaltung')). '-ID',
|
|
ucfirst($this->p->t('lehre', 'lehrveranstaltung')),
|
|
ucfirst($this->p->t('ui', 'projektarbeit')). '-ID',
|
|
ucfirst($this->p->t('lehre', 'studiensemester')),
|
|
ucfirst($this->p->t('lehre', 'studiengang')). '-'. ucfirst($this->p->t('ui', 'kz')),
|
|
'Semester',
|
|
ucfirst($this->p->t('lehre', 'organisationsform')),
|
|
'Person-ID',
|
|
ucfirst($this->p->t('lehre', 'organisationseinheit')),
|
|
ucfirst($this->p->t('lehre', 'lektor')),
|
|
ucfirst($this->p->t('ui', 'stunden')),
|
|
ucfirst($this->p->t('ui', 'betrag')),
|
|
ucfirst($this->p->t('ui', 'vertrag')). '-ID',
|
|
ucfirst($this->p->t('ui', 'vertrag')). '-'. ucfirst($this->p->t('ui', 'stunden')),
|
|
ucfirst($this->p->t('ui', 'vertrag')). '-'. ucfirst($this->p->t('ui', 'betrag')),
|
|
'UID',
|
|
ucfirst($this->p->t('ui', 'bestellt')),
|
|
ucfirst($this->p->t('ui', 'erteilt')),
|
|
ucfirst($this->p->t('ui', 'angenommen')),
|
|
ucfirst($this->p->t('ui', 'bestelltVon')),
|
|
ucfirst($this->p->t('ui', 'erteiltVon')),
|
|
ucfirst($this->p->t('ui', 'angenommenVon'))
|
|
),
|
|
'datasetRepOptions' => '{
|
|
height: func_height(this),
|
|
layout: "fitColumns", // fit columns to width of table
|
|
layoutColumnsOnNewData: true, // ajust column widths to the data each time TableWidget is loaded
|
|
autoResize: false, // prevent auto resizing of table (false to allow adapting table size when cols are (de-)activated
|
|
headerFilterPlaceholder: " ",
|
|
groupBy:"lehrveranstaltung_id",
|
|
groupToggleElement:"header", //toggle group on click anywhere in the group header
|
|
groupHeader: function(value, count, data, group){
|
|
return func_groupHeader(data);
|
|
},
|
|
columnCalcs:"both", // show column calculations at top and bottom of table and in groups
|
|
index: "row_index", // assign specific column as unique id (important for row indexing)
|
|
selectable: true, // allow row selection
|
|
selectableRangeMode: "click", // allow range selection using shift end click on end of range
|
|
selectablePersistence:false, // deselect previously selected rows when table is filtered, sorted or paginated
|
|
selectableCheck: function(row){
|
|
return func_selectableCheck(row);
|
|
},
|
|
initialFilter: func_initialFilter(),
|
|
rowUpdated:function(row){
|
|
func_rowUpdated(row);
|
|
},
|
|
rowFormatter:function(row)
|
|
{
|
|
func_rowFormatter(row);
|
|
},
|
|
renderStarted:function(){
|
|
func_renderStarted(this);
|
|
},
|
|
tableBuilt: function(){
|
|
func_tableBuilt(this);
|
|
},
|
|
tableWidgetFooter: {
|
|
selectButtons: true
|
|
}
|
|
}', // tabulator properties
|
|
'datasetRepFieldsDefs' => '{
|
|
// column status is built dynamically in funcTableBuilt(),
|
|
row_index: {visible:false}, // necessary for row indexing
|
|
personalnummer: {visible: false, headerFilter:"input"},
|
|
auftrag: {
|
|
headerFilter:"input", widthGrow: 2,
|
|
bottomCalc:"count", bottomCalcFormatter:function(cell){return "'. ucfirst($this->p->t('global', 'anzahl')). ': " + cell.getValue();}
|
|
},
|
|
stg_typ_kurzbz: {headerFilter:"input"},
|
|
gruppe: {headerFilter:"input"},
|
|
typ: {headerFilter:"input"},
|
|
lehreinheit_id: {visible: false, headerFilter:"input"},
|
|
lehrveranstaltung_id: {visible: false, headerFilter:"input"},
|
|
lv_bezeichnung: {visible: false, headerFilter:"input"},
|
|
projektarbeit_id: {visible: false, headerFilter:"input"},
|
|
studiensemester_kurzbz: {visible: false, headerFilter:"input"},
|
|
studiengang_kz: {visible: false, headerFilter:"input"},
|
|
semester: {headerFilter:"input"},
|
|
orgform_kurzbz: {visible: false, headerFilter:"input"},
|
|
person_id: {visible: false, headerFilter:"input"},
|
|
lv_oe_kurzbz: {visible: false, headerFilter:"input"},
|
|
lektor: {headerFilter:"input", widthGrow: 2},
|
|
stunden: {align:"right", formatter: form_formatNulltoStringNumber, formatterParams:{precision:1},
|
|
headerFilter:"input", headerFilterFunc: hf_filterStringnumberWithOperator,
|
|
bottomCalc:"sum", bottomCalcParams:{precision:1}},
|
|
betrag: {align:"right", formatter: form_formatNulltoStringNumber,
|
|
headerFilter:"input", headerFilterFunc: hf_filterStringnumberWithOperator,
|
|
bottomCalc:"sum", bottomCalcParams:{precision:2}, bottomCalcFormatter:"money", bottomCalcFormatterParams:{decimal: ",", thousand: ".", symbol:"€"}},
|
|
vertrag_id: {visible: false},
|
|
vertrag_stunden: {visible: false},
|
|
vertrag_betrag: {visible: false},
|
|
mitarbeiter_uid: {visible: false, headerFilter:"input"},
|
|
bestellt: {align:"center", headerFilter:"input", mutator: mut_formatStringDate, tooltip: bestellt_tooltip},
|
|
erteilt: {align:"center", headerFilter:"input", mutator: mut_formatStringDate, tooltip: erteilt_tooltip},
|
|
akzeptiert: {align:"center", headerFilter:"input", mutator: mut_formatStringDate, tooltip: akzeptiert_tooltip},
|
|
bestellt_von: {visible: false, headerFilter:"input"},
|
|
erteilt_von: {visible: false, headerFilter:"input"},
|
|
akzeptiert_von: {visible: false, headerFilter:"input"},
|
|
}', // col properties
|
|
);
|
|
|
|
echo $this->widgetlib->widget('TableWidget', $filterWidgetArray);
|
|
|
|
?>
|