From 3b6a8216872ecf548897d3499bdf631a79c8933f Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 29 Sep 2026 15:29:45 +0000 Subject: [PATCH] Arbeitsnachweis: Abo-Stundenkonto nur bei Kunden mit Wartungs-Abo Co-Authored-By: Claude Sonnet 5.5 --- src/components/CreateWorksheetModal.jsx | 28 ++++++------ src/components/TicketCard.jsx | 9 +++- src/components/WorksheetList.jsx | 4 +- src/hooks/useCustomerAbo.js | 59 +++++++++++++++++++++++++ src/lib/customerAdminApi.js | 5 +++ 5 files changed, 89 insertions(+), 16 deletions(-) create mode 100644 src/hooks/useCustomerAbo.js diff --git a/src/components/CreateWorksheetModal.jsx b/src/components/CreateWorksheetModal.jsx index c8abbf8..325849a 100644 --- a/src/components/CreateWorksheetModal.jsx +++ b/src/components/CreateWorksheetModal.jsx @@ -31,7 +31,7 @@ const initialForm = (workorder, newStatus) => ({ countsToPlan: false }) -export default function CreateWorksheetModal({ isOpen, onClose, workorder, onCreate }) { +export default function CreateWorksheetModal({ isOpen, onClose, workorder, onCreate, aboHoursAllowed = true }) { const { user } = useAuth() const isAcquisition = workorder?.type === 'Akquise' @@ -109,7 +109,7 @@ export default function CreateWorksheetModal({ isOpen, onClose, workorder, onCre endTime: timeToWoms(formData.endTime), details: formData.details, isComment: formData.isComment, - countsToPlan: !formData.isComment && formData.countsToPlan, + countsToPlan: aboHoursAllowed && !formData.isComment && formData.countsToPlan, employeeShort: user?.prefs?.shortCode || '' // Aus User-Preferences } @@ -191,17 +191,19 @@ export default function CreateWorksheetModal({ isOpen, onClose, workorder, onCre -
- -
+ {aboHoursAllowed && ( +
+ +
+ )}
diff --git a/src/components/TicketCard.jsx b/src/components/TicketCard.jsx index c7f2714..1a09995 100644 --- a/src/components/TicketCard.jsx +++ b/src/components/TicketCard.jsx @@ -16,6 +16,7 @@ import Tabs from './ui/Tabs' import Badge from './ui/Badge' import { StatusPill, UrgentPill } from './ui/StatusPill' import { useWorksheets } from '../hooks/useWorksheets' +import { useCustomerAbo } from '../hooks/useCustomerAbo' import { useAuth } from '../context/AuthContext' import { databases, DATABASE_ID, COLLECTIONS } from '../lib/appwrite' import { canEditWorksheetTimes } from '../lib/ticketForm' @@ -34,6 +35,11 @@ export default function TicketCard({ ticket, onUpdate }) { const [activeTab, setActiveTab] = useState('details') const [showCreateWorksheet, setShowCreateWorksheet] = useState(false) const [editTimesWorksheet, setEditTimesWorksheet] = 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( expanded ? ticket.woid : null @@ -139,6 +145,7 @@ export default function TicketCard({ ticket, onUpdate }) { canEditTimes={(ws) => canEditWorksheetTimes(ws, user, employee)} onEditTimes={setEditTimesWorksheet} onTogglePlan={handleTogglePlan} + aboHoursAllowed={aboHoursAllowed} />
)} @@ -148,7 +155,7 @@ export default function TicketCard({ ticket, onUpdate }) { )} - setShowCreateWorksheet(false)} workorder={ticket} onCreate={handleCreateWorksheet} /> + setShowCreateWorksheet(false)} workorder={ticket} onCreate={handleCreateWorksheet} aboHoursAllowed={aboHoursAllowed} /> {editTimesWorksheet && ( Zeiten bearbeiten} )} - {onTogglePlan && !ws.isComment && Number(ws.totalTime) > 0 && ( + {onTogglePlan && !ws.isComment && Number(ws.totalTime) > 0 && (aboHoursAllowed || ws.countsToPlan) && (