diff --git a/src/components/WorksheetList.jsx b/src/components/WorksheetList.jsx index 7db90f5..0107114 100644 --- a/src/components/WorksheetList.jsx +++ b/src/components/WorksheetList.jsx @@ -2,7 +2,7 @@ import { useState } from 'react' import { FaClock, FaUser, FaExchangeAlt, FaComment, FaChevronDown, FaChevronUp, FaPen, FaCheck, FaHandsHelping } from 'react-icons/fa' import { serviceTypeLabel, needsTimeEntry, worksheetTone } from '../lib/ticketForm' import { statusLabel } from '../lib/ticketStatus' -import { parseSupporters } from '../lib/support' +import { parseSupporters, supportMinutes, firstName } from '../lib/support' // Kopffarbe je Zustand (worksheetTone): orange = Git-Zeit fehlt, gruen = Git-Zeit eingetragen const TONES = { @@ -76,6 +76,7 @@ export default function WorksheetList({ worksheets, totalTime, loading, onToggle const isGit = ws.serviceType === 'GIT' const tone = worksheetTone(ws) const colors = TONES[tone] + const supporters = ws.isComment ? [] : parseSupporters(ws.supporters) return (
Zeit eingetragen )} + {supporters.length > 0 && ( + + +{supporters.length} Unterstützung + + )} {ws.countsToPlan && !ws.isComment && ( Abo-Stunden @@ -255,6 +261,17 @@ export default function WorksheetList({ worksheets, totalTime, loading, onToggle
+ {/* Unterstuetzung: je Person die Haelfte der Arbeitszeit, aufgerundet auf 15 Minuten */} + {supporters.length > 0 && ( +
+ {supporters.map((sup) => ( +
+ ↳ Unterstützung {firstName(sup.name)} · {sup.task} · {formatTime(supportMinutes(ws.totalTime))} +
+ ))} +
+ )} + {/* Service Type */}
{ const hours = Math.floor(minutes / 60) @@ -6,12 +7,12 @@ const formatTime = (minutes) => { return hours > 0 ? `${hours}h ${mins}min` : `${mins}min` } -// Eine Zeile ueber der Arbeitsblatt-Liste: Arbeitszeit, Anzahl, offene Git-Zeiten +// Eine Zeile ueber der Arbeitsblatt-Liste: Arbeitszeit (inkl. Unterstuetzung), Anzahl, offene Git-Zeiten export default function WorksheetSummary({ worksheets }) { if (!worksheets || worksheets.length === 0) return null const minutes = worksheets .filter((ws) => !ws.isComment) - .reduce((sum, ws) => sum + (Number(ws.totalTime) || 0), 0) + .reduce((sum, ws) => sum + worksheetMinutes(ws), 0) const open = worksheets.filter(needsTimeEntry).length return ( diff --git a/src/hooks/useWorksheets.js b/src/hooks/useWorksheets.js index 0548228..ea266e0 100644 --- a/src/hooks/useWorksheets.js +++ b/src/hooks/useWorksheets.js @@ -2,7 +2,7 @@ import { useState, useEffect, useCallback } from 'react' import { databases, DATABASE_ID, COLLECTIONS, Query, ID } from '../lib/appwrite' import { canEditWorksheetTimes, isGitWorksheet } from '../lib/ticketForm' import { roundUpToStep, isValidStep } from '../lib/timeSteps' -import { parseSupporters, serializeSupporters, canAddOwnSupport, upsertSupporter, removeSupporter } from '../lib/support' +import { parseSupporters, serializeSupporters, canAddOwnSupport, upsertSupporter, removeSupporter, worksheetMinutes } from '../lib/support' const STEP_ERROR = 'Die Arbeitszeit muss in 15-Minuten-Schritten angegeben werden.' @@ -307,7 +307,7 @@ export function useWorksheets(woid = null) { const getTotalTime = useCallback(() => { return worksheets .filter(ws => !ws.isComment) - .reduce((sum, ws) => sum + (ws.totalTime || 0), 0) + .reduce((sum, ws) => sum + worksheetMinutes(ws), 0) }, [worksheets]) return {