This commit is contained in:
michael committed 2026-09-30 12:43:01 +02:00
1 parent 39690b1d2b
commit 35cb578a96
8 files changed
+1091 -46

No files matched your search

+38 -4
View File
@@ -433,7 +433,7 @@ function formatChangeValue(field: string, value: unknown) {
return formatMinutes(value);
}
if (field === "Teamspace-Projekte" || field === "Teamspace-Prüfung") {
if (field === "Teamspace-Projekte" || field === "Teamspace-Prüfung" || field === "Merge-Projektdaten") {
return formatTeamspaceProjectList(value) || "-";
}
@@ -493,6 +493,10 @@ function changeAllowedByFields(item: ZammadSyncItem, change: ZammadSyncChange, f
return fields.projectName && consultingProjectCanBeTouched;
}
if (change.field === "Merge-Projektdaten" || change.field === "Merge-Prüfung") {
return true;
}
if (change.field === "Teamspace-Budget") {
return fields.budget && consultingProjectCanBeTouched;
}
@@ -578,6 +582,10 @@ function addCachedTeamspaceProjectChanges(changes: ZammadSyncChange[], localProj
}
}
function mergeReviewMatchesCachedZammad(localTeamspaceProjects: unknown, zammadTeamspaceProjects: unknown) {
return !cachedValueChanged("Teamspace-Projekte", localTeamspaceProjects, zammadTeamspaceProjects);
}
function zammadPendingTodoPreview(zammad: Record<string, unknown>) {
const stateId = numericValue(cachedValue(zammad, "stateId"));
const pendingTime = cachedValue(zammad, "pendingTime");
@@ -666,6 +674,11 @@ function changesFromExistingPreviewCache(item: ZammadSyncItem, fields: ZammadSyn
const localWorkType = cachedValue(local, "workType");
const zammadWorkType = cachedValue(zammad, "workType");
const zammadStateId = numericValue(cachedValue(zammad, "stateId"));
const mergeProtected = Boolean(
cachedValue(local, "zammadMergedFromTicketId")
|| cachedValue(zammad, "mergedFromTicketId")
|| (cachedValue(project, "closeReviewRequired") === true && zammadStateId !== 4)
);
const pendingTodoExists = cachedValue(local, "zammadPendingTodoExists");
const localTeamspaceProjects = cachedStringList(project, "teamspaceProjects");
const zammadTeamspaceProjects = cachedStringList(zammad, "teamspaceProjects");
@@ -694,15 +707,15 @@ function changesFromExistingPreviewCache(item: ZammadSyncItem, fields: ZammadSyn
addCachedChange(changes, "Organisation", cachedValue(local, "organizationId"), cachedValue(zammad, "organizationId"));
}
if (fields.type) {
if (fields.type && !mergeProtected) {
addCachedChange(changes, "Typ", localWorkType, zammadWorkType);
}
if (fields.type && zammadWorkType === "support" && project) {
if (!mergeProtected && fields.type && zammadWorkType === "support" && project) {
changes.push({ field: "Projekt/Teamspace-Daten", from: "vorhanden", to: "werden gelöscht" });
}
const consultingProjectCanBeTouched = zammadWorkType === "consulting" && (fields.type || localWorkType === "consulting");
const consultingProjectCanBeTouched = !mergeProtected && zammadWorkType === "consulting" && (fields.type || localWorkType === "consulting");
if (consultingProjectCanBeTouched) {
if (fields.type && !project) {
@@ -722,6 +735,27 @@ function changesFromExistingPreviewCache(item: ZammadSyncItem, fields: ZammadSyn
}
}
if (mergeProtected && project && cachedValue(project, "closeReviewRequired") === true && zammadStateId !== 4) {
if (mergeReviewMatchesCachedZammad(localTeamspaceProjectList, zammadTeamspaceProjectList)) {
changes.push({ field: "Merge-Prüfung", from: true, to: false });
} else {
if (localTeamspaceProjectList.length > 0 && zammadTeamspaceProjectList.length === 0) {
changes.push({
field: "Merge-Projektdaten",
from: normalizedTeamspaceProjectList(localTeamspaceProjectList),
to: "in Zammad fehlen; lokale Projektdaten bleiben erhalten und muessen dort nachgetragen werden"
});
} else if (cachedValueChanged("Teamspace-Projekte", localTeamspaceProjectList, zammadTeamspaceProjectList)) {
changes.push({
field: "Merge-Projektdaten",
from: normalizedTeamspaceProjectList(localTeamspaceProjectList),
to: normalizedTeamspaceProjectList(zammadTeamspaceProjectList)
});
}
}
}
return changes;
}