Escodoo Odoo e-Learning
| addon | version | maintainers | summary |
|---|---|---|---|
| e-learning-boardkit | 16.0.1.0.0 | Complete eLearning course on the boardkit (Escodoo Odoo) with 12 chapters, rich HTML content, a final quiz, native certification via survey and an Escodoo Portrait A4 PDF certificate with a public-validation QR code (infrastructure provided by escodoo_elearning_certification). | |
| e-learning-planservice-boas-vindas | 16.0.1.0.0 | Welcome course for all Planservice users on Odoo 18: messaging (Messages, per-project internal channels, direct messages), calendar and activities, contacts and, most notably, the Hour Sheet from the perspective of the person logging time on tasks (% of the day, project → task automation, 100% of the day limit, desktop and mobile/tablet usage). Same visual pattern as e-learning-planservice-planejador, with native certification (survey) and an Escodoo PDF certificate with a validation QR code — infrastructure provided by escodoo_elearning_certification. | |
| e-learning-planservice-planejador | 16.0.1.0.0 | Complete eLearning course on the Planservice Planner (planservice_project_task_hour_plan) (Escodoo Odoo 18) with 8 chapters, rich HTML content, a study guide, final quiz (200 XP) and native certification via survey and an Escodoo Portrait A4 PDF certificate with a public-validation QR code — infrastructure provided by escodoo_elearning_certification. | |
| escodoo_elearning_certification | 16.0.1.0.0 | Reusable certification base for the Escodoo eLearning courses: Escodoo PDF certificate (A4 Portrait) with QR code, public validation pages and the certificate validation route. The certificate layout is course-agnostic — the syllabus is derived from the chapters of the channel itself. |
This repository is licensed under AGPL-3.0.
However, each module can have a totally different license, as long as they adhere to Escodoo
policy. Consult each module's __manifest__.py file, which contains a license key
that explains its license.
Courses for Odoo 16 eLearning, published as slide.channel (website_slides),
with native certification (survey) and an Escodoo PDF certificate.
escodoo_elearning_certification # shared base (Escodoo certificate, ALWAYS)
├── e-learning-boardkit # GLOBAL course
├── e-learning-planservice-boas-vindas # CLIENT course (Planservice)
└── e-learning-planservice-planejador # CLIENT course (Planservice)
- Every course depends on
escodoo_elearning_certification. - The
escodoo-elearningrepository is single-version: Odoo 16.0.
| Scope | Pattern | Example |
|---|---|---|
| Shared base | escodoo_elearning_certification |
— |
| Global course | e-learning-<course> |
e-learning-boardkit |
| Client course | e-learning-<client>-<course> |
e-learning-planservice-boas-vindas |
New modules must follow the same skeleton (base + course) with full packaging
(OCA readme, static/description, tests).
escodoo_elearning_certification overrides native certification templates and
is global to the database, by design (the Escodoo certificate is always
Escodoo):
- The certificate layout (
survey.certification_report_view_modernand_classic) is replaced, so every certification using amodern_*/classic_*layout prints the Escodoo certificate. - The certificate report paper format is switched to
Escodoo Certification (A4 Portrait). - A quiz header badge is injected in every quiz (
lesson_content_quiz). - One shared
slide.tag— "eLearning Escodoo" — and the public routes/certificacao/validar/<token>(+ ES alias, +/qr/<token>) are global.
Course modules themselves only create records (channel, lessons, questions, answers, certification survey); they do not alter other areas of Odoo.
If a client ever needs its own certificate instead of the Escodoo one, make the
overrides conditional on the channel: apply the Escodoo layout only when the
survey belongs to a slide.channel of the Escodoo family; otherwise keep the
native layout. Watch out: the survey dispatch is by layout_values[0]
(modern/classic), ignoring the color
(survey/views/survey_report_templates.xml), so a per-client certificate needs
its own mechanism (template by channel or a field on the channel). Not
implemented yet.
Membership is the gate; a dedicated group drives auto-enrollment (native
website_slides behaviour):
- Create the group, e.g. "Colaboradores Planservice".
- On the channel set Visibility = Members Only, Enroll = On Invitation, and Auto Enroll Groups = Colaboradores Planservice.
- Invite the collaborator (Contacts → Action → Grant portal access) and add them to the group. The core then adds them as a channel member automatically.
- Non-members (portal) do not see the course; with On Invitation they may request access, which the course responsible approves.
Native website_slides adds eLearning / Manager to base.default_user, so
every new internal user can see all channels. Portal users are not affected.
To keep the Planservice courses hidden from internal users, the Escodoo admin
must (manually, in Settings → Users → Groups):
- Remove eLearning / Manager and eLearning / Officer from
base.default_user(the user template), so new internal users do not inherit them. - Remove the same two groups from the existing internal users, except
adminand the designated eLearning admins. - Validate: a regular internal user no longer sees the eLearning app nor the Planservice channels; a portal member still sees the course.
Notes:
eLearning / Officerimplies Website / Editor. If an internal user needs to edit the website, grant that group explicitly.- A fresh install (or reinstall) of
website_slidesre-adds Manager to the template — repeat step 1 after such an operation.
Modules are permanent: a module must stay installed for its course to exist.
Uninstalling a module deletes the course (channel, lessons, survey,
questions) through ir.model.data._module_data_uninstall.
Only the lesson HTML is re-applied by -u (files without noupdate). Everything
under noupdate="1" (channel, quizzes, certification survey, questions, tag,
paperformat, certificate template) requires the resync tool:
git pull
odoo -u escodoo_elearning_certification,e-learning-boardkit,e-learning-planservice-boas-vindas,e-learning-planservice-planejador
odoo shell -d <database> < tools/resync_noupdate.pySee tools/README.md. Do not edit course content through
the interface if git is the source of truth.
Add this repository to repos.yaml and register the four modules (base first)
in addons.yaml. Example:
# repos.yaml
escodoo-elearning:
defaults:
depth: $DEPTH_DEFAULT
remotes:
origin: https://github.com/Escodoo/escodoo-elearning.git
target: origin $ODOO_VERSION
merges:
- origin $ODOO_VERSION# addons.yaml
escodoo-elearning:
- escodoo_elearning_certification
- e-learning-boardkit
- e-learning-planservice-boas-vindas
- e-learning-planservice-planejadorMake sure the courses are not also provided by another repository in the same addons path (no module name may appear twice).
Version-sensitive pieces, concentrated in escodoo_elearning_certification:
views/certificate_template.xmlinheritssurvey.certification_report_view_modern/_classic(and replaces//div[@id='o_survey_certification']).views/slide_channel_views.xmlinheritswebsite_slides.lesson_content_quizvia//div[@id='lessonQuiz'].data/paperformat_escodoo.xmlwrites their.actions.reportwithreport_name = 'survey.certification_report_view'.- Survey field
certification_report_layoutvalues.
Course content (slide/survey data) is largely stable across versions.
A new course module must be fully packaged or CI fails. Steps:
-
Create the addon following the repository skeleton (see
Architectureabove):__manifest__.pywithversionin the16.0.x.y.zform, alicensefrom the allowed list (AGPL-3),authorcontainingEscodoo,development_statusandmaintainers. Do not use the deprecateddescription/activekeys.readme/DESCRIPTION.rstis mandatory: without it the pylint check fails withmissing-readmeandoca-gen-addon-readmedoes not generate theREADME.rst.- Every course depends on
escodoo_elearning_certification.
-
Run the pre-commit hooks, which generate the packaging files:
pre-commit run --all-files
This creates
setup/<module>/(with itsodoo/addonssymlink),static/description/index.html,README.rstand updatesrequirements.txt.setup/is not git-ignored, so these generated files must be committed. -
Commit everything that was generated. The pre-commit CI job fails if any non-ignored file is left untracked.
-
Refresh the addons table in this README:
oca-gen-addons-table --no-commit --readme-path README.md --addons-dir .
Naming convention: e-learning-<course> for a global course and
e-learning-<client>-<course> for a client course (see Naming convention).
Use the branch 16.0-add-<module> and the PR title
[16.0][ADD] <module>: <description>.