feat(timetable): a timetabler keeps hard and soft wishes on the school week grid - #794
Merged
Merged
Conversation
…er day and room use
…oft, on the week grid
Contributor
Quality Report — ConductionNL/planninq @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| build | ✅ | ||||
| check-manifest | ✅ | ||||
| check-l10n-js | ✅ | ||||
| check-schema-l10n | ✅ | ||||
| composer | ✅ | ✅ 107/107 | |||
| npm | ✅ | ✅ 646/646 | |||
| app:check-code | ⏭️ | ||||
| info.xml | ✅ | ||||
| REUSE | ❌ | ||||
| lockfile sync | ✅ | ||||
| PHPUnit | ❌ | ||||
| Newman | ❌ | ||||
| Playwright | ⏭️ deferred: E2E runs locally and on the promotion path only. This pull request targets development, so the suite is asked once per promotion into beta and main rather than once per push per open pull request. Run it on any branch from the Actions tab, or locally with npx playwright test. |
||||
| Hydra gates | ✅ |
Quality workflow — 2026-09-30 03:58 UTC
Download the full PDF report from the workflow artifacts.
This was referenced Sep 30, 2026
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Timetable generator, section 3: a timetabler keeps the wishes the generator weighs
Base: development (19711e0). Sits on #793 (section 4, the scorer), which sits on #791 (section 2). Merge in that order, or merge this PR with a merge commit to land all three.
Change:
timetabling-generator(DECISIONS rows 17 and 21), section 3 of 9 (tasks 3.1, 3.2). The change stays open;tt-hard-soft-wishesmoves to built with section 5, when the generator respects the wishes.What the user can now do
An admin opens Timetable, Wishes and sees every wish with what it applies to, who or what, its kind, hard or soft, and its weight, filtered to teachers, groups, rooms or activities. Add and edit open a dialog: what the wish applies to, who or what, the kind, hard ("the generator always keeps it") or soft with a weight of 1 to 3, a limit for "at most a number of lessons a day", and, for "not on these periods" and "preferably not on these periods", a picker laid out as the school week grid from the
timetable_period_gridsetting. Delete is the list's own.How
src/manifest.json: pageTimetableWishes(/timetable/wishes) is a declarativeindexpage ontimetableWish; itsform-dialogslot is replaced bysrc/dialogs/TimetableWishDialog.vue, which saves through the page's ownconfirm. No new custom page, so the gate-69 ratchet holds. Menu Timetable, Wishes (admins; OpenRegister refuses writes from anyone else anyway). IconCalendarClockregistered.src/utils/timetableWishes.js: period keys (wed-5), the grid setting, picker rows, and the saved object: periods only for the two period kinds, a limit only formaxPerDay, a weight only for a soft wish.getDayNames); 16 new strings in all 36 locales.Tests
tests/vitest/timetableWishes.spec.js(11): period key round trip and the schema's pattern; week order sort; toggling; the grid setting and its fallback; the picker rows; weight only for a soft wish (scenario "A timetabler marks a wish as hard"); periods and limit only where they apply; weight clamped to 1 to 3; the problems that stop a save; a stored wish opens as saved. Every saved object is validated with ajv against the realtimetableWishfragment oflib/Settings/planninq_register.json.tests/e2e/timetable-wishes.spec.ts: "a timetabler marks a wish as hard" (runs in the nightly Playwright job; not runnable from the lane clone).Red first: the vitest file failed before the helper existed (lane log
lane16/red-s3.log).Verification
At head 388850a (development 19711e0 + #791 + #793 + this section):
composer check:strict0 (PHPUnit 510, 7 skipped); npm lint, stylelint, check:l10n, check:l10n-js, check:schema-l10n, check:manifest, vitest (41 files, 408 tests) and build all 0. CI-shaped Hydra gates (hydra-gates@main, full coverage, this body): ALL 82 applicable gates passed, gate-69 custom-page ratchet included.Live check
klaas, Not on these periods, tick Wednesday periods 5 to 8, Hard, Save. The row showsklaas, hard, no weight./apps/openregister/api/objects/planninq/timetableWishis refused.Inherited: the non-required Newman, PHPUnit (pgsql) and Quality Report jobs have been red on every PR since #758.
🤖 Generated with Claude Code