feat: period-scoped holiday management, archive lifecycle, and docs/release sync
- add period-scoped holiday architecture end-to-end - model: scope `SchoolHoliday` to `academic_period_id` - migrations: add holiday-period scoping, academic-period archive lifecycle, and merge migration head - API: extend holidays with manual CRUD, period validation, duplicate prevention, and overlap merge/conflict handling - recurrence: regenerate holiday exceptions using period-scoped holiday sets - improve frontend settings and holiday workflows - bind holiday import/list/manual CRUD to selected academic period - show detailed import outcomes (inserted/updated/merged/skipped/conflicts) - fix file-picker UX (visible selected filename) - align settings controls/dialogs with defined frontend design rules - scope appointments/dashboard holiday loading to active period - add shared date formatting utility - strengthen academic period lifecycle handling - add archive/restore/delete flow and backend validations/blocker checks - extend API client support for lifecycle operations - release/docs updates and cleanup - bump user-facing version to `2026.1.0-alpha.15` with new changelog entry - add tech changelog entry for alpha.15 backend changes - refactor README to concise index and archive historical implementation docs - fix Copilot instruction link diagnostics via local `.github` design-rules reference
This commit is contained in:
@@ -5,6 +5,39 @@
|
||||
|
||||
This changelog documents technical and developer-relevant changes included in public releases. For development workspace changes, see DEV-CHANGELOG.md. Not all changes here are reflected in the user-facing changelog (`program-info.json`), and not all UI/feature changes are repeated here. Some changes (e.g., backend refactoring, API adjustments, infrastructure, developer tooling, or internal logic) may only appear in TECH-CHANGELOG.md. For UI/feature changes, see `dashboard/public/program-info.json`.
|
||||
|
||||
## 2026.1.0-alpha.15 (2026-03-31)
|
||||
- 🗃️ **Holiday data model scoping to academic periods**:
|
||||
- Added period scoping for holidays via `SchoolHoliday.academic_period_id` (FK to academic periods) in `models/models.py`.
|
||||
- Added Alembic migration `f3c4d5e6a7b8_scope_school_holidays_to_academic_.py` to introduce FK/index/constraint updates for period-aware holiday storage.
|
||||
- Updated uniqueness semantics and indexing so holiday identity is evaluated in the selected academic period context.
|
||||
- 🔌 **Holiday API hardening (`server/routes/holidays.py`)**:
|
||||
- Extended to period-scoped workflows for list/import/manual CRUD.
|
||||
- Added manual CRUD endpoints and behavior:
|
||||
- `POST /api/holidays`
|
||||
- `PUT /api/holidays/<id>`
|
||||
- `DELETE /api/holidays/<id>`
|
||||
- Enforced date-range validation against selected academic period for both import and manual writes.
|
||||
- Added duplicate prevention (normalized name/region matching with null-safe handling).
|
||||
- Implemented overlap policy:
|
||||
- Same normalized `name+region` overlaps (including adjacent ranges) are merged.
|
||||
- Different-identity overlaps are treated as conflicts (manual blocked, import skipped with details).
|
||||
- Import responses now include richer counters/details (inserted/updated/merged/skipped/conflicts).
|
||||
- 🔁 **Recurrence integration updates**:
|
||||
- Event holiday-skip exception regeneration now resolves holidays by `academic_period_id` instead of global holiday sets.
|
||||
- Updated event-side recurrence handling (`server/routes/events.py`) to keep EXDATE behavior in sync with period-scoped holidays.
|
||||
- 🖥️ **Frontend integration (technical)**:
|
||||
- Updated holiday API client (`dashboard/src/apiHolidays.ts`) for period-aware list/upload and manual CRUD operations.
|
||||
- Settings holiday management (`dashboard/src/settings.tsx`) now binds import/list/manual CRUD to selected academic period and surfaces conflict/merge outcomes.
|
||||
- Dashboard and appointments holiday data loading updated to active-period context.
|
||||
- 📖 **Documentation & release alignment**:
|
||||
- Updated `.github/copilot-instructions.md` with period-scoped holiday conventions, overlap policy, and settings behavior.
|
||||
- Refactored root `README.md` to index-style documentation and archived historical implementation docs under `docs/archive/`.
|
||||
- Synchronized release line with user-facing version `2026.1.0-alpha.15` in `dashboard/public/program-info.json`.
|
||||
|
||||
Notes for integrators:
|
||||
- Holiday operations now require a clear academic period context; archived periods should be treated as read-only for holiday mutation flows.
|
||||
- Existing recurrence flows depend on period-scoped holiday sets; verify period assignment for recurring master events when validating skip-holidays behavior.
|
||||
|
||||
## 2026.1.0-alpha.14 (2026-01-28)
|
||||
- 🗓️ **Ressourcen Page (Timeline View)**:
|
||||
- New frontend page: `dashboard/src/ressourcen.tsx` (357 lines) – Parallel timeline view showing active events for all room groups
|
||||
|
||||
Reference in New Issue
Block a user