Unterstützung: Ersteller trägt helfende Personen im Arbeitsblatt ein
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
3535f18a2b
commit
d83bbfb48d
5 files changed
+139
-4
No files matched your search
@@ -3,6 +3,8 @@ import { FaTimes } from 'react-icons/fa'
|
||||
import { isoToGermanDate, timeToWoms, germanDateToIso, womsTimeToInput, minutesBetween, isGitWorksheet, needsTimeEntry } from '../lib/ticketForm'
|
||||
import { DateTimeInput, DurationSelect } from './ui'
|
||||
import { roundUpToStep, isValidStep } from '../lib/timeSteps'
|
||||
import { parseSupporters, validateSupporters } from '../lib/support'
|
||||
import SupportersEditor from './SupportersEditor'
|
||||
|
||||
// Gespeichert ist dd.mm.yyyy / hhmm, die Kalender-Felder brauchen yyyy-mm-dd / hh:mm
|
||||
const formFromWorksheet = (worksheet) => ({
|
||||
@@ -16,7 +18,7 @@ const formFromWorksheet = (worksheet) => ({
|
||||
* Beginn, Ende und Arbeitszeit eines Arbeitsblatts nachtraeglich aendern.
|
||||
* Wer das darf, entscheidet canEditWorksheetTimes (lib/ticketForm).
|
||||
*/
|
||||
export default function WorksheetTimesModal({ worksheet, onClose, onSave }) {
|
||||
export default function WorksheetTimesModal({ worksheet, currentUserId, onClose, onSave }) {
|
||||
const isGit = isGitWorksheet(worksheet)
|
||||
const [formData, setFormData] = useState(() => formFromWorksheet(worksheet))
|
||||
// null = die Arbeitszeit folgt Beginn und Ende (aufgerundet auf 15 Minuten). Passte sie
|
||||
@@ -28,6 +30,7 @@ export default function WorksheetTimesModal({ worksheet, onClose, onSave }) {
|
||||
if (!stored || (calculated !== null && stored === roundUpToStep(calculated))) return null
|
||||
return isValidStep(stored) ? stored : roundUpToStep(stored)
|
||||
})
|
||||
const [supporters, setSupporters] = useState(() => parseSupporters(worksheet.supporters))
|
||||
const [saving, setSaving] = useState(false)
|
||||
const [error, setError] = useState('')
|
||||
|
||||
@@ -54,6 +57,11 @@ export default function WorksheetTimesModal({ worksheet, onClose, onSave }) {
|
||||
setError('Bitte die Arbeitszeit auswählen.')
|
||||
return
|
||||
}
|
||||
const supportError = validateSupporters(supporters, currentUserId)
|
||||
if (supportError) {
|
||||
setError(supportError)
|
||||
return
|
||||
}
|
||||
setSaving(true)
|
||||
setError('')
|
||||
try {
|
||||
@@ -62,7 +70,9 @@ export default function WorksheetTimesModal({ worksheet, onClose, onSave }) {
|
||||
startTime: timeToWoms(formData.startTime),
|
||||
endDate: isoToGermanDate(formData.endDate),
|
||||
endTime: timeToWoms(formData.endTime),
|
||||
totalTime: Number(totalTime)
|
||||
totalTime: Number(totalTime),
|
||||
supporters,
|
||||
supportersBefore: worksheet.supporters
|
||||
})
|
||||
if (result?.success) {
|
||||
onClose()
|
||||
@@ -137,6 +147,13 @@ export default function WorksheetTimesModal({ worksheet, onClose, onSave }) {
|
||||
</small>
|
||||
</div>
|
||||
|
||||
<SupportersEditor
|
||||
value={supporters}
|
||||
onChange={setSupporters}
|
||||
excludeUserId={currentUserId}
|
||||
minutes={totalTime}
|
||||
/>
|
||||
|
||||
<div className="text-center mt-2">
|
||||
<button type="submit" className="btn btn-dark" disabled={saving}>
|
||||
{saving ? 'Speichert...' : 'Speichern'}
|
||||
|
||||
Reference in new issue
Block a user