Aufgaben: erledigte trotzdem bearbeiten + Nachträge anlegen
Drei Frontend-Guards raus, die verhindert haben, dass man an
erledigten Aufgaben noch etwas machen kann:
- TaskList: der Reply-/Subtask-Input war für erledigte Aufgaben
komplett ausgeblendet. Jetzt sichtbar mit angepasstem Placeholder
("Nachtrag zu erledigter Aufgabe…" / "Antwort zu erledigter
Anfrage…").
- ContractDetail: der Subtask-Input war für erledigte Aufgaben aus.
Jetzt sichtbar – man muss die Aufgabe nicht mehr als offen
markieren, nur um einen Nachtrag anzuhängen.
- ContractDetail: der Edit-Button war für erledigte Aufgaben aus.
Jetzt immer verfügbar (Löschen war eh schon da).
Backend hatte keine Restriktion, es waren rein UI-Gate.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -1147,8 +1147,11 @@ function ContractTaskItem({
|
||||
)}
|
||||
|
||||
{/* Add Subtask */}
|
||||
{/* Subtask/Antwort hinzufügen: Mitarbeiter mit Berechtigung ODER Kundenportal */}
|
||||
{!isCompleted && ((canEdit && !isCustomerPortal) || isCustomerPortal) && (
|
||||
{/* Subtask/Antwort hinzufügen: Mitarbeiter mit Berechtigung ODER Kundenportal.
|
||||
2026-07-04: bewusst OHNE isCompleted-Guard – man soll auch
|
||||
zu erledigten Aufgaben Nachträge anlegen können, ohne die
|
||||
Aufgabe erst wieder auf offen zu setzen. */}
|
||||
{((canEdit && !isCustomerPortal) || isCustomerPortal) && (
|
||||
<div className="mt-2 ml-2">
|
||||
{showSubtaskInput ? (
|
||||
<form onSubmit={handleAddSubtask} className="flex items-center gap-2">
|
||||
@@ -1181,15 +1184,14 @@ function ContractTaskItem({
|
||||
</div>
|
||||
{canEdit && !isCustomerPortal && (
|
||||
<div className="flex gap-1 opacity-0 group-hover:opacity-100">
|
||||
{!isCompleted && (
|
||||
<button
|
||||
onClick={onEdit}
|
||||
className="text-gray-400 hover:text-blue-600 p-1"
|
||||
title="Bearbeiten"
|
||||
>
|
||||
<Edit className="w-4 h-4" />
|
||||
</button>
|
||||
)}
|
||||
{/* 2026-07-04: Edit auch bei erledigten Aufgaben verfügbar. */}
|
||||
<button
|
||||
onClick={onEdit}
|
||||
className="text-gray-400 hover:text-blue-600 p-1"
|
||||
title="Bearbeiten"
|
||||
>
|
||||
<Edit className="w-4 h-4" />
|
||||
</button>
|
||||
<button
|
||||
onClick={() => {
|
||||
if (confirm('Aufgabe wirklich löschen?')) {
|
||||
|
||||
@@ -350,11 +350,15 @@ export default function TaskList() {
|
||||
</div>
|
||||
)}
|
||||
|
||||
{/* Reply Input - nur anzeigen wenn Task noch offen */}
|
||||
{!isTaskCompleted && (canEditSubtasks || isCustomerPortal) && (
|
||||
{/* Reply/Subtask-Input – 2026-07-04: auch bei erledigten
|
||||
Aufgaben verfügbar, damit man nicht erst öffnen muss um
|
||||
eine Nachfrage / Nachtrag anzulegen. */}
|
||||
{(canEditSubtasks || isCustomerPortal) && (
|
||||
<div className="flex gap-2 ml-6">
|
||||
<Input
|
||||
placeholder={isCustomerPortal ? 'Antwort schreiben...' : 'Neue Unteraufgabe...'}
|
||||
placeholder={isCustomerPortal
|
||||
? (isTaskCompleted ? 'Antwort zu erledigter Anfrage…' : 'Antwort schreiben...')
|
||||
: (isTaskCompleted ? 'Nachtrag zu erledigter Aufgabe…' : 'Neue Unteraufgabe...')}
|
||||
value={replyInputs[task.id] || ''}
|
||||
onChange={(e) => setReplyInputs(prev => ({ ...prev, [task.id]: e.target.value }))}
|
||||
onKeyDown={(e) => {
|
||||
|
||||
Reference in New Issue
Block a user