We're planning to write a Django application that can manage events for a group of users. The things that we need:
- There is an easy way for the admins to create new events and upon creation users are notified (per email) and can confirm or decline attendance.
- The user can integrate these events in their calendar client, e.g. thunderbird, iOS, etc.
- Depending on people attending to the event, we can create some stats, overviews, graphs, etc.
- Users can change their RSVP status and the admins are notified per email.
- Events will have probably several linked data to them (maybe some maps, documents, etc.) and other fields for categories, etc.
- Events might be recursive or one-time events.
- There is an easy way to add exceptions for recursive events.
- There is an overview for all events and RSVP status for the events is easily accessible. The count of attendees is listed for each event.
- The events overview can be filtered by different criteria (date range, category, ...)
We want to use a Django project for managing stats, linked media, listings, etc. And the plan was to add fields for the scheduled date + recurrence. But all existing calendar alternatives for Django I've found so far, e.g. django scheduler, don't seem to integrate easily with any calendar-client that supports caldav/davical. So, because for the most part, the "calendar-related"-wishes from the list above could be achieved by a normal web-calendar, I'm now exploring a new approach:
- Create a calendar with write permissions for the admin under a calendar server that supports caldav (we're thinking of nextcloud here but is not a must).
- Create the event + people (emails) to be invited from Django and send them to the web calendar per python-caldav.
- After the event has been created in the calendar, we need to link this event to our event in django.
- There must be way to get RSVP status of attendees per caldav.
- We need to update attendance-changes on Django... maybe a cron-job?
Has someone experience with this constellation and can give some feedback if it would work? Or is there maybe a better/easier way to achieve the same? Any feedback is appreciated :-)