Corrected SQL: bestellt/erteilt/akzeptiert in same row; added mitarbeiter_uid

. Corrected SQL to get bestellt/erteilt/akzeptiert in same row
  Before it was creating new row for each stati, which was wrong.

. Added mitarbeiter_uid column.

. Changed column names for better maintainance and understanding.
  (e.g. row_index instead of id)
This commit is contained in:
Cris
2019-09-17 15:54:41 +02:00
committed by hainberg
parent c91cfcb679
commit ad5309e273
4 changed files with 229 additions and 188 deletions
@@ -25,7 +25,7 @@ class Lehrauftrag extends Auth_Controller
parent::__construct(
array(
'index' => 'lehre/lehrauftrag_bestellen:r',
'orderLehrauftrag' => 'lehre/lehrauftrag_bestellen:rw'
'orderLehrauftrag' => 'lehre/lehrauftrag_bestellen:rw',
)
);
@@ -107,22 +107,23 @@ class Lehrauftrag extends Auth_Controller
{
if (!isEmptyArray($lehrauftrag)) {
if ($this->VertragModel->save(
element('Person_ID', $lehrauftrag),
element('LV_ID', $lehrauftrag),
element('LE_ID', $lehrauftrag),
element('PA_ID', $lehrauftrag),
element('Stunden', $lehrauftrag),
element('Betrag', $lehrauftrag),
element('Studiensemester', $lehrauftrag)
element('person_id', $lehrauftrag),
element('mitarbeiter_uid', $lehrauftrag),
element('lehrveranstaltung_id', $lehrauftrag),
element('lehreinheit_id', $lehrauftrag),
element('projektarbeit_id', $lehrauftrag),
element('stunden', $lehrauftrag),
element('betrag', $lehrauftrag),
element('studiensemester_kurzbz', $lehrauftrag)
)->retval)
{
$result []= array(
'id' => $lehrauftrag['id'],
'Bestellt' => date('Y-m-d')
'row_index' => $lehrauftrag['row_index'],
'bestellt' => date('Y-m-d')
);
$new_lehrvertrag_data_arr[] = array(
'studiensemester_kurzbz' => $lehrauftrag['Studiensemester'],
'studiensemester_kurzbz' => $lehrauftrag['studiensemester_kurzbz'],
'studiengang_kz' => $lehrauftrag['studiengang_kz'],
'lv_oe_kurzbz' => $lehrauftrag['lv_oe_kurzbz']
);
@@ -132,7 +132,7 @@ $(function() {
//$('#filterTabulator').tabulator('selectRow', true);
$('#filterTabulator').tabulator('getRows')
.filter(row => row.getData().Bestellt == null)
.filter(row => row.getData().bestellt == null)
.forEach((row => row.select()));
});
@@ -143,12 +143,12 @@ $(function() {
// Show all rows
$("#show-all").click(function(){
$('#filterTabulator').tabulator('removeFilter', 'Bestellt', '=', null);
$('#filterTabulator').tabulator('removeFilter', 'bestellt', '=', null);
});
// Show only rows with new lehrauftraege
$("#show-new").click(function(){
$('#filterTabulator').tabulator('setFilter', 'Bestellt', '=', null);
$('#filterTabulator').tabulator('setFilter', 'bestellt', '=', null);
});
// Order Lehrauftraege
@@ -172,7 +172,7 @@ $(function() {
},
errorCallback: function (jqXHR, textStatus, errorThrown)
{
FHC_DialogLib.alertError("Sytemfehler<br>Bestellung wurde nicht durchgeführt.");
FHC_DialogLib.alertError("Sytemfehler<br>Bitte kontaktieren Sie Ihren Administrator.");
}
}
);
@@ -4,139 +4,182 @@ $STUDIENSEMESTER = $studiensemester_selected;
$STUDIENGANG = (isset($studiengang_selected) && !is_null($studiengang_selected)) ? array($studiengang_selected) : $studiengang;
$query = '
SELECT
ROW_NUMBER() OVER () AS "id",
*
SELECT
/* provide extra row index for tabulator, because no other column has unique ids */
ROW_NUMBER() OVER () AS "row_index", *
FROM
(
/* Lehraufträge and -vertragsstati */
SELECT *,
/* 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
(
/* Lehraufträge and -vertragsstati */
SELECT
lema.lehreinheit_id AS "LE_ID",
lv.lehrveranstaltung_id AS "LV_ID",
NULL AS "PA_ID",
le.studiensemester_kurzbz AS "Studiensemester",
stg.studiengang_kz,
person.person_id AS "Person_ID",
upper(lv.lehrtyp_kurzbz) AS "Typ",
(lv.bezeichnung || \' [\' || le.lehrform_kurzbz || \' \' || lv.semester || \'.Semester\' || \']\') AS "Auftrag",
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 "Organisationseinheit",
lv.oe_kurzbz AS "lv_oe_kurzbz",
CONCAT(stg.kurzbzlang, \'-\', legr.semester, legr.verband, legr.gruppe, \'\n\' || legr.gruppe_kurzbz) AS "Gruppe",
(person.vorname || \' \' || person.nachname) AS "Lektor",
TRUNC(lema.semesterstunden, 1) AS "Stunden",
TRUNC((lema.semesterstunden * lema.stundensatz), 2) AS "Betrag",
CASE
/* existing contracts for given study semester with status bestellt */
WHEN lema.vertrag_id NOTNULL AND vertrag.vertragsstunden_studiensemester_kurzbz = \''. $STUDIENSEMESTER. '\' AND
vvs.vertragsstatus_kurzbz = \'bestellt\' THEN vvs.datum
END AS "Bestellt",
CASE
/* existing contracts for given study semester with status erteilt */
WHEN lema.vertrag_id NOTNULL AND vertrag.vertragsstunden_studiensemester_kurzbz = \''. $STUDIENSEMESTER. '\' AND
vvs.vertragsstatus_kurzbz = \'erteilt\' THEN vvs.datum
END AS "Erteilt",
CASE
/* existing contracts for given study semester with status akzeptiert */
WHEN lema.vertrag_id NOTNULL AND vertrag.vertragsstunden_studiensemester_kurzbz = \''. $STUDIENSEMESTER. '\' AND
vvs.vertragsstatus_kurzbz = \'akzeptiert\' THEN vvs.datum
END AS "Akzeptiert"
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 lehre.tbl_lehreinheitgruppe legr USING (lehreinheit_id)
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)
LEFT JOIN lehre.tbl_vertrag_vertragsstatus vvs USING (vertrag_id)
LEFT JOIN lehre.tbl_vertragsstatus status USING (vertragsstatus_kurzbz)
JOIN public.tbl_studiengang stg ON stg.studiengang_kz = lv.studiengang_kz
WHERE
/* filter studiengang */
lv.studiengang_kz IN ('. implode(',', $STUDIENGANG) . ')
/* filter studiensemester */
AND le.studiensemester_kurzbz = \''. $STUDIENSEMESTER. '\'
/* filter active lehrveranstaltungen */
AND lv.aktiv = TRUE
/* filter dummies and invalid mitarbeiter */
AND ma.personalnummer >= 0
UNION
/* Projektbetreuungsaufträge and -vertragsstati */
SELECT
pa.lehreinheit_id AS "LE_ID",
lv.lehrveranstaltung_id AS "LV_ID",
pa.projektarbeit_id AS "PA_ID",
le.studiensemester_kurzbz AS "Studiensemester",
stg.studiengang_kz,
person.person_id AS "Person_ID",
\'Betreuung\' AS "Typ",
(betreuerart_kurzbz || \' \' ||
(SELECT
vorname || \' \' || nachname
FROM
public.tbl_person
JOIN public.tbl_benutzer USING (person_id)
WHERE
uid = pa.student_uid)
|| \' [\' || projekttyp_kurzbz || \'arbeit\' || \' \' || lv.semester || \'.Semester]\') AS "Auftrag",
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 "Organisationseinheit",
lv.oe_kurzbz AS "lv_oe_kurzbz",
CONCAT(stg.kurzbzlang, \'-\', legr.semester, legr.verband, legr.gruppe, \'\n\' || legr.gruppe_kurzbz) AS "Gruppe",
(vorname || \' \' || nachname) AS "Lektor",
TRUNC(pb.stunden, 1) AS "Stunden",
TRUNC((pb.stunden * pb.stundensatz), 2) AS "Betrag",
CASE
/* existing contracts for given study semester with status bestellt */
WHEN pb.vertrag_id NOTNULL AND vertrag.vertragsstunden_studiensemester_kurzbz = \''. $STUDIENSEMESTER. '\' AND
vvs.vertragsstatus_kurzbz = \'bestellt\' THEN vvs.datum
END AS "Bestellt",
CASE
/* existing contracts for given study semester with status erteilt */
WHEN pb.vertrag_id NOTNULL AND vertrag.vertragsstunden_studiensemester_kurzbz = \''. $STUDIENSEMESTER. '\' AND
vvs.vertragsstatus_kurzbz = \'erteilt\' THEN vvs.datum
END AS "Erteilt",
CASE
/* existing contracts for given study semester with status akzeptiert */
WHEN pb.vertrag_id NOTNULL AND vertrag.vertragsstunden_studiensemester_kurzbz = \''. $STUDIENSEMESTER. '\' AND
vvs.vertragsstatus_kurzbz = \'akzeptiert\' THEN vvs.datum
END AS "Akzeptiert"
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 lehre.tbl_lehreinheitgruppe legr USING (lehreinheit_id)
JOIN public.tbl_person person USING (person_id)
LEFT JOIN lehre.tbl_vertrag vertrag USING (vertrag_id)
LEFT JOIN lehre.tbl_vertrag_vertragsstatus vvs USING (vertrag_id)
LEFT JOIN lehre.tbl_vertragsstatus status USING (vertragsstatus_kurzbz)
JOIN public.tbl_studiengang stg ON stg.studiengang_kz = lv.studiengang_kz
WHERE
/* filter studiengang */
lv.studiengang_kz IN ('. implode(',', $STUDIENGANG) . ')
/* filter studiensemester */
AND le.studiensemester_kurzbz = \''. $STUDIENSEMESTER. '\'
/* filter active lehrveranstaltungen */
AND lv.aktiv = TRUE
ORDER BY "Typ" DESC, "Auftrag", "Lektor"
) auftraege
';
lema.lehreinheit_id,
lv.lehrveranstaltung_id,
NULL AS "projektarbeit_id",
le.studiensemester_kurzbz,
stg.studiengang_kz,
person.person_id,
upper(lv.lehrtyp_kurzbz) AS "typ",
(lv.bezeichnung || \' [\' || le.lehrform_kurzbz || \' \' || lv.semester || \'.Semester\' ||
\']\') AS "auftrag",
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",
CONCAT(stg.kurzbzlang, \'-\', legr.semester, legr.verband, legr.gruppe,
\'\n\' || legr.gruppe_kurzbz) AS "gruppe",
(person.vorname || \' \' || person.nachname) AS "lektor",
TRUNC(lema.semesterstunden, 1) AS "stunden",
TRUNC((lema.semesterstunden * lema.stundensatz), 2) AS "betrag",
vertrag_id,
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 lehre.tbl_lehreinheitgruppe legr USING (lehreinheit_id)
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 studiengang */
lv.studiengang_kz IN ('. implode(',', $STUDIENGANG) . ')
/* filter studiensemester */
AND le.studiensemester_kurzbz = \''. $STUDIENSEMESTER. '\'
/* filter active lehrveranstaltungen */
AND lv.aktiv = TRUE
/* filter active organisationseinheiten */
AND oe.aktiv = TRUE
/* filter dummies and invalid mitarbeiter */
AND ma.personalnummer >= 0
) tmp_lehrauftraege
UNION
/* Projektbetreuungsaufträge and -vertragsstati */
SELECT *,
(SELECT
uid
FROM
public.tbl_benutzer
WHERE
person_id = tmp_projektbetreuung.person_id
AND aktiv = TRUE) AS "mitarbeiter_uid",
/* 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
pa.lehreinheit_id,
lv.lehrveranstaltung_id,
pa.projektarbeit_id AS "projektarbeit_id",
le.studiensemester_kurzbz,
stg.studiengang_kz,
person.person_id,
\'Betreuung\' AS "typ",
(betreuerart_kurzbz || \' \' ||
(SELECT
vorname || \' \' || nachname
FROM
PUBLIC.tbl_person
JOIN PUBLIC.tbl_benutzer USING (person_id)
WHERE
uid = pa.student_uid
)
|| \' [\' || projekttyp_kurzbz || \'arbeit\' || \' \' || lv.semester || \'.Semester]\') AS "auftrag",
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",
CONCAT(stg.kurzbzlang,
\'-\', legr.semester, legr.verband, legr.gruppe,
\'\n\' || legr.gruppe_kurzbz) AS "gruppe",
(vorname || \' \' || nachname) AS "lektor",
TRUNC(pb.stunden, 1) AS "stunden",
TRUNC((pb.stunden * pb.stundensatz), 2) AS "betrag",
vertrag_id
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 lehre.tbl_lehreinheitgruppe legr USING (lehreinheit_id)
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 studiengang */
lv.studiengang_kz IN ('. implode(',', $STUDIENGANG) . ')
/* filter studiensemester */
AND le.studiensemester_kurzbz = \''. $STUDIENSEMESTER. '\'
/* filter active lehrveranstaltungen */
AND lv.aktiv = TRUE
/* filter active organisationseinheiten */
AND oe.aktiv = TRUE
) tmp_projektbetreuung
) auftraege
ORDER BY "typ" DESC, "auftrag", "lektor"
';
$filterWidgetArray = array(
'query' => $query,
@@ -150,7 +193,7 @@ $filterWidgetArray = array(
'hideOptions' => true,
'hideMenu' => true,
'columnsAliases' => array( // TODO: use phrasen
'id',
'row_index',
'LE-ID',
'LV-ID',
'PA-ID',
@@ -160,22 +203,16 @@ $filterWidgetArray = array(
ucfirst($this->p->t('global', 'typ')),
'Auftrag',
'Organisationseinheit',
'lv_oe_kurzbz',
'Gruppe',
'Lektor',
'Stunden',
'Betrag',
'Vertrag-ID',
'UID',
'Bestellt',
'Erteilt',
'Akzeptiert'
),
'formatRow' => function($datasetRaw) {
if (is_null($datasetRaw->{'Betrag'}))
{
$datasetRaw->{'Betrag'} = 'Stundensatz fehlt';
}
return $datasetRaw;
},
'datasetRepOptions' => '{
height: 700,
layout:"fitColumns", // fit columns to width of table
@@ -184,31 +221,33 @@ $filterWidgetArray = array(
selectableRangeMode: "click", // allows 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){ // only allow selection if is not bestellt (as order already exists)
return row.getData().Bestellt == null;
return row.getData().bestellt == null;
},
movableColumns: true, // allows changing column
headerFilterPlaceholder: " "
headerFilterPlaceholder: " ",
index: "row_index" // assign specific column as unique id (important for row indexing)
}', // tabulator properties
'datasetRepFieldsDefs' => '{
id: {visible:false}, // necessary for row indexing
LE_ID: {headerFilter:"input", bottomCalc:"count"},
LV_ID: {visible: false},
PA_ID: {visible: false},
Studiensemester: {visible: false},
row_index: {visible:false}, // necessary for row indexing
lehreinheit_id: {headerFilter:"input", bottomCalc:"count"},
lehrveranstaltung_id: {headerFilter:"input"},
projektarbeit_id: {visible: false},
studiensemester_kurzbz: {headerFilter:"input"},
studiengang_kz: {visible: false},
Person_ID: {visible: false},
Typ: {headerFilter:"input"},
Auftrag: {headerFilter:"input"},
Organisationseinheit: {headerFilter:"input"},
lv_oe_kurzbz: {visible: false},
Gruppe: {headerFilter:"input"},
Lektor: {headerFilter:"input"},
Stunden: {align:"right", headerFilter:"input", bottomCalc:"sum", bottomCalcParams:{precision:1}},
Betrag: {align:"right", headerFilter:"input", headerFilterPlaceholder:">=", headerFilterFunc: hf_compareWithFloat,
person_id: {visible: false},
typ: {headerFilter:"input"},
auftrag: {headerFilter:"input"},
lv_oe_kurzbz: {headerFilter:"input"},
gruppe: {headerFilter:"input"},
lektor: {headerFilter:"input"},
stunden: {align:"right", headerFilter:"input", bottomCalc:"sum", bottomCalcParams:{precision:1}},
betrag: {align:"right", headerFilter:"input", headerFilterPlaceholder:">=", headerFilterFunc: hf_compareWithFloat,
bottomCalc:"sum", bottomCalcParams:{precision:2}, bottomCalcFormatter:"money", bottomCalcFormatterParams:{decimal: ",", thousand: ".", symbol:"€"}},
Bestellt: {align:"center", headerFilter:"input", mutator: mut_formatStringDate},
Erteilt: {align:"center", headerFilter:"input", mutator: mut_formatStringDate},
Akzeptiert: {align:"center", headerFilter:"input", mutator: mut_formatStringDate}
vertrag_id: {visible: false},
mitarbeiter_uid: {visible: false},
bestellt: {align:"center", headerFilter:"input", mutator: mut_formatStringDate},
erteilt: {align:"center", headerFilter:"input", mutator: mut_formatStringDate},
akzeptiert: {align:"center", headerFilter:"input", mutator: mut_formatStringDate}
}', // col properties
);
+17 -16
View File
@@ -410,24 +410,25 @@ $filters = array(
{
"name": "",
"columns": [
{"name": "id"},
{"name": "LE_ID"},
{"name": "LV_ID"},
{"name": "PA_ID"},
{"name": "Studiensemester"},
{"name": "row_index"},
{"name": "lehreinheit_id"},
{"name": "lehrveranstaltung_id"},
{"name": "projektarbeit_id"},
{"name": "studiensemester_kurzbz"},
{"name": "studiengang_kz"},
{"name": "Person_ID"},
{"name": "Typ"},
{"name": "Auftrag"},
{"name": "Organisationseinheit"},
{"name": "person_id"},
{"name": "typ"},
{"name": "auftrag"},
{"name": "lv_oe_kurzbz"},
{"name": "Gruppe"},
{"name": "Lektor"},
{"name": "Stunden"},
{"name": "Betrag"},
{"name": "Bestellt"},
{"name": "Erteilt"},
{"name": "Akzeptiert"}
{"name": "gruppe"},
{"name": "lektor"},
{"name": "stunden"},
{"name": "betrag"},
{"name": "vertrag_id"},
{"name": "mitarbeiter_uid"},
{"name": "bestellt"},
{"name": "erteilt"},
{"name": "akzeptiert"}
],
"filters": []
}