Session 3-A - core models: community.school.term, .level (admin-defined, so the same module fits a Grade 1-12 school or a Beginner-Advanced language school with no code change), .class (auto-creates a linked slide.channel for LMS glue), .student, .enrollment, and .attendance, plus is_teacher on res.partner. Class enrolled_count and enrollment attendance_rate are stored/non-stored computes driven by the enrollment/attendance one2many chains. Session 3-B - teacher attendance + at-risk reporting: a portal page at /school/attendance (auth='user', scoped to classes where teacher_id matches the logged-in user's partner - works whether the teacher is an internal or portal user) with a roster and batch save, built as a v19 Interaction (same pattern as event_qr_ticketing's check-in page). Marking a student absent queues a configurable notice to the parent partner. Enrollment.is_at_risk flags students below a configurable attendance threshold (School settings page, same <app>/<block>/<setting> pattern as community_membership), plus an admin pivot attendance report and an At-Risk Students list. Verified against a live Odoo 19 + Postgres 16 container: 14/14 automated tests pass (class/slide-channel creation, enrolled_count tracking incl. withdrawal, attendance_rate and at-risk computation, unique enrollment+date constraint, absence email queuing), plus a full manual live run - created a term/level/class/student/enrollment via JSON-RPC, loaded the actual /school/attendance page as the teacher, POSTed a batch save marking the student absent, and confirmed both the attendance record and the queued "Absence notice" mail.mail record. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
51 lines
1.6 KiB
Python
51 lines
1.6 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',
|
|
'views/school_views.xml',
|
|
'views/school_menus.xml',
|
|
'views/res_config_settings_views.xml',
|
|
'views/portal_attendance_templates.xml',
|
|
],
|
|
'demo': [],
|
|
'assets': {
|
|
'web.assets_frontend': [
|
|
'community_school/static/src/js/school_attendance.js',
|
|
],
|
|
},
|
|
'images': ['static/description/banner.png'],
|
|
'application': True,
|
|
'installable': True,
|
|
}
|