v18.0.0.22.0 - #355
Open
FherStk wants to merge 110 commits into
Open
Conversation
Member
Author
|
/clean-changelog |
1 similar comment
Member
Author
|
/clean-changelog |
Member
Author
|
/clean-changelog |
Member
Author
|
/deploy-check |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What's new:
Attendance and strikes:
New color selector:
Item 2:
Changes:
Strikes:
Departments and teachers:
Accounts:
The "Create Google Account" or "Suspend Google Account" mechanism has been improved. It will be clear that, if the teacher already have a work email but no user, it will just create the local user and sync it with the Google account (no new account will be created).
Search:
Withdrawal:
Student's attendance reports:
Direct-debit invoicing (now requires an approved bank account):
Fixes:
Enrollment header (tutor group/study mismatch):
sale.order._check_group_matches_study) preventing a destination group from a different study than the one selected for the enrollment.IBAN trust migration would have failed on a real production upgrade:
_backfill_iban_trust's only test coverage ran undertest_enable=True, which happened to bypass the exact rights check (res.partner.bank._user_can_trust()) that blocks it for real. Fixed with an explicitinstall_mode=Truecontext, matching how Odoo's own data loader always runs.Legacy NULL boolean on ems.course silently unfixable by data resync:
is_enrollment_default(predating the field's introduction) that a CSV re-sync can never correct on its own, since Odoo's ORM reads NULL and False as equivalent. Backfilled explicitly via a one-time migration.LimeSurvey block "special" filter (asymmetric mutual exclusion):
special_wpi_enrolled/special_subject_enrolled) with a singlespecial_typeradio field, making the mutual exclusion structural instead of logic-enforced. Previously, checking one after the other could silently revert the first with no feedback, and only in one direction.Grade session sync guard (asymmetric with attendance template sibling):
ems.enrollment.unlink()'s grade-session sync hook now checks whether the student is still enrolled via another row before removing their grade lines, mirroring the equivalent guard its attendance-template sibling already had.ems.enrollmentduplicate rows (student/group/subject):UNIQUE(student_id, group_id, subject_id)constraint onems.enrollment.Authorization templates (inconsistent level/study matching):
Portal IBAN renewal (bank account never trusted):
/my/documentacion/renew-ibannow marks the underlying bank account as trusted (allow_out_payment), matching what the normal secretary-approval flow already did.Tutor guard (wrong-student's tutor got a generic error):
_is_blocked_tutor()now also checkshas_access('write')for a tutor, so a tutor of a different student gets the same friendly error message a plain teacher gets, instead of a bareAccessErrorfrom the underlying access rule.has_access) rather than re-deriving the rule's condition in Python, so this can't drift out of sync withsecurity/rules/contacts.xml.Student import (silent data-quality gaps now surfaced as warnings):
Enrollment uniqueness race condition (no DB-level backstop):
sale_order.init()) enforcing the same "one active enrollment per student per course" rule the existing Python check already enforces, closing a theoretical race condition between two concurrent transactions.create()/write()now translate the rare resulting database error into the same friendly message the existing check already shows, so the fix is invisible in normal use.Internal changes:
Shared authorization-matching logic
ems.authorization.template._matches_scope()predicate so the two authorization-matching code paths can't drift apart again.data/custom
__import__.prefix backlog closed:data/custom/(ems.planning, ems.course, ems.authorization.template, ir.sequence) to CSV, rescoped to the__import__.xmlid prefix via a new pre-migrate reconciliation step — centre-specific data no longer at risk of being deleted on a module upgrade.sale.order.template.lineresolved via a dynamicsearch=domain) stays XML as a confirmed, documented, permanent exception — enforced by a new test assertion.data/custom/is now explicitly documented as reapplied-every-upgrade config (matchingdata/cat/), with a narrow exclusion for fields the app itself mutates at runtime (e.g.ems.course.is_current).Shared "still enrolled" check
ems.enrollment._ems_still_enrolled(), reused by bothunlink()sync hooks, so future code needing the same "is this student still covered by a sibling enrollment" check doesn't have to duplicate the query.Test coverage gap closed
compute_survey_data— previously untested.Portal controller test coverage
HttpCase-based controller test forcontrollers/portal_enrollment.py.First browser tour for LimeSurvey blocks
ems.limesurvey_block's form (reached as a "form within a form" from the survey header), covering the newspecial_typeradio field.selectdoesn't work on a plain<select>field (useselectByLabel), andwidget="code"fields need direct Ace-editor API calls, not the generic edit action.Other changes:
Item 2:
Related with: