mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-25 08:34:29 +00:00
BUG: add issue fix for tag ordering
This commit is contained in:
@@ -37,6 +37,7 @@ class Tag extends API_Controller
|
||||
|
||||
if (isset($tag))
|
||||
{
|
||||
$this->TagModel->addJoin('public.tbl_notiz_typ', 'typ_kurzbz', 'typ_kurzbz');
|
||||
$result = $this->TagModel->load($tag);
|
||||
|
||||
$this->response($result, REST_Controller::HTTP_OK);
|
||||
|
||||
@@ -70,6 +70,7 @@ class Tag_Controller extends FHCAPI_Controller
|
||||
tbl_notiz.notiz_id,
|
||||
tbl_notiz_typ.style,
|
||||
tbl_notiz_typ.automatisiert,
|
||||
tbl_notiz_typ.prioritaet,
|
||||
tbl_notiz.erledigt as done,
|
||||
tbl_notiz.insertamum,
|
||||
tbl_notiz.updateamum,
|
||||
@@ -103,7 +104,8 @@ class Tag_Controller extends FHCAPI_Controller
|
||||
style,
|
||||
beschreibung,
|
||||
tag,
|
||||
automatisiert
|
||||
automatisiert,
|
||||
prioritaet
|
||||
"
|
||||
);
|
||||
$this->NotiztypModel->addOrder('prioritaet');
|
||||
@@ -311,6 +313,7 @@ class Tag_Controller extends FHCAPI_Controller
|
||||
tbl_notiz.notiz_id,
|
||||
tbl_notiz_typ.style,
|
||||
tbl_notiz_typ.automatisiert,
|
||||
tbl_notiz_typ.prioritaet,
|
||||
tbl_notiz.erledigt as done,
|
||||
tbl_notiz.insertamum,
|
||||
tbl_notiz.updateamum,
|
||||
@@ -330,6 +333,8 @@ class Tag_Controller extends FHCAPI_Controller
|
||||
|
||||
$this->NotizModel->addJoin('public.tbl_notizzuordnung notizzuordnung', 'tbl_notiz.notiz_id = notizzuordnung.notiz_id');
|
||||
|
||||
$this->NotizModel->addOrder('done');
|
||||
$this->NotizModel->addOrder('tbl_notiz_typ.prioritaet');
|
||||
$notiz = $this->NotizModel->loadWhere(array('prestudent_id' => $prestudent_id));
|
||||
|
||||
|
||||
|
||||
@@ -321,7 +321,7 @@ class StudentListLib
|
||||
$subQueryTag = "(
|
||||
SELECT
|
||||
tag.prestudent_id,
|
||||
COALESCE(json_agg(tag ORDER BY tag.done), '[]'::json) AS tags
|
||||
COALESCE(json_agg(tag ORDER BY tag.done, tag.prioritaet), '[]'::json) AS tags
|
||||
FROM (
|
||||
SELECT DISTINCT ON (n.notiz_id)
|
||||
n.notiz_id AS id,
|
||||
@@ -330,6 +330,7 @@ class StudentListLib
|
||||
n.text AS notiz,
|
||||
nt.style,
|
||||
n.erledigt AS done,
|
||||
nt.prioritaet AS prioritaet,
|
||||
nz.prestudent_id,
|
||||
n.start,
|
||||
n.ende
|
||||
|
||||
@@ -719,7 +719,7 @@ EOSQL;
|
||||
return "tag_data_agg AS (
|
||||
SELECT
|
||||
lehreinheit_id,
|
||||
COALESCE(json_agg(tag ORDER BY done), '[]'::json) AS tags
|
||||
COALESCE(json_agg(tag ORDER BY done, prioritaet), '[]'::json) AS tags
|
||||
FROM (
|
||||
SELECT DISTINCT ON (public.tbl_notiz.notiz_id)
|
||||
tbl_notiz.notiz_id AS id,
|
||||
@@ -728,7 +728,8 @@ EOSQL;
|
||||
text AS notiz,
|
||||
style,
|
||||
erledigt AS done,
|
||||
lehreinheit_id
|
||||
lehreinheit_id,
|
||||
prioritaet
|
||||
FROM public.tbl_notizzuordnung
|
||||
JOIN public.tbl_notiz ON tbl_notizzuordnung.notiz_id = tbl_notiz.notiz_id
|
||||
JOIN public.tbl_notiz_typ ON tbl_notiz.typ = tbl_notiz_typ.typ_kurzbz
|
||||
|
||||
@@ -300,7 +300,15 @@ export default {
|
||||
return this.$api
|
||||
.call(ApiTag.getAllTagsPrestudent({prestudent_id}))
|
||||
.then(result => {
|
||||
this.tagData = result.data;
|
||||
this.tagData = result.data.sort((a, b) => {
|
||||
let adone = a.done ? 1 : 0;
|
||||
let bdone = b.done ? 1 : 0;
|
||||
|
||||
if (adone !== bdone) {
|
||||
return adone - bdone;
|
||||
}
|
||||
return a.prioritaet - b.prioritaet;
|
||||
});
|
||||
})
|
||||
.catch(this.$fhcAlert.handleSystemError);
|
||||
},
|
||||
|
||||
@@ -47,7 +47,8 @@ export default {
|
||||
updatevon: "",
|
||||
response: "",
|
||||
start: "",
|
||||
ende: ""
|
||||
ende: "",
|
||||
prioritaet: 100,
|
||||
},
|
||||
mode: "create"
|
||||
};
|
||||
@@ -94,7 +95,8 @@ export default {
|
||||
this.tagData.automatisiert = item.automatisiert;
|
||||
this.tagData.start = this.formatDateTimeDay(item.start);
|
||||
this.tagData.ende = this.formatDateTimeDay(item.ende);
|
||||
|
||||
this.tagData.prioritaet = item.prioritaet || 100;
|
||||
|
||||
if (item && item.notiz_id)
|
||||
{
|
||||
this.selectedTagId = item.notiz_id;
|
||||
@@ -192,7 +194,8 @@ export default {
|
||||
updateamum: "",
|
||||
bearbeiter: "",
|
||||
response: "",
|
||||
readonly: false
|
||||
readonly: false,
|
||||
prioritaet: 100,
|
||||
};
|
||||
this.selectedTagId = null;
|
||||
this.mode = "create";
|
||||
|
||||
@@ -59,7 +59,7 @@ export function idTagFormatter (id, tagData, tagComponent, typeId, semesterStart
|
||||
let bdone = b.done ? 1 : 0;
|
||||
|
||||
if (adone !== bdone) return adone - bdone;
|
||||
return b.id - a.id;
|
||||
return a.prioritaet - b.prioritaet;
|
||||
});
|
||||
|
||||
const tagsToShow = expanded
|
||||
|
||||
@@ -33,8 +33,14 @@ export function addTagInTable(addedTag, rows, matchKey, tagsKey = "tags")
|
||||
|
||||
let newTag = { ...addedTag, id: tag.id };
|
||||
|
||||
tags.unshift(newTag);
|
||||
tags.push(newTag);
|
||||
tags.sort((a, b) => {
|
||||
let adone = a.done ? 1 : 0;
|
||||
let bdone = b.done ? 1 : 0;
|
||||
|
||||
if (adone !== bdone) return adone - bdone;
|
||||
return a.prioritaet - b.prioritaet;
|
||||
});
|
||||
rowData[tagsKey] = JSON.stringify(tags);
|
||||
updated = true;
|
||||
});
|
||||
@@ -122,6 +128,14 @@ export function updateTagInTable(updatedTag, rows, fields = ['tags'])
|
||||
if (index !== -1)
|
||||
{
|
||||
fieldData[index] = { ...updatedTag };
|
||||
fieldData.sort((a, b) => {
|
||||
let adone = a.done ? 1 : 0;
|
||||
let bdone = b.done ? 1 : 0;
|
||||
|
||||
if (adone !== bdone) return adone - bdone;
|
||||
return a.prioritaet - b.prioritaet;
|
||||
});
|
||||
|
||||
let updatedFieldData = JSON.stringify(fieldData);
|
||||
|
||||
if (updatedFieldData !== rowData[field])
|
||||
|
||||
@@ -4,20 +4,23 @@ const TAG_FILTER_CONNECTORS = {
|
||||
key: "AND",
|
||||
label: "AND",
|
||||
operator: "&&",
|
||||
isVisible: false,
|
||||
},
|
||||
OR: {
|
||||
key: "OR",
|
||||
label: "OR",
|
||||
operator: "||",
|
||||
isVisible: true,
|
||||
},
|
||||
NOT: {
|
||||
key: "NOT",
|
||||
label: "NOT",
|
||||
operator: "!",
|
||||
isVisible: true,
|
||||
},
|
||||
};
|
||||
const TAG_FILTER_CONNECTOR_ORDER = [
|
||||
TAG_FILTER_CONNECTORS.AND,
|
||||
//TAG_FILTER_CONNECTORS.AND,
|
||||
TAG_FILTER_CONNECTORS.OR,
|
||||
TAG_FILTER_CONNECTORS.NOT,
|
||||
];
|
||||
@@ -67,6 +70,9 @@ export function buildTagOptionsFromRows(rows = []) {
|
||||
...new Map(
|
||||
getRawTagValuesFromRows(rows)
|
||||
.filter((tag) => tag && tag.done !== true)
|
||||
.sort((a, b) => {
|
||||
return a.prioritaet - b.prioritaet;
|
||||
})
|
||||
.map((tag) => {
|
||||
return {
|
||||
label: tag.beschreibung || tag.typ_kurzbz,
|
||||
@@ -90,11 +96,7 @@ export function syncTagHeaderFilterOptions(
|
||||
const options = buildTagOptionsFromRows(rows) || [];
|
||||
|
||||
if (Array.isArray(initialOptions)) {
|
||||
initialOptions.splice(
|
||||
0,
|
||||
initialOptions.length,
|
||||
...options,
|
||||
);
|
||||
initialOptions.splice(0, initialOptions.length, ...options);
|
||||
}
|
||||
|
||||
if (Array.isArray(selectedOptions)) {
|
||||
@@ -116,7 +118,11 @@ export function syncSelectedTagOptionsWithHeaderFilters(
|
||||
tagsEnabled = true,
|
||||
field = "tags",
|
||||
) {
|
||||
if (!tagsEnabled || !Array.isArray(selectedOptions) || !selectedOptions.length) {
|
||||
if (
|
||||
!tagsEnabled ||
|
||||
!Array.isArray(selectedOptions) ||
|
||||
!selectedOptions.length
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ export function tagFormatter(cell, tagComponent, onRendered) {
|
||||
if (adone !== bbone) {
|
||||
return adone - bbone;
|
||||
}
|
||||
return b.id - a.id;
|
||||
return a.prioritaet - b.prioritaet;
|
||||
});
|
||||
const tagsToShow = rowData._tagExpanded
|
||||
? parsedTags
|
||||
|
||||
Reference in New Issue
Block a user