Tuesday, April 15, 2025
12 changes · 17.0
Resolved issues and error corrections
Message translation now stays available even when the system cannot identify a newer or uncommon language name. Instead of failing, it shows the language code as a fallback, improving reliability for live chat and other translated messages.
Original PR description
Before this commit, if the language name couldn't be detected by babel, attempting to translate the message resulted in a crash with `UnknownLocaleError`. Steps to reproduce: - make a livechat with…
Before this commit, if the language name couldn't be detected by babel, attempting to translate the message resulted in a crash with `UnknownLocaleError`. Steps to reproduce: - make a livechat with visitor with `crh-Latn` locale - as livechat operator, attempt to translate the message This happens because babel is unable to parse `crh-Latn`, which stands for Crimean Tatar based on Latin script. This locale has been officially approved by the National Commission on the Crimean Tatar Language on April 4th [1], very recently from the date of this commit. Because of the recency of the new locale, babel lack its parsing. Failure lead to error `UnknownLocaleError`, which is a problem because data of translated message also passes the Language name, which requires the good parsing of the locale by babel. This commit fixes the issue by displaying the language name as the locale code in case babel was unable to parse it. In practice this happens rarely, and there's incentive to update babel as quickly as possible, but that's not a reason to display the translated message even if it cannot deduce the lang name. [1]: https://babel.ua/en/news/116901-ukraine-approves-new-crimean-tatar-orthography-based-on-latin-script
The Stripe payment module test now sets a supported company country before trying to connect to Stripe. This prevents false test failures during automated module checks and helps keep Stripe-related quality checks reliable.
Original PR description
Revealed by the nightly single app tests now testing every module, possibly some other module (and formerly demo data) hides the issue by setting a country which happens to work on the current company. Since #127204 `action_stripe_connect_account` will raise an error if the current company's country is not in `SUPPORTED_COUNTRIES`. When installing the module and running the test, the country is `False`, which is not a country supported by stripe. Ensure a supported country is set before running the test. https://runbot.odoo.com/odoo/error/163118
This change prevents an error when sales users without project access create sale orders for milestone-based services. It ensures the milestone button logic can read the needed project information for users who have milestone permissions, improving reliability for affected sales workflows.
Original PR description
**Steps to reproduce:**
- Create product as service based on milestone
- Set user rights as:
- Sales/Sales : User: Own documents Only
- Services/Project: None
- Make sale order and save it
**Issue:**
Milestone button `invisible` field in the sale order view was throwing an error due to `project_ids` not being defined
for users with `project.group_project_milestone` enabled but not `project.group_project_user`.
**Fix:**
Added `project.group_project_milestone` group to `project_ids` field.
opw-4563845
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prFixes a website editor issue where undoing the deletion of an image gallery restored the gallery container without its images. This helps website editors recover deleted gallery sections reliably and avoids lost visual content during editing.
Original PR description
Steps to reproduce: - Drag and drop image gallery snippet. - Delete the snippet. - Click on Undo. - The snippet appears but images will not be there. The issue comes from the fact that when the snippet is deleted, a relayout of the snippet is triggered for each image present in it. This is necessary when an image is deleted, but not when the snippet itself is deleted. task-4690318
This fix prevents an error when users replace an image in an email template before the email record has been saved. It helps ensure the email editing flow works smoothly when creating new marketing emails.
Original PR description
Problem:
When calling `modify_image` for an attachment linked to a record that hasn't been created yet (`res_id` is `None`), a traceback occurs. This is because `fields` lacks the `res_id` key when we call:
request.env[fields['res_model']]
.browse(fields['res_id'])
.check_access_rights('write')
Solution:
Use `0` as default `res_id`. This is consistent with what `get_existing_attachment` already does:
fields['res_id'] = fields.get('res_id') or 0
Steps to reproduce:
1. Go to "Email Marketing" > "New".
2. Fill in the "Subject" and choose a mailing list.
3. In the mail body, insert a template containing an image.
4. Click on the image and replace it.
5. Save (only at this step). → Traceback occurs since `modify_image` is called with a `None` res_id.
opw-4715999
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prProduct category names in self-ordering kiosks now wrap more naturally, avoiding awkward splits in the middle of words when space is available. This makes kiosk menus easier to read and improves the customer-facing presentation of categories such as “Special Menu.”
Original PR description
Before this commit, the text wrapping in the product categories sometimes resulted in ugly breaks in the middle of words where not needed. Steps to reproduce ----- 1. Configure a category with spaces in Point of Sale > Configuration > PoS Product Categories For example, a category named "Special Menu" 2. Open a self-ordering kiosk, the "Special Menu" will be displayed as "Special M" + "enu" Cause ----- The styling `word-break: break-all;` was added to this element in #140095 to avoid overlapping category names. However `break-all` always breaks in the exact place needed, often resulting in breaks in the middle of words. Solution ----- Use `overflow-wrap: break-word;` instead which will break between words if possible and only break in the middle of a word if needed. opw-4642999
This fix ensures that manufacturing quality checks correctly update passed or failed quantities after production is completed. It helps teams rely on accurate quality results when reviewing manufacturing orders and related quality checks.
Original PR description
Steps to reproduce: 1. Create a new BoM w/ a pass/fail operation step 2. Create a manufacturing order using that BoM 3. Go the the Quality app 4. Open the quality check created for the MO 5. Click on Pass (or Fail, does not matter) 6. Go back to the MO and click Produce All 7. The qty_passed/qty_failed is not computed on the quality check opw-4552103
The Czech VIES summary report now excludes miscellaneous deferred entries that could appear incorrectly when a transaction code was set. This prevents rare but misleading report totals and helps keep VAT reporting accurate.
Original PR description
The miscellaneous were displayed in the VIES summary report (even if it was rare as it needs to have the field l10n_cz_transaction_code set). A common case would be to create deferred entries with this transaction field set. opw-4688616
Features or functions removed from Odoo
This change removes an obsolete Swiss payroll accounting test module because its tests have already been moved to the newer Swiss payroll ELM accounting area. It reduces duplicate maintenance work without changing payroll features or day-to-day user workflows.
Original PR description
Tests were moved to l10n_ch_hr_payroll_elm_account in https://github.com/odoo/enterprise/pull/64454
Miscellaneous changes
A check on the object received by the IoT Box containing certificate keys was always returning `False`, resulting in the certificate never being applied to the box in addition to an excessive amount of requests to odoo.com. Forward-Port-Of: odoo/odoo#206040
Original PR description
A check on the object received by the IoT Box containing certificate keys was always returning `False`, resulting in the certificate never being applied to the box in addition to an excessive amount of requests to odoo.com. Forward-Port-Of: odoo/odoo#206040
The Issue: Before this commit, if some entries had journal items with a zero amount (or if all journal items were zero), it would result in a division by zero error. The Fix: Retrieve the conversion rate only when amount_currency is present and not equal to zero. opw-4497797 Forward-Port-Of: odoo/odoo#201389
Original PR description
The Issue: Before this commit, if some entries had journal items with a zero amount (or if all journal items were zero), it would result in a division by zero error. The Fix: Retrieve the conversion rate only when amount_currency is present and not equal to zero. opw-4497797 Forward-Port-Of: odoo/odoo#201389
Even though uploaded image was .png it gives such error, reason behind this was `DecompressionBombWarning` occurred in `PIL (Pillow)`  Before this PR: - When uploading an image that is too large, the error message notification was showing wrong message. After this PR: - The error message notification will show the correct message. task-4606136 --- I confirm I have signed the CLA and
Original PR description
Even though uploaded image was .png it gives such error, reason behind this was `DecompressionBombWarning` occurred in `PIL (Pillow)`  Before this PR: - When uploading an image that is too large, the error message notification was showing wrong message. After this PR: - The error message notification will show the correct message. task-4606136 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#199564