BUG: add issue fix for tag ordering

This commit is contained in:
Ivymaster
2026-06-30 10:27:16 +02:00
parent 086b271480
commit 69b19562f4
10 changed files with 57 additions and 18 deletions
@@ -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);
+6 -1
View File
@@ -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));
+2 -1
View File
@@ -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);
},
+6 -3
View File
@@ -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";
+1 -1
View File
@@ -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
+15 -1
View File
@@ -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;
}
+1 -1
View File
@@ -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