Files
FHC-Core/application/views/lehre/lehrauftrag/approveLehrauftragData.php
T
2021-05-19 09:03:20 +02:00

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);
?>