diff --git a/src/components/OwnSupportModal.jsx b/src/components/OwnSupportModal.jsx
new file mode 100644
index 0000000..3be0aa3
--- /dev/null
+++ b/src/components/OwnSupportModal.jsx
@@ -0,0 +1,80 @@
+import { useState } from 'react'
+import { FaTimes } from 'react-icons/fa'
+import { parseSupporters, supportMinutes } from '../lib/support'
+import { stepLabel } from '../lib/timeSteps'
+
+/* "Ich habe unterstuetzt": die eigene Unterstuetzung bei einem fremden Arbeitsblatt
+ eintragen, aendern oder entfernen. Andere Eintraege und die Zeiten bleiben unberuehrt. */
+export default function OwnSupportModal({ worksheet, currentUserId, onClose, onSave }) {
+ const existing = parseSupporters(worksheet.supporters).find((s) => s.employeeId === currentUserId)
+ const [task, setTask] = useState(existing?.task || '')
+ const [saving, setSaving] = useState(false)
+ const [error, setError] = useState('')
+
+ const save = async (value) => {
+ setSaving(true)
+ setError('')
+ const result = await onSave(worksheet, value)
+ if (result?.success) {
+ onClose()
+ return
+ }
+ setError(result?.error || 'Speichern fehlgeschlagen')
+ setSaving(false)
+ }
+
+ const handleSubmit = (e) => {
+ e.preventDefault()
+ if (!task.trim()) {
+ setError('Bitte angeben, wobei du unterstützt hast.')
+ return
+ }
+ save(task.trim())
+ }
+
+ return (
+
+
+
+
+
+
Unterstützung eintragen
+
+ WSID {worksheet.wsid} · {worksheet.employeeName}
+
Dir werden {stepLabel(supportMinutes(worksheet.totalTime))} angerechnet.
+
+
+ {error && (
+
+ {error}
+
+ )}
+
+
+
+
+ )
+}
diff --git a/src/components/TicketCard.jsx b/src/components/TicketCard.jsx
index 072e829..e479095 100644
--- a/src/components/TicketCard.jsx
+++ b/src/components/TicketCard.jsx
@@ -8,6 +8,7 @@ import EditorDropdown from './EditorDropdown'
import CreateWorksheetModal from './CreateWorksheetModal'
import WorksheetList from './WorksheetList'
import WorksheetTimesModal from './WorksheetTimesModal'
+import OwnSupportModal from './OwnSupportModal'
import WorksheetSummary from './WorksheetSummary'
import TicketProjects from './TicketProjects'
import ProjectContextPanel from './ProjectContextPanel'
@@ -20,6 +21,7 @@ import { useCustomerAbo } from '../hooks/useCustomerAbo'
import { useAuth } from '../context/AuthContext'
import { databases, DATABASE_ID, COLLECTIONS } from '../lib/appwrite'
import { canEditWorksheetTimes } from '../lib/ticketForm'
+import { canAddOwnSupport } from '../lib/support'
import { ticketTypeLabel } from '../lib/ticketStatus'
// Projekt / Preview steht mit im Details-Reiter
@@ -35,13 +37,14 @@ export default function TicketCard({ ticket, onUpdate }) {
const [activeTab, setActiveTab] = useState('details')
const [showCreateWorksheet, setShowCreateWorksheet] = useState(false)
const [editTimesWorksheet, setEditTimesWorksheet] = useState(null)
+ const [ownSupportWorksheet, setOwnSupportWorksheet] = useState(null)
// Abo-Stundenkonto gibt es nur bei Wartungs-Abo; erst laden, wenn Arbeitsblaetter gebraucht werden
const { hoursAllowed: aboHoursAllowed } = useCustomerAbo(
ticket.customerId,
(expanded && activeTab === 'worksheets') || showCreateWorksheet
)
- const { worksheets, loading: worksheetsLoading, createWorksheet, updateWorksheet, updateWorksheetTimes, getTotalTime } = useWorksheets(
+ const { worksheets, loading: worksheetsLoading, createWorksheet, updateWorksheet, updateWorksheetTimes, saveOwnSupport, getTotalTime } = useWorksheets(
expanded ? ticket.woid : null
)
@@ -144,6 +147,9 @@ export default function TicketCard({ ticket, onUpdate }) {
loading={worksheetsLoading}
canEditTimes={(ws) => canEditWorksheetTimes(ws, user, employee)}
onEditTimes={setEditTimesWorksheet}
+ canAddSupport={(ws) => canAddOwnSupport(ws, user, employee)}
+ onOwnSupport={setOwnSupportWorksheet}
+ currentUserId={user?.$id}
onTogglePlan={handleTogglePlan}
aboHoursAllowed={aboHoursAllowed}
/>
@@ -156,6 +162,14 @@ export default function TicketCard({ ticket, onUpdate }) {
)}
setShowCreateWorksheet(false)} workorder={ticket} onCreate={handleCreateWorksheet} aboHoursAllowed={aboHoursAllowed} />
+ {ownSupportWorksheet && (
+ setOwnSupportWorksheet(null)}
+ onSave={(ws, task) => saveOwnSupport(ws, task, user, employee)}
+ />
+ )}
{editTimesWorksheet && (
Zeiten bearbeiten>}
)}
+ {onOwnSupport && canAddSupport?.(ws) && (
+
+ )}
{onTogglePlan && !ws.isComment && Number(ws.totalTime) > 0 && (aboHoursAllowed || ws.countsToPlan) && (