Monday, September 15, 2025
91 changes
3 changes
Resolved issues and error corrections
The website editor now shows the correct size when users choose the Small text option in a banner. This fixes a visual mismatch so content editors can rely on the displayed font size matching the intended design.
Original PR description
Steps to reproduce: 1. Drop a Banner snippet 2. Select the text and change the size to "Small" - The font size is shown as 16px instead of 14px Cause: The "Small" font size was calculated using `em`, while other sizes were calculated using `rem`. Fix: Use `rem` for the small font size as well, ensuring consistent calculation across all font sizes. | Before | After | |-----------------------------|---------------------------------| | <img width="545" height="604" alt="image" src="https://github.com/user-attachments/assets/0f6b754c-e010-490f-aac1-ee0b9ba80d72" />| <img width="545" height="613" alt="image" src="https://github.com/user-attachments/assets/0ee4c756-965e-48c5-8764-3085b49a3c48" /> |
This fixes a small rounding issue in the HTML editor when converting CSS size values between units. Values entered by users are now preserved more accurately after saving, reducing unexpected tiny changes in layout settings.
Original PR description
Before this commit: The generic CSS unit converter was rounding intermediate values to three decimal places, which caused a slight discrepancy when converting values back and forth between units. As a result, the values shown upon saving differed from the originally entered values. For example, converting 19px yielded 1.188rem, which then converted back to 19.008px. After this commit: By increasing the rounding precision from three to five decimal places, round-trip conversions across all supported CSS units now maintain the expected values. For instance, 19px will convert to 1.18750rem and back to 19px. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The website editor now shows font size values as clean whole pixels after conversion, instead of small decimal drift such as 45.008 px. This avoids confusion for users adjusting theme settings and makes displayed design values match what they entered.
Original PR description
Steps to reproduce: - Go to Website > Edit - Open the Theme tab - Set the font size to 45 px - Notice the value changes to 45.008 Fix rounding drift in "Font size" inputs. Values are now displayed as whole px after rem > px conversion (e.g. 45 > 45 px instead of 45.008 px).
4 changes
Resolved issues and error corrections
Opening and saving the Optimize SEO dialog no longer accidentally clears image descriptions added in the website editor. This protects accessibility and search-related content from being lost when users revisit SEO settings.
Original PR description
Steps to reproduce: 1. Open Optimize SEO. 2. Mark an image as decorative. 3. Save it. 3. Give a description(ALT) to that image from editor. 4. Open Optimize SEO again and save without doing anything. Issue: The description(ALT) on the image being set is lost. Cause: When reopening the **Optimize SEO** dialog, `seoContext.updatedAlts` still contained entries from previous edits. As a result, saving without making any change triggered an call to `update_alt_images` which reset the `alt` attribute to empty, eventually discarding the description. This PR ensures `seoContext.updatedAlts` is reset when opening the dialog.
1 change
Resolved issues and error corrections
This fixes how Uruguayan electronic invoice document numbers are read when they start with more than one letter. It helps ensure affected invoices, credit notes, and debit notes are generated and processed with the correct official numbering.
Original PR description
If UY EDI document has latam document number with more than one letter at the beggining, it is needed to take in consideration all the letters and not only the first one. Task Latam side: 1352 Task Adhoc side: 53173 Forward-Port-Of: odoo/enterprise#90696
6 changes
Resolved issues and error corrections
Payslip simulations now use the normal default pay period instead of forcing the employee contract start date. This helps avoid errors when salary rule parameters are not available for older contract dates, making payroll simulations more dependable.
Original PR description
Issue: by specifying the payslip date_from to the contract date start when simulating a payslip, there was a risk that some salary rule had no parameter for that date. Solution: not specify the date and let the payslip compute the default dates, which will default to this month. Forward-Port-Of: odoo/enterprise#94601
7 changes
Resolved issues and error corrections
Test code was updated to use the shared web test helpers instead of reaching into internal framework folders. This is an internal cleanup that makes tests easier to maintain and reduces the risk of future test breakage, with no expected impact on end users.
Original PR description
This commit reduces imports to the 'tests/_framework/' subfolder, which is meant to be accessed through the 'web_test_helpers' module as to reduce the amount of imports, as well as centralizing all web helpers to have a quick overview of the available helpers. Community: https://github.com/odoo/odoo/pull/225865 Forward-Port-Of: odoo/enterprise#94131 Forward-Port-Of: odoo/enterprise#94074
2 changes
Resolved issues and error corrections
Very small negative amounts that round to zero are now shown as regular zero values on printed PDFs. This prevents confusing displays like "-0.00" on business documents and keeps financial output clearer for users.
Original PR description
Previously, when an amount value that is passed to `value_to_html` is a really small negative number (e.g. -0.000000001), the rounded result will have the negative sign in front of it (e.g. "-0.00").
This commit fixes it so that they will be rendered without the negatives ("0.00").
opw-46859532 changes
Resolved issues and error corrections
Steps to reproduce: 1. Add language Spanish(AR) 2. Go to Inventory (Inventario) > Operations (Operaciones) 3. Deliveries (Entregas) > Open any record. 4. Click ⚙ > Print (Imprimir) > Delivery Slip (Recibo de entrega) Issue: - The translation of "Delivery Slip" in Spanish (es_419) shows as "Recibo de entrega", which is incorrect for Argentina. Cause: - Odoo currently labels document as “Recibo de entrega”, but legally it must be “Remito de entrega”. According to AFIP General
Original PR description
Steps to reproduce: 1. Add language Spanish(AR) 2. Go to Inventory (Inventario) > Operations (Operaciones) 3. Deliveries (Entregas) > Open any record. 4. Click ⚙ > Print (Imprimir) > Delivery Slip (Recibo de entrega) Issue: - The translation of "Delivery Slip" in Spanish (es_419) shows as "Recibo de entrega", which is incorrect for Argentina. Cause: - Odoo currently labels document as “Recibo de entrega”, but legally it must be “Remito de entrega”. According to AFIP General Resolution 1415/2003(Arts. 28–30) a REMITO “R” or “X” must explicitly include “DOCUMENTO NO VÁLIDO COMO FACTURA” and follow the mandatory structure and data placement defined by law. Go through : https://www.odoo.com/mail/message/848099710 Solution: - Updated the translation from "Recibo de entrega" to "Remito de entrega" opw-5004345
This fix updates the sales test to match Odoo’s actual behavior: down-payment lines are based on the invoice accounting date, not the sales order creation date. It helps ensure automated checks correctly reflect how invoice-related dates are handled, reducing false build failures.
Original PR description
Because the test was asserting against the Sale Order creation date, while Odoo actually uses the invoice’s accounting date when updating the down-payment line. build_error-231505
This fix ensures Uruguayan electronic invoices correctly recognize document numbers that start with multiple letters. It helps prevent incorrect processing or validation of affected EDI documents, improving reliability for companies using Uruguay localization.
Original PR description
If UY EDI document has latam document number with more than one letter at the beggining, it is needed to take in consideration all the letters and not only the first one. Task Latam side: 1352 Task Adhoc side: 53173 Forward-Port-Of: odoo/enterprise#90696
Event invitation emails now use embedded images instead of external icon styling that many email clients do not support. This prevents missing or duplicate location icons in the email editor and helps recipients see the intended event location details clearly.
Original PR description
Font awesome classes must no be inserted into email as external servers do not use them so icons are not displayed and also because some issues occur with the email editor. This commit replaces i tags with font awesome classes in mail by images. Task-5082165 Forward-Port-Of: odoo/odoo#226332
This fixes an issue where state or government checks in an audit could not be turned off. Businesses can now manage audit checks as intended, reducing unnecessary review steps when those checks are not needed.
Original PR description
State/Governement checks inside an Audit couldn't be disabled. Forward-Port-Of: odoo/enterprise#94614
The Planning app now handles schedules grouped by multiple fields more safely. This prevents an error screen when users group planning data without choosing resource as the first grouping, making schedule review more reliable.
Original PR description
Steps to reproduce: - Open planning and use multi groupby. - Dont use resource as first groupby. Issue: - Traceback Reason: - When we multi-groupby each row has a id, and we try to extract resource id, but we dont get it undefined/open rows. - Missed proper error handling. Fix: - Add better error handling to prevent further traceback using optional chaining. task-5065999 Forward-Port-Of: odoo/enterprise#93922
The AI live chat snippet now handles cases where the standard live chat widget is not present, such as a new database without demo data or deleted live chat channels. This prevents website visitors from encountering an error when starting a chat with the AI agent.
Original PR description
Steps to reproduce: - Go to the livechat app. - Delete all the livechat channels. - Open the website app. - Click on edit -> Contacts & Forms and add the ai_livechat snippet. - Set the 'AI Agent' on the snippet and save. - Start chatting with the ai agent using the snippet. - An error occurs. This error will happen in any case such that the livechat isn't available. For example: - Deleting all the livechat channels. - Installing a fresh db without demo data. This will result in the element '.o-livechat-root' not appearing on the website. This causes the ai_livechat component to have an error when trying to hide that element. This commit fixes the issue by adding optional chaining before accessing the class list of the element '.o-livechat-root'. Forward-Port-Of: odoo/enterprise#94622
This fix makes the AI assistant more reliable when gathering information from discussion records. It prevents errors in cases where related conversation details are not available, helping users avoid interruptions.
Original PR description
This commit adds optional chaining to access thread properties in the getRecordInfo function. Forward-Port-Of: odoo/enterprise#94555
A display issue on account return cards has been corrected so users no longer see two "Reset" buttons. This reduces confusion when managing accounting and Intrastat returns and ensures the form shows the right action controls.
Original PR description
Two buttons "Reset" are shown in the card of an account return. This is due to the invisible attributes that wrongly computes the value. Indeed, it is not possible to write something like "type_id.is_intrastat_return_type" in an invisible condition, so we need to make a related field. Forward-Port-Of: odoo/enterprise#94393
This update improves Odoo's internal unit testing tools so automated checks run faster, display failures more clearly, and clean up test data more reliably. The changes are limited to the testing ecosystem, reducing risk to normal business workflows while helping developers catch issues sooner.
Original PR description
## Pull Request HOOT (PRHOOT) 36 This pull requests brings various improvements and fixes to Hoot and the Odoo unit test ecosystem. See the different commit messages for more details. Note: these changes are made in stable to avoid having to support multiple versions of the HOOT API. As such, these changes are intended to be strictly limited to unit tests as to not put the rest of the code base at risk. Enterprise: https://github.com/odoo/enterprise/pull/93167 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#226406 Forward-Port-Of: odoo/odoo#221367
This update makes the website snippet selection modal clearer and more consistent. It removes misleading parallax preview behavior, refreshes an outdated product preview image, and labels product-related dynamic snippets so users can better distinguish them from static content blocks.
Original PR description
This pr address minor UX issues for the snippets modal. - Disable the parallax effect for both `s_banner_product` and `s_floating_blocks` snippets: despite these make technically use of the parallax…
This pr address minor UX issues for the snippets modal. - Disable the parallax effect for both `s_banner_product` and `s_floating_blocks` snippets: despite these make technically use of the parallax feature, the effect is really subtle and not as strong as the one used by the preview. - Update one old `s_dynamic_snippet_products` preview image - Add the "Dynamic Content" label for both the `s_dynamic_snippet_products` and `s_dynamic_snippet_category_list` snippets. The goal is to differentiate the two from the static ones in the same category. A similar solution should be used for other dynamic snippets, like blog and events... but since everything in those categories is dynamic, the use of the same label would have been noisy and unnecessary. task-5088157 | 19.0 | this pr | |--------|--------| | <img width="445" height="243" alt="image" src="https://github.com/user-attachments/assets/98cadb04-f8cb-4b44-ad3f-6a8ff18ea05b" /> | <img width="444" height="243" alt="image" src="https://github.com/user-attachments/assets/7f7f471a-a11d-4131-9bd6-f8d7954eb1ca" /> | | <img width="441" height="260" alt="image" src="https://github.com/user-attachments/assets/c31a36d7-3c57-434a-b999-1bdb00430b63" /> | <img width="438" height="259" alt="image" src="https://github.com/user-attachments/assets/a124d022-0763-47c4-a72c-a9a992b83a8c" /> | | <img width="444" height="208" alt="image" src="https://github.com/user-attachments/assets/076c3b8e-ee89-470e-a780-93c657979273" /> | <img width="458" height="215" alt="image" src="https://github.com/user-attachments/assets/eca7e514-c947-4ce7-bb37-feae0377b229" />| | <img width="445" height="241" alt="image" src="https://github.com/user-attachments/assets/967c7093-7c20-4912-ab80-072059fa2124" /> | <img width="445" height="246" alt="image" src="https://github.com/user-attachments/assets/d6522f0d-c36e-4627-9d2e-145e1ecb61ff" /> | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix updates the translation configuration to match a recently renamed disallowed expenses module. It helps ensure translations continue to be tracked and maintained correctly after the rename, with no expected impact on everyday users.
Original PR description
The modules have been renamed in https://github.com/odoo/enterprise/commit/31b5e33b0035c37d53f011f362bab739440e0271 but the weblate hasn't been changed.
This update keeps Odoo's email server checks aligned with a newer message returned by the underlying email testing tool. It helps prevent false test failures during maintenance without changing day-to-day user behavior.
Original PR description
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#226489
This fixes an issue where the Point of Sale could show an error if no user was available for the cashier lookup. The system now safely returns no cashier instead of failing, helping avoid interruptions during POS use.
Original PR description
When there is no user, you get a traceback when it tries to access user.id. As the code that call getCashierUserId handles the fact that a falsy value is returned, we return undefiened when there is no user. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#226821
Appointment quick creation now correctly calculates the end time even when the duration field is not shown. This prevents incomplete or incorrect appointment times when users create calendar events from the streamlined appointment view.
Original PR description
In [1] we remove the field "duration" from the calendar quick create view in appointment. `default_get` relies on "duration" being in the default values to compute the "stop" based on it. Since the field is not in the view this does not work anymore. Now always ask for that field in `default_get` and just remove it if it was not requested. [1]: c8eb4fe4ba9938b1c7e07034e6ca7c08a0d6f215 task-5081903
Argentina partner records no longer crash when an invalid VAT or identification value is entered. This makes customer and vendor data entry more reliable by safely handling bad inputs instead of interrupting the workflow.
Original PR description
Manual backport of https://github.com/odoo/odoo/commit/b01a6640895c4dd4b5bcf849740aa6b3312e9a54. This is needed to prevent crashes when trying to sanitize invalid VAT inputs for Argentina partners due to the assumption that the identification number can always be safely cast to int(). --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Issue: - The translation of "Delivery Slip" in Spanish (es_419) shows as "Recibo de entrega", which is incorrect for Argentina. Cause : - Odoo currently labels document as “Recibo de entrega”, but legally it must be “Remito de entrega”. According to AFIP General Resolution 1415/2003(Arts. 28–30) a REMITO “R” or “X” must explicitly include “DOCUMENTO NO VÁLIDO COMO FACTURA” and follow the mandatory structure and data placement defined by law. Go through : https://www.odoo.com/mai
Original PR description
Issue: - The translation of "Delivery Slip" in Spanish (es_419) shows as "Recibo de entrega", which is incorrect for Argentina. Cause : - Odoo currently labels document as “Recibo de entrega”, but legally it must be “Remito de entrega”. According to AFIP General Resolution 1415/2003(Arts. 28–30) a REMITO “R” or “X” must explicitly include “DOCUMENTO NO VÁLIDO COMO FACTURA” and follow the mandatory structure and data placement defined by law. Go through : https://www.odoo.com/mail/message/848099710 Solution: - Updated the translation from "Recibo de entrega" to "Remito de entrega" opw-5004345