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} +
+ )} + +
+
+ + setTask(e.target.value)} + autoFocus + /> +
+
+ + {existing && ( + + )} +
+
+
+
+ ) +} 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) && (