Daily updates from Odoo
Thursday, August 13, 2026
6 changes · 19.0
Resolved issues and error corrections
Studio approval rules can now be checked even when a sales user lacks access to accounting-related fields used in the rule. This prevents valid sales order confirmations from being blocked by an access error when approvals depend on related customer follow-up information.
Original PR description
continuation of [PR](https://github.com/odoo/enterprise/pull/121856) Issue: Inside _get_approval_spec filtered_domain is called a few times and due to a related field that calls an access rights group that the user who used the action isnt apart of is blocked by the filtered_domain. To Replicate: 1) Install studio, sale, Accounting and make sure "account_followup" is installed 2) create a related field on the sales.order form related to "customer -> follow up status" 3) Save 4) Create a "Studio Approval Rule" (studio.approval.rule) with a domain using the new related studio field -> method : "action_confirm" -> approver:admin 5)create a test user with no accounting access rights 6) in an incognito browser try and create a sales order, and then confirm it. it will throw the access rights error Solution: Go one up the stack where _get_approval_spec is called and add a syudo for those calls opw-6316069
Global invoices for Mexican POS orders now ignore cancelled refunds, preventing invoice creation errors when a customer return was started but not completed. This helps ensure valid paid refunds are processed correctly without incorrectly reducing the original order twice.
Original PR description
Steps to reproduce: ------------------- 1. Install `l10n_mx_edi_pos` and set the company to Mexico. 2. In PoS, make an order with one product and pay it. 3. Open the order in the backend, click…
Steps to reproduce: ------------------- 1. Install `l10n_mx_edi_pos` and set the company to Mexico. 2. In PoS, make an order with one product and pay it. 3. Open the order in the backend, click "Return Products" to make a refund, but don't pay it, cancel it instead. 4. From the same order, click "Return Products" again to make a second refund, and pay it normally. 5. Go to the orders list, select the main order and the paid refund (not the cancelled one), then Actions > Create Global Invoice. -> Observation: error in the global invoice. In the CFDI tab of the main order the line is "Send Global In Error", and hovering on it the detail says "Failed to distribute some negative lines". Why: ---- When we make the global invoice, we remove the refunds from the order. A cancelled refund was never paid, so we should not count it. But we were counting it too. So we removed the refund amount twice in our case, one for the paid refund, and one for the cancelled one, and we end up with an order with negative amount that cannot be distributed. The fix: -------- We now skip the cancelled orders when we search the refunds, the same way it is done above when we collect the refunded orders. opw-6261404 Forward-Port-Of: odoo/enterprise#127560 Forward-Port-Of: odoo/enterprise#120996
The Sign Documents wizard now keeps the Employee role selectable when users choose multiple signature templates that use separately created roles with the same name. This prevents signature requests from being blocked when combining templates such as contracts and policies.
Original PR description
Problem: When selecting several sign templates with different signatory counts in the "Sign documents" wizard (e.g. a Contract template together with a Computer Policy template), the Employee Role…
Problem: When selecting several sign templates with different signatory counts in the "Sign documents" wizard (e.g. a Contract template together with a Computer Policy template), the Employee Role field would empty out or disappear entirely, with "No records" shown in the dropdown. This blocked users from sending the signature request at all. Purpose: `_compute_responsible_ids` matched roles across the selected templates by recordset identity (`&=`), i.e. by database id. Since the Sign Template Builder allows free-text role creation, two templates can end up with roles that are visually/semantically identical (same name, e.g. "Employee") but were created as separate `sign.item.role` records with different ids. The id-based intersection then evaluated to an empty recordset, which made the Employee Role field's domain empty and the field itself collapse in the UI. This fix matches roles by name instead of by id when computing the common roles across selected templates, and resolves the correct per-template role id by name in `validate_signature` instead of reusing a single id across every template. Steps to Reproduce On Runbot: 1. Go to Sign > Templates and create two templates, each with one role named "Employee", added independently (so they end up as two distinct sign.item.role records with the same name). 2. Go to an employee's Contract, click "Sign Documents". 3. Select both templates in "Documents to sign". 4. Observe the Employee Role field empties out / shows no records, and the request cannot be sent. opw-6445327
Swiss payroll now counts flexible employee absences using the dates selected in the time off request, avoiding an extra day caused by timezone conversion. This prevents one-day accident leave from being prorated as two days, helping keep regular wage and accident salary amounts accurate.
Original PR description
Issue: Swiss payslips count one extra absence day for employees without a working schedule. A one day accident leave can therefore be prorated as two days, reducing the regular wage and overstating…
Issue: Swiss payslips count one extra absence day for employees without a working schedule. A one day accident leave can therefore be prorated as two days, reducing the regular wage and overstating the accident salary. Steps to reproduce: * Install Swiss Payroll. * Configure a monthly employee without a working schedule. * Assign one day of accident time off. * Generate the payslip for that month. Cause: The Swiss wage computation derives absence boundaries from the date portion of the leave's UTC datetimes: https://github.com/odoo/enterprise/blob/16c29e1bab34b5bcb2b001477d928ec5eb294a97/l10n_ch_hr_payroll/models/hr_payslip.py#L313-L330 A fully flexible employee's full day leave starts at local midnight. In timezones ahead of UTC, that start is stored on the previous UTC date, so the inclusive calendar day computation adds an extra day. Solution: We need to use the requested time off dates for both payslip range filtering and absence proration. These fields preserve the calendar days selected by the user independently of timezone conversion, while leaving the UTC datetimes and half-day handling unchanged. opw-6435086
Fixes a mobile Documents issue where the Info & Tags panel could appear enabled but remain hidden or inaccessible after reloads, view switches, previews, or selection changes. This keeps document details and chatter actions available in the correct state, reducing confusion for mobile users.
Original PR description
**Steps to reproduce:** - Go to Documents app in mobile - Go to the kanban view - Add some files and select one - Click on `Info & Tags` button in the control panel - Reload the page - Chatter is not…
**Steps to reproduce:** - Go to Documents app in mobile - Go to the kanban view - Add some files and select one - Click on `Info & Tags` button in the control panel - Reload the page - Chatter is not displayed but the button is still enabled - Switching to the list view properly shows it **Issue:** Original fix (see [1]) was not enough for every case. Additional issues: - Chatter hidden on init even when its panel has `visible = true` - State desynchronized with the view when switching menu type (kanban/list) or by previewing a document and coming back - When using the button with an open preview, chatter shows up in the background but is not accessible (and going back discards it) - Removing selection with an open chatter disable the related action **Fix:** - Disable the chatter on mobile init by default to avoid having to manually move it back - Reset chatter on selection removal to avoid getting stuck in the menu - Reset chatter on view switch to avoid being in the wrong state afterwards (and revert the previous css changes) Not a great fix (quite mobile-specific) and there might still be some edge cases. [1] original fix: https://github.com/odoo/enterprise/commit/cf3c2fce8a6b7b2d7547d44a0e4423f887986d52 opw-6061993
Large accounting reports now render fewer hidden lines, reducing page weight and improving responsiveness when users fold sections or search. This helps teams work more smoothly with reports containing thousands of lines until the newer virtual grid technology is available.
Original PR description
When a report has 1 000+ lines, the DOM gets quite heavy which make DOM operation very slow. To help reduce this, we now will minimize the number of components rendered by removing components that previous were just hidden using "d-none" on the line. This will require more creation and suppression of components but it should make the DOM size smaller so it should help on larger reports where a lot of lines are hidden (by folding back a line, or by using the search bar). opw-6427411 opw-6442756 PR Note: this is only required until saas-19.5/20.0 since the virtual grids are added then which will resolve this issue since the virtual grids only render what's in the view of the user with long paddings on top and bottom so only ~70-80 lines are actually rendered.