Monday, September 21, 2026
16 changes · master
Enhancements to existing features
The timesheet assistant animation now ends more smoothly by keeping the focus on the timesheet screen and showing the total time captured. The example entries look more realistic with client names and clearer task labels, making the assistant feel more polished and easier to understand.
Original PR description
Before these changes, the animation cut harshly to the end message. Now the focus stays on the timesheet screen at the end, showing the total time captured. The message is clearer, and the logs now carry a client to look like real timesheets. task-6090601 Forward-Port-Of: odoo/enterprise#126838
Manufacturing order PDF reports now have clearer styling and include more useful production details. Business users can see produced lot or serial numbers, deadlines, consumed quantities, quantities still to consume, and component serial numbers directly in the report.
Original PR description
Improved styling and added extra information to the MO pdf. The lot/serial numbers for the produced products are now displayed on the pdf. The deadline is also displayed. Furthermore the consumed and to consume quantity of each part are now displayed, same as the serial numbers associated with the parts. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#287596
Romanian eTransport declarations can now be generated for supported dropshipping scenarios, including domestic and international B2C flows. This helps businesses using dropshipping comply with Romanian transport reporting requirements, while unsupported B2B dropship cases now show clear errors.
Original PR description
Before this commit: Dropship operations were not supported by the Romanian eTransport integration. As a result, eTransport declarations could not be generated for dropshipping flows. After this commit: eTransport declarations can now be generated for dropship operations, allowing the supported dropshipping scenarios to be processed through the Romanian eTransport workflow. task-6391489 Forward-Port-Of: odoo/odoo#289344 Forward-Port-Of: odoo/odoo#280199
The partner amount due button now uses a more general label and shows signed amounts instead of always displaying absolute values. Open item views also include payable items by default, giving users a clearer picture of customer and supplier balances.
Original PR description
With this commit:- - We changed the label of the smart button and gave generic name. - The button will not show the absolute value, but simple values with a sign will be shown. - Open items will also have the 'payable' filter by default. task-6528204 Forward-Port-Of: odoo/enterprise#131910
The Sales dashboard now updates its cards after users run actions on selected sales orders. This keeps counts and amounts current without requiring a manual page refresh, improving confidence in dashboard data during daily sales work.
Original PR description
**Target: 20+** **Description of the issue/feature this PR addresses:** The Sales dashboard doesn't dynamically reflect changes made through actions. **Current behavior before PR:** Selecting several sale orders in the list view and running an action updates the records but the dashboard cards above keep showing stale counts/amounts until the page is manually refreshed. **Desired behavior after PR is merged:** After such a action completes, the dashboard automatically reloads and shows up-to-date data. Forward-Port-Of: odoo/odoo#288506
This update keeps light gray visual elements looking consistent after the broader web client redesign changed the meaning of the secondary color. It helps avoid unexpectedly darker backgrounds, borders, alerts, and icons across several Odoo apps, preserving the intended user experience.
Original PR description
- requires: https://github.com/odoo/enterprise/pull/131768 With the webclient redesign deployed for Odoo 17, we used to set `$secondary` to `$gray-300`, a light gray, while Bootstrap's secondary is a…
List views now give clearer feedback while users edit multiple records, replacing separate save and discard buttons with a status indicator. Clicking, focusing, and validation behavior is more reliable, so users are less likely to lose track of required corrections during bulk edits.
Original PR description
Main changes: - Add `ListStatusIndicator` to replace Save/Discard buttons. - Improve cell click and focus behavior in `ListRenderer`. - Update cursor styles for selected and read-only cells (editable fields will have text cursor otherwise default cursor). - Remove the mass-edit pencil button. task-6463104
Point of Sale global discount lines now show the applied percentage when relevant and avoid showing unnecessary unit price details for fixed discounts. This makes discounts easier for staff and customers to understand across POS screens, receipts, customer displays, and self-ordering flows.
Original PR description
..., point_of_sale, pos_self_order, pos_discount_self_order (ADD) --- Global discount lines did not indicate the applied percentage and displayed redundant unit price information for fixed discounts. Include the percentage in the name of percentage discount lines and hide their unit price details. Apply this consistently to the POS, receipts, customer displays, and self-ordering interfaces. --- Task: https://www.odoo.com/odoo/project/1737/tasks/6537486
This update brings the spreadsheet component to a newer version with improvements for resizing rows and columns, better handling of zoom values, and fixes that prevent blank spreadsheet grids. Users should see a smoother and more reliable spreadsheet experience in Odoo dashboards and spreadsheet views.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/63c49a88a3 [REL] 20.1.0-alpha.2 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/63c49a88a3 [REL] 20.1.0-alpha.2 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/62ac6604c6 [FIX] header_resize_editor: remove unnecessary toString() [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/4bcd7f6f33 [IMP] zoom: clip out-of-range values instead of ignoring them [Task: 6515617](https://www.odoo.com/odoo/2328/tasks/6515617) https://github.com/odoo/o-spreadsheet/commit/b7e1d79a4d [FIX] stores: prevent blank grid when zoom value is empty [Task: 6515617](https://www.odoo.com/odoo/2328/tasks/6515617) https://github.com/odoo/o-spreadsheet/commit/c2bc431a3c [REL] 20.1.0-alpha.1 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/0d33ec1665 [IMP] headers: resize rows and columns from context menu [Task: 6234780](https://www.odoo.com/odoo/2328/tasks/6234780) https://github.com/odoo/o-spreadsheet/commit/b704a2d032 [REF] viewports: centralize Cartesian coordinate lookup [Task: 6234780](https://www.odoo.com/odoo/2328/tasks/6234780) https://github.com/odoo/o-spreadsheet/commit/0bd4c2d221 [IMP] headers: cap row and column sizes [Task: 6234780](https://www.odoo.com/odoo/2328/tasks/6234780) https://github.com/odoo/o-spreadsheet/commit/1307c3f3a9 [REF] env: remove side panel methods [Task: 6566084](https://www.odoo.com/odoo/2328/tasks/6566084) Co-authored-by: Florian Damhaut (flda) <flda@odoo.com> Co-authored-by: Anthony Hendrickx (anhe) <anhe@odoo.com> Co-authored-by: Alexis Lacroix (laa) <laa@odoo.com> Co-authored-by: Lucas Lefèvre (lul) <lul@odoo.com> Co-authored-by: Adrien Minne (adrm) <adrm@odoo.com> Co-authored-by: Ronak Mukeshbhai Bharadiya (rmbh) <rmbh@odoo.com> Co-authored-by: Dhrutik Patel (dhrp) <dhrp@odoo.com> Co-authored-by: Rémi Rahir (rar) <rar@odoo.com> Co-authored-by: Pierre Rousseau (pro) <pro@odoo.com> Co-authored-by: Vincent Schippefilt (vsc) <vsc@odoo.com> Co-authored-by: Marceline Thomas (matho) <matho@odoo.com>
Spanish Veri*Factu invoice problems that are detected before submission are now marked as rejected and shown in the usual invoice views. The sales journal dashboard also highlights invoices with Veri*Factu errors, helping accounting teams spot and resolve issues sooner.
Original PR description
Users had no easy way to spot sale invoices that are broken from a Veri*Factu standpoint: the account.move field only ever reached the 'rejected' state after a real submission attempt to the AEAT got…
Users had no easy way to spot sale invoices that are broken from a Veri*Factu standpoint: the account.move field only ever reached the 'rejected' state after a real submission attempt to the AEAT got a negative answer. Invoices that fail local validation before anything is sent (e.g. more than one main tax on a line) generate a l10n_es_edi_verifactu.document with errors filled in but state left empty, so they never showed up as rejected anywhere and could sit unnoticed until someone opened the invoice's Veri*Factu tab. Widen L10nEsEdiVerifactuDocument._get_state() so a document also counts as 'rejected' whenever it has errors set, regardless of the literal state value. This reuses the existing account.move computed/stored l10n_es_edi_verifactu_state field as the single source of truth instead of duplicating the check against the UI-only, non-stored warning fields, so every consumer of that state (list view badge, search filters) picks up the change for free. On top of that, add a "Veri*Factu Error(s)" entry to the sale journal's dashboard kanban card, with its own search filter, so these invoices are visible from the accounting dashboard without having to open each one individually. task-6463206 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update improves Belgian payroll cafeteria plan handling by adding support for net contributions and salary sacrifice calculations. It helps ensure salary simulations respect minimum wage rules and blocks offers when salary sacrifice exceeds the allowed ratio.
Original PR description
### 1 -HR_PAYROLL - flow minimaliste : - Ajout de deux champs (sans compute / depends) - Règles salariales ### 2 - Salary config Calcul du salaire à partir du YC : ce qui descend en dessous du barème min passe en **net_contrib**. => Impact sur le calcul du YC/WAGE Calcul du salary sacrifice par rapport à un pourcentage donné dans l'offre. Au-delà d'un certain ratio, l'utilisateur ne peut pas valider le formulaire. Méthode de calcul : SS = (wage sans benefices) - (wage de la simulation)
This update improves accounting behavior for companies that operate without VAT, especially in Belgium, by adding better handling of 0% non-deductible taxes and preventing errors when taxes are missing. It also refreshes the invoicing registration dashboard after Peppol or French PDP registration so users immediately see the correct next step.
Original PR description
#### [IMP] account,l10n_be: `vat_disabled` l10n_be - Add 0% ND tax for `vat_disabled` case - Also set toggle the "Default Purchase Receipt Fiscal Position" - Fix use of `self` in `for company in self` loop - remove duplicate line account - Fix a traceback in case of missing taxes - On XML import: Match the 0% ND tax for invoice lines with tax category 'O' for vat_disabled companies task-6570364 #### [IMP] account_peppol,l10n_fr_pdp: refresh page after registration I.e. this is needed so that the dashboard reloads after registration. Otherwise there is still a button to open the peppol / pdp registration wizard respectively. After the refresh it is gone and replaced by a link to the settings. task-6570364 #### [REF] l10n_be: `vat_disabled` replaced taxes Replace 4 searches with a single `_read_group` task-6570364 Forward-Port-Of: odoo/odoo#288149
HR officers can now enter a fixed monthly reimbursement amount for employees using a private car for home-to-work travel under Belgium's CP200 category. This gives payroll teams more flexibility while ensuring payslips, reporting, and related payroll documents use the chosen reimbursement amount correctly.
Original PR description
For employees under CP200 pay category, the HR officer has now the choice to either specify the private car ride between home and work, or enter a fixed amount that the employer will reimburse monthly to the employee. The private car salary rule has been modified to take into account this amount if set. The monthly amount is the same by default regarding the number of worked days it is computed on. However, the HR offcier can modify the number of days manually, which modifies the monthly amount if recomputed on the payslip. task-6424651
Shop floor and barcode users can now complete quality checks and create quality alerts without needing access to the full Quality app. This keeps the main app hidden for light users while still letting them handle required quality tasks during production or warehouse work, with better employee details available in shop floor screens.
Original PR description
Light users should be able to perform/validate quality checks and create quality alerts through shopfloor/barcode. Task: 6469225 Forward-Port-Of: odoo/enterprise#130431
Companies with VAT disabled will no longer see the generic tax report or reports based on the generic EC sales report. This keeps reporting menus focused on relevant obligations and reduces confusion for users who do not need VAT reporting.
Original PR description
- Disable the generic tax report. - Also disable all reports that have the generic ec sales report as root report. task-6570364 Forward-Port-Of: odoo/enterprise#131471
The spreadsheet component has been updated to a newer version, bringing usability improvements such as resizing rows and columns directly from the context menu. It also adds safeguards around row and column sizing and includes internal cleanup to keep the spreadsheet experience more reliable and easier to maintain.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/c2bc431a3c [REL] 20.1.0-alpha.1 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/c2bc431a3c [REL] 20.1.0-alpha.1 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/0d33ec1665 [IMP] headers: resize rows and columns from context menu [Task: 6234780](https://www.odoo.com/odoo/2328/tasks/6234780) https://github.com/odoo/o-spreadsheet/commit/b704a2d032 [REF] viewports: centralize Cartesian coordinate lookup [Task: 6234780](https://www.odoo.com/odoo/2328/tasks/6234780) https://github.com/odoo/o-spreadsheet/commit/0bd4c2d221 [IMP] headers: cap row and column sizes [Task: 6234780](https://www.odoo.com/odoo/2328/tasks/6234780) https://github.com/odoo/o-spreadsheet/commit/1307c3f3a9 [REF] env: remove side panel methods [Task: 6566084](https://www.odoo.com/odoo/2328/tasks/6566084) Co-authored-by: Florian Damhaut (flda) <flda@odoo.com> Co-authored-by: Anthony Hendrickx (anhe) <anhe@odoo.com> Co-authored-by: Alexis Lacroix (laa) <laa@odoo.com> Co-authored-by: Lucas Lefèvre (lul) <lul@odoo.com> Co-authored-by: Adrien Minne (adrm) <adrm@odoo.com> Co-authored-by: Ronak Mukeshbhai Bharadiya (rmbh) <rmbh@odoo.com> Co-authored-by: Dhrutik Patel (dhrp) <dhrp@odoo.com> Co-authored-by: Rémi Rahir (rar) <rar@odoo.com> Co-authored-by: Pierre Rousseau (pro) <pro@odoo.com> Co-authored-by: Vincent Schippefilt (vsc) <vsc@odoo.com> Co-authored-by: Marceline Thomas (matho) <matho@odoo.com>
- requires: https://github.com/odoo/enterprise/pull/131768
With the webclient redesign deployed for Odoo 17, we used to set `$secondary` to `$gray-300`, a light gray, while Bootstrap's secondary is a dark gray. With the new webclient redesign, it is now sets to `$o-gray-700`, closer to the Bootstrap default, so everything built on `$secondary` got darker: `bg-secondary`, `text-bg-secondary`, `border-secondary`, the `-subtle`/`-emphasis` variants, `alert-secondary` and SCSS rules reading `$secondary`.
Usages that meant "light gray" now use `gray-300`, the former value of `$secondary`, or the closest gray token, so they render as before. To get that light look, don't use secondary, instead, use:
```
bg-secondary -> bg-300
text-bg-secondary (no badge) -> text-bg-300
text-secondary (icons, dots) -> text-300
bg-secondary-subtle -> bg-100
text-secondary-emphasis -> text-700
border-secondary-subtle -> border-light-subtle
alert-secondary -> alert-light
border-secondary -> drop it: `border`, `border-top`, ...
already draw `--border-color`
(gray-300); on a `.card`, use `border`
$secondary -> $gray-300
$secondary-text-emphasis -> $gray-700
@each ... in $theme-colors -> map-merge($theme-colors,
("secondary": $gray-300))
```
task-6578378
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#288603