Tuesday, May 13, 2025
22 changes · 18.0
Enhancements to existing features
Draft invoice PDFs using the Wavy or Bubble layouts no longer show an empty grey information box. This makes draft invoices look cleaner and more professional when shared or reviewed before validation.
Original PR description
Before this commit, for the layouts "Wavy" and "Bubble", when they're applied when printing Draft Invoices, the grey box (with id=informations) has no data and appears as a weird gray line. This commit hides this grey box by adding to it an outer `t-if` condition. task-4670747 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Report sections that contain no content are now automatically identified so they can be hidden or styled appropriately. This prevents empty colored strips from appearing in invoice report layouts, improving the polish of generated documents.
Original PR description
Problem: Consider a report element that is styled to have padding and backgroud color. When such an element has no content (or only whitespaces), it would show an undesired colored strip. Problem example: Invoice Wavy & Bubble reports for a draft invoice that has no date, the div with id=informations would show a colored strip when it has no content. Solution: This commit adds a tiny JS snippet that marks empty elements in reports with a class, similar to the new css `:blank` selector: https://developer.mozilla.org/en-US/docs/Web/CSS/:blank This way, such elements can be selected and styled as desired in css. task-4670747 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The appraisal template wording was revised to correct translation-related phrasing issues. This helps employees and managers see clearer, more accurate appraisal content in the HR app.
Original PR description
Edited the template wording to fix some incorrect translations task number: 4791321
Resolved issues and error corrections
DIN5008 report addresses now keep the intended font size and no longer inherit the customizable secondary color by mistake. This keeps printed quotations and similar documents visually consistent and easier to read when company report colors are changed.
Original PR description
### Steps to reproduce: - Install "l10n_din5008" - In Settings > Layout, select DIN5008 as the report and change the two possible colors - Create a quotation, print it - The address is colored ###…
### Steps to reproduce: - Install "l10n_din5008" - In Settings > Layout, select DIN5008 as the report and change the two possible colors - Create a quotation, print it - The address is colored ### Cause This [commit](https://github.com/odoo/odoo/commit/92e4c3cb3bec0b3d5537a50fd441a22fa6509ed1) reduced the size of the address by replacing `div` with `span` which is applied `font-size: 0.8em;`. But also `color: $o-default-report-secondary-color;` ([see](https://github.com/odoo/odoo/blob/d3e43681fd2b989ae7272731662cc3ac6a6d913b/addons/l10n_din5008/static/src/scss/report_din5008.scss#L47-L50)). ### Solution Don't use `span` in the CSS to select the text. Instead we create a new class `colored_address` to apply the color and apply the same font size on the entire address block. This way the addresses will always have the same font size and the color should only be applied where we want it to. Before:  After:  Ticket [link](https://www.odoo.com/odoo/project/967/tasks/4725169) opw-4725169
Miscellaneous changes
- It's not auto-exported (for now...) - It was out of date - We forgot to include the industry modules --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Original PR description
- It's not auto-exported (for now...) - It was out of date - We forgot to include the industry modules --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The web control panel now keeps search bars and action buttons aligned at medium screen sizes instead of letting them drop below other controls. This provides a cleaner, more consistent layout for users working on tablets or smaller browser windows.
Original PR description
requires: https://github.com/odoo/enterprise/pull/84124 --- In the control panel, any middle element (whether it's the search bar or control_panel_actions) tends to drop below the rest of the content…
requires: https://github.com/odoo/enterprise/pull/84124 --- In the control panel, any middle element (whether it's the search bar or control_panel_actions) tends to drop below the rest of the content under the `lg` breakpoint due to missing spacing. Under `md`, these elements collapse into dropdowns or toggle buttons as expected. Prior to this commit, there was an issue with the spacing applied between `md` and `lg`. This was either caused by the `mt-md-0` class on the search bar or the specific breakpoint use of `gap-lg-3` To resolve the spacing issue between `md` and `lg`, we now apply the correct gap (by adding a `gap-2` alongside the `gap-lg-3`) on the control panel’s main div, and remove unwanted margin/padding classes. | | Before (between md and lg) | After (between md and lg) | |--------|--------|--------| | w/ searchbar |  |  | | w/ actions |  |  | task-4568501 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes a display issue where empty integer fields could show the word "false" while a new record was being created in a list view. Users now see a cleaner, expected empty value before saving, reducing confusion during data entry.
Original PR description
Steps to reproduce: - Open a list view in which integer field having default value as false like ID field which has enable_formatting option as False. - Create a record Issue: - False is shown inside in integer field before saving. Reason: - When enable_formatting is False the value is returned and no checks are done. Fix: - A basic check to make sure we are sending out a number not a boolean. task-4700791
The Point of Sale upgrade process now skips unnecessary work when a record has no UUID. This prevents upgrades from taking longer than needed without changing day-to-day POS behavior.
Original PR description
We don't need to create values when the uuid is NULL. Otherwise we get a long running upgrade for no reason. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an error that could occur when inviting a new user from Settings in a fresh Odoo database. The invitation flow now checks whether optional email data is available before using it, so businesses can add users without interruption.
Original PR description
Steps to reproduce the issue: - Start a new database without installing any module - Log in - Go to Settings - Invite a new user => A traceback occurs due to the `email_normalized` field being accessed on `res.users`. This field is defined in the `mail` module, but `base_setup` does not depend on it. This commit adds a check to ensure that the `email_normalized` field exists before attempting to access it, preventing the traceback. opw-4784587
Product cards in the self-ordering flow now show the base product price before a customer chooses a variant. This avoids misleading prices when variants have extra charges and helps customers see accurate starting prices.
Original PR description
- Fix issue in `pos_self_order` module where the displayed product price was wrong when a product had variants (with creation "Instantly") and with an extra price. - The price displayed in the product card was the price of the first variant instead of the price of the product template (since we have not yet chosen a variant). opw: 4755565 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes a small typo so JPEG images use the correct file extension in the web interface. The change helps avoid confusion or minor compatibility issues when image files are referenced or handled.
Original PR description
Typo fix. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The Documents app no longer applies an extra spacing workaround in its toolbar area. This keeps the layout aligned with the corrected shared interface behavior, reducing the chance of uneven spacing for users.
Original PR description
requires: https://github.com/odoo/odoo/pull/207461 --- This commit removes an obsolete padding on .o_control_panel_actions class in the `documents` module. The layout issue it was compensating for has now been properly addressed in the `web` module by applying the correct gap-* classes correctly on the control panel’s main div. task-4568501
Mexican electronic invoice views now correctly show the supplier RFC when that field is added to invoice lists or forms. This fixes a display issue caused by reading a placeholder instead of the actual invoice attachment data.
Original PR description
Before this patch, adding `l10n_mx_edi_cfdi_supplier_rfc` (or any other field filled by `_fill_from_cfdi_values`) to a tree/form view showed the field empty.
Root cause
----------
`_fill_from_cfdi_values()` decoded the CFDI using `attachment.raw` with `bin_size=True` still in the context, so the ORM returned the placeholder `b'59.00 bytes'`. As a result,
`_decode_cfdi_attachment()` got an empty payload and returned `{}`.
Fix
---
Reload the attachment without the `bin_size` flag
This fix stops users from creating an incomplete private key entry while configuring Argentine invoicing. It prevents an error during renewal request generation and helps companies complete their tax configuration more reliably.
Original PR description
The system failed to retrieve `company.l10n_ar_afip_ws_key_id.pem_key` because of quick create. Steps to Reproduce: 1. Switch to `(AR) Exento Company`. 2. Navigate to `Settings `> `Invoicing`. 3. Search for `Argentinean Localization`. 4. In `Primary Key`, clear the field, enter any value, and click Create. 5. Click `Generate Renewal Request`. Error: `TypeError: argument should be a bytes-like object or ASCII string, not 'bool'` Solution: Add `no_quick_create : True` for l10n_ar_afip_ws_key_id field. Sentry - 5999498377
Description of the issue/feature this PR addresses: The "Quantities Available" field (shown in the product form vie smart button and the prognosis) can sometimes over-estimate the amounts actually available due to rounding. For example in the following case: Product-A is made via Kit-BoM from 2 Units of Product-B. There are 3 units of Product-B in stock. The precision of the "Unit" UoM, used for Product-A, is set to 1 (only integer amounts). The actual amount of units available is 1.5, this is
Original PR description
Description of the issue/feature this PR addresses: The "Quantities Available" field (shown in the product form vie smart button and the prognosis) can sometimes over-estimate the amounts actually…
Description of the issue/feature this PR addresses: The "Quantities Available" field (shown in the product form vie smart button and the prognosis) can sometimes over-estimate the amounts actually available due to rounding. For example in the following case: Product-A is made via Kit-BoM from 2 Units of Product-B. There are 3 units of Product-B in stock. The precision of the "Unit" UoM, used for Product-A, is set to 1 (only integer amounts). The actual amount of units available is 1.5, this is rounded as Half-Up to 2 Units. This is misleading, since only one unit of Product-A could be shipped. Current behavior before PR: For Kit-BoM Products, the quantities in _compute_quantities_dict() are all rounded with HALF-UP, potentially rounding up and claiming a higher availability than actually supported. Desired behavior after PR is merged: _compute_quantities_dict() rounds down to ensure it doesn't over-promise. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#208575 Forward-Port-Of: odoo/odoo#208374
So it appears from the tour build error screenshot that the redirect doesn’t happen that fast, so we need to wait for it to happen before checking the next step, which is 'Edit'—which overrides it and edits the event details instead of the events list. So, we need to wait for the redirect to happen before checking the next step build_error-164184 referencing this commit : https://github.com/odoo/odoo/commit/b1e424bcd5e985b74496e409fb16c9529bbe848e  Forward-Port-Of: odoo/odoo#208912 Forward-Port-Of: odoo/odoo#208381
**Purpose:** - The label `File Content (base64)` is still visible even if the attachment type is URL. **Specifications:** - Hide label `File Content (base64)` when attachment type is URL. task-4778138 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#209210
Original PR description
**Purpose:** - The label `File Content (base64)` is still visible even if the attachment type is URL. **Specifications:** - Hide label `File Content (base64)` when attachment type is URL. task-4778138 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#209210
PR odoo/odoo#170012 modified the application of Pension Fund taxes to invoice lines. After the PR, only lines with: `.//AltriDatiGestionale/TipoDato[contains(text(), 'AswCassPre')]` and the correct kind in the `.//AltriDatiGestionale/RiferimentoTesto` tag, got their Pension Fund tax applied. `AswCassPre` is an additional tag belonging to a "best practice" standard agreement from [AssoSoftware](https://www.assosoftware.it/servizi-offerti/standard-fe-e-protocollo-dintesa/). These may be best p
Original PR description
PR odoo/odoo#170012 modified the application of Pension Fund taxes to invoice lines. After the PR, only lines with: `.//AltriDatiGestionale/TipoDato[contains(text(), 'AswCassPre')]` and the correct kind in the `.//AltriDatiGestionale/RiferimentoTesto` tag, got their Pension Fund tax applied. `AswCassPre` is an additional tag belonging to a "best practice" standard agreement from [AssoSoftware](https://www.assosoftware.it/servizi-offerti/standard-fe-e-protocollo-dintesa/). These may be best practices, but they're not at all mandatory for using the SdI, so it happens that invoices do not follow these additional specifications. For everyone else, the Pension Fund tax must be applied on all lines where `.//DatiGeneraliDocumento/DatiCassaPrevidenziale/AliquotaIVA` tag matches the VAT tax of the line. This PR adds code that tells one case from the other. Task [link](https://www.odoo.com/odoo/project/967/tasks/4381089) task-4381089 Forward-Port-Of: odoo/odoo#207853
Versions -------- - saas-17.4+ Steps ----- 1. Create a Azure storage container with a hyphen in its name; 2. connect it to your database; 3. go to a contact; 4. click "Send message"; 5. upload an attachment. Issue ----- Server Error pop-up. In the logger, you get: > `TypeError: UserError.__init__() takes 2 positional arguments but 3 were given` Cause ----- 1. The `ValidationError` string is badly formatted. 2. The regex to verify Azure Blob Storage URLs doesn't allow hy
Original PR description
Versions -------- - saas-17.4+ Steps ----- 1. Create a Azure storage container with a hyphen in its name; 2. connect it to your database; 3. go to a contact; 4. click "Send message"; 5. upload an attachment. Issue ----- Server Error pop-up. In the logger, you get: > `TypeError: UserError.__init__() takes 2 positional arguments but 3 were given` Cause ----- 1. The `ValidationError` string is badly formatted. 2. The regex to verify Azure Blob Storage URLs doesn't allow hyphens in the container name. Solution -------- 1. As the `ValidationError` is only shown in the logger, format it as an f-string. 2. Update the regex to the constraints imposed by Azure[^1]. [^1]: https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/resource-name-rules#microsoftstorage opw-4770160 Forward-Port-Of: odoo/odoo#209127
This is used in the event a request is timing out or has an out of memory issue. This would cause the profile to be committed to the database before the request gets terminated. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#205155 Forward-Port-Of: odoo/odoo#204673
Original PR description
This is used in the event a request is timing out or has an out of memory issue. This would cause the profile to be committed to the database before the request gets terminated. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#205155 Forward-Port-Of: odoo/odoo#204673
This PR adds the reset of: 1) screen orientation 2) browser_url 3) iot_handlers_etag when disconnecting a database This allows to switch between the different versions of the database more easily and avoid getting stuck with a non existent runbot db instance pos customer display for example Forward-Port-Of: odoo/odoo#209112
Original PR description
This PR adds the reset of: 1) screen orientation 2) browser_url 3) iot_handlers_etag when disconnecting a database This allows to switch between the different versions of the database more easily and avoid getting stuck with a non existent runbot db instance pos customer display for example Forward-Port-Of: odoo/odoo#209112
### Before this PR If the backorder is "always", on the shopfloor when clicking "close production" on the "production overview", it redirects to the backend ### After this PR Clicking on close production it does not redirect to backend Forward-Port-Of: odoo/enterprise#83087 Forward-Port-Of: odoo/enterprise#79918
Original PR description
### Before this PR If the backorder is "always", on the shopfloor when clicking "close production" on the "production overview", it redirects to the backend ### After this PR Clicking on close production it does not redirect to backend Forward-Port-Of: odoo/enterprise#83087 Forward-Port-Of: odoo/enterprise#79918