Daily updates from Odoo
Tuesday, May 19, 2026
151 changes
21 changes
Resolved issues and error corrections
This update resolves an issue with the alignment of payrun details within the Odoo Enterprise system. The team removed unnecessary code and corrected the layout to ensure payrun information is displayed accurately. This improves the user experience and data clarity for payroll processing.
Original PR description
Remove useless classes and fix alignment task-6191499
This update enhances how Odoo handles database errors during safe evaluation. By catching and retrying `IntegrityError` exceptions, the system now behaves more consistently regardless of the code being executed, leading to more reliable operations. This improves overall system stability and reduces potential disruptions.
Original PR description
It makes sense to bubble up the `psycopg2.IntegrityError` (as well as the subcase `ConcurrencyError`) so that the retry mechanism can handle this exception. In fact, this exception can be triggered without necessarily a problem with the "logic/business code". This ensures consistent behavior between the business logic and the code executed in `safe_eval`. Task-6215886 Forward-Port-Of: odoo/odoo#264838 Forward-Port-Of: odoo/odoo#264266
This update fixes an issue where the print button disappeared from PDF attachment previews in version 19 and later. The change removes a redundant setting that was previously hiding the print button on desktop, ensuring it's consistently visible for all users. This restores a key functionality for accessing and printing PDF documents.
Original PR description
**Problem:** When opening a PDF attachment preview in v19+, the print button disappeared. As a result, the Print button is not accessible from the main toolbar. In v18 the buttons remained…
**Problem:** When opening a PDF attachment preview in v19+, the print button disappeared. As a result, the Print button is not accessible from the main toolbar. In v18 the buttons remained permanently visible. **Steps to reproduce:** - Open any record that has a PDF attachment in the chatter. - Click the PDF attachment to open the preview popup. - Observe toolbar buttons disappeared. **Cause:** commit responsible for this: https://github.com/odoo/odoo/commit/b7889d007f72c7e7f9f22318a9968338cde0ddb3 It was removed to prevent some bugs with some android/smartdevice and some old browsers `file_viewer.js` passes `hidePrint: true` to `hidePDFJSButtons()`. This was originally added alongside the mobile guard (`isMobileOS()`), but the `isMobileOS()` guard in `hidePDFJSButtons` already handles mobile, so the explicit `hidePrint: true` in `file_viewer.js` was redundantly hiding Print on desktop too. https://github.com/odoo/odoo/blob/654a1caafc2ab7b2841c372910b2e81dc6e9c035/addons/web/static/src/core/file_viewer/file_viewer.js#L60-L71 https://github.com/odoo/odoo/blob/654a1caafc2ab7b2841c372910b2e81dc6e9c035/addons/web/static/src/core/utils/pdfjs.js#L35-L37 **Fix:** - Remove `hidePrint: true` from `file_viewer.js` since mobile is already covered by the `isMobileOS()` check inside `hidePDFJSButtons()`. opw-6216534 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#264739
This update aligns the subheaders and numerical data within Odoo's financial reports, ensuring a more consistent and professional appearance. Previously, the alignment was inconsistent, making the reports less readable. This change improves the overall user experience and data presentation.
Original PR description
Before this commit, subheaders of numeric columns were centered, while the figures in the columns were aligned to the end. This commit ensures that both the subheader and the figures are aligned the same way (center or end). task-6197223 Forward-Port-Of: odoo/enterprise#117477 Forward-Port-Of: odoo/enterprise#116578
This update fixes a UI inconsistency in the property editing process. Previously, the "Add Property" button would remain visible even when switching between records or creating new ones. Now, the button correctly resets to "Edit Properties" ensuring a smoother and more intuitive user experience when managing properties.
Original PR description
Before this commit: - The “+ Add Property” button was not visible when switching between notebook pages if it was present initially. - when we are doing edit properties from the cog menu and without doing save properties if we are creating new record or switch to other record at that time button still shows “Save Properties.” leading to inconsistent UI behavior. After this commit: - The “+ Add Property” button remains visible when switching between pages. - When in property edit mode, switching records or creating a new record now correctly resets the button state back to “Edit Properties”, ensuring consistent UI behavior. task-6051322 ENT PR: https://github.com/odoo/enterprise/pull/113248 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#258030
This update fixes a UI inconsistency in the worksheet property editor. Now, the ‘Add Property’ button remains visible while editing and correctly resets to ‘Edit Properties’ when switching records or creating new ones, ensuring a smoother and more reliable user experience. This resolves a previous issue where the button's state was confusing.
Original PR description
Before this commit: - The “+ Add Property” button was not visible when switching between notebook pages if it was present initially. - when we are doing edit properties from the cog menu and without doing save properties if we are creating new record or switch to other record at that time button still shows “Save Properties.” leading to inconsistent UI behavior. After this commit: - The “+ Add Property” button remains visible when switching between pages. - When in property edit mode, switching records or creating a new record now correctly resets the button state back to “Edit Properties”, ensuring consistent UI behavior. task-6051322 Forward-Port-Of: odoo/enterprise#113248
This update corrects an issue where invoices using a specific tax category ('O-service out of tax scope') in Odoo failed Peppol validation. The fix ensures invoices with this category don't include VAT IDs, aligning with Peppol requirements and preventing validation errors.
Original PR description
**PROBLEM** In peppol, there is a tax category 'O-service out of tax scope'. This tax category is used when what is invoice can't be tax (out of the tax scope). This is different from tax exemption: when using tax category O, there can't be any vat id on the invoice. This also means you can't use tax category O with other taxes, since other taxes need the vat id. Invoices generated by odoo with tax category O failed peppol validation. **STEP TO REPRODUCE** 1. install account_edi_ubl_cii_tax_extension. 2. Create a tax with tax category O. 3. Create an invoice and try validating using the file validator. 4. You should have error BR-O-02 and BR-O-05. opw-6012669 Forward-Port-Of: odoo/odoo#264081 Forward-Port-Of: odoo/odoo#254645
This update fixes a minor issue where some work entry names in the Odoo system were misspelled. The team corrected the data files to ensure accurate and consistent naming conventions for work entries, improving the overall user experience. This change was driven by a reported issue (opw-6090081).
Original PR description
Issue: ---------------------------------------- Some work entry names are wrong. Solution: ---------------------------------------- Change the data files. opw-6090081 Forward-Port-Of: odoo/odoo#264094
This update fixes a visual issue where long accounting reports would cut off the final row, preventing users from seeing all the data. The team adjusted styling to ensure all rows are fully visible, regardless of the report's length. This improves the clarity and completeness of financial reports.
Original PR description
Problem: When an accounting report fills a whole page, the final row is not fully visible Steps to reproduce: 1- View a tax report that has a lot of entries that would fill the whole screen 2- Notice how the last line is not fully visible and it isn't possible to scroll and view the rest of it Solution: Correctly style the different < div > elements opw-6171555 Forward-Port-Of: odoo/enterprise#116068
This update fixes a potential crash in the Gantt chart interface. It reintroduces a safeguard to prevent errors when a user attempts to drag a pill without a valid target. This ensures the Gantt chart remains stable and reliable during testing and user interactions.
Original PR description
In https://github.com/odoo/enterprise/pull/113438, it was incorrectly assumed that it would be impossible to initiate a pill drag without a valid target being found. This commit reintroduces a strict safeguard to handle scenarios where the drag is triggered with no valid cell target. This prevents unexpected crashes encountered during test executions. runbot-error-242486 Forward-Port-Of: odoo/enterprise#116619
This update fixes an issue where Knowledge articles appeared narrow when printed on large screens. The fix specifically targets the Knowledge editor's form view, preventing a CSS rule from causing a constricted layout. Now, articles print correctly in a readable format when exported or printed.
Original PR description
Currently, a CSS rule forces the form container width to 1px to ensure that the nested list view can correctly compute its size. See: ```scss .o_form_view.o_xxl_form_view { .o_form_view_container {…
Currently, a CSS rule forces the form container width to 1px to ensure that the nested list view can correctly compute its size.
See:
```scss
.o_form_view.o_xxl_form_view {
.o_form_view_container {
width: 1px; /* List view needs a width value to recompute the size correctly */
}
}
```
However, since the Knowledge editor is implemented as a form view, this rule also affects Knowledge. When zooming out, the `o_xxl_form_view` class is added to the form view container, causing the rule to apply. If an article is printed while this class is present, it is constrained to an extremely narrow column, making it unreadable.
Steps to reproduce:
1. Open an article in Knowledge
2. Zoom out using `Ctrl` + `-`
3. Open the kebab menu and select "Export"
=> The article is rendered in a very narrow column.
To address this issue, we override this rule specifically for Knowledge. With this change, articles are now rendered correctly when printed or exported as PDF.
Task-5999878
Forward-Port-Of: odoo/enterprise#103259This update corrects issues with the Swedish ISO 20022 XML structure, ensuring accurate data transmission to banks. Specifically, the system now consistently uses BIC identifiers for financial institutions and addresses a unique requirement from Nordea bank regarding bank account formats.
Original PR description
Here is few fixes added to the swedish iso 20022 XML: - CdtrAgt seems to be always mandatory, change the condition in `_skip_CdtrAgt` to always use the CdtrAgt if payment_method is iso20022_se - The `_is_se_bban` is too restrictive, this should be always True when payment method is swedish iso - The `FinInstnId` node can either contain BIC or ClrSysMmbId. But as ClrSysMmbId seems to change from one bank to another, it's more relevant to always use the BIC. opw-5395736 Forward-Port-Of: odoo/enterprise#117574 Forward-Port-Of: odoo/enterprise#114662
This update ensures charts maintain their current granularity when users specify custom date ranges (e.g., 'until 2024-01-01) instead of automatically adjusting based on global filters. Previously, the system struggled to determine the optimal chart level with these specific ranges, leading to potential inconsistencies. This fix guarantees a consistent chart display regardless of the user's date selection.
Original PR description
The charts adapt their granularity when a date global filter is updated. But the code didn't handle the cases where the user sets a custom range with an open start or end date (eg. `until 2024-01-01`). In those case picking the best granularity is not practical (because it fully depends on the server data), so we will just keep the current granularity. Task: [6196246](https://www.odoo.com/web#id=6196246&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form) 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#264939 Forward-Port-Of: odoo/odoo#263019
A recent test failure in the 'pos_self_order' module was caused by how time slots were generated. This update has corrected the issue by freezing the time to midnight, ensuring all available slots are considered during testing. This prevents test failures and improves the reliability of the order scheduling functionality.
Original PR description
Before this commit: = - The test test_slot_limit_orders created slots only for the first day of the week (Monday). - The test scenario includes a slot at "18:00". - On Mondays, the test fails between 18:01 and 23:59 because the "18:00" slot no longer exists for the current day. - On other days, the test passes since slots are generated for the upcoming Monday. After this commit: = - Freezed the time to current day at "00:00" so that slot list can have every slot for that day. task-6043739 runbot-241836 Forward-Port-Of: odoo/odoo#263476 Forward-Port-Of: odoo/odoo#254775
This update fixes an issue where image data lingered in the website builder's code after shapes were removed, leading to potential performance problems. The change adds a cleanup process to remove outdated image data, ensuring a cleaner and more efficient website builder experience. This improves the overall stability and responsiveness of images on the Odoo website.
Original PR description
Steps to see the issue: - Add a shape to an image - Remove it => Image element in the DOM still has some data related to the shape. This commits adds a shared method to `ImageShapeOptionPlugin` to…
Steps to see the issue: - Add a shape to an image - Remove it => Image element in the DOM still has some data related to the shape. This commits adds a shared method to `ImageShapeOptionPlugin` to clean shape-related data when we apply a shape, or remove it, the method mirrors the behavior we had before the [html builder refactoring]. Also, commit [1] fixed the issue when the builder transfered shape or hover related data to incompatible images, when replacing an image with a shape/hover on it. However if these data attributes had already been saved prior to that commit, it would stay there indefinitely. The same could happen with hover effects attributes. Therefore, we add a resource that we call before saving data to clean any stale image data. Example of a CORS protected image: [2] [1]: https://github.com/odoo-dev/odoo/commit/137a6d7e59e1d788745c3b796a14839e52a8c5bc [2]: https://tinyjpg.com/images/social/website.jpg [html builder refactoring]: github.com/odoo/odoo/9fe45e2b7ddbbfd0445ffe25a859e67a316d02b2 task-5172640 Forward-Port-Of: odoo/odoo#263662 Forward-Port-Of: odoo/odoo#259226
This update fixes an issue where the call preview overlay was overlapping with call actions on smaller screens. The change ensures the preview remains fully visible and readable, improving the user experience for all users. This was part of a larger effort to enhance usability across different screen sizes.
Original PR description
Purpose of this PR: Since #235707, the call preview content could overlap the call actions on small screens. This commit prevents the overlap and keeps the preview readable. Before/After: <table> <tr> <td> <img width="398" height="691" alt="image" src="https://github.com/user-attachments/assets/da7eaf5b-387e-439f-80bb-cb6dd8c07454" /> <td> <img width="391" height="691" alt="image" src="https://github.com/user-attachments/assets/384a08d1-6b51-490a-8b57-267a3bb1b3d5" /> </table> task-[6201269](https://www.odoo.com/odoo/project/1519/tasks/6201269) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#263535
This update resolves an issue where users without write access to the AT Point of Sale (PoS) would receive an access error when attempting to authenticate after a token expiration. The fix ensures that the correct access error is displayed, preventing disruptions to sales transactions.
Original PR description
When trying to auth directly from the PoS when the token expires, if you are logged in with a user that doesn't have write access to the PoS. You would get an access error. Steps to reproduce: ------------------- * Setup Fiskaly in an AT company * Open PoS and try to make a sale * To fake the token expiration I modified the code so that the request always return 401 status code > Observation: You get an access error opw-5925203 Forward-Port-Of: odoo/enterprise#115735 Forward-Port-Of: odoo/enterprise#112474
This update resolves an issue where the payroll report would fail if a new employee didn't have a start date defined. The fix ensures the report checks for a start date before attempting comparisons, preventing errors and improving report reliability. This ensures accurate payroll processing.
Original PR description
If there is no start date on the veriosn, the report will fail as it'll try to compare a bool with a datetime. So we check first that there is a start date Forward-Port-Of: odoo/enterprise#117534
This pull request applies automated linting fixes across several website sale modules, including those related to Amazon, Lazada, Shopee, and renting. These fixes ensure consistent code style and formatting, improving code readability and maintainability. The changes are purely technical and do not impact any business functionality.
Original PR description
post-freeze run for task-5436779
This update reintroduces a 'proc title' monitoring feature that was previously removed. This allows the team to better track key performance indicators related to the core system. The change ensures continued visibility into important operational data.
Original PR description
This was removed in ad36284 but is useful for monitoring. 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
This update resolves an error that prevented the generation of PDF reports for Colombian tax statements. The issue stemmed from a change in how report data is structured, requiring a simple update to access the correct data values. This ensures accurate report generation and avoids disruptions for users generating these reports.
Original PR description
***Steps to reproduce*:** - Install `l10n_co_reports` module. - Create 2 vendor bills with taxes `0% EXEMPT` and `0.966% RteICA`. - Navigate to Reports -> Colombian Statements -> Certificado de…
***Steps to reproduce*:** - Install `l10n_co_reports` module. - Create 2 vendor bills with taxes `0% EXEMPT` and `0.966% RteICA`. - Navigate to Reports -> Colombian Statements -> Certificado de Retención en ICA - Generate the PDF report. ***Observed behavior*:** - An error is raised while generating the PDF: `AttributeError: 'AccountReportColumnData' object has no attribute 'get'` ***Cause*:** After commit [1](https://github.com/odoo-dev/enterprise/commit/b92dc397bef029472a40223f51b611cdf5b631dc#diff-e97f74c63a6257470e69eb8122c12d0ce4afa5bc6013176bb69e702849575123) all report lines, columns, and annotations were converted from dictionaries to custom objects (e.g., AccountReportColumnData). However, the function `_get_report_values` still uses .get() to access values, which is only valid for dictionaries. Calling .get() on these objects raises an error. ***Fix*:** - Replace the `get()` method usage with `column.name` format to access values from `AccountReportColumnData ' properly. - This ensures compatibility with the new structured column data format introduced in v19.2. opw-6205984 Forward-Port-Of: odoo/enterprise#116902
16 changes
Resolved issues and error corrections
This update ensures charts accurately display data when users specify custom date ranges, including open start or end dates. Previously, the chart's granularity would shift unnecessarily. Now, the chart maintains its current level of detail, regardless of the user-defined date range, providing a consistent and reliable view of the data.
Original PR description
The charts adapt their granularity when a date global filter is updated. But the code didn't handle the cases where the user sets a custom range with an open start or end date (eg. `until 2024-01-01`). In those case picking the best granularity is not practical (because it fully depends on the server data), so we will just keep the current granularity. Task: [6196246](https://www.odoo.com/web#id=6196246&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form) 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#264411 Forward-Port-Of: odoo/odoo#263019
This update addresses a potential crash in the Gantt chart feature. It restores a safety mechanism that prevents the chart from malfunctioning when a user attempts to drag a pill without a valid target. This ensures the Gantt chart remains stable and reliable.
Original PR description
In https://github.com/odoo/enterprise/pull/113438, it was incorrectly assumed that it would be impossible to initiate a pill drag without a valid target being found. This commit reintroduces a strict safeguard to handle scenarios where the drag is triggered with no valid cell target. This prevents unexpected crashes encountered during test executions. runbot-error-242486
This update resolves an issue where users without write access to the Fiskaly Point of Sale (PoS) module would receive an access error when attempting to authenticate with a token that had expired. The fix ensures that the correct error message is displayed, improving the user experience and preventing disruptions to sales transactions.
Original PR description
When trying to auth directly from the PoS when the token expires, if you are logged in with a user that doesn't have write access to the PoS. You would get an access error. Steps to reproduce: ------------------- * Setup Fiskaly in an AT company * Open PoS and try to make a sale * To fake the token expiration I modified the code so that the request always return 401 status code > Observation: You get an access error opw-5925203 Forward-Port-Of: odoo/enterprise#112474
This update resolves an error that prevented the generation of PDF reports for Colombian statements. The change adjusts how data is accessed within the report generation process to align with a recent update in the report's data structure. This ensures reports are now generated successfully.
Original PR description
***Steps to reproduce*:** - Install `l10n_co_reports` module. - Create 2 vendor bills with taxes `0% EXEMPT` and `0.966% RteICA`. - Navigate to Reports -> Colombian Statements -> Certificado de…
***Steps to reproduce*:** - Install `l10n_co_reports` module. - Create 2 vendor bills with taxes `0% EXEMPT` and `0.966% RteICA`. - Navigate to Reports -> Colombian Statements -> Certificado de Retención en ICA - Generate the PDF report. ***Observed behavior*:** - An error is raised while generating the PDF: `AttributeError: 'AccountReportColumnData' object has no attribute 'get'` ***Cause*:** After commit [1](https://github.com/odoo-dev/enterprise/commit/b92dc397bef029472a40223f51b611cdf5b631dc#diff-e97f74c63a6257470e69eb8122c12d0ce4afa5bc6013176bb69e702849575123) all report lines, columns, and annotations were converted from dictionaries to custom objects (e.g., AccountReportColumnData). However, the function `_get_report_values` still uses .get() to access values, which is only valid for dictionaries. Calling .get() on these objects raises an error. ***Fix*:** - Replace the `get()` method usage with `column.name` format to access values from `AccountReportColumnData ' properly. - This ensures compatibility with the new structured column data format introduced in v19.2. opw-6205984
This update fixes a visual issue where long accounting reports would cut off the final row, preventing users from seeing all the data. The team adjusted styling to ensure all rows are fully visible, regardless of the report's content length. This improves the clarity and usability of our accounting reports.
Original PR description
Problem: When an accounting report fills a whole page, the final row is not fully visible Steps to reproduce: 1- View a tax report that has a lot of entries that would fill the whole screen 2- Notice how the last line is not fully visible and it isn't possible to scroll and view the rest of it Solution: Correctly style the different < div > elements opw-6171555 Forward-Port-Of: odoo/enterprise#116068
This update fixes a problem where users without sufficient accounting permissions would encounter errors when scraping components from purchase orders created by others. The change ensures that users with the correct access rights can properly retrieve component data, preventing disruptions in reporting and analysis. This improves data accuracy and user workflow.
Original PR description
When scraping the component of a MO created by another user you could get an access error saying you don't have write access on account analytic lines. Steps to reproduce: ------------------- *…
When scraping the component of a MO created by another user you could get an access error saying you don't have write access on account analytic lines. Steps to reproduce: ------------------- * Install timesheet_grid and project_mrp_account * Create product A, storable * Create product B with a cost of 20 and also storable * Update the available quantity of product B * Create a BoM for product A, it should only require one product B * Update Marc Demo access right and make sure he doesn't have access to any accounting stuff and he has atleast timesheet approver * Create a first MO for 1 product A and produce it * Create a second MO for 1 prodcuct A but just confirm it * Login as Marc Demo and try to scrap the component of the second MO > Observation: You get an access error here https://github.com/odoo/odoo/blob/d98afdc08b46bf458eaa287ea882cc7663286a59/addons/stock_account/models/analytic_account.py#L95 opw-5954989 Forward-Port-Of: odoo/odoo#262104 Forward-Port-Of: odoo/odoo#255824
This update fixes a technical error that could have caused the system to fail when accessing certain components. The change adds checks to ensure key objects are initialized before use, preventing an 'AttributeError' and ensuring smoother operation. This improves system stability and reliability.
Original PR description
An error occurs when attempting to access `createCTEPManager` from `self.easy_ctep`, because `self.easy_ctep` is `None`. Error: `AttributeError: 'NoneType' object has no attribute 'createCTEPManager'` This commit resolves the issue by adding an early return when `self.easy_ctep` is `None`. It also introduces a safeguard in `tim_interface.py` to return early when `self.tim_api` is None to preventing unintended errors from accessing an uninitialized object. sentry-7334805653
This update fixes a bug that prevented users from saving blank reports in web_studio. The issue stemmed from removing identifying XML attributes, causing a system error. The fix ensures the system gracefully handles blank XML, preventing save failures and maintaining report editing functionality.
Original PR description
Currently an exception is generated when the user tries to save the report XML as follows: - Install sale_management and web_studio - Go to Sales > Enable Studio Mode > Open Reports - Click New >…
Currently an exception is generated when the user tries to save the report XML as follows:
- Install sale_management and web_studio
- Go to Sales > Enable Studio Mode > Open Reports
- Click New > Select `Blank` Report
- Click `EDIT RESOURCES` and replace all XML with below (Remove `lock-id`)
```
<t t-name="web.basic_layout">
<t t-call="web.html_container">
<t t-if="not o" t-set="o" t-value="doc"/>
<div class="article" t-att-data-oe-model="o and o._name" t-att-data-oe-id="o and o.id" t-att-data-oe-lang="o and o.env.context.get('lang')">
<!-- Your report content -->
</div>
</t>
</t>
```
Error: `KeyError: None`
This issue arises because users removed `lock-id` (identified nodes) attributes from elements, making them untraceable. As a result, fetching the `DIFF_ATTRIBUTE` (key for getting identified) nodes from the modified XML (new_tree) returns `None`, which causes an error when attempting to access the corresponding node in `map_id_to_node_old` (see see code at [1]).
This commit fixes the issue by preventing access to `map_id_to_node_old` when the `key (new_tree.get(DIFF_ATTRIBUTE))` is `None`. In this case, no changes are applied, and the original XML is returned since no identifiable attribute is available in new XML tree.
sentry-7349653271This update fixes an issue where the print button disappeared from PDF attachment previews in version 19 and later. The change removes a redundant setting that was previously hiding the button on desktop, ensuring the print function is consistently available for all users. This improves usability for users viewing PDFs.
Original PR description
**Problem:** When opening a PDF attachment preview in v19+, the print button disappeared. As a result, the Print button is not accessible from the main toolbar. In v18 the buttons remained…
**Problem:** When opening a PDF attachment preview in v19+, the print button disappeared. As a result, the Print button is not accessible from the main toolbar. In v18 the buttons remained permanently visible. **Steps to reproduce:** - Open any record that has a PDF attachment in the chatter. - Click the PDF attachment to open the preview popup. - Observe toolbar buttons disappeared. **Cause:** commit responsible for this: https://github.com/odoo/odoo/commit/b7889d007f72c7e7f9f22318a9968338cde0ddb3 It was removed to prevent some bugs with some android/smartdevice and some old browsers `file_viewer.js` passes `hidePrint: true` to `hidePDFJSButtons()`. This was originally added alongside the mobile guard (`isMobileOS()`), but the `isMobileOS()` guard in `hidePDFJSButtons` already handles mobile, so the explicit `hidePrint: true` in `file_viewer.js` was redundantly hiding Print on desktop too. https://github.com/odoo/odoo/blob/654a1caafc2ab7b2841c372910b2e81dc6e9c035/addons/web/static/src/core/file_viewer/file_viewer.js#L60-L71 https://github.com/odoo/odoo/blob/654a1caafc2ab7b2841c372910b2e81dc6e9c035/addons/web/static/src/core/utils/pdfjs.js#L35-L37 **Fix:** - Remove `hidePrint: true` from `file_viewer.js` since mobile is already covered by the `isMobileOS()` check inside `hidePDFJSButtons()`. opw-6216534 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#264739
This update fixes a minor issue where some work entry names within the Odoo HR system were displaying incorrect spellings. The team corrected the data files to ensure accurate and consistent naming conventions for work entry types. This ensures proper functionality and reporting within the HR module.
Original PR description
Issue: ---------------------------------------- Some work entry names are wrong. Solution: ---------------------------------------- Change the data files. opw-6090081 Forward-Port-Of: odoo/odoo#264094
This update resolves an issue where Odoo was attempting to process invalid GSTR2B attachments due to missing file content. The system now verifies that the attachment's actual data is present before attempting to process it, preventing errors and ensuring proper return handling. This improves the reliability of tax reporting.
Original PR description
There may be databases contained GSTR2B JSON attachments whose metadata was still present in `ir.attachment`, but whose underlying binary content was missing from the filestore. This caused the matching flow to attempt processing invalid JSON payloads instead of moving the return to `error_in_fetching`. The condition validating JSON attachments now also checks that the attachment raw content exists before adding it to the payload list. opw-6088082 Forward-Port-Of: odoo/enterprise#117083
This update resolves an issue where Knowledge articles appeared narrow when printed on large screens. The fix specifically targets the Knowledge editor's form view, preventing a default CSS rule from causing a constricted layout. Now, articles print correctly when exported or viewed in a zoomed-out state.
Original PR description
Currently, a CSS rule forces the form container width to 1px to ensure that the nested list view can correctly compute its size. See: ```scss .o_form_view.o_xxl_form_view { .o_form_view_container {…
Currently, a CSS rule forces the form container width to 1px to ensure that the nested list view can correctly compute its size.
See:
```scss
.o_form_view.o_xxl_form_view {
.o_form_view_container {
width: 1px; /* List view needs a width value to recompute the size correctly */
}
}
```
However, since the Knowledge editor is implemented as a form view, this rule also affects Knowledge. When zooming out, the `o_xxl_form_view` class is added to the form view container, causing the rule to apply. If an article is printed while this class is present, it is constrained to an extremely narrow column, making it unreadable.
Steps to reproduce:
1. Open an article in Knowledge
2. Zoom out using `Ctrl` + `-`
3. Open the kebab menu and select "Export"
=> The article is rendered in a very narrow column.
To address this issue, we override this rule specifically for Knowledge. With this change, articles are now rendered correctly when printed or exported as PDF.
Task-5999878
Forward-Port-Of: odoo/enterprise#103259This update fixes an issue where CodaBox statements were sometimes incorrectly routed to the wrong bank journal due to currency differences. The system now prioritizes journals with a specific currency ID, ensuring statements are accurately assigned to the correct currency account. This improves financial reporting accuracy.
Original PR description
When several journals share the same IBAN but use different currencies, a CODA could land on the wrong journal instead of the currency-specific one. Split the lookup in two passes: first a journal with an explicit currency_id matching the CODA, then fall back to the no-currency journal (qualified by the company currency). Steps to reproduce: - Create 2 bank journals sharing the same IBAN; one without currency and one with USD. - Setup CodaBox connection and retrieve USD statements. - Before this fix: may land on the EUR journal. opw-6048931 Forward-Port-Of: odoo/enterprise#117332 Forward-Port-Of: odoo/enterprise#114590
This update ensures that UTM tracking parameters (like 'utm_reference') are properly processed when the website's cookies bar is displayed. Previously, these parameters weren't handled correctly. This change improves the accuracy of website analytics data by ensuring that all website traffic is tracked consistently.
Original PR description
Since we've added the utm_reference parameter, it should be correctly handled in when the cookies bar is present Added in: https://github.com/odoo/odoo/pull/233963 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
This update resolves an issue where the drag-and-drop overlay for moving table rows and columns in email templates was misaligned, particularly when the table was within an iframe. The fix adjusts the overlay's position calculation to correctly account for the iframe's presence, ensuring proper alignment and a better user experience.
Original PR description
Steps to Reproduce: - Navigate to Email Marketing and open any template. - Insert a table into the template. - Long-press on the column or row options. Description of the issue: - The blue overlay used for moving rows/columns appears misaligned. Cause: - The position of the drag-and-drop overlay is calculated without considering the iframe. When the table is inside an iframe and the overlay is rendered outside of it, the position calculation becomes incorrect. Solution: - Update the position calculation logic to account for the iframe. This ensures that when the table is inside an iframe, the drag-and-drop overlay is displayed at the correct position. task-6059715 Forward-Port-Of: odoo/odoo#256347
This update fixes an issue where the spreadsheet feature was making unnecessary server requests when displaying CRM lists. The change ensures that all required data is fetched efficiently, reducing the number of calls to the server and improving spreadsheet loading times. This results in a smoother and faster user experience.
Original PR description
How to reproduce: - Create a spreadsheet with a CRM list and only set 2 cells content A1: =odoo.list(1, 1, "id") A2: =odoo.list.header(1,"zip") - save and reload the spreadsheet and look at the server calls ⮕ web_search_read called 2 times The problem is that the datasource methods early return if the datasource is already loading without adding the field to the list to fetch. It was partially solved by explicitely adding the field to fetch in the *getter* `getListCellValueAndFormat` but not on `getListHeaderValue`. This revision ensures that we always add the field to the list to fetch in the datasource directly, this responsibility should not be held by the plugin getters. Task-6175523 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#261985
16 changes
Resolved issues and error corrections
This update fixes a display issue where accounting reports, when filling a full screen, would obscure the final row, preventing users from seeing all data. The fix involves adjusting styling to ensure the complete final row is visible, improving report clarity and data accessibility. This enhancement ensures users can fully review their accounting reports.
Original PR description
Problem: When an accounting report fills a whole page, the final row is not fully visible Steps to reproduce: 1- View a tax report that has a lot of entries that would fill the whole screen 2- Notice how the last line is not fully visible and it isn't possible to scroll and view the rest of it Solution: Correctly style the different < div > elements opw-6171555 Forward-Port-Of: odoo/enterprise#116068
This update adjusts how errors during GIF searches are logged. Previously, errors were flagged as critical issues, but this change reclassifies them as warnings – a more appropriate response as the issue isn't a fundamental problem with the software. This improves logging clarity and reduces unnecessary alerts.
Original PR description
Currently, the logger prints an error message to the terminal when an error occurs searching for GIFs on Tenor. This commit changes the logger error to a warning, since this is not an error in the codebase. sentry-7218806107
This update fixes an issue where deleting all website records would cause a website access error. The fix adds a check to ensure at least one website remains before allowing deletion, preventing a 'False' value from triggering an error and improving website stability.
Original PR description
Currently an error occurs when the user unlinks all websites and tries to access the frontend ( website). Steps to produce an error: - Install the website module - Delete external identifier…
Currently an error occurs when the user unlinks all websites and tries to access the frontend ( website). Steps to produce an error: - Install the website module - Delete external identifier default_website - Delete the My Website from Website > Configuration > Websites - An error will occur when we try to access the website. Error: `TypeError: expected string or bytes-like object, got 'bool'` This issue was generated because while setting cookies to the Werkzeug response, we got 'value' as a `False` at line [1], and the `value` is the language code from the request (see line [2]) . The language is determined by the `IrHttp` class through the `_get_default_lang` method (see code line [3]). In the website module, this method is overridden to return the language configured on the current website. However, when all websites are deleted, no valid website record remains. As a result, the method attempts to retrieve the language from an empty website, which returns `False` (see code line [4]), leading to the issue. This commit fixes the issue by preventing the deletion of all website records. The method `_unlink_except_default_website` already ensures that the default website (identified by the external ID `website.default_website`) cannot be deleted. However, if this external identifier has been removed, the safeguard no longer applies, allowing the default website to be deleted without raising any error. To address this, an additional check has been introduced: when the `default_website` is not found, the system verifies whether any website records remain using search_count. If no records are found, a `UserError` is raised to prevent the deletion and ensure that at least one website always exists. [1]: https://github.com/odoo/odoo/blob/cdf8aaec82ee387c8f29b8327efbc95fd17e2cb8/odoo/http.py#L1825 [2]: https://github.com/odoo/odoo/blob/cdf8aaec82ee387c8f29b8327efbc95fd17e2cb8/addons/http_routing/models/ir_http.py#L518 [3]: https://github.com/odoo/odoo/blob/cdf8aaec82ee387c8f29b8327efbc95fd17e2cb8/addons/http_routing/models/ir_http.py#L407-L411 [4]: https://github.com/odoo/odoo/blob/cdf8aaec82ee387c8f29b8327efbc95fd17e2cb8/addons/website/models/ir_http.py#L288 sentry-7413005338
This update fixes an issue where portal messages were incorrectly restricted, preventing access to certain types of non-internal messages. The change ensures that internal notes remain hidden while allowing all other non-internal message types to be visible to users. This improves the overall usability of the portal.
Original PR description
*: test_mail_full Since #138233, portal messages were strictly filtered by the `mt_comment` subtype. This was intended to hide internal notes, but it incorrectly excluded other non-internal message subtypes. Basically we want the share domain (`_get_search_domain_share()`) to apply to all users in the portal. This change ensures internal notes remain hidden while allowing all other non-internal non-comment subtypes to be visible. opw-6031571 Forward-Port-Of: odoo/odoo#264431 Forward-Port-Of: odoo/odoo#263052
This update fixes an issue where the print button disappeared from PDF attachment previews in version 19 and later. The change removes a redundant setting that was hiding the print button on desktop, ensuring it's consistently visible for all users. This restores a key functionality for users to print PDF documents.
Original PR description
**Problem:** When opening a PDF attachment preview in v19+, the print button disappeared. As a result, the Print button is not accessible from the main toolbar. In v18 the buttons remained…
**Problem:** When opening a PDF attachment preview in v19+, the print button disappeared. As a result, the Print button is not accessible from the main toolbar. In v18 the buttons remained permanently visible. **Steps to reproduce:** - Open any record that has a PDF attachment in the chatter. - Click the PDF attachment to open the preview popup. - Observe toolbar buttons disappeared. **Cause:** commit responsible for this: https://github.com/odoo/odoo/commit/b7889d007f72c7e7f9f22318a9968338cde0ddb3 It was removed to prevent some bugs with some android/smartdevice and some old browsers `file_viewer.js` passes `hidePrint: true` to `hidePDFJSButtons()`. This was originally added alongside the mobile guard (`isMobileOS()`), but the `isMobileOS()` guard in `hidePDFJSButtons` already handles mobile, so the explicit `hidePrint: true` in `file_viewer.js` was redundantly hiding Print on desktop too. https://github.com/odoo/odoo/blob/654a1caafc2ab7b2841c372910b2e81dc6e9c035/addons/web/static/src/core/file_viewer/file_viewer.js#L60-L71 https://github.com/odoo/odoo/blob/654a1caafc2ab7b2841c372910b2e81dc6e9c035/addons/web/static/src/core/utils/pdfjs.js#L35-L37 **Fix:** - Remove `hidePrint: true` from `file_viewer.js` since mobile is already covered by the `isMobileOS()` check inside `hidePDFJSButtons()`. opw-6216534 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#264739
This update resolves an issue where invoices using the 'O-service out of tax scope' tax category in Odoo failed Peppol validation. The fix ensures correct handling of this tax category, aligning with Peppol requirements and preventing validation errors. This ensures seamless integration with Peppol trading partners.
Original PR description
**PROBLEM** In peppol, there is a tax category 'O-service out of tax scope'. This tax category is used when what is invoice can't be tax (out of the tax scope). This is different from tax exemption: when using tax category O, there can't be any vat id on the invoice. This also means you can't use tax category O with other taxes, since other taxes need the vat id. Invoices generated by odoo with tax category O failed peppol validation. **STEP TO REPRODUCE** 1. install account_edi_ubl_cii_tax_extension. 2. Create a tax with tax category O. 3. Create an invoice and try validating using the file validator. 4. You should have error BR-O-02 and BR-O-05. opw-6012669 Forward-Port-Of: odoo/odoo#264081 Forward-Port-Of: odoo/odoo#254645
This update resolves an issue where Odoo was attempting to process invalid GSTR2B attachments due to missing file content. The fix ensures that attachments have both metadata and actual file data before being processed, preventing errors and improving the reliability of tax reporting.
Original PR description
There may be databases contained GSTR2B JSON attachments whose metadata was still present in `ir.attachment`, but whose underlying binary content was missing from the filestore. This caused the matching flow to attempt processing invalid JSON payloads instead of moving the return to `error_in_fetching`. The condition validating JSON attachments now also checks that the attachment raw content exists before adding it to the payload list. opw-6088082 Forward-Port-Of: odoo/enterprise#117083
This update fixes an issue where Knowledge articles appeared in a narrow, unreadable format when printed on large screens. The fix specifically targets the Knowledge editor's form view, preventing a default CSS rule from causing this layout problem. Now, articles print correctly in a standard format.
Original PR description
Currently, a CSS rule forces the form container width to 1px to ensure that the nested list view can correctly compute its size. See: ```scss .o_form_view.o_xxl_form_view { .o_form_view_container {…
Currently, a CSS rule forces the form container width to 1px to ensure that the nested list view can correctly compute its size.
See:
```scss
.o_form_view.o_xxl_form_view {
.o_form_view_container {
width: 1px; /* List view needs a width value to recompute the size correctly */
}
}
```
However, since the Knowledge editor is implemented as a form view, this rule also affects Knowledge. When zooming out, the `o_xxl_form_view` class is added to the form view container, causing the rule to apply. If an article is printed while this class is present, it is constrained to an extremely narrow column, making it unreadable.
Steps to reproduce:
1. Open an article in Knowledge
2. Zoom out using `Ctrl` + `-`
3. Open the kebab menu and select "Export"
=> The article is rendered in a very narrow column.
To address this issue, we override this rule specifically for Knowledge. With this change, articles are now rendered correctly when printed or exported as PDF.
Task-5999878
Forward-Port-Of: odoo/enterprise#103259This update corrects an issue where live chat conversations were incorrectly marked as read without user interaction. The change ensures that the chat window's focus state is properly managed, preventing unintended read-state updates and maintaining accurate conversation tracking. This improves the user experience for live chat.
Original PR description
Before this Commit: Previously, autofocusThread used an incremented autofocus value to handle re-render/reactivity cases for chat windows opened through `autoOpenChatWindowOnNewMessage`. However, this logic was too broad because it could trigger `mark-as-read` behavior even when the chat window, thread, or composer was not actually focused. This resulted in conversations being marked as read without any real user interaction. After this Commit: With this change, autofocusThread now directly reuses the chat window autofocus value instead of incrementing it, avoiding unnecessary read-state updates while still preserving the expected focus behavior. This commit also reverts the behavior introduced in: https://github.com/odoo/odoo/pull/253609 to align with the behavior implemented in: https://github.com/odoo/odoo/pull/263607 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#264940
This update optimizes how Odoo retrieves country state information, specifically for invoices and sales orders in the Indonesian localization. The change avoids a slow, repeated database query, resulting in faster performance, particularly during import processes. This improves overall system responsiveness.
Original PR description
There is no need to do a query to get a random foreign state. This search can be performed many times during imports. While the query is generally not reading a lot of data, it is still doing a seq…
There is no need to do a query to get a random foreign state. This search can be performed many times during imports.
While the query is generally not reading a lot of data, it is still doing a seq scan because of the ORDER BY, while the query can be avoided completely.
```sql
EXPLAIN ANALYZE
SELECT "res_country_state"."id"
FROM "res_country_state"
WHERE "res_country_state"."code" NOT IN ('IN')
ORDER BY "res_country_state"."code", "res_country_state"."id"
LIMIT 1;
QUERY PLAN
------------------------------------------------------------------------------------------------------------------------------
Limit (cost=84.93..84.94 rows=1 width=8) (actual time=0.450..0.450 rows=1 loops=1)
-> Sort (cost=84.93..90.49 rows=2224 width=8) (actual time=0.449..0.449 rows=1 loops=1)
Sort Key: code, id
Sort Method: top-N heapsort Memory: 25kB
-> Seq Scan on res_country_state (cost=0.00..73.81 rows=2224 width=8) (actual time=0.012..0.281 rows=2223 loops=1)
Filter: ((code)::text <> 'IN'::text)
Rows Removed by Filter: 2
Planning Time: 0.075 ms
Execution Time: 0.462 ms
```
This can be worse if when the table is not in the buffer.
Forward-Port-Of: odoo/odoo#265007This update fixes a usability issue where users could inadvertently edit the cover image, title, and subtitle of a blog post from the 'Next Post' section. The change restricts editing capabilities within this section, ensuring users only modify content within their current view and improving the overall user experience.
Original PR description
[*]: html_builder Issue: When viewing a blog post, the "Next Post" section allows editing the cover image, title, and subtitle of another post. Editing content that belongs to a different post from…
[*]: html_builder
Issue:
When viewing a blog post, the "Next Post" section allows editing the cover image, title, and subtitle of another post. Editing content that belongs to a different post from within the current one is incorrect.
Steps to reproduce:
* Open a blog post that has a "Next Post" section visible.
* Enter edit mode.
* Try to edit the cover image, title, or subtitle of the next post.
* These elements can be interacted with even though they should not be
editable.
Fix:
Make the "Next Post" section fully non-editable. The title and subtitle were already handled via content_not_editable_selectors, but the cover image could still activate builder options, allowing it to be replaced.
Introduce a new `not_activable_element_selectors` resource in the `BuilderOptionsPlugin` so that plugins can declare elements that should not trigger the builder overlay when clicked. Updated the builder to retrieve this selector list from plugin resources instead of using a hardcoded value.
task-5435878
Forward-Port-Of: odoo/odoo#249815This update corrects a problem where the 'Partner Pages List' view was incorrectly trying to modify a field added by the Mail module. This prevented the base module from upgrading properly. The fix ensures the view inherits correctly from the Mail module's version, guaranteeing the necessary field ('activity_ids') is available.
Original PR description
The `partner_pages_tree_view` was attempting to modify `activity_ids` field attributes, but this field is added by the mail module in a sibling inheritance branch…
The `partner_pages_tree_view` was attempting to modify `activity_ids` field attributes, but this field is added by the mail module in a sibling inheritance branch ([mail.res_partner_view_tree_inherit_mail]), making it unreachable from the [`partnership.view_res_partner_grade_tree`] ancestry chain:
```py
base.view_partner_tree → partnership.view_res_partner_grade_tree → partner_pages_tree_view
base.view_partner_tree → mail.res_partner_view_tree_inherit_mail ← activity_ids lives here
```
This caused a ParseError during base module upgrade:
```py
File "/home/odoo/odoo/odoo/odoo/tools/convert.py", line 639, in _tag_root
raise ParseError(msg) from None # Restart with "--log-handler odoo.tools.convert:DEBUG" for complete traceback
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
odoo.tools.convert.ParseError: while parsing /home/odoo/odoo/odoo/odoo/addons/base/views/res_partner_views.xml:13
Error while parsing or validating view:
Element '<field name="activity_ids">' cannot be located in parent view
View error context:
{'file': '/home/odoo/odoo/odoo/odoo/addons/base/views/res_partner_views.xml',
'line': 1,
'name': 'Partner Pages List',
'view': ir.ui.view(2148,),
'view.model': 'res.partner',
'view.parent': ir.ui.view(2108,),
'xmlid': 'website_crm_partner_assign.partner_pages_tree_view'}
```
**Steps to reproduce:**
- In a v19.1 db install `website_crm_partner_assign`
- Go to apps and search base module and click upgrade
**Fix:**
Make the partner view from partnership inherit from the one defined in mail instead of the one defined in base.
opw-6186684
[mail.res_partner_view_tree_inherit_mail]: https://github.com/odoo/odoo/blob/saas-19.3/addons/mail/views/res_partner_views.xml#L58C21-L67
[`partnership.view_res_partner_grade_tree`]: https://github.com/odoo/odoo/blob/f3b317310b84edb073009f7d15d7fec002f3ccf0/addons/partnership/views/res_partner_views.xml#L48-L57
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update removes a potential risk for our IoT boxes by ensuring they can never check out the main development branch (master). This change addresses a previously unnecessary and potentially harmful process, enhancing the stability and security of our IoT integrations.
Original PR description
This PR removes a possibility for an iot box to ever checkout master. Since the latest stable version policy checking out to master is never used and is dangerous
This update fixes an issue where incorrect data on payslips could trigger warnings. The change ensures that payslips with flawed information are handled more gracefully, preventing disruptions to payroll processing. This improves the reliability and stability of the HR payroll module.
Original PR description
Task: 6133111
This update resolves a technical issue related to order validation in Point of Sale, specifically for the Food Delivery Module (FDM). By extracting a key process, we now allow for more flexible order adjustments and prevent orders from being prematurely finalized when errors occur, improving reliability.
Original PR description
In order to allow patching (in particular for FDM, where we don't want to finalize the validation of the order if there is an error), we extract the waiter method. see odoo/enterprise#104468 Forward-Port-Of: odoo/odoo#244298
A previous error prevented users from searching for links within email click tracking. This update resolves the issue by correcting how the system handles link searches, ensuring accurate results when searching by short URL. This improves the reliability of our email marketing analytics.
Original PR description
Overview ------ When searching based on the `Link (short_url)` field in the search bar, in the `link.tracker.click` list view, an error fires up. How to Reproduce ------ 1. Open the Email Marketing…
Overview ------ When searching based on the `Link (short_url)` field in the search bar, in the `link.tracker.click` list view, an error fires up. How to Reproduce ------ 1. Open the Email Marketing app 2. Create a new mailing (or you can use an existing one that has some clicks) and send it 3. Make a click in the email from the recipient's side 4. Open the link tracker `click` related to that mailing (select the mailing → `Link Trackers` stat button → click on a link → `Clicks` stat button) 5. Make a search based on the Link (short_url) field Expected Behavior ------ Return the list of links that matches the entered search query. Current Behavior ------ Odoo Server Error. Cause & Solution ------ The cause of this error is that the `shor_url` field is a computed, non-stored, field, and hence, we cannot directly make a search on it. So, either we make the `short_url` a stored field, which is not so efficient, or we create our own custom `_search_..` method. Task-6131693 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#263635 Forward-Port-Of: odoo/odoo#260146
3 changes
Resolved issues and error corrections
This fix resolves an issue where Knowledge articles appeared narrow when printed or exported due to a CSS rule affecting form views. The change specifically targets the Knowledge editor, ensuring articles are rendered correctly regardless of screen size or zoom level, improving readability and export quality.
Original PR description
Currently, a CSS rule forces the form container width to 1px to ensure that the nested list view can correctly compute its size. See: ```scss .o_form_view.o_xxl_form_view { .o_form_view_container {…
Currently, a CSS rule forces the form container width to 1px to ensure that the nested list view can correctly compute its size.
See:
```scss
.o_form_view.o_xxl_form_view {
.o_form_view_container {
width: 1px; /* List view needs a width value to recompute the size correctly */
}
}
```
However, since the Knowledge editor is implemented as a form view, this rule also affects Knowledge. When zooming out, the `o_xxl_form_view` class is added to the form view container, causing the rule to apply. If an article is printed while this class is present, it is constrained to an extremely narrow column, making it unreadable.
Steps to reproduce:
1. Open an article in Knowledge
2. Zoom out using `Ctrl` + `-`
3. Open the kebab menu and select "Export"
=> The article is rendered in a very narrow column.
To address this issue, we override this rule specifically for Knowledge. With this change, articles are now rendered correctly when printed or exported as PDF.
Task-5999878
Forward-Port-Of: odoo/enterprise#103259This update resolves a discrepancy in how contract type IDs are defined within Odoo's payroll modules. Specifically, the definition was standardized across the base and Belgium-specific versions. This ensures accurate payroll calculations and reporting for Belgian users.
Original PR description
[IMP] hr_contract_salary: fix contract_type_id definition The definitions of the contract_type_id in hr_contract_salary_offer and l10n_be_hr_contract_salary/hr_contract_salary_offer should be same I converted the definition of contract_type_id in the base module to the Belgium one. Also, the contract_type_id was inserted to the view in Belgium one as well, I deleted that part to prevent double appearance. This task is only for v.17, after this version I will open a new PR to handle them. Do not forward the task after v.17 (only for v.17) task - 6101717 Forward-Port-Of: odoo/enterprise#117307 Forward-Port-Of: odoo/enterprise#113244
This update corrects a problem where portal users could inadvertently delete documents they shouldn't have. The fix ensures that portal users can only delete documents they own, preventing unintended data loss during the system's automatic cleanup process. This improvement enhances data integrity and user control.
Original PR description
Reproduce: with rpc call as portal user, you can archive documents you have access to. This is not desired as this may lead to records being deleted when the cron collects the trash, but we only wanted to support portal users deleting only records they own. What we did when calling toggle_active should be done for all calls to `write` with `active`. It also removes the need for `_raise_if_unauthorized_archive` and `_unlink_except_unauthorized`. Task-6205627 Forward-Port-Of: odoo/enterprise#116886
11 changes
Resolved issues and error corrections
This update resolves a bug where users were incorrectly redirected after completing a signature request. The fix redirects users to their signature list within the portal, streamlining the process and preventing confusion. This ensures a smoother experience for users signing documents.
Original PR description
steps : - create a signature request with 2 roles, assign those to demo or portal user - create another one with a single signature role assigned to the demo or portal user - go on the portal and click on the second document to sign it - complete the document then click close on the thank you popup -> you are redirected on the portal view of the first document This happens because the redirect to /my/document is made using the sign_request id but the controller is using a sign_request_item id. Instead of adding a confusing controller route to be able to pass sign_request ids to reach the document's portal page, we simply redirect to the list of signatures on the portal instead. opw-6190390 Forward-Port-Of: odoo/enterprise#116949 Forward-Port-Of: odoo/enterprise#116600
This update resolves an issue where the Knowledge editor's printed output was excessively narrow on large screens. The fix specifically targets the CSS rule causing this problem, ensuring articles render correctly when printed or exported as PDFs. This improves the user experience for accessing and sharing knowledge content.
Original PR description
Currently, a CSS rule forces the form container width to 1px to ensure that the nested list view can correctly compute its size. See: ```scss .o_form_view.o_xxl_form_view { .o_form_view_container {…
Currently, a CSS rule forces the form container width to 1px to ensure that the nested list view can correctly compute its size.
See:
```scss
.o_form_view.o_xxl_form_view {
.o_form_view_container {
width: 1px; /* List view needs a width value to recompute the size correctly */
}
}
```
However, since the Knowledge editor is implemented as a form view, this rule also affects Knowledge. When zooming out, the `o_xxl_form_view` class is added to the form view container, causing the rule to apply. If an article is printed while this class is present, it is constrained to an extremely narrow column, making it unreadable.
Steps to reproduce:
1. Open an article in Knowledge
2. Zoom out using `Ctrl` + `-`
3. Open the kebab menu and select "Export"
=> The article is rendered in a very narrow column.
To address this issue, we override this rule specifically for Knowledge. With this change, articles are now rendered correctly when printed or exported as PDF.
Task-5999878
Forward-Port-Of: odoo/enterprise#103259This update resolves a stability issue in the HTML Editor test by eliminating reliance on unpredictable timing mechanisms. The test now uses a more reliable method to verify the debounce functionality, ensuring consistent results across different environments and preventing test failures due to browser scheduling variations. This improves the overall reliability of our testing process.
Original PR description
Description of the issue this PR addresses: Previously the test relied on real timers, animation frames and simulateArrowKeyPress(), making it sensitive to browser scheduling, native selectionchange timing and CPU slowness. The test now: - use advanceTime() instead of real setTimeout() - Replace simulateArrowKeyPress() with manual selectionchange dispatch to make debounce scheduling deterministic and avoid relying on the browser's asynchronous native selectionchange dispatch. - Add patchWithCleanup + verifySteps to test actual debounce execution rather than DOM visibility timing, which is sensitive to rendering and brwoser scheduling variance. This removes timing races and stabilizes the test on slow CI workers. runbot-242466 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where WhatsApp channel avatars were incorrectly displaying a default avatar instead of the member's actual avatar after a new member was added. Now, the sidebar correctly uses the WhatsApp channel member's avatar, ensuring a consistent and accurate representation of channel participants.
Original PR description
WhatsApp sidebar avatars should be resolved from the channel's whatsapp member, not from an arbitrary non-self member. Before this fix, adding a member to a WhatsApp channel caused the default Discuss avatar to be displayed instead of the actual WhatsApp member's avatar. This happened because the correspondent was not correctly computed for channels of type whatsapp. task-[5879840](https://www.odoo.com/odoo/project/1519/tasks/5879840) Forward-Port-Of: odoo/enterprise#115745
This update corrects a bug where portal users could inadvertently delete documents they didn't own through a specific archiving process. The fix ensures that portal users can only delete documents they own, preventing unintended data loss during automated trash collection. This improves data integrity and aligns with user permissions.
Original PR description
Reproduce: with rpc call as portal user, you can archive documents you have access to. This is not desired as this may lead to records being deleted when the cron collects the trash, but we only wanted to support portal users deleting only records they own. What we did when calling toggle_active should be done for all calls to `write` with `active`. It also removes the need for `_raise_if_unauthorized_archive` and `_unlink_except_unauthorized`. Task-6205627 Forward-Port-Of: odoo/enterprise#116886
This update resolves an issue where the Google address autocomplete field remained editable even in read-only views. The change ensures the field correctly displays its value when set to read-only, improving usability and preventing unintended data modifications. This fix enhances the stability and consistency of the Odoo application.
Original PR description
**Issue:** The `google_address_autocomplete` widget remained editable even when the view or field was set to `readonly`. **Solution:** Modified the `AddressAutoCompleteTemplate` to conditionally render the component. If `props.readonly` is true, the template now renders a `<span>` with the field value. Task~5182770 Forward-Port-Of: odoo/odoo#260952
This update resolves a visual glitch in the SelectCreateDialog, ensuring the control panel and list headers remain visible. The issue stemmed from a previous change that removed a key styling rule, and this fix re-applies it to restore the intended layout and functionality.
Original PR description
This commit fixes an issue where the SelectCreateDialog's control panel and list headers would scroll out of view, restoring the intended behavior introduced in https://github.com/odoo/odoo/pull/206433. The feature was inadvertently broken by https://github.com/odoo/odoo/pull/219972, which removed the `overflow: auto` rule from `o_content` elements outside of actions. To resolve this, the `overflow: auto` rule has been explicitly reapplied to the SelectCreateDialog content area. task-6214232
This update fixes an issue where embedded action names weren't consistently translated, leading to untranslated labels in areas like the Documents top bar. By delegating the display name to the linked server action, the embedded action's name will always reflect the correct, translated version. This ensures a better user experience with accurate action labels.
Original PR description
When an embedded action is created from a server action, its name is just stored as is. When using these actions e.g. in the Documents top bar, there is already a "hack" to copy the name of the…
When an embedded action is created from a server action, its name is just stored as is. When using these actions e.g. in the Documents top bar, there is already a "hack" to copy the name of the server action to the embedded action in each active language. This has a few issues: - When a language is activated after the embedded action creation, the name of the server action is not copied to the embedded action, resulting in an untranslated name. - When the name of the server action is changed, the name of the embedded action is not updated, resulting in an outdated and possibly untranslated name. The workaround is to disable/enable the action now, but it's not very user-friendly and can be easily forgotten. To fix this, we can simply delegate the display name of the embedded action to the linked server action. This way, the name of the embedded action will always be up to date and correctly translated. Related: https://github.com/odoo/enterprise/pull/116369 Forward-Port-Of: odoo/odoo#262981
This update removes a redundant step in creating embedded actions within Odoo. Previously, a separate translation process was required; now that embedded actions inherit their display names directly, the manual translation copy is no longer necessary, streamlining the process.
Original PR description
Now that `ir.embedded.actions` delegates its display name to the linked action, the manual translation copy on embedded action creation is no longer needed. Related: https://github.com/odoo/odoo/pull/262981 Forward-Port-Of: odoo/enterprise#116369
This update fixes a bug where the HTML editor wouldn't correctly select tables when a user started a selection within a table cell and then moved the selection outside of that cell. Previously, the entire table was selected in this scenario. This change ensures a more intuitive and reliable table selection experience for users.
Original PR description
The previous commit fixes a behavior that is expected when the user makes a selection that starts in any element and ends in a table cell (the whole table gets selected), but the reverse case was never handled, namely when the selection starts in a table cell and ends outside of it. backport-https://github.com/odoo/odoo/pull/239270/changes/68e71fad5bbb0445bb1850bf694235f3235b602f task-5420366 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#264947 Forward-Port-Of: odoo/odoo#264722
This update ensures that the price comparison strikethrough is only displayed on products when the compare price is higher than the regular sales price. Previously, it incorrectly showed a strikethrough even when the prices were identical, creating a confusing user experience. This change improves the accuracy and clarity of product pricing on the website.
Original PR description
Steps to produce: --- - Install website_sale module. - Enable `Comparison Price` from settings. - Create a product with sales price = 25 and compare price = 25. - Go to the shop page and search for…
Steps to produce: --- - Install website_sale module. - Enable `Comparison Price` from settings. - Create a product with sales price = 25 and compare price = 25. - Go to the shop page and search for the product. Issue: --- - The strikethrough appears on the compare price (25) even when the compare price equals the sales price. - The strikethrough should only appear when the compare price is strictly greater than the sales price. Root cause: --- - In `_search_render_results_prices` [1], the condition only checks for the presence of `compare_list_price` in `combination_info`, without verifying that it is actually greater than the sales price. This causes the strikethrough to render even when both prices are equal. Solution: --- - Added a strict greater-than check on compare price against the sales price, aligning with the existing behavior already implemented for the product page [2]. Before: --- <img width="537" height="98" alt="image" src="https://github.com/user-attachments/assets/a1524f0f-4a59-4daf-ac7d-834604710492" /> After: --- <img width="538" height="95" alt="image" src="https://github.com/user-attachments/assets/1e32269b-13c0-469b-9d1f-e6d6ced97fdd" /> [1]https://github.com/odoo/odoo/blob/4ca059731f97d0f9bce4863cf195fd68a755717e/addons/website_sale/models/product_template.py#L831-L834 [2]https://github.com/odoo/odoo/blob/4ca059731f97d0f9bce4863cf195fd68a755717e/addons/website_sale/views/templates.xml#L1340-L1346 opw-6178129 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#264912 Forward-Port-Of: odoo/odoo#262434
4 changes
Resolved issues and error corrections
This update fixes an issue where WhatsApp channel avatars were incorrectly displayed as the default Discuss avatar after a member was added. Now, avatars are correctly pulled from the channel's WhatsApp member, ensuring a consistent and accurate representation of participants in WhatsApp channels. This improves the user experience for WhatsApp channel communication.
Original PR description
WhatsApp sidebar avatars should be resolved from the channel's whatsapp member, not from an arbitrary non-self member. Before this fix, adding a member to a WhatsApp channel caused the default Discuss avatar to be displayed instead of the actual WhatsApp member's avatar. This happened because the correspondent was not correctly computed for channels of type whatsapp. task-[5879840](https://www.odoo.com/odoo/project/1519/tasks/5879840) Forward-Port-Of: odoo/enterprise#115745
This update removes a redundant step in creating embedded actions within Odoo. Previously, a separate translation was required, but now the system automatically uses the translation from the linked action. This simplifies the process and ensures consistent translations across the platform.
Original PR description
Now that `ir.embedded.actions` delegates its display name to the linked action, the manual translation copy on embedded action creation is no longer needed. Related: https://github.com/odoo/odoo/pull/262981 Forward-Port-Of: odoo/enterprise#116369
This update prevents the report editor in Odoo Studio from using default theme colors, which were causing potential styling issues. This change ensures reports are styled consistently and independently of the main Odoo interface. The fix addresses a longstanding architectural problem within Odoo, now implemented in Studio.
Original PR description
Before this commit, there was no way to tell the ColorPicker to not use the DEFAULT_THEME_COLOR_VARS (ie classes of the form o-color-[n] with n some integer) Those colors are a bit special (see full…
Before this commit, there was no way to tell the ColorPicker to not use the DEFAULT_THEME_COLOR_VARS (ie classes of the form o-color-[n] with n some integer)
Those colors are a bit special (see full discussion on the opw)
Their existence is described in module web
Their CSS definition is implemented in module html_editor
Reports don't use them at all We probably don't want reports' style
to be influenced by the presence or lack thereof of the html_editor
module, which was originally made to customize the interface.
Those architecture issues should be solved downstream in master, but they are practically endemic in Odoo.
This commit addresses the fact that Studio's report editor should not allow those colors as possible customization by offering the components and plugins in the chain a props to disable them.
After this commit (and more broadly the PR bundle), the default theme colors are not available in studio's report editor.
see odoo/odoo#251446
backport of https://github.com/odoo/enterprise/pull/109206
opw-6167143
community: https://github.com/odoo/odoo/pull/264917
Forward-Port-Of: odoo/enterprise#117555This update corrects a bug where portal users could unintentionally delete documents they shouldn't have. The fix ensures that portal users can only delete documents they own, preventing automatic deletion by the system's cleanup process. This improves data integrity and aligns with intended user permissions.
Original PR description
Reproduce: with rpc call as portal user, you can archive documents you have access to. This is not desired as this may lead to records being deleted when the cron collects the trash, but we only wanted to support portal users deleting only records they own. What we did when calling toggle_active should be done for all calls to `write` with `active`. It also removes the need for `_raise_if_unauthorized_archive` and `_unlink_except_unauthorized`. Task-6205627 Forward-Port-Of: odoo/enterprise#116886
22 changes
Resolved issues and error corrections
This update fixes a bug preventing users from selecting 'Custom Dates' and 'Specific Date' options when comparing accounting reports. The change aligns the report filter with a recent system update, ensuring the full range of date comparison options are available. This improves the usability of the Profit & Loss reporting feature.
Original PR description
**Problem:** The "Custom Dates" and "Specific Date" comparison options are missing from the Comparison dropdown in accounting reports. **Steps to reproduce:** 1. Go to Accounting > Reporting > Profit…
**Problem:** The "Custom Dates" and "Specific Date" comparison options are missing from the Comparison dropdown in accounting reports. **Steps to reproduce:** 1. Go to Accounting > Reporting > Profit & Loss 2. Click the Comparison dropdown 3. Only "No Comparison", "Previous Period", and "Same Period Last Year" are visible — "Custom Dates" is missing **Current behavior:** Custom date comparison options are not rendered. **Expected behavior:** "Custom Dates" (for range reports) and "Specific Date" (for single date reports) should appear in the Comparison dropdown. **Cause of the issue:** The date filter refactor (40484f985f5) restructured how the date mode is stored in options. Previously, `options.date.mode` held 'range' or 'single'. After the refactor, this key no longer exists — the mode is now stored as a boolean in `options.filter_date.range_mode`. The comparison filter template still checks `controller.cachedFilterOptions.date.mode`, which is now undefined, so both the range and single conditions always evaluate to false and the custom comparison options are never rendered. **Fix:** The comparison template was the only consumer not updated during the refactor. Aligning it to the new data path restores the options without any behavioral change. opw-6070402 Forward-Port-Of: odoo/enterprise#117099 Forward-Port-Of: odoo/enterprise#113391
This update corrects a technical issue that prevented accurate payroll calculations when a payrun had no associated payslips. The fix ensures the system functions correctly regardless of the number of payslips generated, improving payroll accuracy and reliability. This change primarily impacts the Australian HR Payroll module.
Original PR description
If the payrun does not have any payslips, the _get_payslip_stp is called on an empty recordset, which causes the compute to fail. This commit fixes the _get_payslip_stp compute for empty recordset. task-6215823 Forward-Port-Of: odoo/enterprise#117198
This update corrects a misleading warning message that appeared when a payslip was cancelled in Odoo Enterprise. The change ensures that users receive accurate information and a cleaner workflow when managing payslips. This improves the overall user experience and data consistency.
Original PR description
. Clear payslip warning after cancelling the payslip . Add corresponding tests task-6199148 Forward-Port-Of: odoo/enterprise#117507 Forward-Port-Of: odoo/enterprise#116859
This update corrects a technical issue where an approval rule was being applied incorrectly due to a duplicate XML ID. By renaming the duplicate ID, we've ensured that approval rules are applied correctly based on user and manager access levels, improving the reliability of the approval process. This resolves a potential inconsistency in how approvals were handled.
Original PR description
The XMLID `approval_approver_manager` was defined twice, causing the rule to be applied with the last evaluated access configuration for both `group_approval_user` and `group_approval_manager`. This commit renames the first occurrence of the duplicated XMLID to `approval_approver_user` to restore the intended separation between user-level and manager-level approval access rules. task-6095010 Forward-Port-Of: odoo/enterprise#113480
This update ensures that all employee groups, regardless of their type, receive the correct employer-paid rent posting account in payroll accounting. Previously, this setup was limited to a single group, leading to inconsistencies. This change maintains accurate and predictable payroll accounting behavior.
Original PR description
Before this commit, the employer-paid rent setup was only applied to one employee group. This could leave other employee groups without the expected rent posting account. After this commit, the same rent posting setup is applied for each available employee group. This keeps payroll accounting behavior consistent. Task-6175007 Forward-Port-Of: odoo/enterprise#115781
This update resolves an issue where depositing money in Point of Sale (PoS) orders with presets enabled would incorrectly display a popup asking for a preset selection. The change ensures that PoS orders are correctly identified as 'settling accounts' immediately, preventing this unwanted popup and streamlining the deposit process. This improves the user experience for cash transactions.
Original PR description
Before this commit: ==================== depositing money for a partner in PoS with presets enabled could incorrectly trigger the preset selection popup. This happened because the order was not marked as is_settling_account early enough, so the preset selection logic did not ignore deposit orders. After this commit: ===================== is_settling_account is initialized during order setup and seeded immediately when the deposit order is fetched or created. As a result, deposit orders correctly bypass the preset selection flow. Task-6217580 Related Comm. PR-https://github.com/odoo/odoo/pull/264572 Forward-Port-Of: odoo/enterprise#117378
This update corrects a technical error that was consistently enabling a security feature (LNA) for all longpolling requests. The fix removes a mistakenly reintroduced parameter, ensuring LNA is only enabled when needed, improving system stability and efficiency. This resolves a potential configuration issue.
Original PR description
In odoo/enterprise#104157, the `headers` parameter was accidentally reintroduced to the `rpc` function of the longpolling class. This was causing `post` to be called with the wrong number of arguments, and a side-effect of this is that LNA was being enabled always for poll requests and never for action requests. This commit removes the headers parameter so that the function is called with the correct number of arguments. Forward-Port-Of: odoo/enterprise#117584
This update fixes an issue where the CO State Income Tax on payslips was incorrectly showing a positive value. This was due to a misinterpretation of tax withholding rules, aligning with previous fixes for Alabama. The change ensures that state income tax is accurately deducted from employee paychecks as a withholding, reflecting how individuals receive refunds when filing their income.
Original PR description
## Issue When generating a payslip for an employee of a company located in Colorado, the *CO State Income Tax* could end up positive. ## Steps to reproduce 1. Install *United States - Payroll*…
## Issue
When generating a payslip for an employee of a company located in Colorado, the *CO State Income Tax* could end up positive.
## Steps to reproduce
1. Install *United States - Payroll* (`l10n_us_hr_payroll`)
2. Set the current company's State to Colorado
3. Create an employee and a contract
- Wage: $0
- (Set the contract's status to *Running*)
- (In the payroll tab) State Withholding Allowance: $1000
4. Create a Payslip for the employee
- Structure: *"United States: Regular Pay"*
5. Compute Sheet
6. **In the _Salary Computation_ tab, the _CO State Income Tax_ line has a positive value**
## Justification
This fix is similar to the one applied for the AL(abama) state income tax by https://github.com/odoo/enterprise/commit/f0eeb55f1e3cf965c6a409675813d4a699e5fca6. That modification was justified by CAS (PO of US localizations for Payroll) in opw-5137280:
> *"Payroll taxes are always funds withheld from employee's paychecks, if there is a positive value it means the tax is a refund, not a withholding. Refunds happen when individuals file their income."*
## Note to reviewer
The test [`test_069_al_state_tax_0_income`](https://github.com/odoo/enterprise/blob/219d2a797ee2099c9d77c2defc9c9c5e1d504ffe/test_l10n_us_hr_payroll_account/tests/test_salary_rules.py#L957-L989) (added by the aforementioned commit https://github.com/odoo/enterprise/commit/f0eeb55f1e3cf965c6a409675813d4a699e5fca6) is wrongly indented and thus never executed. The test passes with the dedicated fix, and fails without it, as expected. Let me know if you want me to indent it correctly (in this commit or in an additional one).
opw-5999856
Forward-Port-Of: odoo/enterprise#117497
Forward-Port-Of: odoo/enterprise#112724This update aligns the subheaders and numerical data within Odoo's financial reports, ensuring a more visually consistent and professional presentation. Previously, the alignment of subheaders and figures was inconsistent, and this change standardizes the layout for improved readability and a better user experience.
Original PR description
Before this commit, subheaders of numeric columns were centered, while the figures in the columns were aligned to the end. This commit ensures that both the subheader and the figures are aligned the same way (center or end). task-6197223 Forward-Port-Of: odoo/enterprise#117477 Forward-Port-Of: odoo/enterprise#116578
This update fixes an error that occurred when generating the Appendix 142 report with no data. It now safely handles empty reports and updates the Vietnamese VAT return type to use a more comprehensive composite tax report. These changes ensure the report generates correctly even with limited data, improving data accuracy and reliability.
Original PR description
This commit addresses an issue where generating the Appendix 142 report with no data would result in an error, and updates the Vietnamese VAT return type to use the overarching composite tax report.…
This commit addresses an issue where generating the Appendix 142 report with no data would result in an error, and updates the Vietnamese VAT return type to use the overarching composite tax report. Modifications: - Added defensive checks to handle empty report lines. If the list is empty, it now safely returns the export HTML with default empty/zeroed contextual variables. Added bounds and existence checks for the base amount and VAT amount indexes to prevent out-of-bounds errors when evaluating purchase lines, sales lines, and section totals. - Changed the report reference on the Vietnamese tax return type record to use the composite tax report rather than the standalone form 01 report. - Swapped the data loading order in the module manifest to load tax report data before return data to resolve external ID dependencies. - Adjusted report sequences so the main Vietnamese Tax Report appears first (sequence 10) and the Purchase/Sale Invoice List appears second (sequence 20). Task-6216318
This update fixes a potential error in calculating the employment bonus for employees on out-of-contract payslips. Previously, multiple payslips with overlapping worked hours could lead to double-counting, which has now been addressed to ensure accurate bonus calculations based on total workable hours.
Original PR description
In the case of out of contract payslips, we might have multiple payslips with worked day lines for the same month. In that case, we need to be careful to not count these hours twice when computing the employment bonus, which depends on the total "workable" hours for the month. task-6208125 Forward-Port-Of: odoo/enterprise#116862
This update fixes an issue where the 'step bubble' bar on payruns incorrectly displayed attendance status for employees. The change ensures that payrun bubbles accurately reflect employee tracking methods, resolving confusion and improving the user experience when updating employee settings.
Original PR description
Two bugs stem from the payrun "step bubble" bar (Employees → Time [→ Attendance] → Payslips): 1. When a payrun not containing attendance-tracked employees is opened first and I change one of the…
Two bugs stem from the payrun "step bubble" bar (Employees → Time [→ Attendance] → Payslips): 1. When a payrun not containing attendance-tracked employees is opened first and I change one of the employee's tracking method to attendance, going back via breadcrumb I'd see that the Attendance bubble incorrectly appears for the latter. The root cause is that cachePayRunSteps is a Map iterated in insertion order: "attendance" is appended after "payslip" the first time it is encountered, so it always renders last regardless of the server-defined canonical order. Fixed by turning it into an array overridden at every data fetch. 2. When navigating back to the payrun list via breadcrumb after changing the last of an employee's work_entry_source (e.g. removing the last attendance-tracked employee from a payrun), the bubble still shows the previous state. Fixed by marking the payrun as fresh when following specific flow, preventing the reload of the bubbles using instead the previously cached ones. task-5959087 Forward-Port-Of: odoo/enterprise#117590
This update fixes an issue where the rental report was displaying incorrect dates. The fix ensures that each row in the report accurately reflects the start and return dates of the rental order, providing more reliable reporting data. This improves the accuracy of rental tracking and reporting.
Original PR description
The rental report is a daily report with x rows by rental order, with x the days between the start and return dates. With generate_series inside the select, the query was creating x rows with the same id, resulting in the date field not being correctly displayed (one unique date, the start date). This fix corrects the generation of the report to display the real date on each row. opw-5266525 Forward-Port-Of: odoo/enterprise#116948 Forward-Port-Of: odoo/enterprise#104764
This update fixes a potential crash in the Gantt chart caused by incorrect drag initiation. The change reintroduces a safeguard to ensure the chart only initiates a drag when a valid target is available, preventing unexpected errors and improving overall stability.
Original PR description
In https://github.com/odoo/enterprise/pull/113438, it was incorrectly assumed that it would be impossible to initiate a pill drag without a valid target being found. This commit reintroduces a strict safeguard to handle scenarios where the drag is triggered with no valid cell target. This prevents unexpected crashes encountered during test executions. runbot-error-242486 Forward-Port-Of: odoo/enterprise#116619
This update fixes an issue where Knowledge articles appeared narrow when printed on large screens. The fix prevents a CSS rule from restricting the article's width, ensuring proper formatting and readability when exporting to PDF or printing. This improves the user experience for viewing and sharing Knowledge content.
Original PR description
Currently, a CSS rule forces the form container width to 1px to ensure that the nested list view can correctly compute its size. See: ```scss .o_form_view.o_xxl_form_view { .o_form_view_container {…
Currently, a CSS rule forces the form container width to 1px to ensure that the nested list view can correctly compute its size.
See:
```scss
.o_form_view.o_xxl_form_view {
.o_form_view_container {
width: 1px; /* List view needs a width value to recompute the size correctly */
}
}
```
However, since the Knowledge editor is implemented as a form view, this rule also affects Knowledge. When zooming out, the `o_xxl_form_view` class is added to the form view container, causing the rule to apply. If an article is printed while this class is present, it is constrained to an extremely narrow column, making it unreadable.
Steps to reproduce:
1. Open an article in Knowledge
2. Zoom out using `Ctrl` + `-`
3. Open the kebab menu and select "Export"
=> The article is rendered in a very narrow column.
To address this issue, we override this rule specifically for Knowledge. With this change, articles are now rendered correctly when printed or exported as PDF.
Task-5999878
Forward-Port-Of: odoo/enterprise#103259This change addresses a frustrating user experience where physical expense cards get stuck in a pending state due to shipping delays. Users are now able to manually block these cards, preventing them from remaining indefinitely blocked and improving their ability to manage their expenses. This is a simple fix to improve user workflow.
Original PR description
Expenses created by expense cards can't be deleted for audit reasons. However, it is frustrating for users not to be able to clean their expenses afterwards. It happens that physical cards aren't delivered to cardholders. The shipping company is supposed to send us the failed shipping state, but it sometimes doesn't. The user can't therefore do anything besides activating the card that hasn't been shipped. He is blocked and the card will stay pending indefinitely. task: 5904913
This update fixes an issue where file names in the Documents section of the chatter didn't update after a file was renamed. By using the correct 'attachment_name' field, the chatter now accurately displays the latest file name, ensuring users always see the most current document information. This improves data consistency and user experience.
Original PR description
**Before this PR:** When a file is renamed in Documents, the corresponding attachment in the chatter still displayed the old name. **Technical reason:** Renaming a file did not update its related attachment. Inverse method was removed here: https://github.com/odoo/enterprise/commit/a32825ee00f2b330d99113f4d8c1488903fe744e Therefore, now using `attachment_name` instead of `name` field in form view and `documents_details_panel`. **After this PR:** The attachment in the chatter will correctly reflect the updated file name. Task-5859824
This update resolves an issue where users without write access to the AT Point of Sale (PoS) would receive an access error when attempting to authenticate. The fix simulates a token expiration to reliably trigger the error, ensuring proper access control is enforced for users with limited permissions.
Original PR description
When trying to auth directly from the PoS when the token expires, if you are logged in with a user that doesn't have write access to the PoS. You would get an access error. Steps to reproduce: ------------------- * Setup Fiskaly in an AT company * Open PoS and try to make a sale * To fake the token expiration I modified the code so that the request always return 401 status code > Observation: You get an access error opw-5925203 Forward-Port-Of: odoo/enterprise#115735 Forward-Port-Of: odoo/enterprise#112474
This update resolves an issue where the payroll report would fail if a new employee's start date wasn't provided. The fix ensures the report checks for a start date before attempting comparisons, preventing errors and improving report reliability. This ensures accurate payroll calculations.
Original PR description
If there is no start date on the veriosn, the report will fail as it'll try to compare a bool with a datetime. So we check first that there is a start date Forward-Port-Of: odoo/enterprise#117534
This update corrects a visual issue with payrun displays within the Odoo Enterprise payroll module. The fix removes unnecessary code and ensures payrun information is aligned correctly, improving the user experience. This ensures accurate and consistent reporting of payroll data.
Original PR description
Remove useless classes and fix alignment task-6191499 Forward-Port-Of: odoo/enterprise#116528
A test was failing because the test record's name was identical to a demo data record. This change resolves the conflict, ensuring tests run correctly and reliably. This fix improves the stability of the testing process for the IoT module.
Original PR description
Our test record was named the same as a demo data record ("Shop"), making the test fail as it was looking for the test device contained by the test record, but not
contained by the demo record.
runbot-error-937748This update resolves an issue preventing Payroll Assistant users from accessing the Payroll app. The change corrects a technical error that was causing access restrictions, ensuring all users can now utilize the Payroll functionality. This improves the reliability and usability of the Payroll module.
Original PR description
* = hr_work_entry_attendance This commit prevents access errors that are triggered when a user with Payroll Assistant role tries to open the Payroll app. TaskID-6143823 Forward-Port-Of: odoo/enterprise#115297
1 change
Resolved issues and error corrections
This update resolves a performance issue related to how activity notifications are processed within the Odoo Enterprise system. The change optimizes notification handling, ensuring more reliable and efficient updates. This improves the overall responsiveness of the system when activities are modified.
Original PR description
Performance tests adjustements for the community counter-part
6 changes
Resolved issues and error corrections
This update ensures that the XML invoice file generated when sending invoices to Verifactu is now saved and accessible to the user. Previously, this file was discarded, causing issues when users needed to provide it to the Spanish government for assistance. Now, users can easily download and use the XML file.
Original PR description
Before these changes when the user confirms an invoice and sends it to verifactu, the system returns a JSON file. The problem was that if the user needs assistance from the government, they ask for the XML file. The XMl was being discarded. Now these changes keep the XML and attach it to the verifactu tab for the user to have it and use it with the government if they need --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue that prevented users from creating new website pages when a template was marked as 'Is a Template' and the page view lacked a specific HTML element. The fix ensures the system handles missing elements gracefully, avoiding errors and allowing users to customize website pages without disruption.
Original PR description
Currently, an error is raised when creating a new website page after a custom or existing page marked as `Is a Template`, if the view architecture does not contain a div with `id="wrap"`. Steps to…
Currently, an error is raised when creating a new website page after a
custom or existing page marked as `Is a Template`, if the view architecture
does not contain a div with `id="wrap"`.
Steps to produce an error:
- Go to the website and create a new website page (e.g., test).
- Go to the newly created page and make sure the website edition menu is open
- Click on Site > Properties > Enable `Is a Template` > Save & Close
- Go to Site > Pages
- Click `Bug icon` on the above created page (or open the view of the above
created page as `website.test`).
- Remove the div that contains `id="wrap"` from the view (mostly users do it
to customize the view) and save it.
- Go to Site > Pages > Click New > An error will occur.
This error occurs because the code at line [1] tries to access the first
element of the list returned by `html_tree.xpath('//div[@id="wrap"]')`.
However, if the user has removed this `div`, the list is empty and accessing
the first element raises an error.
This commit fixes the above issue by skipping custom templates from the
result if the template does not contain a `wrap_el(id="wrap")`.
[1]: https://github.com/odoo/odoo/blob/f592fba684225f059fb60c38878e0554ae3e6ac8/addons/website/controllers/main.py#L707
Sentry-7315470405This update fixes an issue where product prices didn't automatically update when the cost price changed. Previously, users had to manually switch price lists to trigger the update. The fix adds a direct update mechanism to ensure on-sale prices accurately reflect cost changes, improving pricing accuracy and reducing manual intervention.
Original PR description
When we create a product variant and have a pricelist which is based on the cost price, and change the cost price, the on_sale_price doesn't update. You have the change the price list to other and back to the one you want for it to trigger change because the _onchange_compute_pricing only gets triggered if there's change on pricelist (pricer_sale_pricelist_id), and sales price (lst_price). Steps to Reproduce: 1.Create a pricelist and add a line with "formula" price type, and based on "cost", 2.Create a product variant, and add the pricelist just created. 3.Change the "Cost". The "On Sale Price" doesn't update. 4.You have to change the price list to some other and back to the one you want for the "On Sale Price" to update. To fix the issue, we add the field Cost (standard_price) on api.onchange, so when we change the cost it'll update the "On Sale Price" right away. opw-5947995
This update resolves an issue where entering spaces in the 'Forecasted Demand' or 'Forecasted Stock' cells of the Master Production Schedule caused an error. The fix ensures that blank input is handled correctly, preventing the error and maintaining data integrity within the planning process.
Original PR description
## Steps to Reproduce:
1. Install `mrp_mps` module.
2. Manufacturing > Planning > Master Production Schedule
3. Click on "Forecasted Demand" or "Forecasted Stock" of any product.
4. Click `<SPACE>` and then `<ENTER>`.
## Error:
`ValueError: could not convert string to float: ' '`
## Cause:
When a user enters whitespace(' ') in a **Forecasted Demand** or **Forecasted Stock** cell, the string bypasses the existing `isNaN/empty` checks at [1]. Then the raw whitespace string passes to the ORM call, where `float(' ')` raised a ValueError.
## Fix:
This commit trims the value so that blank input is treated the same as an empty string, and the cell reverts to its original value.
[1] - https://github.com/odoo/enterprise/blob/6ae5d3df6e9305416e4d6f74259cd01753025f42/mrp_mps/static/src/components/line.js#L128
sentry-7473062917This update allows Bookkeepers to remove deferred bills by resetting them to draft, resolving a previous restriction that prevented deletion due to sequence number checks. The change ensures Bookkeepers have the necessary flexibility to manage their accounting tasks without needing manager approval for routine operations.
Original PR description
### Issue: When a user with "Bookkeeper" (Accounting) rights tries to reset a Bill to draft, the process is blocked by the following UserError: "You cannot delete this entry, as it has already…
### Issue: When a user with "Bookkeeper" (Accounting) rights tries to reset a Bill to draft, the process is blocked by the following UserError: "You cannot delete this entry, as it has already consumed a sequence number and is not the last one in the chain. You should probably revert it instead." This occurs specifically when another journal entry has been created and posted in the deferred move's journal after the deferred entries, blocking the sequence for non-manager users However, a Bookkeeper should technically be allowed to reset these moves, as they can manually reset them to draft, clear the name, and delete them You can refer to the comment on the function `_unlink_forbid_parts_of_chain()` ### Cause: `self.deferred_move_ids._unlink_or_reverse()` attempts to unlink the deferred moves During unlinking, the system performs a sequence integrity check For non-manager users, this check prevents the deletion of moves that are not the last ones in the journal's sequence https://github.com/odoo/odoo/blob/1497cd0a590e0a9089d6c041b57930aaecba42ea/addons/account/models/account_move.py#L3500-L3518 ### Steps to reproduce: - Install `account_accountant` - Login as Marc Demo (By default it's a Book Keeper) - Create and post a Bill (Deferred Date: 01/01 to 31/12) You may need to display the Deferred Date, that's hidden by default - Open the Deferral Entries with the Smart button - Manually create or duplicate an entry in that same journal and post it - Return to the Bill and try to "Reset to Draft" Before the fix, the error is raised opw-6113349
This update resolves an issue in a test related to employee leave calculations. Without specific demo data, the test would produce inconsistent results. Adding a timezone ensures the test behaves predictably and reliably, improving the accuracy of our leave tracking system.
Original PR description
In the test `test_create_work_entry_for_flexible_employee_leave`, the `jules_emp` will not have a timezone if the test is ran without demo data. This commit adds a timezone to ensure consistent behavior. error-230949 (https://runbot.odoo.com/odoo/error/230949) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr