Adds the multi-step website registration at /school/register (parent -> student -> class), carrying state across steps in the request session (auth='public' - a family with no account yet can register). Finalizing creates/finds the parent partner by email, creates the child partner + student, and creates the enrollment as 'enrolled' or 'waitlist' depending on whether the chosen class.fee_product_id/max_students still has room - generating a draft fee invoice when the class has a fee (a new class.fee/fee_product_id, following the same auto-created-product pattern as community_membership's tiers). LMS glue: enrollment create/write now auto-enrols the student's partner into the class's slide.channel via _action_add_members() when state becomes 'enrolled', and deactivates the slide.channel.partner membership on withdrawal. An hourly cron (_cron_promote_waitlist) fills freed seats from the waitlist in enrollment-date order and emails the parent. Adds scripts/migrate_classroom.py: a standalone, dependency-free (stdlib only) JSON-RPC script that reads a title,url CSV and creates slide.slide records in a target channel - YouTube links become published video slides (source_type='external' lets Odoo's own compute fields resolve youtube_id automatically), everything else becomes an unpublished document slide flagged for manual re-upload/review, since the script can't read Google Drive content itself. Idempotent by (channel_id, title); --dry-run and --force supported. Verified against a live Odoo 19 + Postgres 16 container: 14/14 automated tests pass, plus full manual live runs - walked all three registration steps over real HTTP (with CSRF tokens) and confirmed the resulting enrollment and draft invoice; ran the migration script twice against a real channel and confirmed the second run skipped both already-created slides, with the YouTube slide's youtube_id correctly auto-derived. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
53 lines
1.7 KiB
Python
53 lines
1.7 KiB
Python
{
|
|
'name': 'Community OS - School',
|
|
'version': '19.0.1.0.0',
|
|
'category': 'Website/Education',
|
|
'summary': 'Programs, levels, classes, enrollment, attendance and parent portal for any weekend/community school',
|
|
'description': """
|
|
Community OS - School
|
|
=======================
|
|
|
|
A generic education module for weekend, language, cultural, or community
|
|
schools - levels/grades/proficiency are admin-defined data, so the same
|
|
module fits a Grade 1-12 school or a Beginner-Advanced language school
|
|
with no code change.
|
|
|
|
* Terms, levels, classes, students, and enrollment
|
|
* Teacher attendance portal with parent absence notifications
|
|
* Multi-step online registration (parent -> student -> class + payment)
|
|
* Waitlist handling with automatic seat-freed notifications
|
|
* Optional LMS glue via website_slides (auto channel per class)
|
|
""",
|
|
'author': 'Metatroncube Software Solutions LLP',
|
|
'website': 'https://www.metatroncube.com',
|
|
'license': 'LGPL-3',
|
|
'price': 0.00,
|
|
'currency': 'USD',
|
|
'depends': [
|
|
'contacts',
|
|
'portal',
|
|
'website_slides',
|
|
'account',
|
|
],
|
|
'data': [
|
|
'security/school_security.xml',
|
|
'security/ir.model.access.csv',
|
|
'data/mail_templates.xml',
|
|
'data/ir_cron.xml',
|
|
'views/school_views.xml',
|
|
'views/school_menus.xml',
|
|
'views/res_config_settings_views.xml',
|
|
'views/portal_attendance_templates.xml',
|
|
'views/registration_templates.xml',
|
|
],
|
|
'demo': [],
|
|
'assets': {
|
|
'web.assets_frontend': [
|
|
'community_school/static/src/js/school_attendance.js',
|
|
],
|
|
},
|
|
'images': ['static/description/banner.png'],
|
|
'application': True,
|
|
'installable': True,
|
|
}
|