Friday, November 14, 2025
13 changes · saas-18.4
Enhancements to existing features
This change makes several Blackbox JavaScript utilities, services, and constants available for import by other files in the future. It does not change the current user experience, but it improves the codebase structure and makes future enhancements easier to build.
Original PR description
This commit puts export in front of some of the blackbox js utils/services/constants to make them importable from other files in the future. Forward-Port-Of: odoo/enterprise#99391
Resolved issues and error corrections
This fix ensures submenu items in the hamburger menu automatically use the same font size as the header. As a result, when the header style is changed, the menu labels stay visually consistent and update correctly.
Original PR description
Steps to reproduce: =================== - Create a menu and a submenu - Change the header template to the hamburger menu - Update the navbar format ->The format of the submenu's parent is not updated. Cause: ====== The menu in the hamburger layout uses the `.accordion-button` class, which applies a fixed base font size defined here: https://github.com/odoo/odoo/blob/ebb250d3b56970c09ffb5ebefef38f97c622c33d/addons/web/static/lib/bootstrap/scss/_accordion.scss#L37 This prevents the submenu text from inheriting the updated header font-size. Solution: ========= Allow the `.accordion-button` font size to inherit from its parent. This ensures that submenu text correctly follows the header's font-size setting. opw-5223664 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#234276
Miscellaneous changes
The self-order IoT component now correctly reads newer image version numbers that use a full date format. This prevents version checks from failing and helps keep the device software update flow working smoothly.
Original PR description
New image versions are formatted as YYYY.MM.DD instead of YY.MM. The previous can be casted to float, but not the new one. We then only take the year and month to before casting. Forward-Port-Of: odoo/enterprise#99416
This change makes the web editor test suite more reliable by giving each test its own time allowance instead of sharing one timer across all of them. It matters because slower test environments were causing occasional false failures, even though the product itself was working correctly.
Original PR description
Split the test timer between the four tests rather than applying
a single timer over all of them, for when the runbot is slower.
runbot-233975
Forward-Port-Of: odoo/odoo#235313This fix prevents a page error when an empty row is edited in the website builder. It adds a safety check so the system no longer tries to inspect columns that do not exist, improving stability for users working with empty layout blocks.
Original PR description
When a .row div was empty, the _areColsCustomized function was called with an empty HTMLCollection. This caused a traceback when the function tried to access columnEls[0]. This commit adds a safety check to _getNbColumns for avoiding extra calls to _areColsCustomized when columnEls is empty. And we also add a similar check to _areColsCustomized for safety, since it's also being called through the _computeWidgetVisibility. opw-5121738 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#235555
The receipt will now display the cashier/server name even when a preset like Eat In is used. This ensures customers and staff can always see who handled the order, making receipts more consistent and easier to review.
Original PR description
Currently cashier name is only shown if no preset is shown or if the present identification is set on name. Steps tot reproduce: -------------------- * Open restaurant * Make sure you use the Eat in preset * Place an order and pay it > Observation: On the receipt the "Served by:" indication is not shown. Why the fix: ------------ The cashier/server information should not depend on the preset used. opw-5154347 Forward-Port-Of: odoo/odoo#234767 Forward-Port-Of: odoo/odoo#231930
This update makes guided tours skip warning steps properly when moving backward. It prevents the interface from briefly jumping to a step that should not be shown, making tour navigation more reliable and less confusing for users.
Original PR description
Before this commit, the backward wasn't ignoring the warn steps. So, if the backward go to the previous step (warn's one) and the trigger is on the page, the tour interactive put the cursor there. But the step is then ignored and go back the step you came from. Now, the warn's steps are ignored. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#235511
This change fixes an intermittent test failure in the web interface by waiting for the error dialog to actually appear before checking it. It makes automated testing more stable and reduces false failures without changing the user experience.
Original PR description
Before this commit, the test sometimes failed because we didn't wait enough before checking the presence of the error dialog. The `unhandledrejection` event being thrown asynchronously, simply waiting for an animation frame isn't enough. We can only wait for the dialog to be displayed. runbot error~234017 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#235464
The OEE value shown on a workcenter card now matches the detailed OEE report. This fixes a rounding-related mismatch that could show slightly different results in different places, giving users a more consistent and accurate view of production efficiency.
Original PR description
**Current behavior:** The form view for a workcenter has an OEE smart button which can display a different value from the real OEE displayed by the `mrp_workcenter_productivity_report_oee` displayed…
**Current behavior:** The form view for a workcenter has an OEE smart button which can display a different value from the real OEE displayed by the `mrp_workcenter_productivity_report_oee` displayed when actually clicking the button and looking at the report. **Expected behavior:** Same values **Steps to reproduce:** 1. Make a workcenter and a BoM with an operation performed at the workcenter 2. Use the BoM in an MO such that there is some un-productive time (e.g., recorded production duration takes longer than expected duration) * example: 0:20 expected, 1:01 actual 3. Go to the workcenter list view -> click on the created workcenter -> look at OEE smart button display value -> click on it to see report -> report values are different **Cause of the issue:** the `oee` field on the workcenter is computed with rounded intermediary `blocked_time` and `productive_time` values, the actual report uses the raw values. **Fix:** Don't use the rounded intermediary values in computing `oee`. Post-this-diff, we actually do one less `_read_group` (along with computing a more accurate field value). opw-4795463 Forward-Port-Of: odoo/odoo#232730 Forward-Port-Of: odoo/odoo#218310
This fix removes duplicate country codes from partner tax-related settings. It prevents display issues on partner forms and keeps the data clean without changing the intended behavior.
Original PR description
Recently we started considering `country_code` as part of the `fiscal_country_codes` [1]. Because of this, the field can now contain duplicates. If your active company is a US one, and you set United States as the country on the partner you end up with `US,US`. It breaks some (admittedly fragile) invisible conditions on the `res.partner` form view [2]. Although we could fix those conditions, it would require everyone to update the module, and having duplicate country codes in `fiscal_country_codes` field doesn't serve any purpose anyway. [1] https://github.com/odoo/odoo/pull/229584 [2] https://github.com/odoo/enterprise/pull/62615 opw-5248844 opw-5241556 Forward-Port-Of: odoo/odoo#235652
When someone receives an event registration email for a ticket that was fully discounted, the message will now confirm the registration without displaying a zero-value price. This avoids confusion for attendees who might otherwise think they still need to pay the amount shown in the email.
Original PR description
Steps to reproduce: 1. Create a new sale order with an event ticket line 2. Apply a 100% discount on the ticket line 3. Confirm the sale order 4. Check on the new attendee created, the mail sent to the attendee. Current behavior: The email shows the unit price without the discount applied which can be confusing for the customer as it might look like they need to pay that amount. After this commit: The email will just show the confirmation of the registration to the event withouth mentioning the price when the total price is 0. opw-5122776 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#235482
In order to put the localization translations on Weblate, we did some cleanup of the POT and PO files for them: - Re-exported all POT files - Removed POT files for countries that don't need other languages than English - Removed all `i18n_extra` folders and moved any existing translations over to the `i18n` folder - Updated PO file names by removing superfluous country codes, or simply correcting wrong ones - Removed PO files for irrelevant languages in a localization - Updated the PO file
Original PR description
In order to put the localization translations on Weblate, we did some cleanup of the POT and PO files for them: - Re-exported all POT files - Removed POT files for countries that don't need other languages than English - Removed all `i18n_extra` folders and moved any existing translations over to the `i18n` folder - Updated PO file names by removing superfluous country codes, or simply correcting wrong ones - Removed PO files for irrelevant languages in a localization - Updated the PO files according to the POT files using `msgmerge` - Added new PO files for missing languages We also updated the `.weblate.json` file to add all the localizations in a separate Weblate project, limited to the languages they support. task-5169642 Related: https://github.com/odoo/enterprise/pull/99189 saas-18.3: https://github.com/odoo/odoo/pull/235503 19.0: https://github.com/odoo/odoo/pull/235726
In order to put the localization translations on Weblate, we did some cleanup of the POT and PO files for them: - Re-exported all POT files - Removed POT files for countries that don't need other languages than English - Removed all `i18n_extra` folders and moved any existing translations over to the `i18n` folder - Updated PO file names by removing superfluous country codes, or simply correcting wrong ones - Removed PO files for irrelevant languages in a localization - Updated the PO file
Original PR description
In order to put the localization translations on Weblate, we did some cleanup of the POT and PO files for them: - Re-exported all POT files - Removed POT files for countries that don't need other languages than English - Removed all `i18n_extra` folders and moved any existing translations over to the `i18n` folder - Updated PO file names by removing superfluous country codes, or simply correcting wrong ones - Removed PO files for irrelevant languages in a localization - Updated the PO files according to the POT files using `msgmerge` - Added new PO files for missing languages We also updated the `.weblate.json` file to add all the localizations in a separate Weblate project, limited to the languages they support. task-5169642 Related: https://github.com/odoo/odoo/pull/235120 saas-18.3: https://github.com/odoo/enterprise/pull/99389 19.0: https://github.com/odoo/enterprise/pull/99506