Daily updates from Odoo
Monday, December 22, 2025
11 changes · 19.0
Resolved issues and error corrections
A previous error prevented users from completing sign requests after a user was deleted. This fix addresses a technical issue where the system incorrectly handled missing user information when retrieving suggested sign requests. By safely handling cases where user IDs are missing, the system now reliably allows users to complete sign requests without errors.
Original PR description
Currently an error occurs when a user tries to click `Valid & Send Compeleted Document` as follows below: - Install the `sign` module with demo data - Log in as the `demo` user and send 2 sign requests to the `admin` user - Now log in as the `admin` user and delete the `demo`user - Go to the sing and open sign request that was sent by the `demo` user - Complete the sign and click on `Valid & Send Compeleted Document` This issue occurred while retrieving the suggested sign request items. The code was accessing the `create_uid` of those items, but because the user had been deleted, `create_uid` was set to False instead of containing a valid user ID and user name. This commit fixes the above issue by handling cases where `item['create_uid']` is False. When `item['create_uid']` is False, the code now safely returns `False` instead of attempting to access its index. sentry-7116433081 Forward-Port-Of: odoo/enterprise#102438
This update fixes a security vulnerability where Portal and Internal users could create private Knowledge Articles even without the necessary permissions. The change enforces proper access controls within the article creation process, ensuring that only authorized users can create new articles. UI updates also hide creation buttons for users lacking the required access.
Original PR description
How to Reproduce : 1. Remove 'Create' access on the 'Knowledge Article' model for Portal and Internal users. 2. Now log in as a Portal. 3. Try to create a new private article. 4. Log in as an…
How to Reproduce : 1. Remove 'Create' access on the 'Knowledge Article' model for Portal and Internal users. 2. Now log in as a Portal. 3. Try to create a new private article. 4. Log in as an Internal user. 5. Try to create a new private article. Both Internal and Portal users can still create private articles even after 'Create access' is removed. Article creation logic in `knowledge.article` was bypassing the usual access rights because of `sudo` (mainly to add the creator as a member, since creation rights on the member model are not granted). This allowed users to create private articles even without create access. This commit introduces: 1. Model-level access check in `create`. Sudo the creation of articles only when the user has create rights. 2. UI imp to hide the '+' button in the sidebar and the `New` button in the topbar when the user doesn't have create access. 3. New test cases to verify that model-level access rights are respected when creating an article. task-4916280 Forward-Port-Of: odoo/enterprise#101804 Forward-Port-Of: odoo/enterprise#93034
This update fixes an issue where sharing a document link within the list view didn't automatically open the preview. Now, the preview opens in the list view, similar to the kanban view, ensuring a consistent and user-friendly experience when accessing shared documents. This improves usability for users who primarily view documents in the list format.
Original PR description
Bug === If the user has the list view as his default view, if we share him a document, the preview is not opened. After this commit, the preview is opened like in the kanban view, and the document is selected. Task-5361212 Forward-Port-Of: odoo/enterprise#102598 Forward-Port-Of: odoo/enterprise#100716
This update fixes a bug where payslips were showing blank worked days for employees on fully flexible contracts. The change ensures that work hours are correctly calculated, even when contracts don't have a standard calendar assigned, addressing a potential issue with accurate payroll reporting. This improves the reliability of payslip generation.
Original PR description
**Issue:** Payslips show blank worked days for employees with contracts without a `resource_calendar_id` (fully flexible, despite having valid work entries **Cause:** `_get_worked_day_lines()` skips…
**Issue:** Payslips show blank worked days for employees with contracts without a `resource_calendar_id` (fully flexible, despite having valid work entries **Cause:** `_get_worked_day_lines()` skips worked day computation if the contract has no calendar https://github.com/odoo/enterprise/blob/1a10e0444fdb71a072262a1f14f0bfc766d109c6/hr_payroll/models/hr_payslip.py#L665-L674 **Steps to Reproduce:** - Assign an employee a fully flexible contract with attendance as work entry source. - Create work entries based on the attendance records of the employee record - Go to employees > contracts > new Payslip Worked Days section is empty, even though attendance shifts are showing up on top. **Fix:** removing the calendar requirement in the main method and adding a fallback calendar in the called utility method **Note:** same issue happens if work entry source of the contract is Planning opw-4931972 Forward-Port-Of: odoo/enterprise#98194 Forward-Port-Of: odoo/enterprise#93935
This update clarifies the labeling of a key reporting menu item within the Enterprise module. Previously, duplicate menu names caused confusion. The 'Currencies' menu item under 'Review' has been renamed to 'Unrealized Currencies' to accurately reflect its function and improve user experience.
Original PR description
Previously, there were two menu items named `Currencies`: one under Review and another under Configuration, which caused confusion. The one under Review was incorrectly labeled, it should have been `Unrealized Currencies`. This **PR** renames the menu item under Review to `Unrealized Currencies` to reflect its actual purpose. **task**-5169637
This update fixes an issue where sharing a deleted spreadsheet caused errors. It now correctly identifies if a spreadsheet is archived and hides the 'Share' options when it's in the Trash, providing a cleaner and more intuitive user experience. This ensures users can't accidentally share deleted documents.
Original PR description
## Description This PR fixes a traceback when sharing a spreadsheet that is in Trash. It exposes `is_archived` in the spreadsheet metadata and adds an `env.isArchived()` getter on the environment. It hides the topbar "Share" button and the "Share"/"Freeze and share" menu entries when the document is in Trash. Task: [5166945](https://www.odoo.com/odoo/project/2328/tasks/5166945)
This update resolves an issue where deleting a shopfloor instruction suggestion (a 'step') caused errors when adding a new one. The fix ensures that the system correctly handles the removal of quality points associated with those suggestions, preventing a traceback. This ensures the shopfloor instruction suggestion functionality continues to work reliably.
Original PR description
**BUG:** Traceback when **suggesting** deleting a BOM step from the shopfoor. **STEPS TO REPRODUCE:** - Open a shopfloor MO (with PLM installed) -- Add a suggestion step (MO > cog> Update…
**BUG:** Traceback when **suggesting** deleting a BOM step from the shopfoor. **STEPS TO REPRODUCE:** - Open a shopfloor MO (with PLM installed) -- Add a suggestion step (MO > cog> Update instructions > Improvement Suggestion > Add a step). -- Add a second suggestion step after the first one. -- Delete the second suggestion step (MO > cog> Update instructions > Improvement Suggestion > Delete a step). -- Add a third suggest suggestion step after the second one we just suggested deleting. -- > Traceback **ORIGIN:** First, when adding the suggestions: - 2 Quality Check (QC) are created on the **new_bom_id** in `add_quality_check_from_tablet.save()` - 2 Quality Point (QP) are also created in `add_check_in_chain()`, (only in mrp_workorder_plm override) - The 2nd new QC is linked to previous QC in `_insert_in_chain` Secondly, when deleting the 2nd added suggestion (_on the same MO, as suggestions are linked to the new bom_id and wont appear on other MOs until ECO is validated_): - The QP of the second QC is deleted (but the QC itself is not deleted) here: https://github.com/odoo/enterprise/blob/f91b0c8c41f40a71cbea3cd4f5ccc6873af3c004/mrp_workorder_plm/wizard/propose_change.py#L72-L74 Finally, when adding a new suggestion after the one we just suggested deleting, in `_add_check_in_chain`, a traceback happens by trying to access the QP point we deleted in the resequencing part of `_add_check_in_chain` here: https://github.com/odoo/enterprise/blob/eb716c18944ec50c9c8c74a2888ed5f3032a7b08/mrp_workorder_plm/models/mrp_workorder.py#L62-L63 **FIX:** We accept that not all QCs must have QPs `[0]` -> `[:1]` (see note on another approach idea) changing ```diff - point = check.point_id if check.point_id.operation_id == operation else points.filtered(lambda p: p._get_sync_values() == check.point_id._get_sync_values())[0] + point = check.point_id if check.point_id.operation_id == operation else points.filtered(lambda p: p._get_sync_values() == check.point_id._get_sync_values())[:1] ``` **NOTES:** -1 Another fix could have been to delete the QC at the same time as the QP but I did not find any `remove_from_chain` function to safely remove the QC from the chain of QC. Along those lines we could rethink the sequencing / resequencing of QC and QP as the logic seems to differ between both. -2 Added some comments to remove the field and the line setting the `is_deleted` field in master as it was not used anywhere in the code (the color highlighting in the ECO is done with `<list decoration-danger="change_type=='remove'" ...>`) ticket #5180122 Forward-Port-Of: odoo/enterprise#101366
This update corrects an issue where analytic accounting reports were displaying incorrect amounts due to an incorrect identifier being used. The fix ensures that amounts are accurately reflected from the original move line, improving the reliability of financial reporting. It also resolves a related problem with analytic simulations.
Original PR description
Steps to reproduce: - Activate analytic accounting - Create an invoice with one line, and set an analytic account - Set also the analytic account on the receivable line - Open the Aged Receivable - Activate debug mode, go to the configuration settings of the report - Activate the analytic groupby filter and go back to the report - unfold the partner of the invoice and select the filter with the analytic groupby -> The amount related to the analytic line is wrongly placed on another move, or possibly missing. This is due to the fact that the id used is the one of the analytic account instead of the move line.
This update corrects a previous issue where the 'Edit Payment' button was incorrectly visible in the AT and FR POS localizations, violating fiscal compliance rules. Now, the button is only displayed when the company isn't using FON Authentication, ensuring adherence to local regulations.
Original PR description
Before this commit: =================== - On the Payment Screen, the `Edit Payment` button was visible in the `l10n_fr_pos_cert` and `l10n_at_pos` localizations. - This was incorrect because fiscal compliance in these countries does not allow altering order details at this stage. - The visibility logic for this button was unintentionally modified in `pos_hr`. After this commit: ================== The visibility of the `Edit Payment` button is now correctly enforced: - `point_of_sale`: visible only until the receipt is printed. - `pos_hr`: visible only when the logged-in user is an admin (except in AT and FR localization). - `l10n_fr_pos_cert`: never visible. - `l10n_at_pos`: visible only when the company is `not FON Authenticated`. Task: 5384822 Related Community PR: https://github.com/odoo/odoo/pull/238839
This update corrects a previous issue where newly created serial numbers in the Barcode app were automatically assigned to the current company. This prevented the use of these numbers across different companies. Now, serial numbers can be created without a company association, allowing for greater flexibility in intercompany operations.
Original PR description
## Context In the barcode app (`stock_barcode`), users can update inventory counts by scanning a product's barcode or by manually entering the barcode. ## Issue When the barcode is entered manually,…
## Context In the barcode app (`stock_barcode`), users can update inventory counts by scanning a product's barcode or by manually entering the barcode. ## Issue When the barcode is entered manually, the lot/serial number is created with the *Company* field set to the current company. This causes issues when working with intercompany flows, because lots with a company assigned cannot be used by other companies. This behavior is also inconsistent with the other ways of updating a company's inventory. In fact, the following flows create serial/lot numbers with no company assigned: - Inventory / Products / Products / *Forecasted Report* or *On Hand* - Inventory / Operations / Adjustments / Physical Inventory - Barcode / Inventory Count / Add product (add the serial number from the *Inventory Count* screen, **not** by clicking on the cogwheel in the top-right corner) ## Cause The line assigning a `company_id` was added by https://github.com/odoo/enterprise/commit/c0151bce3c60c69e7cadeb719a81c4a702b71c34. At the time, that behavior was consistent with the backend behavior, as the `company_id` of a lot/serial number would always be set to `self.env.company`. In fact, the feature allowing a lot/serial to be shared among multiple companies was introduced later, in saas-17.2 (https://github.com/odoo/odoo/commit/99b39b72c7e65e85af6f06dcb6b02867623f3f69). This last commit adds a compute method for the `stock.lot.company_id` field: https://github.com/odoo/odoo/blob/6026866900fd0ac1bf6495ae249cd08f56c85342/addons/stock/models/stock_lot.py#L130-L136 Since then, lot/serial numbers shouldn't be created with a `company_id`, as this restrict other companies to use those numbers. Users can always add a company to a lot/serial number later if necessary. ## Solution The line assigning a `company_id` to the `stock.lot` can be removed, as it does not reflect the current behavior (saas-17.2+). Nowadays, a `company_id` should be set **only** if the user wants a lot/serial number to be used by a specific company; it should not be the default behavior. ## Steps to reproduce 1. Install *Barcode* (`stock_barcode`). 2. In Inventory / Configuration / Settings, enable *Lots & Serial Numbers*. 3. In Settings / Users & Companies / Companies, create a second company. Use either company for the following steps. 4. Create a product tracked *By Unique Serial Number*. 5. Open the Barcode app, then click *Inventory Count*. 6. Scan your product (or add it manually, but **do not** set the *Serial/Lot Number*). 7. Scan "SN001" (or add it manually through the cogwheel menu), then click *Apply*. 8. Go to Inventory / Products / Lots / Serial Numbers. 9. The serial number created from the Barcode app is assigned to the current company. opw-5264216 Forward-Port-Of: odoo/enterprise#102130
This update resolves a technical issue where a checkbox in the Odoo chart side panel was present but not functioning correctly. The checkbox for 'Use compact format' was implemented, but did not affect chart rendering. This fix ensures that users can now consistently utilize the compact format option for their charts.
Original PR description
The checkbox to toggle the `Use compact format` option in the chart side panel was present for odoo charts, but did nothing. Task: [5405064](https://www.odoo.com/web#id=5405064&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form)