hamed and Claude Opus 5
f144401dd3
feat(holidays): one official calendar, inherited everywhere
...
The holiday model was already right — national holidays global, a per-tenant
override in both directions, per-doctor and per-resource exceptions — but
nothing could create a national holiday. The only writer was an import
command, so the calendar the whole product inherits from had no owner.
Three admin-only routes give it one. POST upserts, because `date` is unique
and re-sending a day should rename it rather than surface a raw database
error; PATCH takes only the title, because moving a date means a different
holiday. The system admin has no work environment, so the list endpoint now
returns the calendar with an empty `overrides` for that role instead of the
403 `pair()` would raise — the person who maintains the calendar has to be
able to read it.
Both holiday tabs — the doctor's and the resource's — now open with the
official calendar above their own exceptions, from one shared card rather
than two copies that would drift. Each row can be opted out of with a single
click, which is the existing holiday-override endpoint.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-08-02 15:39:48 +03:30
..
2026-07-13 14:16:21 +03:30
2026-07-13 14:16:21 +03:30
2026-07-18 10:38:56 +03:30
2026-07-23 15:18:59 +03:30
2026-07-29 21:04:40 +03:30
2026-07-29 21:04:40 +03:30
2026-07-19 13:29:46 +03:30
2026-07-31 21:27:55 +03:30
2026-07-30 14:57:21 +03:30
2026-07-29 13:28:59 +03:30
2026-07-30 14:57:21 +03:30
2026-07-22 16:43:56 +03:30
2026-07-23 18:39:58 +03:30
2026-07-14 00:26:47 +03:30
2026-07-25 18:45:09 +03:30
2026-08-02 14:14:10 +03:30
2026-07-27 18:54:35 +03:30
2026-07-29 20:26:51 +03:30
2026-07-23 21:01:58 +03:30
2026-07-25 17:50:14 +03:30
2026-07-29 21:04:40 +03:30
2026-08-02 12:58:26 +03:30
2026-08-02 13:34:49 +03:30
2026-07-27 16:41:52 +03:30
2026-07-29 20:26:51 +03:30
2026-07-29 13:28:59 +03:30
2026-07-29 20:26:51 +03:30
2026-07-19 11:25:45 +03:30
2026-07-29 20:26:51 +03:30
2026-07-29 20:26:51 +03:30
2026-07-29 20:26:51 +03:30
2026-07-18 12:10:49 +03:30
2026-08-01 15:23:23 +03:30
2026-07-29 21:04:40 +03:30
2026-07-19 16:09:55 +03:30
2026-07-29 21:15:09 +03:30
2026-07-30 10:18:41 +03:30
2026-07-17 12:24:32 +03:30
2026-07-11 11:49:04 +03:30
2026-07-29 20:26:51 +03:30
2026-07-29 20:26:51 +03:30
2026-07-13 13:44:02 +03:30
2026-07-29 21:04:40 +03:30
2026-07-29 20:26:51 +03:30
2026-07-12 14:49:09 +03:30
2026-08-02 15:39:48 +03:30
2026-07-25 17:50:14 +03:30
2026-07-15 14:32:29 +03:30
2026-07-23 18:39:58 +03:30
2026-07-19 13:29:46 +03:30
2026-07-27 16:41:52 +03:30
2026-07-18 10:38:56 +03:30
2026-07-28 15:06:28 +03:30
2026-07-15 11:39:32 +03:30
2026-07-28 15:06:28 +03:30
2026-07-27 16:41:52 +03:30
2026-07-19 10:38:29 +03:30
2026-07-29 20:26:51 +03:30
2026-07-19 10:38:29 +03:30
2026-07-27 19:37:44 +03:30
2026-07-15 12:23:17 +03:30
2026-07-27 16:41:52 +03:30
2026-07-18 10:54:37 +03:30
2026-07-16 14:20:32 +03:30
2026-07-29 20:26:51 +03:30
2026-07-29 21:04:40 +03:30
2026-08-01 20:50:47 +03:30
2026-07-16 08:56:59 +03:30
2026-07-29 20:26:51 +03:30
2026-07-15 09:31:50 +03:30
2026-07-29 21:04:40 +03:30
2026-07-29 20:26:51 +03:30
2026-07-29 21:04:40 +03:30
2026-07-13 12:45:57 +03:30
2026-07-29 20:26:51 +03:30
2026-07-04 22:05:27 +03:30
2026-08-02 15:25:32 +03:30
2026-07-19 16:09:55 +03:30
2026-07-29 20:26:51 +03:30
2026-07-23 22:13:37 +03:30
2026-07-29 20:26:51 +03:30
2026-07-02 21:22:14 +03:30
2026-07-18 10:38:56 +03:30
2026-07-18 10:38:56 +03:30
2026-07-29 21:04:40 +03:30
2026-07-14 00:07:00 +03:30
2026-08-01 14:37:32 +03:30
2026-08-02 15:25:32 +03:30
2026-08-02 15:25:32 +03:30
2026-08-02 15:25:32 +03:30
2026-08-02 15:25:32 +03:30
2026-08-02 15:25:32 +03:30
2026-08-02 15:25:32 +03:30
2026-08-02 13:34:49 +03:30
2026-07-29 21:04:40 +03:30
2026-07-23 16:36:35 +03:30
2026-07-25 18:34:18 +03:30
2026-07-29 20:26:51 +03:30
2026-07-25 18:34:18 +03:30
2026-07-25 18:34:18 +03:30
2026-07-25 18:34:18 +03:30
2026-07-27 16:41:52 +03:30
2026-07-18 12:34:42 +03:30
2026-08-02 13:16:53 +03:30
2026-07-19 13:29:46 +03:30
2026-07-29 20:26:51 +03:30
2026-07-17 21:56:27 +03:30
2026-07-23 18:11:41 +03:30
2026-07-19 22:01:34 +03:30
2026-07-29 20:26:51 +03:30
2026-07-29 21:04:40 +03:30
2026-08-02 13:34:49 +03:30
2026-07-27 16:41:52 +03:30
2026-07-27 16:41:52 +03:30
2026-07-30 10:18:41 +03:30
2026-07-30 10:30:39 +03:30
2026-07-27 16:41:52 +03:30
2026-07-18 11:05:47 +03:30
2026-07-27 16:41:52 +03:30
2026-07-14 15:39:45 +03:30
2026-07-23 18:39:58 +03:30
2026-07-29 20:26:51 +03:30
2026-07-29 21:04:40 +03:30