Commit Graph

73 Commits

Author SHA1 Message Date
RobbStarkAustria
5f0972c79c Merge branch 'recurring_events_scheduler' 2025-10-14 05:55:12 +00:00
RobbStarkAustria
17c3452310 Scheduler: native recurrence handling, onActionCompleted persistence, EXDATE RFC5545, UI icon cleanup 2025-10-14 05:54:36 +00:00
RobbStarkAustria
e53cc619ec feat: implement comprehensive recurring event single occurrence editing
- Add detach functionality for individual occurrences of recurring events
- Create POST /api/events/<id>/occurrences/<date>/detach endpoint
- Implement EventException-based EXDATE generation for master events
- Add user confirmation dialog for single vs series editing choice
- Implement manual recurrence expansion with DST timezone tolerance
- Support FREQ=DAILY and FREQ=WEEKLY with BYDAY patterns and UNTIL dates
- Create standalone events from detached occurrences without affecting master series
- Add GET /api/events/<id> endpoint for fetching master event data
- Allow editing recurring series even when master event date is in the past
- Replace browser confirm dialogs with Syncfusion dialog components
- Remove debug logging while preserving error handling
- Update documentation for recurring event functionality

BREAKING: Frontend now manually expands recurring events instead of relying on Syncfusion's EXDATE handling

This enables users to edit individual occurrences of recurring events (creating standalone events)
or edit the entire series (updating all future occurrences) through an intuitive UI workflow.
The system properly handles timezone transitions, holiday exclusions, and complex recurrence patterns.
2025-10-12 20:04:23 +00:00
RobbStarkAustria
773628c324 feat(events): reliable holiday skipping for recurrences + UI badge; clean logs
Backend: generate EventException on create/update when skip_holidays or recurrence changes; emit RecurrenceException (EXDATE) with exact occurrence start time (UTC)
API: return master events with RecurrenceRule + RecurrenceException
Frontend: map RecurrenceException → recurrenceException; ensure SkipHolidays instances never render on holidays; place TentTree icon (black) next to main event icon via template
Docs: update README and Copilot instructions for recurrence/holiday behavior
Cleanup: remove dataSource and debug console logs
2025-10-12 12:00:43 +00:00
RobbStarkAustria
7ab4ea14c4 Polish up clients ui 2025-10-12 05:23:10 +00:00
RobbStarkAustria
4d807be6f8 UI: switch to Syncfusion M3, remove Tailwind;
paginate changelog; docs updated; bump to 2025.1.0-alpha.8
2025-10-11 12:10:12 +00:00
RobbStarkAustria
0601bac243 docs: update README and Copilot instructions for new DB init workflow
Replace placeholder clone URL with actual repo URL:
https://github.com/RobbStarkAustria/infoscreen_2025.git
Add first-run step to initialize the database using the one-shot script:
python server/initialize_database.py
Mention initialize_database.py in project structure
Add a one-shot DB init command to the “Database Management” section
Update Copilot instructions:
Prefer initialize_database.py for local dev (migrations + defaults + academic periods)
Note legacy init scripts were removed; use Alembic + initialize_database.py going forward
No runtime/code changes; documentation only
2025-10-11 07:01:19 +00:00
RobbStarkAustria
4a97ad4f1d Merge with remote repository and apply database cleanup
- Merged remote history with local workspace changes
- Removed obsolete database initialization scripts (init_database.py, init_db.py, init_mariadb.py, test_sql.py)
- Added new comprehensive database initialization script (initialize_database.py)
- Added documentation (DATABASE_GUIDE.md, CLEANUP_SUMMARY.md)
- Updated init_defaults.py comment
- Added GitHub connection helper script
2025-10-10 15:28:04 +00:00
RobbStarkAustria
1efe40a03b Initial commit - copied workspace after database cleanup 2025-10-10 15:20:14 +00:00
5627829617 Migration to physical server 2025-10-10 14:14:47 +00:00
fc9b3228c4 Add README.md 2025-10-07 20:50:24 +00:00
fcc0dfbb0f feat(conversions): end-to-end PPT/PPTX/ODP -> PDF pipeline with RQ worker + Gotenberg
DB/model

Add Conversion model + ConversionStatus enum (pending, processing, ready, failed)
Alembic migrations: create conversions table, indexes, unique (source_event_media_id, target_format, file_hash), and NOT NULL on file_hash
API

Enqueue on upload (ppt|pptx|odp) in routes/eventmedia.py: compute sha256, upsert Conversion, enqueue job
New routes:
POST /api/conversions/<media_id>/pdf — ensure/enqueue conversion
GET /api/conversions/<media_id>/status — latest status/details
GET /api/files/converted/<path> — serve converted PDFs
Register conversions blueprint in wsgi
Worker

server/worker.py: convert_event_media_to_pdf
Calls Gotenberg /forms/libreoffice/convert, writes to server/media/converted/
Updates Conversion status, timestamps, error messages
Fix media root resolution to /server/media
Prefer function enqueue over string path; expose server.worker in package init for RQ string compatibility
Queue/infra

server/task_queue.py: RQ queue helper (REDIS_URL, default redis://redis:6379/0)
docker-compose:
Add redis and gotenberg services
Add worker service (rq worker conversions)
Pass REDIS_URL and GOTENBERG_URL to server/worker
Mount shared media volume in prod for API/worker parity
docker-compose.override:
Add dev redis/gotenberg/worker services
Ensure PYTHONPATH + working_dir allow importing server.worker
Use rq CLI instead of python -m rq for worker
Dashboard dev: run as appropriate user/root and pre-create/chown caches to avoid EACCES
Dashboard dev UX

Vite: set cacheDir .vite to avoid EACCES in node_modules
Disable Node inspector by default to avoid port conflicts
Docs

Update copilot-instructions.md with conversion system: flow, services, env vars, endpoints, storage paths, and data model
2025-10-07 19:06:09 +00:00
80bf8bc58d Add deploymnent guides for Debian and Ubuntu 2025-10-06 19:26:13 +00:00
eaf6e32446 feat(academic-periods): period selector, active period
API, holiday indicators; UI polish; bump version

Dashboard:

Add Syncfusion academic period dropdown next to group selector
Navigate scheduler to today's month/day within selected period year on change
Show adjacent holiday plan badge; keep "holidays in view" counter on the right
Compact dropdown widths for a tighter toolbar
Default blocking of scheduling on holidays; block entries styled like all-day; black text styling
API:

Add academic periods routes: list, get active, set active (POST), for_date
Register blueprint in wsgi
Holidays:

Support TXT/CSV upload; headerless TXT uses columns 2-4; region remains null
Docs:

Update shared Copilot instructions with academic periods endpoints and dashboard integration details
2025-09-21 14:35:38 +00:00
41194000a4 feat: Add academic periods system for educational institutions
- Add AcademicPeriod model with support for schuljahr/semester/trimester
- Extend Event and EventMedia models with optional academic_period_id
- Create Alembic migration (8d1df7199cb7) for academic periods system
- Add init script for Austrian school year defaults (2024/25-2026/27)
- Maintain full backward compatibility for existing events/media
- Update program-info.json to version 2025.1.0-alpha.6

Database changes:
- New academic_periods table with unique name constraint
- Foreign key relationships with proper indexing
- Support for multiple period types with single active period

This lays the foundation for period-based organization of events
and media content, specifically designed for school environments
with future extensibility for universities.
2025-09-20 11:16:56 +00:00
89d1748100 add nginx.dev.conf for development environment
add functionality of scheduler to send right event
data to the clients
added route for file download
2025-09-17 06:36:37 +00:00
c19f478f11 add copilot instructions for better use of AI-models 2025-09-14 06:36:37 +00:00
e8d71b8349 Complete Redesign of Backend Handling for Client Group Assignments 2025-09-14 05:20:49 +00:00
c5a8571e97 Adaption of dashboard to Vite and React 2025-09-13 10:03:50 +00:00
1d23b7591d Switched von pnpm to npm, adapt Dockerfiles 2025-09-12 16:16:16 +00:00
f3b72da9fe Migrate from tailwind-sidebar to syncfusion sidebar component 2025-09-12 16:09:19 +00:00
75c5622efe optimize filemanager 2025-09-12 08:46:40 +00:00
4c44b98d53 make listener robust to bad data 2025-09-05 08:47:31 +00:00
76629b8e30 additions and corrections for
deployment instructions
2025-09-04 16:45:29 +00:00
86b1bdbd91 continued try for deployment 2025-09-03 20:27:59 +00:00
e30723da0a Preparation for first deployment-test 2025-09-03 19:47:16 +00:00
4e74f72c9f multiple corrections on docker-compose and Dockerfile
robust start sequence
avoid scrolling of main content
2025-08-31 07:30:53 +00:00
2ca5f0060e add programminfo.tsx and program-info.json for
information and display of program details
add simple logout-page
2025-08-30 16:00:59 +00:00
270bad5980 introduce icons in events 2025-07-24 14:11:27 +00:00
49e9f9eade change color of work cells in the past to light
yellow
2025-07-24 10:12:25 +00:00
8bbda836b3 prevent saving past events
add function to show inactive events
2025-07-24 09:35:57 +00:00
4e6451ce80 group color shown in CustomEventModal
add functionality for edit of events
2025-07-24 07:43:32 +00:00
b0e933e895 UI polishing 2025-07-23 15:04:16 +00:00
7f4800496a implement functionality to delete clients in
clients and SetupMode components
2025-07-22 16:04:26 +00:00
c0202e5802 remove simclient and update setup mode 2025-07-20 09:41:36 +00:00
c9fbb38347 test entrypoint for git 2025-07-19 09:27:03 +00:00
2e9f22f5cc test communication scheduler<->simclient 2025-07-18 14:49:53 +00:00
a1d6d83488 Solve lint errors 2025-07-17 07:04:01 +00:00
4e525e4bae Automatic detect of clients 2025-07-17 06:31:50 +00:00
1a6faaa104 separation of production and development
environments
Adding new migrations for renaming and adding fields
to the database schema
persistent uuid for simclient
2025-07-16 08:50:42 +00:00
84a92ab9c2 functional system simclient<-> listener<->server 2025-07-15 15:37:16 +00:00
f37744b31e models.py moved to models/models.py
refactor all imports
2025-07-15 10:45:56 +00:00
661d25d70c Scheduler: Refactor database utilities and
scheduler logic
2025-07-15 05:05:09 +00:00
2fa84c1e2b Setup: Make Docker Compose, Scheduler, and Simclient fully operational 2025-07-14 18:41:28 +00:00
7c1f546af9 Remove legacy Dash frontend after React migration 2025-07-14 17:19:14 +00:00
6e6e5c383a Create and save custom events in database dash-frontend-backup 2025-07-14 16:58:00 +00:00
16581a974f Basic version of eventmedia-management (upload,
save in database)
2025-07-10 09:32:35 +00:00
43306130f7 First version of media manager 2025-07-07 14:48:37 +00:00
2127c3a753 Refactor database schema and update event media
handling
2025-07-05 05:24:00 +00:00
f5cb25bdce new custom modalbox for event input 2025-07-03 16:06:20 +00:00