Flight School Management is a modular Odoo 19 addon suite for managing flight school operations. It covers fleet readiness, personnel records, training programs, document compliance, mission scheduling, and daily flight execution in one integrated workflow.
The suite is designed for aviation training organizations that need auditable records, structured training workflows, and operational visibility across students, instructors, aircraft, schedules, and completed flights.
- Key features
- Addon modules
- Requirements and dependencies
- Installation
- Configuration
- Usage examples
- Project structure
- Development and validation
- Documentation standards
- Contributing
- Security
- License
- Central settings and security: shared Flight School menus, departments, access groups, and system-wide configuration.
- Fleet management: aircraft categories, aircraft types, aircraft records, airworthiness state, maintenance thresholds, and certificate expiry tracking.
- People management: students, instructors, pilots, administrative staff, licenses, ranks, qualifications, English levels, medical classes, and linked Odoo user accounts.
- Training management: class types, training classes, enrollments, flight disciplines, flight activities, missions, hour requirements, completion tracking, and training dashboards.
- Document management: document types, entity links, upload workflows, version history, current-version previews, and expiry status synchronization.
- Scheduling: planned flights, routes, cancellation reasons, pilot functions, custom activities, crew-member search, conflict detection, batch scheduling, and timeline views.
- Flight operations: daily and simulator operations boards, scheduled-flight publishing, actual time tracking, cancellation workflows, ADD flights, schedule import, and controlled ledger corrections.
- Authoritative hour ledger: immutable, idempotent integer-minute postings for personnel identity totals, enrollment progress, aircraft utilization, and instructor workload.
| Addon | Purpose | Key dependencies | Module docs |
|---|---|---|---|
fs_core |
Shared settings, departments, security groups, menus, and base configuration. | base, base_setup, auth_signup |
README |
fs_access_control |
Functional department policies, role levels, grants, and audited administrator overrides. | fs_core, mail |
- |
fs_fleet |
Aircraft categories, aircraft types, aircraft records, fleet dashboard, maintenance and certificate awareness. | fs_core, mail |
README |
fs_people |
Students, instructors, pilots, staff, qualifications, licenses, medical and English-level tracking. | fs_core, mail |
README |
fs_hour_ledger |
Immutable minute postings, reversals, adjustments, projection refresh, and reconciliation. | fs_people, fs_fleet, fs_access_control, mail |
- |
fs_training |
Training classes, class types, enrollments, missions, activities, requirements, and progress tracking. | fs_core, fs_people, fs_fleet, fs_hour_ledger, fs_access_control, mail |
README |
fs_documents |
Document types, uploads, versions, previews, expiry tracking, and related-record shortcuts. | web, fs_core, fs_people, fs_training |
README |
fs_scheduling |
Scheduled flights, crew-member view, routes, pilot functions, conflict checks, timeline views, and scheduling wizards. | fs_core, fs_training, fs_fleet, fs_people, fs_hour_ledger, fs_access_control, mail, web_timeline |
README |
fs_flights |
Daily operations, simulator operations, flight logs, schedule publishing, cancellations, and ledger posting/correction workflows. | fs_scheduling, fs_fleet, fs_training, fs_people, fs_hour_ledger, fs_access_control, mail, bus |
README |
Install the modules you need, or install the full suite for the complete end-to-end workflow.
| Component | Minimum | Notes |
|---|---|---|
| Odoo | 19.0 | The manifests and assets target Odoo 19. |
| Python | 3.10+ | Use the Python version supported by your Odoo 19 deployment. |
| PostgreSQL | 13+ | PostgreSQL 15+ is recommended for production. |
| Operating system | Linux or Windows | Linux is recommended for production Odoo hosting. |
The Flight School addons use standard Odoo modules (base, base_setup,
auth_signup, mail, web, and bus) plus the external web_timeline addon
for scheduling timeline views.
Important: Install or make
web_timelineavailable inaddons_pathbefore installingfs_schedulingor the full suite.
This repository contains Odoo addons and does not vendor a separate Python
requirements file. Install the Python packages required by your Odoo 19 server
from the Odoo distribution you use, then add this repository to the server's
addons_path.
The repository includes Node-based formatting tools for frontend/XML assets:
npm install
npx prettier --check "**/*.{js,xml,css,md}"The commands below assume that odoo-bin is available from your Odoo 19 server
installation and that this repository is cloned as a custom addons directory.
Adjust paths for your deployment.
# Example custom addons location
mkdir -p /opt/odoo/custom/addons
cd /opt/odoo/custom/addons
git clone https://github.com/GM-327/odoo-Flight_School_Management.git Flight_School_ManagementOn Windows, place the repository in an Odoo addons path, for example:
git clone https://github.com/GM-327/odoo-Flight_School_Management.git D:\Odoo19\server\addons\Flight_School_ManagementExample odoo.conf excerpt:
[options]
db_host = localhost
db_port = 5432
db_user = odoo
db_password = <set-a-secure-password>
addons_path = /opt/odoo/odoo/addons,/opt/odoo/custom/addons/Flight_School_Management,/opt/odoo/custom/addonsUse environment-specific secrets or protected configuration management for production credentials. Do not commit real database passwords.
Make sure web_timeline is present in one of the configured addons paths. It is
required by fs_scheduling.
createdb flight_schoolAlternatively, create the database from the Odoo database manager if it is enabled in your environment.
Install the complete suite from the command line:
odoo-bin -c /path/to/odoo.conf -d flight_school \
-i fs_core,fs_access_control,fs_people,fs_fleet,fs_hour_ledger,fs_training,fs_documents,fs_scheduling,fs_flights \
--stop-after-initOr install the modules from Apps in Odoo after updating the apps list. Odoo will resolve manifest dependencies, but the recommended installation order is:
fs_corefs_access_controlfs_peopleandfs_fleetfs_hour_ledgerfs_trainingfs_documentsfs_schedulingfs_flights
odoo-bin -c /path/to/odoo.conf -d flight_schoolAfter installation, open the Flight School menus in Odoo and configure the suite in this order:
- Core settings and security
- Assign users to the appropriate Flight School security groups.
- Configure shared settings and departments.
- Fleet
- Configure aircraft categories and aircraft types.
- Register aircraft with an authorized opening balance in
HH:MM, status, maintenance dates, and certificate expiry dates.
- People
- Configure ranks, license types, qualification types, English levels, and medical classes.
- Create students, instructors, pilots, and administrative staff.
- Add qualifications and expiry dates.
- Training
- Configure disciplines, flight types, activities, class requirements, class types, and missions.
- Create training classes and enroll students.
- Documents
- Configure document entity types and document types.
- Upload required files and monitor expiry status from dashboards.
- Scheduling
- Configure pilot functions, routes, cancellation reasons, callsign settings, and buffer times.
- Use the scheduling wizard to generate planned flights.
- Flights
- Configure operations board behavior.
- Publish scheduled flights and manage daily operations.
- Register aircraft categories, aircraft types, and aircraft.
- Create instructor and student records.
- Define class types, hour requirements, flight activities, and missions.
- Create a training class and enroll students.
Example from an Odoo shell:
student = env['fs.student'].create({
'name': 'Student Pilot',
'callsign': 'SP01',
'email': 'student@example.invalid',
})
training_class = env['fs.training.class'].create({
'name': 'Initial Flight Training 2026-A',
'class_type_id': class_type.id,
'start_date': fields.Date.today(),
})
enrollment = env['fs.student.enrollment'].create({
'student_id': student.id,
'training_class_id': training_class.id,
'instructor_id': instructor.id,
'status': 'active',
})- Open the scheduling wizard.
- Select active enrollments and available instructors.
- Review generated lines, routes, aircraft types, and ADD missions.
- Assign times, aircraft, and callsigns.
- Confirm the schedule.
- Publish the day to flight operations.
Example from an Odoo shell:
wizard = env['fs.scheduling.wizard'].create({
'date': fields.Date.today(),
'selected_enrollment_ids': [(6, 0, enrollment_ids)],
'selected_instructor_ids': [(6, 0, instructor_ids)],
})
wizard.action_next_step()
wizard.action_schedule()
scheduled_flights = env['fs.scheduled.flight'].search([
('date', '=', fields.Date.today()),
])
scheduled_flights.action_publish_day()flight = env['fs.flight'].search([('status', '=', 'scheduled')], limit=1)
flight.action_start_flight()
flight.write({
'atd_minutes': 8 * 60,
'ata_minutes': 9 * 60 + 12,
})
flight.action_complete_flight()Completing a flight creates one immutable integer-minute ledger posting. Effective entries update identity, enrollment, instructor, and aircraft projections. A completed flight is corrected only through the Operations Manager reversal and repost workflow; direct aggregate edits are not supported.
Flight_School_Management/
|-- fs_core/ # Shared settings, security, departments, menus
|-- fs_access_control/ # Functional department authorization
|-- fs_fleet/ # Aircraft categories, types, records, dashboard
|-- fs_people/ # Personnel, qualifications, user links, dashboard
|-- fs_hour_ledger/ # Immutable minute postings and projections
|-- fs_training/ # Training classes, enrollments, missions, hours
|-- fs_documents/ # Document types, uploads, versions, expiry status
|-- fs_scheduling/ # Planned flights, crew view, wizard, timeline
|-- fs_flights/ # Operations boards, flight logs, hour updates
|-- .github/ # Pull request templates and repository metadata
|-- .kilo/ # Local automation commands and agent configs
|-- CONTRIBUTING.md # Contribution guidelines
|-- SECURITY.md # Security policy
|-- LICENSE # LGPL-3.0 license text
`-- README.md # Project overview and setup guide
Each addon contains its own manifest, security rules, data files, views, and
module-specific README.rst.
# Upgrade the full suite after code changes
odoo-bin -c /path/to/odoo.conf -d flight_school \
-u fs_core,fs_access_control,fs_people,fs_fleet,fs_hour_ledger,fs_training,fs_documents,fs_scheduling,fs_flights \
--stop-after-initodoo-bin -c /path/to/odoo.conf -d test_db --test-enable \
-i fs_core,fs_access_control,fs_people,fs_fleet,fs_hour_ledger,fs_training,fs_documents,fs_scheduling,fs_flights \
--stop-after-initpython -m compileall -q fs_core fs_access_control fs_people fs_fleet fs_hour_ledger fs_training fs_documents fs_scheduling fs_flightsIf Node dependencies are installed, validate frontend/XML formatting:
npm install
npx prettier --check "**/*.{js,xml,css,md}"Recommended checks before submitting a change:
- Start Odoo and upgrade affected modules.
- Exercise the changed workflow in the Odoo UI.
- Run Python syntax checks.
- Run relevant Odoo tests.
- Update module
README.rstfiles and docstrings when behavior changes.
- Root-level documentation belongs in this
README.md. - Module-specific documentation belongs in each addon's
README.rst. - Python modules, models, public methods, wizards, and migrations use Google-style docstrings.
- Complex or non-obvious business logic should include concise inline comments.
- Links should be checked when documentation is updated.
Contributions are welcome. See CONTRIBUTING.md for the full process.
Basic contribution workflow:
- Fork the repository.
- Create a focused feature or fix branch.
- Follow existing Odoo and Flight School coding patterns.
- Add or update tests and documentation where appropriate.
- Run validation checks locally.
- Open a pull request with a clear summary and testing notes.
Do not open public issues for security vulnerabilities. Follow the reporting process in SECURITY.md.
Production recommendations:
- Use HTTPS.
- Keep Odoo and addon dependencies updated.
- Restrict PostgreSQL and Odoo administration access.
- Set
list_db = Falsefor public deployments. - Use strong passwords and, where possible, two-factor authentication.
- Maintain tested backups.
This project is licensed under the GNU Lesser General Public License v3.0 or later (LGPL-3.0-or-later). See LICENSE for details.
- Odoo S.A. for the Odoo ERP framework.
- European Union Aviation Safety Agency (EASA) for aviation safety references.
- Flight School Management contributors and maintainers.