Skip to content

feat: Improve bulk extend to use absolute end date (today + X months) #30

@bwl21

Description

@bwl21

Beschreibung

Die Bulk-Operation "Terminserien verlängern" soll verbessert werden, um ein absolutes Enddatum basierend auf dem heutigen Datum zu setzen, anstatt die Serie relativ zu verlängern.

Aktuelles Verhalten

  • Dropdown zeigt "3 Monate", "6 Monate", "12 Monate", etc.
  • Die Serie wird um X Monate ab dem aktuellen Enddatum verlängert
  • Beispiel: Serie endet am 31.12.2025 → +12 Monate → neues Ende: 31.12.2026

Gewünschtes Verhalten

  • Dropdown zeigt weiterhin "3 Monate", "6 Monate", "12 Monate", etc.
  • Das neue Enddatum wird berechnet als: Heute + X Monate
  • Beispiel: Heute ist 13.12.2024, Auswahl "12 Monate" → neues Ende: 13.12.2025

Validierung

  • Verkürzung verhindern: Wenn das berechnete Enddatum (Heute + X Monate) vor dem aktuellen Enddatum liegt, soll:
    • Die Serie nicht verändert werden
    • Eine Warnung angezeigt werden: "Die Serie würde verkürzt werden. Bitte wählen Sie einen längeren Zeitraum."
    • Die Serie aus der Bulk-Operation übersprungen werden

Beispiele

Beispiel 1: Verlängerung

  • Heute: 13.12.2024
  • Aktuelles Ende: 31.03.2025
  • Auswahl: 12 Monate
  • Neues Ende: 13.12.2025 ✅
  • Ergebnis: Serie wird verlängert

Beispiel 2: Verkürzung (verhindert)

  • Heute: 13.12.2024
  • Aktuelles Ende: 31.12.2026
  • Auswahl: 12 Monate
  • Berechnetes Ende: 13.12.2025 ❌
  • Ergebnis: Warnung, Serie wird nicht geändert

Beispiel 3: Keine Änderung nötig

  • Heute: 13.12.2024
  • Aktuelles Ende: 15.12.2025
  • Auswahl: 12 Monate
  • Berechnetes Ende: 13.12.2025 (2 Tage früher)
  • Ergebnis: Warnung, Serie wird nicht geändert

Technische Details

Betroffene Dateien

  • src/composables/useBulkAppointmentActions.ts - Logik für Bulk-Operationen
  • src/components/expiring-appointments/ExpiringAppointmentsAdmin.vue - UI

Implementierung

// Aktuell
const newRepeatUntil = currentDate.setMonth(currentDate.getMonth() + extensionMonths)

// Neu
const today = new Date()
const newRepeatUntil = new Date(today)
newRepeatUntil.setMonth(today.getMonth() + extensionMonths)

// Validierung
if (currentEndDate && newRepeatUntil < currentEndDate) {
  // Warnung anzeigen, Serie überspringen
  warnings.push({
    seriesId: appointmentId,
    title: appointment.base.title,
    message: 'Serie würde verkürzt werden'
  })
  continue
}

Toast-Benachrichtigungen

Nach der Bulk-Operation:

  • Alle erfolgreich: "X Termine erfolgreich verlängert"
  • Einige übersprungen: "X Termine verlängert, Y übersprungen (würden verkürzt)"
  • Alle übersprungen: "Keine Termine verlängert. Alle würden verkürzt werden."

Akzeptanzkriterien

  • Enddatum wird als "Heute + X Monate" berechnet
  • Serien, die verkürzt würden, werden übersprungen
  • Warnung wird angezeigt, wenn Serien übersprungen werden
  • Toast zeigt Anzahl der verlängerten und übersprungenen Serien
  • Bestehende Funktionalität bleibt erhalten (keine Breaking Changes)

Labels

  • enhancement
  • bulk-operations
  • expiring-appointments

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions