Thursday, May 22, 2025
19 changes · saas-18.3
Resolved issues and error corrections
Bank statement lines no longer show the same action in both the main and secondary button areas. This reduces visual clutter and helps users choose the right reconciliation action more easily.
Original PR description
Before this **PR**: The same button could appear in both the primary and secondary button groups on a bank statement line, leading to unnecessary duplication. After this **PR**: If a button is already shown as a primary action, it is excluded from the list of secondary buttons to avoid redundancy. **task**-4780841
Code cleanup and technical improvements
The HTML editor's AI-powered translation capability has been separated into its own component. This keeps translation functionality available while reducing internal dependencies, making future maintenance and upgrades easier.
Original PR description
This commit creates a new editor plugin: the chatgpt_translate_plugin which has offers the original translate functionality, now decoupled from the chatgpt_plugin. This was done to avoid a dependency between the ai module and the html_editor module. Also, some dialog files for the previous chatgpt integration were removed and some files were edited as they were fully/partly deprecated. Finally the chatgpt_plugin.test.js file was re-added but renamed as chatgpt_translate.test.js and only includes the original tests that involved the translate functionality. Enterprise PR: https://github.com/odoo/enterprise/pull/85506
Miscellaneous changes
In the kanban template there is a `row` container that is not wrapped into a `container` DIV, so it has negative margin and produce an overflow (horizontal scroll). This commit adds the `g-0` class on the `row` container. Steps to reproduce: * On Odoo on small screen * Go to the app "eLearning" * Try to scroll horizontally => BUG --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#210825
Original PR description
In the kanban template there is a `row` container that is not wrapped into a `container` DIV, so it has negative margin and produce an overflow (horizontal scroll). This commit adds the `g-0` class on the `row` container. Steps to reproduce: * On Odoo on small screen * Go to the app "eLearning" * Try to scroll horizontally => BUG --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#210825
The translation feature is being separated from the AI chat tool so each can be maintained and used independently. This keeps the same translation capability available through the editor while making the underlying setup cleaner and easier to evolve.
Original PR description
This commit removes the translate functionality from the chatgpt plugin in the ai module. That is done to effectively decouple the two functionalities since they are independent in their implementations and their use. The translate functionality is added back in the html_editor module as a separate editor plugin. Community PR: https://github.com/odoo/odoo/pull/209931
This commit fixes the `disconnect during vacuum should ask for reload` test that was non-deterministic as it was triggering websocket reconnection too early, resulting in the wrong event being sent. fixes runbot-223185 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#210991
Original PR description
This commit fixes the `disconnect during vacuum should ask for reload` test that was non-deterministic as it was triggering websocket reconnection too early, resulting in the wrong event being sent. fixes runbot-223185 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#210991
Before this PR, the name_search function would perform a search on products by injecting a list of ids in the domain instead of using a subquery. In cases where this list of ids is way too big, the search query becomes extremely slow. This PR uses a subquery instead in the domain to avoid this problem. Benchmarks: |Num. product_ids| Before PR | After PR | |---------------------|---------------|--------------| |28801| 65 s| <1 s| opw-4743566 --- I confirm I have signed the CLA
Original PR description
Before this PR, the name_search function would perform a search on products by injecting a list of ids in the domain instead of using a subquery. In cases where this list of ids is way too big, the search query becomes extremely slow. This PR uses a subquery instead in the domain to avoid this problem. Benchmarks: |Num. product_ids| Before PR | After PR | |---------------------|---------------|--------------| |28801| 65 s| <1 s| opw-4743566 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#210463 Forward-Port-Of: odoo/odoo#207953
Steps to Reproduce : - Drag and drop text snippet / or select some text. - Apply the back-ground color to the text. - Click on the Animate button. - You will notice that the background got removed/misplaced. The issue was caused because the animated text is wrapped in an element with "display: inline-block". To fix the bug, we moved the element with the background color inside the wrapper of the animated text, instead of keeping it outside. This fix works as long as the animated text
Original PR description
Steps to Reproduce : - Drag and drop text snippet / or select some text. - Apply the back-ground color to the text. - Click on the Animate button. - You will notice that the background got removed/misplaced. The issue was caused because the animated text is wrapped in an element with "display: inline-block". To fix the bug, we moved the element with the background color inside the wrapper of the animated text, instead of keeping it outside. This fix works as long as the animated text is exactly the same as the one with the background color. If only a portion of the text with a background color is animated, the fix doesn’t work. That case was too complex to handle, and in any case, the most common user scenarios are now fixed. task-4690318 Forward-Port-Of: odoo/odoo#210953 Forward-Port-Of: odoo/odoo#206240
Before this commit, the can_be_merged_with method did not work correctly because an incorrect argument was passed to floatIsZero. As a result, orderlines with different prices could be merged together, leading to inaccurate order information. opw-4778629 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#209170 Forward-Port-Of: odoo/odoo#209014
Original PR description
Before this commit, the can_be_merged_with method did not work correctly because an incorrect argument was passed to floatIsZero. As a result, orderlines with different prices could be merged together, leading to inaccurate order information. opw-4778629 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#209170 Forward-Port-Of: odoo/odoo#209014
- Fixes the error coming from using discounts in invoices: the node `AllowanceChargeReasonCode` was added while not accepted by the Turkish implementation, and the amounts might not respect the asked format in some cases. - Fixes the error coming from invoices using a different currency than the company one (TRY). Although the documentation says the node `PricingExchangeRate` is only needed "If the prices of goods or services on the invoice are shown in a currency other than the 'Docum
Original PR description
- Fixes the error coming from using discounts in invoices: the node `AllowanceChargeReasonCode` was added while not accepted by the Turkish implementation, and the amounts might not respect the asked format in some cases. - Fixes the error coming from invoices using a different currency than the company one (TRY). Although the documentation says the node `PricingExchangeRate` is only needed "If the prices of goods or services on the invoice are shown in a currency other than the 'Document Currency", and our file did indeed use only one currency at a time (either all TRY or all USD amounts, e.g.), the server was still refusing our file. - Limits the decimal precision to 2 for most amoutns, as requested by the nilvera format. - Use uppercase on invoice names when putting them in the xml. task-4356940 Forward-Port-Of: odoo/odoo#210622 Forward-Port-Of: odoo/odoo#205749
Steps to reproduce: - Install accounting, Sales apps - Setup two companies for the current user with two diff currencies - In company A, make a SO on a product and create an invoice - Validate and confirm the invoice. - Go to accounting, reporting, invoice analysis, and add group for the product - Select the report of that specific invoice posted - Observe the values untaxed_total, avg_price, inventory_value and price_margin - Switch to company B, and add a currency rate between both cur
Original PR description
Steps to reproduce: - Install accounting, Sales apps - Setup two companies for the current user with two diff currencies - In company A, make a SO on a product and create an invoice - Validate and…
Steps to reproduce: - Install accounting, Sales apps - Setup two companies for the current user with two diff currencies - In company A, make a SO on a product and create an invoice - Validate and confirm the invoice. - Go to accounting, reporting, invoice analysis, and add group for the product - Select the report of that specific invoice posted - Observe the values untaxed_total, avg_price, inventory_value and price_margin - Switch to company B, and add a currency rate between both currencies to observe a difference - Make sure that you are selecting both companies, but B as the main company - Go again to the report of the same Invoice. - Observe the values again. Issue: When changing the currency, the fields untaxed_total and price_avg are updated using the currency rate of the current main company. However, inventory_value is not updated. This inconsistency affects the calculation of price_margin, which relies on both untaxed_total and inventory_value. As a result, price_margin is computed incorrectly. opw-4582973 Forward-Port-Of: odoo/odoo#210695 Forward-Port-Of: odoo/odoo#206582
## Description In spreadsheet, the mail composer is used to write comments on cells. In this context, the file upload button is unnecessary. However, setting props allowUpload: false or overriding the allowUpload getter was not hiding the upload button as expected. This issue was caused by a missing allowUpload check in the composer actions logic. This PR adds the missing condition and refactors related checks into their respective modules, improving modularity. Task: [4708400](https
Original PR description
## Description In spreadsheet, the mail composer is used to write comments on cells. In this context, the file upload button is unnecessary. However, setting props allowUpload: false or overriding the allowUpload getter was not hiding the upload button as expected. This issue was caused by a missing allowUpload check in the composer actions logic. This PR adds the missing condition and refactors related checks into their respective modules, improving modularity. Task: [4708400](https://www.odoo.com/odoo/project/2328/tasks/4708400) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#210928 Forward-Port-Of: odoo/odoo#208556
### Steps to reproduce: - Create a leave type that creates timesheet - Create a leave for a flexible employee for 4 days - Check the timesheet created for this leave - Notice the amount of this timesheet is 83 hours not 32 ### Cause: When creating a timesheet or a work entry for a leave we get the difference between the start and the end date in milliseconds and divide it by 3600 to get the hours. Timesheet: https://github.com/odoo/odoo/blob/c3c63c3d00852010be4fe61a6f2314a099d9
Original PR description
### Steps to reproduce: - Create a leave type that creates timesheet - Create a leave for a flexible employee for 4 days - Check the timesheet created for this leave - Notice the amount of this…
### Steps to reproduce: - Create a leave type that creates timesheet - Create a leave for a flexible employee for 4 days - Check the timesheet created for this leave - Notice the amount of this timesheet is 83 hours not 32 ### Cause: When creating a timesheet or a work entry for a leave we get the difference between the start and the end date in milliseconds and divide it by 3600 to get the hours. Timesheet: https://github.com/odoo/odoo/blob/c3c63c3d00852010be4fe61a6f2314a099d99215/addons/resource/models/resource_mixin.py#L208-L213 Work entry: https://github.com/odoo/odoo/blob/c3c63c3d00852010be4fe61a6f2314a099d99215/addons/resource/models/resource_calendar.py#L522-L525 This doesn't work for flexible hours as when fetching attendance intervals for flexible employee we return one big block for the whole period as there is no attendance intervals for the flexible employees. https://github.com/odoo/odoo/blob/c3c63c3d00852010be4fe61a6f2314a099d99215/addons/resource/models/resource_calendar.py#L370-L376 ### Fix: When fetching the attendance intervals for flexible employee we return the hours per day as duration hours not the diff between the start and the end date of the period. We only use the diff between the dates in case of fully flexible. Then we use this duration hours in timesheet and work entry creation opw-4628296 Forward-Port-Of: odoo/odoo#207299 Forward-Port-Of: odoo/odoo#206252
Currently because of the changes in ca35adf7412b132e37c22d09 both the test `test_increase_available_quantity_3` and `test_decrease_available_quantity_3` are always skipped, even with demo data. That's because `self.stock_location` points to a new location created in `setUpClass`. So no demo data quant can have this location_id as it cannot be referenced from a demo data file. However, "stock.stock_location_stock" is actually created in a data file, `stock_data.xml`. So we can revert back to u
Original PR description
Currently because of the changes in ca35adf7412b132e37c22d09 both the test `test_increase_available_quantity_3` and `test_decrease_available_quantity_3` are always skipped, even with demo data. That's because `self.stock_location` points to a new location created in `setUpClass`. So no demo data quant can have this location_id as it cannot be referenced from a demo data file. However, "stock.stock_location_stock" is actually created in a data file, `stock_data.xml`. So we can revert back to using `env.ref` instead of creating a new location. With that both tests are properly executed when demo data are installed while they are skipped without demo data. We're also creating the quants in case they are not found in the database so we ensure the test is always run. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#204682
There is a missing ``s`` in the translation in ``pt_BR`` language. Traceback: ``` ValueError: incomplete format File "/home/odoo/src/odoo/odoo/tools/translate.py", line 422, in get_translation return translation % args ``` This issue was introduced in this commit:https://github.com/odoo/enterprise/commit/12c9eee514868f627c581e367e566458520ae122 https://github.com/odoo/enterprise/blob/9d51f5171b3c2478599dde1ce991c90fa6fed32b/l10n_br_avatax/i18n/pt_BR.po#L1156 Here, the ``s`` i
Original PR description
There is a missing ``s`` in the translation in ``pt_BR`` language.
Traceback:
```
ValueError: incomplete format
File "/home/odoo/src/odoo/odoo/tools/translate.py", line 422, in get_translation
return translation % args
```
This issue was introduced in this commit:https://github.com/odoo/enterprise/commit/12c9eee514868f627c581e367e566458520ae122
https://github.com/odoo/enterprise/blob/9d51f5171b3c2478599dde1ce991c90fa6fed32b/l10n_br_avatax/i18n/pt_BR.po#L1156 Here, the ``s`` is missing at the end of ``%(errors)``
It should be ``%(errors)s``.
sentry-6616622354
Forward-Port-Of: odoo/enterprise#85983Version: - saas-17.4 Steps to reproduce: - Create a sign request activity from sales or any other app. - Try to send document from activity from kanban view. Issue: - The sign request is created, but it is not linked to the related record. Cause: - The res_model and res_id were being read from the 'props' but it is available inside 'props.activity'. Solution: - Corrected the code to read res_model and res_id from 'props.activity'. task-4788037 Forward-Port-Of: odoo/enterpri
Original PR description
Version: - saas-17.4 Steps to reproduce: - Create a sign request activity from sales or any other app. - Try to send document from activity from kanban view. Issue: - The sign request is created, but it is not linked to the related record. Cause: - The res_model and res_id were being read from the 'props' but it is available inside 'props.activity'. Solution: - Corrected the code to read res_model and res_id from 'props.activity'. task-4788037 Forward-Port-Of: odoo/enterprise#86026 Forward-Port-Of: odoo/enterprise#85285
Before this commit, printing an early receipt in a restaurant would cause an error. This fix ensures that early receipts can be printed without issues. opw-4766923 Forward-Port-Of: odoo/enterprise#84619
Original PR description
Before this commit, printing an early receipt in a restaurant would cause an error. This fix ensures that early receipts can be printed without issues. opw-4766923 Forward-Port-Of: odoo/enterprise#84619
## Description This PR fixes several issues related to comments in spreadsheet cells: - **Dark Mode Styling** The comment styles were broken in dark mode because the dark SCSS file was in the wrong asset bundle. It's now removed from `assets_backend` and added to `assets_web_dark` to fix the issue. - **Focus Issue When Using Keyboard** When using the keyboard to move around the spreadsheet, opening a comment popup would focus the composer, stopping navigation. The composer now
Original PR description
## Description This PR fixes several issues related to comments in spreadsheet cells: - **Dark Mode Styling** The comment styles were broken in dark mode because the dark SCSS file was in the wrong…
## Description This PR fixes several issues related to comments in spreadsheet cells: - **Dark Mode Styling** The comment styles were broken in dark mode because the dark SCSS file was in the wrong asset bundle. It's now removed from `assets_backend` and added to `assets_web_dark` to fix the issue. - **Focus Issue When Using Keyboard** When using the keyboard to move around the spreadsheet, opening a comment popup would focus the composer, stopping navigation. The composer now doesn’t take focus, so keyboard navigation keeps working smoothly. - **Upload Button & Error Fixes** - The upload button was showing for spreadsheet cell comments but didn’t work. It’s now hidden. - There was also an error when editing a comment because `this.thread` wasn’t always available. Now it falls back to `this.message?.thread` when editing the message. - **Popover Visibility Fix** When posting the first comment and hovering over it, the action buttons (edit, favorite, delete) were partly cut off. This is now fixed by adding some padding to the thread style.  **Task**: [4708400](https://www.odoo.com/odoo/project/2328/tasks/4708400) Forward-Port-Of: odoo/enterprise#86032 Forward-Port-Of: odoo/enterprise#83410
**Steps to reproduce:** With mexican localisation installed: - Open form view for the model 'l10n_mx_edi.document' - Prepare a payment document in the Payment-20 format (https://www.sat.gob.mx/sitio_internet/cfd/Pagos/Pagos20.xsd) - Remove existing attachment - Change the attachment on the document to the relatively long XML file **Issue:** After saving the change, the attachment_uuid (Fiscal Folio) is left blank. **Cause:** Normally, the uuid should be extracted from the uploaded a
Original PR description
**Steps to reproduce:** With mexican localisation installed: - Open form view for the model 'l10n_mx_edi.document' - Prepare a payment document in the Payment-20 format…
**Steps to reproduce:** With mexican localisation installed: - Open form view for the model 'l10n_mx_edi.document' - Prepare a payment document in the Payment-20 format (https://www.sat.gob.mx/sitio_internet/cfd/Pagos/Pagos20.xsd) - Remove existing attachment - Change the attachment on the document to the relatively long XML file **Issue:** After saving the change, the attachment_uuid (Fiscal Folio) is left blank. **Cause:** Normally, the uuid should be extracted from the uploaded attachment, but the computation of the 'raw' field on the attachment returns the value "b'56.00 bytes'", leaving the attachment_uuid field empty because the XML is assumed to be in the wrong format. The issue doesn't exist for shorter XML files in the Payment-10 format (https://www.sat.gob.mx/sitio_internet/cfd/Pagos/Pagos10.xsd) **Solution:** Before computing the attachment_uuid from the attachment, we set the bin_size to False in the context. opw-4641487 Forward-Port-Of: odoo/enterprise#83538
If the subject serial number is not set in the certificate and the user clicks the ``Send now to SII`` button on the invoice, a traceback will appear. Steps to reproduce the error: - Install ``l10n_cl_edi`` module and switch to CL company - Go to Invoicing > Configuration > Settings > SII Web Services: SII - Test - Create a new invoice > customer: CL company > add a line > Confirm > ``Send now to SII`` Traceback: ``` TypeError: 'bool' object is not subscriptable ``` https://git
Original PR description
If the subject serial number is not set in the certificate and the user clicks the ``Send now to SII`` button on the invoice, a traceback will appear. Steps to reproduce the error: - Install ``l10n_cl_edi`` module and switch to CL company - Go to Invoicing > Configuration > Settings > SII Web Services: SII - Test - Create a new invoice > customer: CL company > add a line > Confirm > ``Send now to SII`` Traceback: ``` TypeError: 'bool' object is not subscriptable ``` https://github.com/odoo/enterprise/blob/7acf9b1f0cdd5c0968188ac6c2351ae9ab228689/l10n_cl_edi/models/account_move.py#L290 Here, If ``subject_serial_number`` of certificate is False. It will lead to the above traceback. ``subject_serial_number`` can be False because Some certificates do not provide this number. ref-https://github.com/odoo/enterprise/blob/7acf9b1f0cdd5c0968188ac6c2351ae9ab228689/l10n_cl_edi/models/certificate.py#L19-L20 sentry-6591311577 Forward-Port-Of: odoo/enterprise#84980