Daily updates from Odoo
Tuesday, December 23, 2025
20 changes · master
Resolved issues and error corrections
This update resolves a bug that caused PoS sessions to fail when an order line had a 100% discount. The fix prevents a division-by-zero error, ensuring smooth order processing and avoiding potential disruptions for users applying discounts.
Original PR description
Before this commit, when an order line had a 100% discount, a division by zero error occurred when closing the PoS session. opw-5240429 Forward-Port-Of: odoo/enterprise#98869
This update significantly speeds up spreadsheet loading times by optimizing how the system determines the latest version. Previously, the system relied on a slow snapshot process, but now it efficiently checks all revisions, reducing server load and improving user experience. This change impacts the performance of our spreadsheet functionality.
Original PR description
Commit 8f3e242e197b2f26982749 added an Etag to reduce the load on the network when loading a spreadsheet. Now, this commit ensures the Etag is computed as fast as possible to also reduce the load on…
Commit 8f3e242e197b2f26982749 added an Etag to reduce the load on the network when loading a spreadsheet. Now, this commit ensures the Etag is computed as fast as possible to also reduce the load on the server. The Etag is based on the latest revision (field `current_revision_uuid`). When computing `current_revision_uuid`, we look at the lastest revisions. However, the current code only look at *active* revisions, and fallback on the snapshot. The snapshot is a json file (potentially large) that needs be parsed. This is not fast. To make it worse: spreadsheets are snapshotted as often as it can be, which means we almost always fall in the slow path when computing the Etag. With this commit, we consider all revisions (active or not). We also load in memory only the latest instead of fetching multiple revisions for each spreadsheet (the work is done by postgres through `_read_group`) On a spreadsheet with a snapshot of 9.8MB, server time `"GET /spreadsheet/data/documents.document/17 HTTP/1.1" 304` before: ~310ms after: ~5ms Task-5431940 Forward-Port-Of: odoo/enterprise#102556
This update fixes an issue where sharing archived spreadsheets caused errors. It now correctly identifies and hides the 'Share' button and related options when a spreadsheet is in the Trash, ensuring a smoother user experience. This prevents confusion and improves data management.
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) Forward-Port-Of: odoo/enterprise#102687 Forward-Port-Of: odoo/enterprise#98984
This update resolves a technical error that was appearing when users dismissed or opened timesheets, causing a traceback. The issue stemmed from outdated component settings. The fix removes unnecessary configurations and corrects the component's settings for smoother operation.
Original PR description
Steps to reproduce: - Open Timesheets - Open Timesheets assistant menu - Click on any record Issue: - Traceback appears on opening in debug mode, traceback appears on clicking dismiss of timesheet. Reason: - Unused props to component and wrong props in component. Solution: - Remove `canbeDismissed ` as it was earlier and was removed in futher editions (check push history for the feature pr). - Rename onDismissed to onDiscard as it seems changed. task-5434806 Forward-Port-Of: odoo/enterprise#102680
This update streamlines the process of adding goals to employee appraisals. Previously, the system would repeatedly ask users to select the employee, even though the employee was already identified. Now, goals are automatically created for the correct employee, improving efficiency and reducing user friction.
Original PR description
When adding goals from an employee appraisal, Appraisal of an employee > Goals > Open Library > Select Goals > Continue On the next screen, you need to select the employee, but you come from an employee appraisal! The employee was already known but the flow still asked to re-select an employee again. This improvement passes the correct employee context so goals are directly created for the current employee. task-[5420664](https://www.odoo.com/odoo/project/1251/tasks/5420664)
This update allows businesses operating in Mexico (MX) to customize the sequence used for generating GI CFDI invoices for their branch offices. Previously, the system always used a standard sequence, but now branch offices can define a unique prefix, ensuring invoices are correctly identified and processed. This resolves an issue where branch-specific GI CFDI sequences weren't being properly utilized.
Original PR description
Add a way to set a custom prefix for GI sequences on the settings for MX. Get this sequence first on the branch before looking to the one on root company. opw-5096687 Forward-Port-Of: odoo/enterprise#100017
This update fixes an issue where batch picking lines were incorrectly linked to the wrong internal transfer, leading to inaccurate inventory counts. The fix ensures that each picking receives the correct quantity of products, resolving a discrepancy in delivered stock. This improves the reliability of batch transfer operations.
Original PR description
**Steps to reproduce:** - enable "packages" and "batch transfers" settings - open wharehouse management/operation type - select internal transfer - check "automatic batch" and group by "contact" -…
**Steps to reproduce:** - enable "packages" and "batch transfers" settings - open wharehouse management/operation type - select internal transfer - check "automatic batch" and group by "contact" - create two storable product with an on hand quantity of 10 - create a an internal transfer for the first product for a qty of 10 - mark it as to do - do the same for the second product and make sure that it's the same contact - open barcode and select batches - select the last batch created - scan WH-STOCK - enter and confirm a quantity of 4 for each line - click on put in pack (at this step we can already see that the two new lines created are associated wit the second picking, even though it should be one line per picking) - click on the +6 on each line and click on put in pack - validate **Current behavior:** - a back order has been created for the first picking - the first internal transfer has only delivered 4 units of the first product - the second internal transfer has delivered 10 of the second product and 5 of the first product **Expected behavior:** both pickings should have delivered 10 of their product **Cause of the issue:** The lines created when clicking on "put in pack" for the first time are both associated with the second picking because the line split: https://github.com/odoo/enterprise/blob/898e3e47cfe3b86230da2b146960983d7ad144d0/stock_barcode/static/src/models/barcode_picking_model.js#L514 and the picking_id of the new line is set to the values provided by the `_getNewLineDefaultValues` as the picking_id of the last selected `line`: https://github.com/odoo/enterprise/blob/24b4e49dbe16cb8bd40170abfc089dd64c3f34dd/stock_barcode_picking_batch/static/src/models/barcode_picking_batch_model.js#L280-L281 rather than from the values of the initial line it is split from. opw-4952964 Forward-Port-Of: odoo/enterprise#102575 Forward-Port-Of: odoo/enterprise#91378
A recent test failure in the MRP work order module has been resolved. The issue stemmed from an incorrect count of analytic accounts during test setup, triggered by a specific employee calendar configuration. This fix ensures the test now passes and maintains the stability of the MRP work order functionality.
Original PR description
fixing runbot error https://runbot.odoo.com/odoo/runbot.build.error/234639 on test test_mrp_analytic_account_employee_from_widget introduced by this PR https://github.com/odoo/enterprise/pull/85517
**cause of the error:**
Because there is a resource.calendar.leave without calendar_id,
without resource_id and at a date after today :
during the setupclass, when the employee is created,
_create_future_public_holidays_timesheets() creates an account.analytic.line.
So at the end of the test ,
self.env["account.analytic.line"].search([('employee_id', '=', self.employee1.id)])
returns 2 records instead of 1.
runbot-234639
Forward-Port-Of: odoo/enterprise#102338
Forward-Port-Of: odoo/enterprise#102282This update fixes a misleading error message displayed when deleting sale orders linked to appointments. Previously, users received an incorrect instruction to reduce order quantities. Now, the system correctly informs users they must cancel the order before deletion, ensuring a smoother and more accurate user experience. This prevents confusion and potential data issues.
Original PR description
Problem: When the module is installed and there are bookings with answers linked to sale orders, the order lines are deleted before the order, causing the wrong error message to be displayed.…
Problem: When the module is installed and there are bookings with answers linked to sale orders, the order lines are deleted before the order, causing the wrong error message to be displayed. Solution: The order lines should not be manually unlinked from the sale order. It should be the bookings linked to the order lines that should be unlinked before the sale order deletion. Expected Behavior: When deleting a sale order whose lines have bookings, the following error message shoud be displayed: "You can not delete a sent quotation or a confirmed sales order. You must first cancel it." Current Behavior: When deleting a sale order whose lines have bookings, the following error message is displayed: "Once a sales order is confirmed, you can't remove one of its lines (we need to track if something gets invoiced or delivered). Set the quantity to 0 instead." Steps to reproduce on Runbot: 1. Install Appointments and ecommerce 2. For the dental care appointment, edit and enable "Up-front payment" 3. On the website, book an appointment for dental care and proceed to payment 4. Delete the sale order with the booking 5. Observe the incorrect error message being displayed opw-5092349 Forward-Port-Of: odoo/enterprise#100371
This update fixes an issue with how the AI agent processes dates, ensuring more accurate and reliable scheduling and task assignment. The changes improve the overall performance and consistency of the AI agent's date calculations, leading to better automation and scheduling capabilities. This primarily impacts the AI module.
A bug was preventing users from completing sign requests after a user account was deleted. This fix handles the scenario where a deleted user's information is still referenced, preventing an error when attempting to validate and send the completed document. This ensures a smoother experience for users managing sign requests.
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 resolves an issue where subfolders within the Documents section were not appearing in the search panel when accessed from other applications. Previously, users would see the full folder structure, but the search functionality wouldn't reflect it. This change ensures a consistent and complete view of documents for all users.
Original PR description
...when coming from another app. Reproduce: 1. Go to a fleet vehicle record and open its 'Documents' stat button. 2. You end up in the Fleet folder, where you see subfolders as kanban cards, but they are not in the search panel. Task-5272030 Forward-Port-Of: odoo/enterprise#99688
This update prevents appraisal feedback from being reset to default templates when an appraisal is reopened. Previously, reopening the appraisal caused all employee and manager feedback to be cleared. The fix ensures that previously entered feedback is preserved, streamlining the appraisal process and reducing the need for users to re-enter information.
Original PR description
Steps to reproduce: 1- Create new appraisal 2- Confirm appraisal 3- Edit employee and manager feedbacks 4- Set the final rating for the appraisal 5- Mark appraisal as done 6- Reopen appraisal Issue:…
Steps to reproduce: 1- Create new appraisal 2- Confirm appraisal 3- Edit employee and manager feedbacks 4- Set the final rating for the appraisal 5- Mark appraisal as done 6- Reopen appraisal Issue: The feedbacks of both the employee and manager are reset to the default template. They should be unchanged. Cause: Both the reopen and reset buttons used to call the the same action "action_back" which would set the state of the appraisal to "1_new", there is a compute that is triggered by the change in state which updates the appraisal's department_id which in turn triggers two other computes for the employee and manager feedbacks, those computes have a condition that if the state of the appraisal is '1_new', then the feedbacks should be reset to the templates. Fix: Make each button call its own action and make the reopen action set the state to '2_pending' instead of '1_new'. Furthermore make the reset action also reset the final rating for the appraisal. Task-5411661 Forward-Port-Of: odoo/enterprise#102021
This update addresses critical issues related to credit note generation for KRA (Kenya Revenue Authority) compliance. Specifically, the system now prevents credit notes with mismatched customer PINs and ensures credit notes are not dated before the original invoice, ensuring accurate reporting and avoiding potential penalties.
Original PR description
* Prevent credit note with customer PIN different than the submitted invoice. * Prevent credit note to be dated before the original invoice date. task-5160113 Forward-Port-Of: odoo/enterprise#102475 Forward-Port-Of: odoo/enterprise#100480
A crash occurred when users attempted to validate signatures due to a missing field in the system. This update resolves the issue by introducing a bridge module to ensure the necessary data is available, allowing users to successfully complete the signature process. This improves the stability and usability of the Documents & HR module.
Original PR description
The system will crash with error when user tries to validate the signature. **Steps to produce: -** - Install `Sign, Employees, and Documents` apps with demo data. - Go to Apps and `uninstall` the…
The system will crash with error when user tries to validate the signature.
**Steps to produce: -**
- Install `Sign, Employees, and Documents` apps with demo data.
- Go to Apps and `uninstall` the `hr_sign` module.
- Send any employee a sign request for a document.
- When the employee tries to validate and send the document, the error appears.
**Error: -**
```
KeyError: 'sign_request_ids'
ValueError: Invalid field hr.employee.sign_request_ids in condition ('sign_request_ids', 'in', [1])
```
**Root cause: -**
- When `sign` route is called then at [1], then we try to search field `sign_request_ids` in `hr_employee`. but at [2], we can see the field `sign_request_ids` is defined in `hr_sign` module.
- And user removed the `hr_sign` module, so the field is no more exist in `hr_employee` model.
**Solution: -**
- Added new bridge module for `documents_hr` and `hr_sign`.
[1]
https://github.com/odoo/enterprise/blob/ec83cfc1ac4f0be9eacba4b7e9a41438050b8950/documents_hr/controllers/main.py#L20-L21
[2]
https://github.com/odoo/enterprise/blob/ec83cfc1ac4f0be9eacba4b7e9a41438050b8950/hr_sign/models/hr_employee.py#L9-L10
**sentry-6819182542**This update fixes a bug where product attributes weren't displayed on order lines. The change ensures that all product attribute details are now correctly shown, improving order clarity and accuracy for users. This was caused by a change in how attribute data was constructed within the system.
Original PR description
Before this commit: --- - When an order was placed with product attributes, the attribute details were not shown on the order line. After this commit: --- - The product attribute names are now correctly displayed on the order line. Cause: --- - Until saas-18.2, the attribute string was built using the product’s display name and `attribute_line_ids`, which only included never type PTAV entries. - Starting from saas-18.2, the attribute string is constructed solely from `attribute_line_ids`, which now includes all PTAVs. task-5244869 Forward-Port-Of: odoo/enterprise#102737 Forward-Port-Of: odoo/enterprise#99007
This update corrects a previous issue where the 'Edit Payment' button was incorrectly visible in the AT and FR POS localizations, potentially violating fiscal regulations. Now, the button is only displayed when the company isn't using FON Authentication, ensuring compliance and accurate order processing. This change improves data integrity and reduces the risk of non-compliant transactions.
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 Forward-Port-Of: odoo/enterprise#102698 Forward-Port-Of: odoo/enterprise#101460
This update fixes a readability issue in the manufacturing order barcode view when using dark mode. By adjusting colors and removing a distracting style element, the finished product information is now much clearer, ensuring accurate data capture and reducing potential errors. This improves the user experience for all users.
Original PR description
*: stock_barcode Before this commit: ======================= When accessing a manufacturing order via Barcode in `dark mode`, the producing bar of the finished product is difficult to read due to…
*: stock_barcode Before this commit: ======================= When accessing a manufacturing order via Barcode in `dark mode`, the producing bar of the finished product is difficult to read due to poor colour contrast. Steps to reproduce: ======================= 1. Install the `mrp` module. 2. Switch to dark mode. 3. Open any manufacturing order using Barcode. 4. Observe the producing bar for the finished product. - The text on the producing bar is hard to read because the colour of text does not provide sufficient contrast. - Additionally, for products tracked by `lot or serial number`, when the same product is added multiple times, the barcode view groups these entries into a single grouped line, causing the same visibility issue in both MO and normal `picking/transfer` operations. Cause of the Issue: ======================= In dark mode, both the text and background colour of the producing bar are light, resulting in low colour contrast and making the text difficult to read. Additionally, the `text-muted` class applied to the `units of measure (UoM)` further reduces readability. After this commit: ======================= Updated the text colour of producing bar and background colour of grouped lines to use a darker shade for better visibility in dark mode. Also, removed the `text-muted` class used on `UOM` to improve redability. TaskID-5117608 Forward-Port-Of: odoo/enterprise#96718
This update corrects a bug in the Aged Receivable report that was misreporting amounts related to analytic accounts. The fix ensures that amounts are correctly associated with the originating invoice line, improving the accuracy of financial reporting. This resolves an issue where analytic account data was incorrectly placed on other transactions.
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. Forward-Port-Of: odoo/enterprise#102535
This update aligns the positions of the WhatsApp 'view-contact' button and the Live Chat 'livechat-info' panel within the discuss app. This change improves agent workflow by ensuring both buttons are consistently displayed at the top, enhancing usability and a better user experience. It addresses a previous inconsistency that impacted agent efficiency.
Original PR description
The thread action 'view-contact' is somewhat like 'livechat-info', in that this action redirects to relevant info to the whatsapp user and livechat-info is a panel with all info on the visitor and…
The thread action 'view-contact' is somewhat like 'livechat-info', in that this action redirects to relevant info to the whatsapp user and livechat-info is a panel with all info on the visitor and more. The position of both buttons were the total opposite in discuss app: - 'livechat-info' was put as the 1st panel one before panels - 'view-contact' was dead last. There are differences, with 'livechat-info' being a panel and 'view-contact' a redirect button. However, each are important buttons for the type of conversation that justify them being in their own group right now. Since the buttons are mutually exclusive by the channel type, there's reason to have them share the same position. This commit moves the position of 'view-contact' in discuss header thread actions to be the same as 'livechat-info', that is as the 1st action in the list. This makes its position consistent with livechat info, thus agents of live chat and whatsapp would appreciate the 2 button placement being consistent. Task-5431313 <img width="1760" height="231" alt="Screenshot 2025-12-18 at 21 02 24" src="https://github.com/user-attachments/assets/ee2baf91-0d9a-49ca-91ac-a7781b33e57b" /> Forward-Port-Of: odoo/enterprise#102479