Daily updates from Odoo
Friday, April 10, 2026
251 changes
23 changes
Enhancements to existing features
This update enhances financial reporting by providing a 'coverage ratio' for each analytic plan. This allows users to easily identify if journal items are fully distributed across their planned analytics, which is crucial for accurate audits and financial analysis. The change addresses discrepancies in reporting caused by Odoo's partial analytic distribution capabilities.
Original PR description
The objective is to bridge the gap between journal items and analytic items in the reporting. As Odoo allows for partial analytic distribution, this creates discrepancies in the P&L and BS when filtered by an analytic plan. This features aims to provide users with a clear 'coverage ratio' per plan to identify incomplete distributions during audits. task-5887978 Forward-Port-Of: odoo/enterprise#106750
Resolved issues and error corrections
This update resolves a potential instability in the account reports testing process. The change ensures tests using line assertions handle duplicate line IDs correctly, preventing unexpected errors. This improves the reliability of our reporting tools.
Original PR description
Steps to reproduce: - create a test using the assertLinesValues using two lines having the same id.
This update resolves an issue where certain actions were unintentionally disabled when working with locked spreadsheets. This change re-enables these actions, improving usability and functionality for users working with sensitive data. It ensures users can perform necessary tasks within the spreadsheet environment.
Original PR description
Some actions were mistakenly disabled on locked sheet. This commit re-enable them. Task: 6033269
This update resolves an issue where customers could incorrectly edit boolean properties within shift templates when accessing the portal. The change ensures these properties remain read-only, preventing unintended data modifications and maintaining data integrity. This improves the stability and reliability of the customer portal experience.
Original PR description
view of shifts Currently, when a shift with a worksheet template is completed and the customer access its portal view of the shift, if a boolean property was present on the worksheet template then the portal user is able to edit that property. It is only a visual effect, the value is not updated in the db. This commit fix this issue and set the field in readonly mode.
This update corrects a technical issue that was unintentionally sending payroll data to non-production environments. This ensures that test and development teams are not exposed to sensitive financial information, maintaining data security and compliance. The change prevents this transmission, streamlining the testing process.
Original PR description
Forward-Port-Of: odoo/enterprise#113504
This update fixes an issue where the filter for unfinished workorders disappeared when marking an operation as complete. The fix prevents the filter from being erased during the validation process, ensuring users can accurately track remaining tasks on shopfloor operations. This improves the usability of the shopfloor module.
Original PR description
While working on a workorder from the shopfloor, if there is several operation when closing the first one, the filter will disapear Steps to reproduce: ------------------- * Create a Product * Create a BoM for that product with two operation * Create a MO for this product * Click on the smart button "Shop Floor" * Open the Operations * Mark as Done one of the operation -> the filter disappears Observation: ------------- When cliking on "mark as done" or "closing production" both goes through validate(), At the end of this function the filter is erased: https://github.com/odoo/enterprise/blob/85bd9d80a1a784f1baff1493b2eaec4a17ea9c9b/mrp_workorder/static/src/mrp_display/mrp_display_record.js#L384 opw-5959166 Forward-Port-Of: odoo/enterprise#111333
This update resolves an issue where FSM users couldn't access critical BOM data, leading to errors when managing stock moves within their tasks. The fix grants FSM users the necessary permissions to view BOMs and BOM lines, ensuring smoother workflow and accurate inventory management.
Original PR description
**Steps to reproduce:**
- Install mrp, industry_fsm_repair, and industry_fsm_sale
- Create a user with only fsm access rights
- Create a sale order with both service and goods products using the above user
- Confirm the sale
- Log in as the fsm user
- Go to fsm app > open task > open pickup > open stock move
**Issue:**
fsm users with no BOM access encounter errors when opening stock moves from fsm tasks.
**Cause:**
lack of bom access for fsm-only user.
**Fix:**
This commit grants bom and bom line access to the project user.
task-5077522
Forward-Port-Of: odoo/odoo#229522This update resolves an issue causing inconsistent styling in the point-of-sale category selector. By ensuring the `category-list` class is always applied, the selector now renders consistently across different devices and environments. This improves the overall user experience for sales staff.
Original PR description
Before this commit: ==================== Previously, the `category-list` class was conditionally applied based on `show_category_images`, which caused inconsistent styling and layout issues. After this commit: ======================= This commit ensures that both `product-list` and `category-list` classes are always present, providing consistent rendering of the category selector. Task-6092404 Forward-Port-Of: odoo/odoo#258192 Forward-Port-Of: odoo/odoo#257251
This update resolves an issue where pressing 'Enter' in a toggle list created with formatting would incorrectly create a new, empty toggle instead of removing the existing one. The fix ensures that pressing 'Enter' while a toggle block has formatting will properly remove the block. This improves the user experience and prevents unexpected list behavior.
Original PR description
**Current behavior before PR:** Steps to reproduce issue: - Create a toggle list. - Apply some formattings e.g. bold and italic to title. - Press Enter. Instead of removing the toggle, another toggle list is created. **Desired behavior after PR is merged:** Now, if there is a empty toggle block title having some formattings in it, pressing enter removes the empty toggle and exit the list. task-6075014 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#258115 Forward-Port-Of: odoo/odoo#256355
This update fixes an issue where the payment term list would sometimes shrink or flicker after a language change. The fix adds extra space to the list using a 'colspan' setting, ensuring text fits correctly and preventing visual disruptions. This improves the user experience when viewing payment terms in different languages.
Original PR description
Previously, after a language switch, text gets longer inside cell. On clicking/focusing `o_cell_custom` the widths were recomputed and the list shrinks/flickers. In this commit `colspan='2'` is set on `line_ids` to give the x2many list more horizontal space. This avoids column shrinking/flickering. Task-5189713 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#257570
This update corrects a minor technical problem with the way marketing campaign data is formatted (XML). Previously, an automated system handled this, but with a recent software update, the issue was exposed. This fix ensures marketing campaign data is correctly processed, preventing potential display or functionality problems.
Original PR description
This commit fixes a malformed HTML/XML tag in CardCampaign. Note: before libxml2 v2.14.0, this issue was automagically cleaned up, but not anymore. Forward-Port-Of: odoo/odoo#258388
This update resolves an issue where Chrome processes weren't completely shutting down, leading to potential problems with data and system stability. The fix guarantees all Chrome subprocesses are terminated, preventing lingering requests and ensuring smoother operation. This improves overall system reliability.
Original PR description
It's not clear when it started to happen (possibly forever), but apparently waiting for the main chrome process to terminate does not ensure all subprocesses are also terminated. Depending how long these subprocesses stick around, this can lead to: - remaining http or websocket requests - the inability to delete or re-creation of the user directory - possibly other confusing situations Update the chrome termination flow to make sure every subprocess is gone before proceeding to the next step. It might be possible to remove the `ignore_cleanup_errors` flag on `TemporaryDirectory`, but I'd rather not take that risk for now, so leaving it in. Forward-Port-Of: odoo/odoo#258062
This update resolves issues preventing dynamic category snippets from displaying correctly in the website builder preview. Specifically, it ensures the snippet's preview data is properly recognized and displayed, and corrects a scaling problem where items within the snippet appeared excessively large. These changes improve the user experience when customizing catalog displays.
Original PR description
### [FIX] website_sale: keep preview data of dynamic category snippet Commit 08c41255d70ccbb35eff20e0a12671ffdfba3dfe loads the interaction for dynamic category snippet to show its dynamic content in…
### [FIX] website_sale: keep preview data of dynamic category snippet Commit 08c41255d70ccbb35eff20e0a12671ffdfba3dfe loads the interaction for dynamic category snippet to show its dynamic content in snippet preview dialog. Commit 5cd8ba3b5abcad5a119bb879a9892e0bcfe27d9f changed the condition to avoid replacing the preview data. The dynamic category snippet's preview data does not have the class `s_dialog_preview` to mark them as preview data. Thus the interaction was started and cleared the content (but could not fill it as the snippet does not have a valid configuration yet). This commit uses a `html_builder.snippetsPreprocessor` to add the class on the preview data of that specific snippet in the loaded snippets. Steps to reproduce: - Open website builder - Click on "Catalog" snippets category - Bug: the dynamic snippet containing categories is missing its preview data part task-6088029 ### [FIX] website_sale: scale down height of dynamic category snippet's item Commit 08c41255d70ccbb35eff20e0a12671ffdfba3dfe enables preview of custom dynamic category snippets. But the height of the item is not adapted to the downscaling of the iframe. Thus they looked 3 times too tall. This commits adds a patch to the interaction when loaded in this context to adapt the computed value for the height. Steps to reproduce: - Open website builder - Click on "Catalog" snippets category - Add the dynamic category snippet - Select the added snippet - Save this snippet as a custom snippet - Click on "Custom" snippets category - Bug: the items int the snippet looks way too big task-6088029 Forward-Port-Of: odoo/odoo#257026
This update fixes a bug that prevented attachments from being shown when viewing transcripts in Live Chat (LC). Now, users can access and view any files attached to LC conversations, improving communication and record-keeping. This enhancement ensures a more complete and accessible record of interactions.
Original PR description
tmp 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 certain actions were accidentally disabled when working with locked spreadsheets in Odoo. The changes re-enable these actions, ensuring users can perform all necessary tasks within locked sheets. This improves usability and prevents workflow disruptions.
Original PR description
Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: Task: [6033269](https://www.odoo.com/odoo/2328/tasks/6033269) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update reduces the frequency with which Odoo checks for VIES updates, improving system performance and stability. By shortening the cron interval, the system consumes fewer resources and responds more quickly to data changes. This ensures smoother operation for our SaaS platform.
Original PR description
task-none Forward-Port-Of: odoo/odoo#258302
This update fixes an issue where event sales totals were incorrect when using currencies other than the company's currency. The code was reversed to accurately convert sale prices from the event's currency to the company's currency, ensuring correct total sales calculations. This improves the accuracy of financial reporting for events.
Original PR description
Steps to reproduce: 1. Create a currency with a non-1 exchange rate with the company's currency (e.g. VEF with a rate of 0.000005 against USD). 2. Create a pricelist in that currency. 3. Create an…
Steps to reproduce: 1. Create a currency with a non-1 exchange rate with the company's currency (e.g. VEF with a rate of 0.000005 against USD). 2. Create a pricelist in that currency. 3. Create an event. 4. Create a sale order with the new pricelist. 5. Add a sale order line with a ticket of the event and confirm the order. 6. Go to the event's page and check the total sales smart button. 7. Check the total sales of the event: it should be equal to the sale order's total price converted to the company's currency, but it is not, because of the wrong conversion (it used the inverse of the correct exchange rate, which is 200000 instead of 0.000005 in our example). Problem: The total sales smart button in an event's page shows wrong totals when sales are in a currency other than the company's currency. Cause: The code converts the sale price from the event's currency (which is the same as the company's currency) to each sale order's currency, while it should be the other way around (from each sale order's currency to the event's currency). https://github.com/odoo/odoo/blob/3cd709172e997f5a726cf3ae85ffcb9965619fcb/addons/event_sale/models/event_event.py#L38 opw-5494790 Forward-Port-Of: odoo/odoo#258000 Forward-Port-Of: odoo/odoo#253605
This update clarifies the instructions for setting up printers in the Point of Sale system. The previous help message was inaccurate, leading to confusion. This change ensures users correctly connect their IoT printers, streamlining the setup process.
Original PR description
The "help" message displayed on the Printers settings was misleading: "connect devices without IoT Box", even though the IoT printer has to be connected using the same field. Forward-Port-Of: odoo/odoo#258365
This update prevents archived warehouses from being incorrectly selected when creating quotations through the Contacts app. Previously, a technical issue caused the system to include archived warehouses, even when creating quotations from Opportunities linked to Contacts. This fix ensures that quotations accurately reflect available warehouses, improving data accuracy and streamlining the sales process.
Original PR description
Currently, when a user creates a quotation from the Opportunities available in Contacts, archived warehouses are also considered for the quotation. ## Steps to replicate: - Install Sales, CRM, and…
Currently, when a user creates a quotation from the Opportunities available in Contacts, archived warehouses are also considered for the quotation.
## Steps to replicate:
- Install Sales, CRM, and Inventory.
- Create a new Warehouse and move it to the first position in the warehouse list view (highest priority).
- Archive the newly created warehouse.
- Navigate to Contacts > Acme Corporation > Opportunities >Office Design Project
- New Quotation > Other Info > Delivery and check the Warehouse field.
## Observed behavior
The archived warehouse is still assigned to the Warehouse field in the Delivery section. This issue does not occur when the user creates a quotation directly from the CRM app, it only happens when the quotation is created through the Contacts apps.
## Root cause:
This unintentional behavior was introduced after commit [1]. When a user opens 'Opportunities' from the contacts view, the function `action_view_opportunity` [2] is triggered, which sets `active_test` to False in the context.
Later, when a new quotation is created, the compute method [3] is executed. This method calls `_get_default_warehouse_id` [4], which performs a search. Because `active_test` is already set to False in the context, the search also includes archived warehouses, causing them to be fetched unintentionally.
[2]:
https://github.com/odoo/odoo/blob/bd18ecdf179f9a5f902d78af13dad62125c82550/addons/crm/models/res_partner.py#L39-L53 [3]:
https://github.com/odoo/odoo/blob/bd18ecdf179f9a5f902d78af13dad62125c82550/addons/sale_stock/models/sale_order.py#L194-L204
[4]:
https://github.com/odoo/odoo/blob/bd18ecdf179f9a5f902d78af13dad62125c82550/addons/stock/models/res_users.py#L9-L12
## Solution:
Explicitly set `active_test=True` in the context when preparing the quotation for an opportunity. This ensures that archived warehouses are excluded from the search and prevents them from being selected.
**Alternate Solution:**
We could also make `active_test` to true when searching for warehouse directly as well.
```py
def _get_default_warehouse_id(self):
# !!! Any change to the following search domain should probably
# be also applied in sale_stock/models/sale_order.py/_init_column.
return self.env['stock.warehouse'].with_context(active_test=True).search([('company_id', '=', self.env.company.id)], limit=1)
```
[1]:
https://github.com/odoo/odoo/commit/59feed9f26937ae8e2cab5cd7d2b6743ab6c0717
opw-5999034
Forward-Port-Of: odoo/odoo#252166This update resolves a restriction preventing non-administrator users from fully utilizing the KSeF (Polish e-tax) functionality within the Odoo system. By adding necessary permissions, this change ensures that all users can correctly manage and submit KSeF-related data, streamlining the tax reporting process. This aligns with broader accessibility improvements.
Original PR description
Fields on `res_company` related to KSeF are marked only for group `base.group_system`, as are the `certificate.certificate` and `certificate.key` models. Adding `compute_sudo` and `sudo()` calls where it's needed in actions that can be performed by non-admin users. task-6018713 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#255629 Forward-Port-Of: odoo/odoo#253336
This update significantly speeds up the process of generating sale order reports by optimizing a key database query. Previously, this query took 20-40 seconds due to searching through millions of stock records. Adding an index to the 'lot_id' field has reduced the query time to 1-4 seconds, improving overall system performance and responsiveness.
Original PR description
Issue: -- The query created by the function '_compute_sale_order_ids' takes around 20-40 seconds since its doing "WHERE" searches on millions of stock.picking records Fix: -- Added an index to the…
Issue: -- The query created by the function '_compute_sale_order_ids' takes around 20-40 seconds since its doing "WHERE" searches on millions of stock.picking records Fix: -- Added an index to the "lot_id" field of the stock.move.line model. (Already existing databases can be fixed by using the webshell) Steps to recreate the issue: -- 1. Have around a million stock.picking records 2. Go to "Inventory/Products/Lots/Serial Numbers" 3. Select any existing record or create and save a new one 4. These actions will take around 20-40 seconds to complete Before this commit: -- Selecting or saving any 'stock.lot' takes around 20 seconds After this commit: -- Selecting or saving any 'stock.lot' takes around 1-4 second Benchmark: -- Benchmark test was done one a database with ~4000 stock.move records and 1.74 million stock.picking records Opw-5459842 | Before this Commit | ~20 seconds | After this Commit | **~1-4 seconds & Memory usage just a little bit higher --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#255255
This update resolves an issue where accounting administrators were unable to reopen the Inventory Valuation report after generating a stock valuation closing entry. The fix allows accounting users to continue accessing this report without restrictions by temporarily granting elevated access to retrieve necessary data. This ensures consistent reporting functionality for our accounting users.
Original PR description
### Issue before this commit: After generating a stock valuation closing entry from the Inventory Valuation report, reopening the report raised an access rights error. Users with Accounting…
### Issue before this commit: After generating a stock valuation closing entry from the Inventory Valuation report, reopening the report raised an access rights error. Users with Accounting permissions could no longer access the report. ### Steps to reproduce the issue: 1. Access the database with a user having Accounting Admin rights. 2. Go to the Inventory Valuation report. 3. Click to generate a closing entry. 4. Try to open the Inventory Valuation report again. 5. Result: System shows an access rights error. ### Cause of the issue: The method _get_last_closing_date() retrieves the field state of the model account.move by querying the technical model ir.model.fields. However, accounting users do not have read access to this model. When the report tries to compute the last closing date after a closing entry exists, this lookup triggers an error. ### Reason to introduce the fix: The lookup of account.move.state is only used internally to inspect tracking values in the chatter and determine the posting date of the closing entry. Since this requires reading a technical metadata model, the query is executed with sudo() to bypass the restriction while keeping the functional access to accounting data unchanged. opw-5998151 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#254188
This update fixes a bug where product searches were limited to a product's category, even when users arrived directly at a product page. Now, product searches will perform a global search across all products, regardless of how the user accessed the page. This provides a more intuitive and comprehensive product discovery experience.
Original PR description
Steps to produce: --- - Install `website_sale` module. - Go to `website > shop`. - Open the `Customizable Desk` product page. - From the website editor, `enable the search bar` for the product page.…
Steps to produce: --- - Install `website_sale` module. - Go to `website > shop`. - Open the `Customizable Desk` product page. - From the website editor, `enable the search bar` for the product page. - Now search for `drawer`. Issue: --- - Searching from a product page always scopes results to the product's category, even when the user navigated directly to the product without selecting any category. Root cause: --- - The issue occurs because `_prepare_product_values()`[1] always assigns a category using the fallback `product.public_categ_ids[:1]` when no category is explicitly provided. As a result, the `keep` object is generated with `_get_shop_path(category)`[2], which produces a category-based shop URL. Since the search form action is defined as `keep(search=0)` [3] in the template, the generated search URL always includes `/shop/category/<slug>`, even when the user accessed the product page directly. This unintentionally scopes all searches to the product’s first public category instead of performing a global `/shop` search. Solution: --- - Separate the breadcrumb logic from the search context logic. Before automatically assigning a default category for breadcrumb display, store the originally requested category (which is None when navigating directly to a product). - Use the auto-assigned category only for breadcrumb display. - Use the originally requested category to build the keep QueryURL [1]https://github.com/odoo/odoo/blob/242afb9ca3a76e3628260ac81a9f5ddcd5d445dd/addons/website_sale/controllers/main.py#L796-L799 [2]https://github.com/odoo/odoo/blob/242afb9ca3a76e3628260ac81a9f5ddcd5d445dd/addons/website_sale/controllers/main.py#L806-L812 [3]https://github.com/odoo/odoo/blob/242afb9ca3a76e3628260ac81a9f5ddcd5d445dd/addons/website_sale/views/templates.xml#L360-L372 opw-5969662 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#257375 Forward-Port-Of: odoo/odoo#251751
24 changes
Enhancements to existing features
This update enhances financial reporting by providing a 'coverage ratio' for each analytic plan. This allows users to easily identify if journal items are fully distributed across their planned analytics, which is crucial for accurate audit trails and financial analysis. The change improves transparency and reduces potential discrepancies in reporting.
Original PR description
The objective is to bridge the gap between journal items and analytic items in the reporting. As Odoo allows for partial analytic distribution, this creates discrepancies in the P&L and BS when filtered by an analytic plan. This features aims to provide users with a clear 'coverage ratio' per plan to identify incomplete distributions during audits. task-5887978 Forward-Port-Of: odoo/enterprise#106750
Resolved issues and error corrections
This update resolves a problem where EPD bill payments weren't correctly updating their status in the system. The fix ensures payments are accurately marked as 'paid' after reconciliation, improving the reliability of financial reporting. This was triggered by a specific test scenario involving early payment terms and EPD bills.
Original PR description
Steps to reproduce: - Create an early payment term. - Create a Vendor Bill with EPD and post it. - Register a payment for this bill (no outstanding account set on journal => no move created). - Create a bank transaction fully paying the bill. - Reconcile the transaction with the bill. Issue: Access the payment of the bill. The payment state remains 'in_process' instead of 'paid'. Fix in community: https://github.com/odoo/odoo/pull/256486 opw-5881976 Forward-Port-Of: odoo/enterprise#112398
This update corrects a technical issue where payroll data was being incorrectly transmitted in non-production (test) environments. This change ensures that test data remains isolated and prevents potential disruptions or inaccuracies during development and quality assurance. The fix improves the stability and reliability of our test environments.
Original PR description
Forward-Port-Of: odoo/enterprise#113504
This update fixes an issue where the filter for unfinished workorders disappeared after marking an operation as complete. The fix prevents the filter from being unintentionally removed during the process of finalizing a workorder, ensuring users always see the correct list of outstanding tasks. This improves usability and accuracy in shopfloor operations.
Original PR description
While working on a workorder from the shopfloor, if there is several operation when closing the first one, the filter will disapear Steps to reproduce: ------------------- * Create a Product * Create a BoM for that product with two operation * Create a MO for this product * Click on the smart button "Shop Floor" * Open the Operations * Mark as Done one of the operation -> the filter disappears Observation: ------------- When cliking on "mark as done" or "closing production" both goes through validate(), At the end of this function the filter is erased: https://github.com/odoo/enterprise/blob/85bd9d80a1a784f1baff1493b2eaec4a17ea9c9b/mrp_workorder/static/src/mrp_display/mrp_display_record.js#L384 opw-5959166 Forward-Port-Of: odoo/enterprise#111333
This update resolves an issue where FSM users couldn't access the Bill of Materials (BOM) when working with sales orders containing both service and goods products. The fix grants FSM users the necessary BOM access, allowing them to correctly view and manage stock moves within their tasks.
Original PR description
**Steps to reproduce:**
- Install mrp, industry_fsm_repair, and industry_fsm_sale
- Create a user with only fsm access rights
- Create a sale order with both service and goods products using the above user
- Confirm the sale
- Log in as the fsm user
- Go to fsm app > open task > open pickup > open stock move
**Issue:**
fsm users with no BOM access encounter errors when opening stock moves from fsm tasks.
**Cause:**
lack of bom access for fsm-only user.
**Fix:**
This commit grants bom and bom line access to the project user.
task-5077522
Forward-Port-Of: odoo/odoo#229522This update ensures that company-paid expenses processed with SEPA credit transfers now require a vendor to be specified. Previously, the system would incorrectly post these expenses without a vendor, leading to payment errors and SEPA XML generation failures. This fix adds a validation step to ensure the vendor is set before posting, improving payment accuracy and compliance.
Original PR description
**Steps to reproduce:** * Install `account_iso20022` and `hr_expense` module. * Create an expense with `Paid by Company` and `SEPA credit transfer` as the payment method. * Leave the `Vendor` field…
**Steps to reproduce:** * Install `account_iso20022` and `hr_expense` module. * Create an expense with `Paid by Company` and `SEPA credit transfer` as the payment method. * Leave the `Vendor` field empty. * Submit, approve, and post the expense. **Observed behavior:** * The expense is posted successfully without a vendor, creating a payment with `partner_id = False`. * The payment cannot be reset to draft due to the missing vendor, and SEPA XML generation fails because the creditor name (`<Cdtr><Nm>`) requires a partner. **Cause:** * The `hr_expense` module overrides `_compute_show_require_partner_bank`. to set `require_partner_bank_account = False` for expense payments, bypassing the partner bank validation in `account.payment.action_post`. * `_prepare_payments_vals` uses `self.vendor_id.id` for `partner_id`, which evaluates to `False` when no vendor is set. * The `_post` method on `account.move` only validates partner presence for invoices (sale/purchase documents), not for `entry` type moves, which payments use. **Fix:** * Add a validation in `hr.expense.action_post` that checks whether the payment method is `sepa_ct`. If so, `vendor_id` must be set before posting. * This catches the issue early in the expense flow, before the payment and journal entry are created. opw-5930687 Forward-Port-Of: odoo/odoo#252384
This update resolves an issue where pressing 'Enter' in a toggle list created with formatting would incorrectly create a new, empty toggle instead of removing the existing one. The fix ensures that pressing 'Enter' in a formatted toggle list correctly exits the list, maintaining a cleaner user experience. This improves the reliability and usability of the HTML editor.
Original PR description
**Current behavior before PR:** Steps to reproduce issue: - Create a toggle list. - Apply some formattings e.g. bold and italic to title. - Press Enter. Instead of removing the toggle, another toggle list is created. **Desired behavior after PR is merged:** Now, if there is a empty toggle block title having some formattings in it, pressing enter removes the empty toggle and exit the list. task-6075014 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#258115 Forward-Port-Of: odoo/odoo#256355
This update fixes an issue where the payment term list would sometimes shrink or flicker after a language change. The fix adds extra space to the list using a wider column format, ensuring consistent and clear display of payment terms for users. This improves the overall user experience.
Original PR description
Previously, after a language switch, text gets longer inside cell. On clicking/focusing `o_cell_custom` the widths were recomputed and the list shrinks/flickers. In this commit `colspan='2'` is set on `line_ids` to give the x2many list more horizontal space. This avoids column shrinking/flickering. Task-5189713 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#257570
This update resolves a technical issue where a malformed XML tag was causing problems with the marketing card functionality. Previously, the system automatically corrected these errors, but with the latest software version, this fix is necessary to ensure proper operation of the marketing card feature.
Original PR description
This commit fixes a malformed HTML/XML tag in CardCampaign. Note: before libxml2 v2.14.0, this issue was automagically cleaned up, but not anymore. Forward-Port-Of: odoo/odoo#258388
This update resolves a bug that prevented users from replacing images with illustrations in the mass mailing editor. The fix ensures compatibility by correctly handling image attachments with optional parameters like 'charset=utf-8' and converting illustrations to PNG for better email client support.
Original PR description
Currently, in the mass mailing editor, an error occurs when a user replaces an image with an illustration. Steps to reproduce: 1. Open the mass mailing editor 3. Drag and drop a snippet containing an…
Currently, in the mass mailing editor, an error occurs when a user replaces an image with an illustration. Steps to reproduce: 1. Open the mass mailing editor 3. Drag and drop a snippet containing an image 4. Double-click on the image 5. In the image search bar, type "test" and press `Enter` 6. Select an illustration => A traceback is raised. When an illustration is selected, it is automatically stored as an attachment with the mimetype `image/svg+xml; charset=utf-8`. The editor then loads the image using the attachment URL (e.g. `/html_editor/shape/illustration/usability-testingsvg-258?...`). When the media dialog is closed (via `on_media_dialog_saved_handlers`), the editor attempts to process the image and calls the `/html_editor/get_image_info` route to retrieve the image info. This route retrieves the corresponding attachment from the database using the attachment url, but filters results based on a predefined set of allowed mimetypes. The issue arises because this set does not account for valid mimetypes that include optional parameters such as `charset=utf-8`. As a result, the attachment is not found, preventing the image from being processed and ultimately causing the crash. To fix the issue, we will update the domain used to retrieve image attachments so that it accepts valid mimetypes with optional parameters (e.g. `image/svg+xml; charset=utf-8`). During image processing, the transformed image is temporarily encoded in base64 and stored in the src attribute. When the record is saved, this base64 image is converted into a new attachment via the `/html_editor/modify_image/<id>` route. **This conversion step is necessary because many email clients have limited support for SVG images. Converting the illustration to PNG ensures better compatibility and visibility across mail clients.** After conversion, the image url is then set to `/html_editor/shape/illustration/335/usability-testingsvg-258?...` This URL is handled by the `html_editor/shape/<module>/<path:filename>` route. Its purpose is to process SVG files and dynamically adjust their colors based on query parameters (e.g. the `c1` parameter). However, once the image has been converted to PNG, this logic no longer applies. To address this, an additional conditional check will be introduced: if the file is not an SVG, the route will bypass the SVG-specific transformation logic and instead serve the image directly. Task-5977962 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#255134
This update fixes a problem where Chrome processes weren't fully closing after a task, leading to potential errors and instability. The change ensures all related Chrome processes are terminated, preventing issues like lingering network connections and preventing the system from correctly managing user directories. This improves overall system reliability.
Original PR description
It's not clear when it started to happen (possibly forever), but apparently waiting for the main chrome process to terminate does not ensure all subprocesses are also terminated. Depending how long these subprocesses stick around, this can lead to: - remaining http or websocket requests - the inability to delete or re-creation of the user directory - possibly other confusing situations Update the chrome termination flow to make sure every subprocess is gone before proceeding to the next step. It might be possible to remove the `ignore_cleanup_errors` flag on `TemporaryDirectory`, but I'd rather not take that risk for now, so leaving it in. Forward-Port-Of: odoo/odoo#258062
This update resolves issues with the dynamic category snippet preview in the website builder. Specifically, it ensures the snippet's data is correctly displayed and scaled appropriately, addressing a visual bug where the snippet appeared oversized and missing its preview content. This improves the user experience when creating and customizing catalog listings.
Original PR description
### [FIX] website_sale: keep preview data of dynamic category snippet Commit 08c41255d70ccbb35eff20e0a12671ffdfba3dfe loads the interaction for dynamic category snippet to show its dynamic content in…
### [FIX] website_sale: keep preview data of dynamic category snippet Commit 08c41255d70ccbb35eff20e0a12671ffdfba3dfe loads the interaction for dynamic category snippet to show its dynamic content in snippet preview dialog. Commit 5cd8ba3b5abcad5a119bb879a9892e0bcfe27d9f changed the condition to avoid replacing the preview data. The dynamic category snippet's preview data does not have the class `s_dialog_preview` to mark them as preview data. Thus the interaction was started and cleared the content (but could not fill it as the snippet does not have a valid configuration yet). This commit uses a `html_builder.snippetsPreprocessor` to add the class on the preview data of that specific snippet in the loaded snippets. Steps to reproduce: - Open website builder - Click on "Catalog" snippets category - Bug: the dynamic snippet containing categories is missing its preview data part task-6088029 ### [FIX] website_sale: scale down height of dynamic category snippet's item Commit 08c41255d70ccbb35eff20e0a12671ffdfba3dfe enables preview of custom dynamic category snippets. But the height of the item is not adapted to the downscaling of the iframe. Thus they looked 3 times too tall. This commits adds a patch to the interaction when loaded in this context to adapt the computed value for the height. Steps to reproduce: - Open website builder - Click on "Catalog" snippets category - Add the dynamic category snippet - Select the added snippet - Save this snippet as a custom snippet - Click on "Custom" snippets category - Bug: the items int the snippet looks way too big task-6088029 Forward-Port-Of: odoo/odoo#257026
This update prevents the chatbot from restarting when a chat session is closed prematurely. Previously, an incomplete chatbot shutdown could cause errors. Now, the restart button is disabled when the chat hasn't finished, ensuring a smoother user experience and preventing potential issues.
Original PR description
Before this commit, it was possible to restart the chatbot on the feedback panel when closing the chat window. This was actually failing when the chatbot was stopped before the last step was completed and left the livechat state in error. Now, the button is simply disabled on feedback when we did not reach the end of the chatbot to avoid any issue. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#257891
This update reduces the frequency with which Odoo checks for VIES (VAT) updates, improving system performance and reducing the load on external services. This change ensures smoother and more reliable operation of our VAT calculations, particularly for businesses relying on up-to-date VAT rates.
Original PR description
task-none Forward-Port-Of: odoo/odoo#258302
This update fixes an issue where event sales totals were incorrect when using currencies other than the company's default. The code was reversed to accurately convert sale prices from the event's currency to the company's currency, ensuring correct total sales calculations.
Original PR description
Steps to reproduce: 1. Create a currency with a non-1 exchange rate with the company's currency (e.g. VEF with a rate of 0.000005 against USD). 2. Create a pricelist in that currency. 3. Create an…
Steps to reproduce: 1. Create a currency with a non-1 exchange rate with the company's currency (e.g. VEF with a rate of 0.000005 against USD). 2. Create a pricelist in that currency. 3. Create an event. 4. Create a sale order with the new pricelist. 5. Add a sale order line with a ticket of the event and confirm the order. 6. Go to the event's page and check the total sales smart button. 7. Check the total sales of the event: it should be equal to the sale order's total price converted to the company's currency, but it is not, because of the wrong conversion (it used the inverse of the correct exchange rate, which is 200000 instead of 0.000005 in our example). Problem: The total sales smart button in an event's page shows wrong totals when sales are in a currency other than the company's currency. Cause: The code converts the sale price from the event's currency (which is the same as the company's currency) to each sale order's currency, while it should be the other way around (from each sale order's currency to the event's currency). https://github.com/odoo/odoo/blob/3cd709172e997f5a726cf3ae85ffcb9965619fcb/addons/event_sale/models/event_event.py#L38 opw-5494790 Forward-Port-Of: odoo/odoo#258000 Forward-Port-Of: odoo/odoo#253605
This update fixes an issue where the average cost of inventory calculated in the 'Inventory at Date' report was sometimes incorrect. The problem stemmed from how Odoo processed inventory moves, leading to an inaccurate calculation when using the AVCO cost method. This ensures more reliable inventory valuation reporting.
Original PR description
When we open the Stock report at date, we filter out moves anterior to that date and, if the cost method is AVCO, Odoo recompute the `avg_cost` up to that point of time with `_run_average_batch`. However, when iterating over the moves, `move._get_value(at_date)` might return a value calculated from the current standard_price if the move is not associated with any accounting entry or PO/SO. Steps to reproduce the issue: 1. Create a new product with AVCO cost method 2. On the product form, set the cost to 5$ 3. Manually adjust the inventory to 5 units 4. Create a PO and receive 5 products at a unit cost of 10$ > Total value: 75$ > Total quantity: 10 units > avg_cost: 7.5$ 5. Navigate to Stock report and run "Inventory at Date" at current time 6. avg_cost is 8.75$ instead of 7.5$ Ticket: opw-5951072 Forward-Port-Of: odoo/odoo#253659
This update resolves an issue where basic MRO users couldn't split production orders due to access restrictions with accounting analytics. The fix ensures that users with standard MRO permissions can now correctly split production, preventing workflow disruptions. This improves usability for a wider range of users.
Original PR description
### Issue: In certain flows, basic mrp users (mrp.group_mrp_user) can not mark MO's as done or split production due to the associated automatic creation of accounting analytics. As concrete examples,…
### Issue: In certain flows, basic mrp users (mrp.group_mrp_user) can not mark MO's as done or split production due to the associated automatic creation of accounting analytics. As concrete examples, the tests: - test_automatic_backorder_no_redirect - test_change_qty_produced can not be performed with a user with basic mrp access rights. ### Steps to reproduce: - Incarnate a user with only mrp user rights - Create and confirm an MO for 2 units with an operation - Click on the cog wheel icon > Split production > split #### > Access Error: You are not allowed to access 'Analytic Line' (account.analytic.line) records. ### Cause of the issue: To begin with, members of the `mrp.group_mrp_user` do not and should not have read nor create access rights with respect to the `account.analytic.line` model. However, as soon as `mrp_account` is installed the `button_mark_done` can end up requiring such access. 1. The `_split_productions` fails for multiple reasons: This line: https://github.com/odoo/odoo/blob/master/addons/mrp/models/mrp_production.py#L2000 fails because of the assignment since this call: https://github.com/odoo/odoo/blob/0c2ad21773d4a7b23038b9bed19d64952d841fa1/addons/mrp_account/models/mrp_production.py#L27-L35 requires write and read access on the `account.analytic.line` model. This line: https://github.com/odoo/odoo/blob/master/addons/mrp/models/mrp_production.py#L2002 fails because the `copy_data` now checks that the user has the `read` access rights of the comodel when copying `many2many` data's: https://github.com/odoo/odoo/blob/0c2ad21773d4a7b23038b9bed19d64952d841fa1/odoo/orm/models.py#L4781-L4783 This is an issue for instance for the `wip_move_ids` field that can not be copied since mrp users do not have a read access to the `account.move` comodel: https://github.com/odoo/odoo/blob/0c2ad21773d4a7b23038b9bed19d64952d841fa1/addons/mrp_account/models/mrp_production.py#L15 This line: https://github.com/odoo/odoo/blob/0c2ad21773d4a7b23038b9bed19d64952d841fa1/addons/mrp/models/mrp_production.py#L2017 will fail since it checks the read access right on the comodel `account.move` of the `wip_move_ids` fields. 2. The `_post_inventory`: https://github.com/odoo/odoo/blob/afc6f4b41c63800efaa8e3ca15afe5cff5cfa0f9/addons/mrp/models/mrp_production.py#L2221 Fails as it sets the duration: https://github.com/odoo/odoo/blob/afc6f4b41c63800efaa8e3ca15afe5cff5cfa0f9/addons/mrp/models/mrp_production.py#L1922 which calls the `_create_or_update_analytic_entry`: https://github.com/odoo/odoo/blob/afc6f4b41c63800efaa8e3ca15afe5cff5cfa0f9/addons/mrp_account/models/mrp_workorder.py#L18-L21 which it self creates and update `account.analytic.lines` to which you do not have any read access. backport of b5c7d5fed2d893bcd5ea2c2c5ed1cb9d8dfa2424 opw-6066674 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#257350
This update resolves issues where URLs were incorrectly converted or transformed within the HTML editor, particularly when inserting spaces or pasting URLs with backticks. The changes ensure that URLs are handled accurately, preventing unexpected link creation and ensuring pasted URLs with backticks are correctly formatted.
Original PR description
[FIX] html_editor: undo link autoconvert before space insertion When adding a space after an URL, the URL text is converted to an URL. When pressing undo, first the space is undone, then the link is…
[FIX] html_editor: undo link autoconvert before space insertion When adding a space after an URL, the URL text is converted to an URL. When pressing undo, first the space is undone, then the link is undone. This is wrong because if the user did not want a link, after undoing the link, inserting a new space will again convert to a link. This commit splits `handleAutomaticLinkInsertion` into two parts: determining if a link must be created, and actually inserting the link. This makes it possible to execute code within the condition before and after the insertion. To fix the similar behavior for enter and shift-enter, another before input handler is also added in order to let the default before input be executed before creating the link. Steps to reproduce: - Go to a "To do" note - Type "odoo.com" - Press space/enter/shift-enter - Undo a single time => The insertion was undone instead of the link transform. task-5936310 [FIX] html_editor: not include surrounding backtick in pasted URL When pasting an URL surrounded by backticks, the ending backtick is included inside the link's HREF. This commit fixes the regex for URL to also exclude backticks (like it did with `"` and `'`). Steps to reproduce: - Copy the following text in the clipboard: ``` `odoo.com` ``` - Go to a "To do" note - Paste => The link's URL was ``` odoo.com` ``` task-5936310 Forward-Port-Of: odoo/odoo#258337 Forward-Port-Of: odoo/odoo#248619
This update resolves an issue where archived warehouses were incorrectly included when creating quotations from Contacts. The fix ensures that archived warehouses are not selected during quotation creation, preventing potential errors and improving data accuracy. This change was triggered by a recent code update.
Original PR description
Currently, when a user creates a quotation from the Opportunities available in Contacts, archived warehouses are also considered for the quotation. ## Steps to replicate: - Install Sales, CRM, and…
Currently, when a user creates a quotation from the Opportunities available in Contacts, archived warehouses are also considered for the quotation.
## Steps to replicate:
- Install Sales, CRM, and Inventory.
- Create a new Warehouse and move it to the first position in the warehouse list view (highest priority).
- Archive the newly created warehouse.
- Navigate to Contacts > Acme Corporation > Opportunities >Office Design Project
- New Quotation > Other Info > Delivery and check the Warehouse field.
## Observed behavior
The archived warehouse is still assigned to the Warehouse field in the Delivery section. This issue does not occur when the user creates a quotation directly from the CRM app, it only happens when the quotation is created through the Contacts apps.
## Root cause:
This unintentional behavior was introduced after commit [1]. When a user opens 'Opportunities' from the contacts view, the function `action_view_opportunity` [2] is triggered, which sets `active_test` to False in the context.
Later, when a new quotation is created, the compute method [3] is executed. This method calls `_get_default_warehouse_id` [4], which performs a search. Because `active_test` is already set to False in the context, the search also includes archived warehouses, causing them to be fetched unintentionally.
[2]:
https://github.com/odoo/odoo/blob/bd18ecdf179f9a5f902d78af13dad62125c82550/addons/crm/models/res_partner.py#L39-L53 [3]:
https://github.com/odoo/odoo/blob/bd18ecdf179f9a5f902d78af13dad62125c82550/addons/sale_stock/models/sale_order.py#L194-L204
[4]:
https://github.com/odoo/odoo/blob/bd18ecdf179f9a5f902d78af13dad62125c82550/addons/stock/models/res_users.py#L9-L12
## Solution:
Explicitly set `active_test=True` in the context when preparing the quotation for an opportunity. This ensures that archived warehouses are excluded from the search and prevents them from being selected.
**Alternate Solution:**
We could also make `active_test` to true when searching for warehouse directly as well.
```py
def _get_default_warehouse_id(self):
# !!! Any change to the following search domain should probably
# be also applied in sale_stock/models/sale_order.py/_init_column.
return self.env['stock.warehouse'].with_context(active_test=True).search([('company_id', '=', self.env.company.id)], limit=1)
```
[1]:
https://github.com/odoo/odoo/commit/59feed9f26937ae8e2cab5cd7d2b6743ab6c0717
opw-5999034
Forward-Port-Of: odoo/odoo#252166This update resolves an issue where to-do tasks without a project would unexpectedly become required, preventing users from saving them after a page refresh. The fix corrects a technical merging of required field attributes within the Odoo system, ensuring to-do tasks remain editable regardless of refresh.
Original PR description
Steps to reproduce 1. Create a to-do from the To-do app (no project set, appears as "Private") 2. Open the Project app, go to My Tasks, open the to-do 3. The "Private" label shows correctly 4.…
Steps to reproduce 1. Create a to-do from the To-do app (no project set, appears as "Private") 2. Open the Project app, go to My Tasks, open the to-do 3. The "Private" label shows correctly 4. Refresh the page Issue After refresh, the "Private" label vanishes and the project field becomes required (red), making the record unsavable. The web client merges (ORs) the `required` attribute of fields sharing the same name across view nesting levels. Commit 46adf760a3a33 introduced `required="1"` on the sub-task `project_id` inside the `child_ids` One2many list: https://github.com/odoo/odoo/blob/46adf760a3a33e48d34fe99c565a8c6c1194fb65/addons/project/views/project_task_views.xml#L479 This causes the main form's `project_id` required expression (`parent_id or child_ids or is_template`) to be ORed with `1`, always evaluating to true. On initial navigation the sub-task list is not yet loaded so it works, but on a full page refresh all field attributes are merged at once, making the main task's project field unconditionally required. Solution Change the sub-task's `project_id` required expression to `parent_id or child_ids or is_template`, matching the main form's field. This still evaluates to true for sub-tasks (they always have a `parent_id`) while no longer forcing true on standalone to-dos that have no project. opw-6008266
This update significantly speeds up the process of retrieving sale order information linked to stock lots. Previously, searching through millions of stock records took 20-40 seconds. Now, thanks to a new database index, this process is reduced to just 1-4 seconds, improving overall sales efficiency.
Original PR description
Issue: -- The query created by the function '_compute_sale_order_ids' takes around 20-40 seconds since its doing "WHERE" searches on millions of stock.picking records Fix: -- Added an index to the…
Issue: -- The query created by the function '_compute_sale_order_ids' takes around 20-40 seconds since its doing "WHERE" searches on millions of stock.picking records Fix: -- Added an index to the "lot_id" field of the stock.move.line model. (Already existing databases can be fixed by using the webshell) Steps to recreate the issue: -- 1. Have around a million stock.picking records 2. Go to "Inventory/Products/Lots/Serial Numbers" 3. Select any existing record or create and save a new one 4. These actions will take around 20-40 seconds to complete Before this commit: -- Selecting or saving any 'stock.lot' takes around 20 seconds After this commit: -- Selecting or saving any 'stock.lot' takes around 1-4 second Benchmark: -- Benchmark test was done one a database with ~4000 stock.move records and 1.74 million stock.picking records Opw-5459842 | Before this Commit | ~20 seconds | After this Commit | **~1-4 seconds & Memory usage just a little bit higher --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#255255
This update resolves a performance issue on the website's product category display, specifically when dealing with nested categories. By optimizing how the website fetches category data, the change dramatically reduces the number of database queries, resulting in a faster and more responsive user experience. The fix improves loading times for the /shop page.
Original PR description
Before this commit, the product categories templates recursively rendered on new recordsets created using `filtered()`. This caused a performance regression when there were nested categories, as `_prefetch_ids` would be cleared, generating N+1 queries when fetching each child category. This commit changes the t-foreach to iterate over the original recordset, in order to preserve _prefetch_ids and improve caching performance. Benchmarks opening /shop with sidebar categories |Category count |Time before|Queries before|Time after|Queries after| |----------------|-----------|--------------|----------|-------------| |2000, nested |29.52s |4843 |0.83s |76 | |2000, not nested|0.89s |91 |0.80s |75 | opw-5969878 Forward-Port-Of: odoo/odoo#258202 Forward-Port-Of: odoo/odoo#254415
This update fixes a visual issue where the 'seen' indicator wasn't displayed correctly when the last message in a channel was a notification. Now, the indicator accurately reflects when a user has read the last message, regardless of whether it was a regular message or a notification, improving channel organization.
Original PR description
Before this PR: In channels with seen indicators, the indicator is hidden if the user's last message is a notification. Since indicators are not displayed on notifications and the logic does not fall back to the previous message, the user is left with no visible 'seen' status. After this PR: The seen indicator now skips notification-type messages and is correctly displayed on the last message sent by the user. task-5921911 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#248390
Code cleanup and technical improvements
This update allows us to accurately track an employee's hourly cost over time by moving this data from the main employee record to a versioned record. Previously, changes to hourly cost would overwrite historical data, making it impossible to see how costs evolved. This change provides a more complete and reliable record of employee expenses.
Original PR description
This commit will migrate the hourly_cost field from the base employee model to the versioned record model. **Why:** Previously, the hourly_cost field was defined directly on the hr.employee model. Because this model represents the "main" record, any changes to the hourly cost would overwrite the value across all historical versions of that employee. This made it impossible to track how an employee's cost to the company evolved over time. By moving this field to the versioning model each historical snapshot of the employee can now maintain its own specific hourly cost. **What:** - Added the `hourly_cost` field to the employee versioning model. - Updated `hourly_cost` of an employee to use the version related field task-6098429
4 changes
Enhancements to existing features
This update enhances financial reporting by providing a 'coverage ratio' for each analytic plan. This allows users to easily identify if journal items are fully distributed across their planned analytics, aiding in audit processes and improving reporting accuracy.
Original PR description
The objective is to bridge the gap between journal items and analytic items in the reporting. As Odoo allows for partial analytic distribution, this creates discrepancies in the P&L and BS when filtered by an analytic plan. This features aims to provide users with a clear 'coverage ratio' per plan to identify incomplete distributions during audits. task-5887978 Forward-Port-Of: odoo/enterprise#106750
Resolved issues and error corrections
This update fixes a limitation where CSV files couldn't be viewed directly in the list view, mirroring the functionality in the Kanban view. Now, users can easily access and work with CSV files within the list view, improving workflow efficiency. This change aligns the system's behavior and provides a more consistent user experience.
Original PR description
Current behavior before PR: - CSV files were viewable from the Kanban view, and opened the spreadsheet conversion dialog - In list view, CSV files were not considered viewable - Same issue for trashed CSV files in list view Desired behavior after PR is merged: - Consider CSV files as viewable in list view - Align behavior with the Kanban view Task: 6052134 Forward-Port-Of: odoo/enterprise#113359 Forward-Port-Of: odoo/enterprise#112869
This update resolves an issue where material resources with assigned roles were incorrectly displayed when filtering by employees in the Planning app. The fix improves the filter domain to accurately exclude these resources, ensuring that only employee-type resources are shown when using the employee filter.
Original PR description
Steps to Reproduce: 1. Open the Planning app. 2. Go to Configuration -> Materials. 3. Set a role on either the demo material resource laptop or toolkit. 4. Go back to the Planning view. 5. Apply the view filter employee (filter by Employees). Issue: The material resource with a role should not be visible, but it is still present. Current behaviour: When filtering the Planning view by Employees, material resources with an assigned role remain visible. Expected behaviour: Material resources with an assigned role should be excluded from the Planning view when filtered by Employees — only employee-type resources and resources on which role is not set should appear. Fix: Improved the filter domain so unnecessary data are excluded. Task-4526989 Forward-Port-Of: odoo/enterprise#92816
This update corrects a technical issue where payroll transmission was incorrectly enabled in non-production (test) environments. This fix ensures that payroll data is only transmitted to the correct systems during actual operational use, preventing potential data discrepancies and improving the reliability of our test setups. It's a routine maintenance update.
Original PR description
Forward-Port-Of: odoo/enterprise#113504
14 changes
Enhancements to existing features
This update enhances financial reporting by providing a 'coverage ratio' for each analytic plan. This allows users to easily identify if journal items are fully distributed across their planned analytics, which is crucial for accurate audit trails and financial analysis. The change improves transparency and reduces discrepancies in reports.
Original PR description
The objective is to bridge the gap between journal items and analytic items in the reporting. As Odoo allows for partial analytic distribution, this creates discrepancies in the P&L and BS when filtered by an analytic plan. This features aims to provide users with a clear 'coverage ratio' per plan to identify incomplete distributions during audits. task-5887978 Forward-Port-Of: odoo/enterprise#106750
Resolved issues and error corrections
This update ensures Odoo correctly handles tax exemption reasons related to Peppol standards. Previously, some tax exemption reasons were missing, and this change adds all required reasons to improve compliance and accuracy in tax calculations. This impacts how Odoo processes and reports on tax exemptions.
Original PR description
Some tax exemption reasons were missing, This commit ensures having all the tax exemption reasons introduced by Peppol task-6048561 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#257174 Forward-Port-Of: odoo/odoo#254841
This update ensures that supported documents are only generated for Odoo partners who are correctly identified as participating in Nemhandel. Previously, the process would incorrectly generate documents for invalid partners, leading to test failures. This change improves the reliability of document generation and prevents unnecessary processing.
Original PR description
The method to fill the supported documents of a partner was called even if it was not a valid Nemhandel participant. This would cause some test to fail as the call was unexpectedly done on tests without any setup for it.
This update resolves an issue where the import of invoices through the Peppol integration was not correctly returning the newly created invoice record. The change was previously implemented in a related system update, but wasn't fully integrated into the documents_account_peppol module. This ensures accurate tracking of invoices within the Peppol system.
Original PR description
Due to 271d6f2af4eea1ac2a79850069118c00dd97db97, the import invoice method in Peppol should return the created move and not just True. With the documents_account_peppol module, that change was not fully merged. opw-6102218 Forward-Port-Of: odoo/enterprise#113291
This update resolves a technical problem in the account_edi_ubl_cii module that prevented it from correctly processing UBL invoices. The fix ensures the module receives the expected single record, improving the reliability of invoice processing. This change ensures invoices are processed correctly.
Original PR description
`_need_ubl_cii_xml` requires a single record to be passed. However, it is currently called with `self`, which could be a recordset. Call with the `move` of the current iteration instead. no-task --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This pull request updates the core spreadsheet library used in Odoo. The changes include bug fixes related to number formatting and rendering, as well as improvements to testing and browser compatibility. These updates ensure the spreadsheet functionality continues to operate correctly and reliably.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/4836743b29 [REL] 18.3.42 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/4836743b29 [REL] 18.3.42 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/8dea05219d [FIX] format: keep negative accounting suffix in large number [Task: 6068834](https://www.odoo.com/odoo/2328/tasks/6068834) https://github.com/odoo/o-spreadsheet/commit/f805024e56 [IMP] tests: add image snapshots for renderer store tests [Task: 5933130](https://www.odoo.com/odoo/2328/tasks/5933130) https://github.com/odoo/o-spreadsheet/commit/29ff649f02 [FIX] renderer: rendering tests are wrong [Task: 5933130](https://www.odoo.com/odoo/2328/tasks/5933130) https://github.com/odoo/o-spreadsheet/commit/eefd1535f5 [IMP] tests: update jest to v30 [Task: 5933130](https://www.odoo.com/odoo/2328/tasks/5933130) https://github.com/odoo/o-spreadsheet/commit/66bda8d726 [FIX] cf: add sanity checks on conditional format type/operator [Task: 6106092](https://www.odoo.com/odoo/2328/tasks/6106092) https://github.com/odoo/o-spreadsheet/commit/e33b14cf0c [FIX] live-server: specify host to avoid issues with some browsers [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/0226237dd2 [FIX] xlsx: export formula that returns an error [Task: 6008904](https://www.odoo.com/odoo/2328/tasks/6008904) Co-authored-by: Florian Damhaut (flda) <flda@odoo.com> Co-authored-by: Anthony Hendrickx (anhe) <anhe@odoo.com> Co-authored-by: Alexis Lacroix (laa) <laa@odoo.com> Co-authored-by: Lucas Lefèvre (lul) <lul@odoo.com> Co-authored-by: Adrien Minne (adrm) <adrm@odoo.com> Co-authored-by: Ronak Mukeshbhai Bharadiya (rmbh) <rmbh@odoo.com> Co-authored-by: Dhrutik Patel (dhrp) <dhrp@odoo.com> Co-authored-by: Rémi Rahir (rar) <rar@odoo.com> Co-authored-by: Pierre Rousseau (pro) <pro@odoo.com> Co-authored-by: Vincent Schippefilt (vsc) <vsc@odoo.com> Co-authored-by: Marceline Thomas (matho) <matho@odoo.com>
This update corrects a previous restriction in the Spanish tax module that prevented "Comunidades de Bienes" (CBs) – entities taxed as freelancers – from being correctly identified. The change broadens the regex to include VATs starting with 'E', ensuring accurate fiscal categorization and reporting for these businesses. This improves compliance with Spanish tax regulations.
Original PR description
In Spain, "Comunidades de Bienes" (VAT starting with 'E') are entities without legal personality that tax via income attribution to their members. For accounting and tax reporting purposes, they must be treated as individuals/freelancers rather than corporations. The current _l10n_es_freelancer logic was too restrictive, only matching standard DNI (8 digits + letter) or NIE (starting with X, Y, Z). This caused CBs to be excluded from freelancer-specific logic, leading to incorrect fiscal categorization in reports and tax modules. The regex has been updated to optionally allow the 'E' prefix while ensuring the rest of the string maintains a valid format, effectively broadening the scope of what the system considers a Spanish freelancer. task-6014192 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#253087
This update corrects a technical issue where data transmission related to payroll calculations was unintentionally active in non-production (test) environments. This change ensures that test data remains isolated and accurate, preventing potential discrepancies during development and testing of the l10n_ch_hr_payroll module. It improves the reliability of our testing process.
Original PR description
Forward-Port-Of: odoo/enterprise#113504
A recent update resolved an issue where the annual tax report would crash when comparing data with a previous period. This was caused by an incorrect check for numeric values within the report, specifically when handling string data. The fix ensures the report functions correctly under various data conditions.
Original PR description
To reproduce: - Create a company in LU - Open the annual tax report for LU - Click on the comparison filter, compare with 1 period in the past ==> Traceback. This happens because that report contains a string value (an editable one, but it's not important here). Since there are only 2 comparison periods, we try creating the "%" column, comparing their amounts. The condition checking whether or not to display "N/A" was wrong, as it considered the values could only be int/float or None. Here, they are strings, so we don't enter that condition and crash when trying to evaluate float_is_zero on a string. Forward-Port-Of: odoo/enterprise#112619
This update resolves an issue where QR codes generated for Swiss invoices were being rejected by banks. The fix filters out unauthorized Unicode characters from the QR-Bill, ensuring compliance with the specific character set allowed by Swiss banking regulations. This prevents invoice rejections and ensures smooth payment processing.
Original PR description
**Description of the issue/feature this PR addresses:** QR code is rejected by the bank, when it contains an invalid character `U+202F`. **Current behavior before PR:** Unauthorized Unicode characters are encoded in the QR-Bill, and it is rejected on the receiving part. **Desired behavior after PR is merged:** Any Unicode codepoint which is not in the subset of 324 allowed codepoints has to be filtered out. > spec of QR-bill allows only a subset of characters, a precise list of 324 Unicode codepoints (section 4.1.1, page 30 of the Swiss Implementation Guidelines for the QR-bill) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#257961 Forward-Port-Of: odoo/odoo#254980
This update fixes an issue where attachment overviews (the blue boxes showing attachment names) weren't appearing in the chatter after uploading files. This change ensures that users can always see the overview of attached files when creating activities within the Odoo chatter. This resolves a visual inconsistency and improves the user experience.
Original PR description
--- When in the chatter, we can create an activity. If we add an attachment to the notes of this activity and save it, the overview of the attachment won't show in the chatter. 1. Open an app that…
--- When in the chatter, we can create an activity. If we add an attachment to the notes of this activity and save it, the overview of the attachment won't show in the chatter. 1. Open an app that gives you access to the chatter, for instance, an invoice in Accounting. 2. Click on Activity. Click on Log a Note... and on the button Upload a file. Upload an attachment and save. The overview of the file (blue box with the name of the attachment) should appear. The overview doesn't appear Since 19.0, we want to replace static rendering with embedded components everywhere for rendering attachments, but this creates issues for the rendering of the overview in the chatter. Therefore, after internal discussion, we agreed to keep rendering overviews statically. Backport of: https://github.com/odoo-dev/odoo/commit/4a2412b93bcac9e71826f7c0101243cdb882ddf6 opw-6035026 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#254814
This update enhances the stability of the Odoo integration with Fiskaly, the French point-of-sale system. Specifically, it fixes issues with retry logic, ensures correct SCU usage, and simplifies configuration tracking, leading to a more reliable and manageable connection.
Original PR description
- Retry only on server errors (5xx) instead of client errors (4xx) to avoid masking meaningful API responses with a confusing RetryError. - Reuse the existing active SCU when E_SCU_LIMIT_REACHED is returned, since Fiskaly only allows one active SCU per account. - Pass the pos.config id as metadata when creating a cash register on Fiskaly, making it easier to match Fiskaly register IDs back to their config when the local link is broken. - Hide the test mode toggle once the company is registered with Fiskaly (l10n_at_fiskaly_organization_id is set) to prevent mode changes after registration. opw-5958673
This update prevents a bug where changing a child company's ZATCA API mode would inadvertently reset and unboard the parent company's related sales journal. The fix ensures that changes are applied only to the intended company, maintaining data integrity and preventing unexpected journal removals.
Original PR description
**Steps to reproduce:** * Install `l10n_sa_edi` module. * Create a parent company and a child company, both with the same VAT number. * Onboard the parent company's Sales journal with ZATCA. *…
**Steps to reproduce:**
* Install `l10n_sa_edi` module.
* Create a parent company and a child company, both with the same VAT number.
* Onboard the parent company's Sales journal with ZATCA.
* Onboard the child company's Sales journal with ZATCA. Create a journal for the child if there is no journal.
* Change the child company's ZATCA API mode to any other mode.
**Observed behavior:**
* Changing the child company's API mode resets and unboards the parent company's Sales journal as well.
**Cause:**
* In `res.company.write`, when `l10n_sa_api_mode` changes, journals to reset are fetched using `_check_company_domain(company)`.
* `account.journal` uses `check_company_domain_parent_of`, which returns journals where `company_id` is a parent of the given company — so passing a child company also matches journals belonging to the parent.
**Fix:**
* Replace `_check_company_domain(company)` with a direct `('company_id', '=', company.id)` filter, so only journals strictly owned by the company being modified are reset.
opw-6099340
Forward-Port-Of: odoo/odoo#258006This update fixes an issue where changing a contact's name automatically updated the associated account holder name, regardless of whether they were originally the same. Now, the account holder name only updates if the contact's name changes and it was previously the same, ensuring data consistency and accuracy in bank account information.
Original PR description
**steps to reproduce:** 1. Create a contact 2. On the accounting tab, add one bank account 3. Change the name of the contact 4. The record's name updates automatically the field "Account Holder Name"…
**steps to reproduce:** 1. Create a contact 2. On the accounting tab, add one bank account 3. Change the name of the contact 4. The record's name updates automatically the field "Account Holder Name" **problem:** When changing a profile's name in the contacts app, the account holder name changes to be the same as the profile's name. **expected behaviour:** "Make the account holder name update if partner.name is changed ONLY if they were the same before the change. Otherwise keep the account holder name as is." - Referenced from the feature ticket: 5222712 That means if contact's name is the same as the account holder name, then any change to the contact's name, should as well update 'account holder name' accordingly, but if you changed the account holder name itself, then you change contact's name (if they're not the same) then the account holder name shouldn't be updated to match the contact's name. **cause:** The account holder name depends on `partner_id.name` https://github.com/odoo/odoo/blob/2394a9a7f0ece2d5a2185fa4e715d943fc044733/odoo/addons/base/models/res_bank.py#L104-L107 So whenever you change the contact's name, the account holder name changes accordingly. **Fix:** Upon creation, the account holder name is set to the partner name if no name is provided. Additionally, when the partner name changes, the account holder name is updated only if it previously matched the partnername; otherwise, it is left unchanged. **NOTE:** This is a backport of this PR: https://github.com/odoo/odoo/pull/233965 opw-5913464 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#256439 Forward-Port-Of: odoo/odoo#248886
5 changes
Resolved issues and error corrections
This update fixes an issue where the Helpdesk return wizard incorrectly included receipt operations in the available pickings. The fix specifically excludes receipts from the wizard's domain, ensuring users only see deliveries when returning items. This improves the accuracy and usability of the return process.
Original PR description
Steps to reproduce: - 1. Create a Sale Order for a customer and fully process the delivery. 2. Create a Helpdesk ticket for that customer. 3. From the ticket, click the 'Return' button to open the wizard. 4. Select the sales order or open the 'Delivery to Return' dropdown. Issue: - The list of available pickings shows both receipts and deliveries operations. Fix: - The domain for the return wizard is updated to explicitly exclude receipts. Note: - This bug is present until saas-18.4. From 19.0 onward it is already fixed in this PR: https://github.com/odoo/enterprise/pull/90371 task-5075205 Forward-Port-Of: odoo/enterprise#95418
This update resolves an issue preventing non-stock users from duplicating Helpdesk tickets with associated sales. The fix sets the product ID to 'False' during duplication, allowing users without stock access to create copies of tickets and their linked sales records. This improves usability for a wider range of users.
Original PR description
Steps to reproduce: - Install helpdesk_sale_timesheet. - Create a Helpdesk Ticket and set its sale_line_id. - Log in as a user without stock.group_stock_user access. - Try to duplicate the ticket. Issue: Duplicating a ticket raises an AccessError because the user lacks stock rights required when copying the product_id. Fix: Set `product_id` to False during duplication for non-stock users. Reference: https://github.com/odoo/enterprise/pull/9100 task-5356318 Forward-Port-Of: odoo/enterprise#101338
This update corrects a bug where the product count in the stat button on Sale Order Lines created from tasks would incorrectly display '0 products' until the task was saved. Now, the counter accurately reflects the products in the order line, regardless of whether the task is saved immediately.
Original PR description
Previously, when creating a Sale Order Line on the fly from a task, the product count in the stat button showed '0 products' until the task was saved. Now, the counter no longer drops to 0 when the record is not saved. task-4276677 Forward-Port-Of: odoo/enterprise#113334 Forward-Port-Of: odoo/enterprise#95100
This update resolves an issue where material resources with assigned roles were incorrectly displayed when filtering by employees in the Planning app. The fix improves the filter domain to accurately exclude these resources, ensuring that only employee-type resources are shown when filtering by employees. This improves data accuracy and reporting.
Original PR description
Steps to Reproduce: 1. Open the Planning app. 2. Go to Configuration -> Materials. 3. Set a role on either the demo material resource laptop or toolkit. 4. Go back to the Planning view. 5. Apply the view filter employee (filter by Employees). Issue: The material resource with a role should not be visible, but it is still present. Current behaviour: When filtering the Planning view by Employees, material resources with an assigned role remain visible. Expected behaviour: Material resources with an assigned role should be excluded from the Planning view when filtered by Employees — only employee-type resources and resources on which role is not set should appear. Fix: Improved the filter domain so unnecessary data are excluded. Task-4526989 Forward-Port-Of: odoo/enterprise#92816
A recent update resolved a bug in the annual tax report that caused the system to crash when comparing values containing text. This fix ensures the report functions correctly regardless of the data types used within the report, improving stability and reliability for users. The change addresses an issue where the system incorrectly processed string values during comparisons.
Original PR description
To reproduce: - Create a company in LU - Open the annual tax report for LU - Click on the comparison filter, compare with 1 period in the past ==> Traceback. This happens because that report contains a string value (an editable one, but it's not important here). Since there are only 2 comparison periods, we try creating the "%" column, comparing their amounts. The condition checking whether or not to display "N/A" was wrong, as it considered the values could only be int/float or None. Here, they are strings, so we don't enter that condition and crash when trying to evaluate float_is_zero on a string. Forward-Port-Of: odoo/enterprise#112619
15 changes
Enhancements to existing features
This update streamlines the way odoo.com accesses database information, eliminating an outdated XMLRPC fallback. This change improves performance and simplifies the system, ensuring faster KPI synchronization for the odoo.com platform. Additionally, a new route is implemented to group database calls, mirroring the efficiency of the existing mail activity summary dashboard.
Original PR description
### [IMP] databases: remove xmlrpc fallback for odoo.com Since odoo.com migrated to 19.0, it will always support the json2 API, and XMLRPC support will be dropped on the next version. In order to…
### [IMP] databases: remove xmlrpc fallback for odoo.com Since odoo.com migrated to 19.0, it will always support the json2 API, and XMLRPC support will be dropped on the next version. In order to simplify the code and avoid subsequent requests in case of errors on the json2 API, the XMLRPC fallback is stripped off from `databases.api`. In this commit, we only adapt the tests so that they don't test the fallback to XMLRPC when calling odoo.com. In the next commit, we will remove the dead code. The configuration parameter `databases.odoocom_apiuser` is removed, as well as the corresponding field in the Settings page. ### [IMP] databases: remove xmlrpc fallback for odoo.com (fixup!) With this second commit, we remove the dead code concerning the fallback to XMLRPC when calling odoo.com. ### [IMP] databases: use multidb routes to fetch KPIs on SaaS When synchronizing KPIs from databases in the new Databases application, it takes a long time to make a RPC call to each database in the list. With this commit, in the case of the SaaS, these calls are grouped by server to a dedicated route that will process the information faster, like the databases dashboard odoo.com/my/databases already does to fetch mail activities summary. Task-id: [5167731](https://www.odoo.com/odoo/project.task/5167731)
This update enhances financial reporting by providing a 'coverage ratio' for each analytic plan. This allows users to easily identify if journal items are fully distributed across their planned analytics, which is crucial for accurate audit trails and financial analysis. It addresses discrepancies arising from Odoo's partial analytic distribution capabilities.
Original PR description
The objective is to bridge the gap between journal items and analytic items in the reporting. As Odoo allows for partial analytic distribution, this creates discrepancies in the P&L and BS when filtered by an analytic plan. This features aims to provide users with a clear 'coverage ratio' per plan to identify incomplete distributions during audits. task-5887978 Forward-Port-Of: odoo/enterprise#106750
Resolved issues and error corrections
This update resolves an issue where the employee sick leave warning incorrectly flagged employees with absences exceeding 31 days. The fix now accurately identifies employees who have been on sick leave within the last 31 days, ensuring more precise reporting and compliance. This improves the accuracy of HR data.
Original PR description
-**Issue**: The warning shows employees who had a long sick leaves before 31 days, which is incorrect. -**Fix**: Adjust the logic to include employees who have been on a sick leave for the past 31 days (at least). Forward-Port-Of: odoo/enterprise#113249 Forward-Port-Of: odoo/enterprise#112985
This update resolves a test failure in the account accounting module related to payment processing. The fix addresses a mismatch in data values that occurred when the account accountant module wasn't installed, preventing the test from running correctly. This ensures the accuracy and reliability of payment-related tests.
Original PR description
Fixup for test test_early_payment_discount_multi_bill_statement that will fail when accountant is not installed due to mismatched amls values opw-5881976 Forward-Port-Of: odoo/enterprise#113425
This update corrects an error in the Luxembourg balance sheet report that was causing incorrect 'Results brought forward' values. The fix adjusts how the system calculates this line, ensuring it accurately reflects year-end financial adjustments for Luxembourg companies. This improves the reliability of financial reporting.
Original PR description
… sheet Steps to reproduce: - Use a Luxembourg company - Post a P&L result for the year and do the year-end affectation (Dr 142 / Cr 1412) - Open the Luxembourg balance sheet (full or abbreviated)…
… sheet
Steps to reproduce:
- Use a Luxembourg company
- Post a P&L result for the year and do the year-end affectation (Dr 142 / Cr 1412)
- Open the Luxembourg balance sheet (full or abbreviated)
Issue:
Line "V. Profit or loss brought forward" shows incorrect values.
Cause:
The `accounts` expression for that line used `account_codes` engine with formula `-14`, which only sums accounts by code prefix. Account 1412 ("Results brought forward (assigned)") was typed as `equity`, so its balance was carried forward as an initial balance instead of being captured as retained earnings in the formula.
Solution:
- Set account 1412 to `equity_unaffected`, consistent with account 142.
- Change the `accounts` expression of Line V in both the full and abbreviated balance sheet to use the `domain` engine: `['|', ('account_id.code', '=like', '14%'), ('account_id.account_type', '=', 'equity_unaffected')]` with subformula `-sum`. This correctly captures the balance of all 14x accounts and any `equity_unaffected` accounts, which covers the standard year-end affectation workflow.
opw-5883505This update fixes a technical issue that caused duplicate error messages when generating tax returns in Odoo Enterprise. The fix prevents the system from creating redundant checks, ensuring a smoother and more reliable tax return generation process. This improves user experience and data accuracy.
Original PR description
Steps to reproduce:
- Go to Accounting → Configuration → Accounting → Return Types.
- Open the standard Annual Closing: Corporate Tax return type.
- Select Generic Tax Report as a report in the Report field.
- Navigate to Accounting → Accounting → Closing → Tax Returns.
- Generate the tax return for the selected period.
Issue:
- Duplicate checks with code check_draft_entries are created for the same return, raising:
'You can only have a unique check code for each return.'
This happens because:
- `_check_suite_common_vat_report` adds a Draft entries check.
- `_check_suite_annual_closing` also adds a similar check (No draft entries) with the same code.
- Both run together, causing duplication.
Solution:
- Added `check_codes_to_ignore.add('check_draft_entries')`
in _check_suite_common_vat_report to ensure the check is not generated twice.
opw-6066030This update resolves a visual issue where text in the employee payroll view would split and misalign with checkboxes when viewed on different screen sizes. The fix ensures all text remains on a single line, maintaining a consistent and professional appearance for employees and HR staff. This improves the user experience and data clarity.
Original PR description
Step to reproduce: play with the width of the window, at some point text splits and item are unaligned. Cause: with some window width, the text is splitted on 2 lines, which makes it unaligned with the checkbox. Solution: force text on same line using style="white-space: nowrap". Task: 6069017
This update enhances the logging of Stripe payment refusals in the Odoo Enterprise HR expense module. Now, both the MCC name and code are recorded, providing clearer insights for troubleshooting and resolving payment issues. This improves the ability to identify and address problems with expense reimbursements.
Original PR description
Before this commit: - Only the MCC name was logged when Stripe refused an MCC. After this commit: - The MCC code is now logged along with the MCC name for better clarity and debugging. task-6084569
This update prevents regular employees from modifying target job selections within appraisals. The previous issue stemmed from a lack of access permissions, causing errors. By making the 'target job' field read-only for regular employees, the system now correctly reflects that managers are responsible for these changes, improving data integrity.
Original PR description
Steps to reproduce: 1- Create an appraisal for a regular employee 2- Confirm it so its state changes to 'ongoing' 3- Try to change the target job as an employee 4- Click on see more Cause: The main cause is that regular employees lack the privilage to view job postings by a company. therefore an access rights errors is resulted when the flow is executed. Solution: Made the field readonly for normal employees (as it should be, target jobs are the managers' responsibility to change).
This update fixes an issue where users could create serial numbers for components during manufacturing operations, even when serial number creation was disabled in settings. This change ensures that only authorized serial numbers are created, improving data accuracy and preventing potential inventory discrepancies. The fix addresses a technical oversight in the shopfloor application.
Original PR description
**Issue**: Even when creation of new Serial Numbers for components is disabled on the Manufacturing Operation Type, it is still possible to create them from the shopfloor application. **Steps to…
**Issue**: Even when creation of new Serial Numbers for components is disabled on the Manufacturing Operation Type, it is still possible to create them from the shopfloor application. **Steps to reproduce**: - Enable "Lots & Serial Numbers", on the global settings - Create two products, one tracked by unique serial number - Go to Inventory > Configuration > Warehouse Management > Operations Types - Select Manufacturing and disable "Create New Lots/Serial Numbers for Components" - Create and confirm a MO using the tracked product as component - Go to shopfloor - Click the "+" button next to the component, then "New" -> No error is raised when creating a serial number **Cause**: The `_check_create` constraint relies on `active_mo_id`: https://github.com/odoo/odoo/blob/494cdcfdf4ec166e0a643ee70a53c12c810d02b4/addons/mrp/models/stock_lot.py#L11-L19 However, the shopfloor does not pass this, in context: https://github.com/odoo/enterprise/blob/54c6252a0e13b11fc297b6828883923c0f89881a/mrp_workorder/static/src/mrp_display/mrp_record_line/stock_move.js#L193-L199 As a result, the check is bypassed. opw-6041241
This update simplifies the synchronization wizard by reducing overwhelming error messages, creating a calmer user experience. Instead of detailed errors, users now see a summary count of issues. Detailed error logs are now stored in the database settings chatter for technical review, minimizing distractions and improving usability.
Original PR description
This commit reduces the verbosity of error messages displayed in the synchronization wizard to avoid creating an unnecessary sense of alarm for users. Instead of showing a detailed list of errors, the wizard now displays a single summary message indicating the number of databases that encountered an issue. A new Unreachable project tag is introduced (loaded from project_tags.xml if missing). It is automatically assigned to failing databases and removed upon the next successful synchronization. Detailed error information is no longer shown in the wizard and is instead logged in the chatter of the corresponding database settings for further inspection. Previously displayed non-blocking warnings for already-configured SaaS databases are now omitted to reduce noise, as they would otherwise generate chatter messages at each synchronization. Task-id: [5945269](https://www.odoo.com/odoo/project.task/5945269)
This update ensures the 'Load Order' button remains hidden on Grab/GoFood orders, regardless of screen size. Previously, resizing the window would briefly show this button, which could lead to manual order changes. This change prevents unauthorized modifications and maintains the integrity of external delivery orders.
Original PR description
For Grab/GoFood orders, the "Load Order" button is replaced by "Set Food Ready" to prevent manual edits. Previously, resizing or minimizing the window caused the hidden "Load Order" button to reappear due to responsive layout overrides (e.g., mobile view CSS classes). This commit updates the visibility logic to ensure the button remains strictly hidden across all screen sizes for external delivery orders. opw-6044176
This update corrects a bug where material resources with assigned roles were incorrectly displayed when filtering the Planning view by employees. The fix ensures that only resources designated as employees or those without assigned roles are visible, improving the accuracy of the Planning view's employee-based filtering.
Original PR description
Steps to Reproduce: 1. Open the Planning app. 2. Go to Configuration -> Materials. 3. Set a role on either the demo material resource laptop or toolkit. 4. Go back to the Planning view. 5. Apply the view filter employee (filter by Employees). Issue: The material resource with a role should not be visible, but it is still present. Current behaviour: When filtering the Planning view by Employees, material resources with an assigned role remain visible. Expected behaviour: Material resources with an assigned role should be excluded from the Planning view when filtered by Employees — only employee-type resources and resources on which role is not set should appear. Fix: Improved the filter domain so unnecessary data are excluded. Task-4526989 Forward-Port-Of: odoo/enterprise#92816
This update corrects a technical issue that was unintentionally sending payroll data to non-production environments. This ensures that test and development environments are isolated from live payroll data, improving data security and preventing potential disruptions. The change maintains the core payroll functionality while safeguarding against accidental data leakage.
Original PR description
Forward-Port-Of: odoo/enterprise#113504
This update fixes a bug that prevented CSV files from being viewed correctly in the list view of Odoo Enterprise. Now, CSV files are treated the same as other file types, aligning the behavior with the Kanban view and improving usability for users.
Original PR description
Current behavior before PR: - CSV files were viewable from the Kanban view, and opened the spreadsheet conversion dialog - In list view, CSV files were not considered viewable - Same issue for trashed CSV files in list view Desired behavior after PR is merged: - Consider CSV files as viewable in list view - Align behavior with the Kanban view Task: 6052134 Forward-Port-Of: odoo/enterprise#113359 Forward-Port-Of: odoo/enterprise#112869
11 changes
Resolved issues and error corrections
This update resolves an issue where submitting helpdesk tickets with emails in different capitalization would incorrectly create a new partner record. Now, the system correctly identifies and uses the provided email address to create the ticket, preventing unintended partner creation and ensuring accurate ticket assignment.
Original PR description
**Steps to reproduce** - Create a first partner (name: "Partner", email: "partner@mail.com", phone: "123"). - Go to the website form of a helpdesk team, and submit a ticket using "Partner@mail.com"…
**Steps to reproduce**
- Create a first partner (name: "Partner", email: "partner@mail.com", phone: "123").
- Go to the website form of a helpdesk team, and submit a ticket using "Partner@mail.com" as email (notice the different capitalization) and "456" as phone number.
Behavior without this fix: a new partner is created, but the ticket is assigned to the orignal partner ("partner@mail.com") and its phone number is updated.
Behavior after this fix: no partner is created.
**Causes**
- the partner search was case sensitive
- the created partner was not used as the `partner_id` of the ticket as it was added to the params but needs to be in the kwargs passed to `handle_website_form` in order to be found used by `extract_data`. The original partner was found in `_find_or_create_partner` by the call to
`_mail_find_partner_from_emails` (case-insensitive)
Note: this commit also ensures consistency between the partner's company and the ticket's company (same as in `_find_or_create_partner` of `helpdesk.ticket`).
Also, avoid allowing modifying existing partner's phone via this form.
opw-5914064This update resolves an issue where payroll transmission data was being incorrectly sent to non-production environments. This change ensures that test and development environments are not affected by production payroll data, improving the stability and accuracy of testing. It's a minor fix focused on preventing data leakage.
Original PR description
Forward-Port-Of: odoo/enterprise#113504
This update fixes an issue where search filters applied in the MRP Planning view would disappear when navigating away and returning via the breadcrumb. The fix ensures that search state is correctly maintained, improving the user experience and preventing lost filter settings. This enhances consistency and efficiency in planning processes.
Original PR description
Issue: In the MPS view, when the user sets a search filter, navigates away and then returns via the breadcrumb, the search filters that were applied are gone. This happened because the MPS client action was not passing `globalState` to the `WithSearch` component. Fix by passing `globalState` in `withSearchProps`. task-5368078 Forward-Port-Of: odoo/enterprise#113125
This update resolves an issue where Chrome processes weren't fully closing, leading to potential problems like lingering network connections and difficulties with user directory management. By ensuring all Chrome subprocesses are terminated, this fix improves system stability and prevents unexpected behavior. It's a critical fix for overall system reliability.
Original PR description
It's not clear when it started to happen (possibly forever), but apparently waiting for the main chrome process to terminate does not ensure all subprocesses are also terminated. Depending how long these subprocesses stick around, this can lead to: - remaining http or websocket requests - the inability to delete or re-creation of the user directory - possibly other confusing situations Update the chrome termination flow to make sure every subprocess is gone before proceeding to the next step. Kinda-sorta backport of #258062 Forward-Port-Of: odoo/odoo#258069
This update ensures that negative discount values, which were previously only visible in PDF reports, are now consistently displayed in the Sale Order preview (portal view). The change aligns the report output with the portal's behavior, providing a more accurate representation of discount amounts.
Original PR description
Steps to produce: --- - Install the `Sales` module. - Enable discounts from settings. - Create a Sale Order with a negative discount on an order line. - Preview the Sale Order and click on the view…
Steps to produce: --- - Install the `Sales` module. - Enable discounts from settings. - Create a Sale Order with a negative discount on an order line. - Preview the Sale Order and click on the view details button. Issue: --- - Negative discount values are not shown in the preview (portal view), but they are displayed in the generated PDF. Root cause: --- - At [1], the portal template includes a condition to display discounts only when they are greater than 0, while the report templates lack this check, leading to inconsistent behavior. Solution: --- - Applied the same condition in the report templates to align the PDF output with the portal preview behavior. Before: --- <img width="787" height="136" alt="image" src="https://github.com/user-attachments/assets/d32311be-4aec-4d6f-b905-d5e52f712ba4" /> After: --- <img width="775" height="139" alt="image" src="https://github.com/user-attachments/assets/2614a8ad-dca6-49ca-b720-5c234aa91cf6" /> [1]https://github.com/odoo/odoo/blob/0f463fd247d2f5da79d6ec2b6bec18774f6f600b/addons/sale/views/sale_portal_templates.xml#L539 Enterprise PR: https://github.com/odoo/enterprise/pull/111916 opw-6061568 Forward-Port-Of: odoo/odoo#255735
This update fixes an issue where product names on invoices weren't always displayed in the correct language when using child contacts. The change ensures that invoice line labels are translated based on the language of the invoice contact, regardless of the parent contact's language. This improves the user experience for multilingual invoicing.
Original PR description
### Issue before this commit: When creating an invoice using the child contact of a parent contact that has a different language with respect to the father, the label of the invoice line was not…
### Issue before this commit: When creating an invoice using the child contact of a parent contact that has a different language with respect to the father, the label of the invoice line was not always displayed in the child contact language but in the father's contact language. ### Steps to reproduce the issue: 1. Activate at least 2 languages (X and Y) 2. Create a product and set the translation for that product in the activated languages 3. Create a Contact with the language X 4. Create a child contact (invoice adress type) for that contact with language Y 5. Create a new invoice setting the customer as the child contact 6. Add the product you created 7. See the label is displayed in the language of the parent contact ### Cause of the issue: The computation of the invoice line name relied on line.partner_id.lang. However, the partner_id of the move line is automatically set to the commercial partner that can be different (can be the father's contact) to the contact used on the invoice. As a result, the product description was translated using the wrong language. ### Reason to introduce the fix: To ensure that invoice line labels are correctly translated according to the language of the selected invoice contact, the computation now uses the language of move_id.partner_id instead of line.partner_id. This guarantees consistent and expected behavior in multilingual environments, especially when using different contacts under the same commercial partner. opw-5955875 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#254833
This update resolves an issue where custom paper sizes for lot labels resulted in multiple blank pages in the PDF output. The fix adjusts the underlying report design to correctly handle smaller paper formats, ensuring labels print accurately with the desired barcode and information. This improves the usability of custom label printing.
Original PR description
__ ## Short functional explanation of the error When printing labels of lot or serial products with a custom paper format, the obtained pdf contains several empty pages. ## Reproduction Steps 1.…
__ ## Short functional explanation of the error When printing labels of lot or serial products with a custom paper format, the obtained pdf contains several empty pages. ## Reproduction Steps 1. Enable Debug Mode. In Settings, click on the Technical tab. In the reporting section, click on Paper Format. 2. Click on New. Give a name to your paper format. In the Paper Size field, select Custom. For Page Height and Page Width, make sure that they're smaller than A4 measurements. For example, set the Page Height at 57 and Page Width at 35. Set Margins at 0. In the Associated Reports field, select `lot/Serial Number (PDF)`. 3. Go to Inventory. Click on the Products tab > Lots / Serial Numbers. Click on any Serial Number. Click on the Cog on the top left > Print > Lots / Serial Number (PDF). ### Expected behavior We obtain a PDF of only one page containing the barcode of the serial number. ### Unexpected behavior We obtain a PDF of 5 pages, including 4 blank pages and only one page holding the barcode. ## Origin of the issue In the XML of the label reports, we use the css class `o_label_sheet`: https://github.com/odoo/odoo/blob/ec2300456599e2b3bed5ba130badb63bb9bf15b3/addons/stock/report/report_lot_barcode.xml#L9 In this class, the height and width of sheets are hardcoded to A4 dimensions: https://github.com/odoo/odoo/blob/ec2300456599e2b3bed5ba130badb63bb9bf15b3/addons/product/static/src/scss/report_label_sheet.scss#L5-L6 Therefore, if we set the dimensions of the custom paper format to be smaller than an A4 page, we'll obtain several blank pages, until the dimensions of an A4 pages are met. Moreover, the dimensions of the padding are also hardcoded, which can be an issue in the case of very small custom dimensions. Finally, we nest barcodes in an HTML table: https://github.com/odoo/odoo/blob/ec2300456599e2b3bed5ba130badb63bb9bf15b3/addons/stock/report/report_lot_barcode.xml#L10 for which we hardcode the dimensions: https://github.com/odoo/odoo/blob/ec2300456599e2b3bed5ba130badb63bb9bf15b3/addons/stock/report/report_lot_barcode.xml#L6-L7 This will result in always printing the same amount of barcodes per row in the case of batch printing, even if the dimensions are too small to hold them all. This will also result in always nesting 12x4 barcodes, even when only printing one, while hiding the others, which also produces additional unrequired blank pages. Therefore, we need the dimensions indicated in the paper format of the report to dynamically compute the dimensions of the padding and the rows/columns of the HTML table. __ opw-6071885
This update fixes an issue where portal users couldn't edit messages within the project chatter. The problem stemmed from a missing check in the code, causing a technical error (traceback) when attempting to edit. This change ensures that portal users can now successfully edit messages, improving usability and collaboration.
Original PR description
## Issue When logged as a portal user, clicking the *Edit* button on a message in the chatter does not do anything. ## Steps to reproduce 1. Install *Project* (`project`) 2. Create a Project P and a…
## Issue When logged as a portal user, clicking the *Edit* button on a message in the chatter does not do anything. ## Steps to reproduce 1. Install *Project* (`project`) 2. Create a Project P and a Task T 3. In the Setting of Project P, click *Share Project* and select a portal user 4. Logged as a portal user, open Task T, send a message in the chatter, then try to edit it by clicking the *Edit* (pencil) button. 5. **Nothing happens, but a traceback appears in the console: _Caused by: TypeError: Cannot read properties of null (reading 'id')_** ## Cause The condition causing this error is the following: https://github.com/odoo/odoo/blob/5cfdc9260653a2b22eb79b16702769928d450932/addons/project/static/src/project_sharing/chatter/composer_patch.js#L9-L13 where `this.thread` is not defined yet. Other conditions in this patch check for `this.thread` before trying to read its `id` [[1](https://github.com/odoo/odoo/blob/5cfdc9260653a2b22eb79b16702769928d450932/addons/project/static/src/project_sharing/chatter/composer_patch.js#L25), [2](https://github.com/odoo/odoo/blob/5cfdc9260653a2b22eb79b16702769928d450932/addons/project/static/src/project_sharing/chatter/composer_patch.js#L32)], which leads to believe that the check was simply forgotten in this condition. opw-6072570
This update optimizes how Odoo processes QWeb templates, specifically addressing a performance issue introduced in Markupsafe version 2.1.4. The change reverts to a faster implementation of the `striptags` function, resulting in quicker template compilation times, particularly with large inputs.
Original PR description
Starting version 2.1.4 of markupsafe, they decided to adapt the `striptags` function to use in-python-loops instead of the original implemenation that relied on pre-compiled regex. A problem has been…
Starting version 2.1.4 of markupsafe, they decided to adapt the `striptags` function to use in-python-loops instead of the original implemenation that relied on pre-compiled regex. A problem has been spotted with qweb templates that used `striptags` with large inputs, which led to the investigation of this function and it was found that the old implementation is actually faster. In fact, the PR introducing this change in Markupsafe, made these claims with no benchmarks whatsoever: https://github.com/pallets/markupsafe/pull/413/changes The new implementation of markupsafe is O(N x M), where n is the number of tags and M being the length of the input string. The old regex approach does a single c-level scan to check the existence of the regex which is performing much better for varying input size. The benchmark cases below are in the form `<case_description>_<number_of_tags>`. We can see that in the cases where the current implementation is slightly faster is when there are no tags in the input which can be explained by the fact that the while loops will simply exit early. The time lost in the regex implementation is likely due to the deeper call stack to scan for the regex. Apart from that, in the case of an unclosed tag, the regex implementation is also slower because it still needs to scan the entire line. However, in that case the time taken is a handful of milliseconds, so it's not really a performance regression there either. Apart from that, the old implementation is consistently much more performant, for both small and large inputs. Benchmarks: | Case | Regex ms | Current ms | Speedup | |----------------------------------------------|----------|------------|---------| | plain_text_50k_words | 3.020 | 2.627 | 0.9x ← current_implementation | | unclosed_tag_then_50kb_text | 0.367 | 0.032 | 0.1x ← current_implementation | | unclosed_tag_then_500kb_text | 3.787 | 0.273 | 0.1x ← current_implementation | | multiple_unclosed_open_tags_then_50kb_text | 18.912 | 0.371 | 0.0x ← current_implementation | | multiple_unclosed_open_tags_then_500kb_text | 189.007 | 8.209 | 0.0x ← current_implementation | | unclosed_comment_then_500kb_text | 7.276 | 0.412 | 0.1x ← current_implementation | | 5k_small_tags | 0.986 | 22.096 | 22.4x ← regex_old_implementation | | 20k_small_tags | 4.125 | 492.186 | 119.3x ← regex_old_implementation | | 50k_small_tags | 12.658 | 5499.602 | 434.5x ← regex_old_implementation | | 1k_nested_divs | 0.155 | 0.923 | 5.9x ← regex_old_implementation | | 10k_nested_divs | 1.648 | 48.410 | 29.4x ← regex_old_implementation | | 2k_tags_with_attrs | 1.058 | 12.013 | 11.4x ← regex_old_implementation | | 20k_tags_with_attrs | 13.185 | 6068.755 | 460.3x ← regex_old_implementation | | 2k_multiline_tags | 0.815 | 10.819 | 13.3x ← regex_old_implementation | | 20k_multiline_tags | 8.939 | 4231.768 | 473.4x ← regex_old_implementation | | 1k_comments | 0.222 | 1.292 | 5.8x ← regex_old_implementation | | 1k_comments_hiding_tags | 0.163 | 1.121 | 6.9x ← regex_old_implementation | | 2k_mixed | 0.278 | 2.392 | 8.6x ← regex_old_implementation | | 10k_mixed | 1.400 | 50.959 | 36.4x ← regex_old_implementation | | qweb_shop_200_products | 0.907 | 7.880 | 8.7x ← regex_old_implementation | | qweb_shop_1000_products | 4.296 | 194.647 | 45.3x ← regex_old_implementation | This PR is needed because requirements.txt in Odoo specifies the following dependency: `MarkupSafe==2.1.5 ; python_version >= '3.12' \# (Noble)` This means that all versions running Ubuntu Noble, will be having the same issue introduced in version 2.1.4 of markupsafe. opw-5999688 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update corrects a technical issue preventing activity states from being consistently shared across different tabs within Odoo. Previously, changes to activity states weren't reliably reflected across all views. This fix ensures that activity updates are properly synchronized, improving user workflow and data consistency.
Original PR description
Since [1], the activity state, which is supposed to be shared accross tab through a broadcast channel, isn't anymore. This PR fixes the responsible typo. [1]: #161286 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 prevents a bug where changing a child company's ZATCA API mode would inadvertently reset and unboard the parent company's sales journal. The fix ensures that journal resets are applied only to the company being modified, improving data consistency and preventing unexpected data loss.
Original PR description
**Steps to reproduce:** * Install `l10n_sa_edi` module. * Create a parent company and a child company, both with the same VAT number. * Onboard the parent company's Sales journal with ZATCA. *…
**Steps to reproduce:**
* Install `l10n_sa_edi` module.
* Create a parent company and a child company, both with the same VAT number.
* Onboard the parent company's Sales journal with ZATCA.
* Onboard the child company's Sales journal with ZATCA. Create a journal for the child if there is no journal.
* Change the child company's ZATCA API mode to any other mode.
**Observed behavior:**
* Changing the child company's API mode resets and unboards the parent company's Sales journal as well.
**Cause:**
* In `res.company.write`, when `l10n_sa_api_mode` changes, journals to reset are fetched using `_check_company_domain(company)`.
* `account.journal` uses `check_company_domain_parent_of`, which returns journals where `company_id` is a parent of the given company — so passing a child company also matches journals belonging to the parent.
**Fix:**
* Replace `_check_company_domain(company)` with a direct `('company_id', '=', company.id)` filter, so only journals strictly owned by the company being modified are reset.
opw-60993404 changes
Resolved issues and error corrections
This update corrects a technical issue that could inadvertently transmit payroll data in non-production (test) environments. This change ensures that sensitive payroll information remains isolated to testing, improving data security and preventing potential errors. It’s a routine maintenance fix to maintain the integrity of our payroll system.
This update corrects a bug in the l10n_lu_reports module that caused incorrect calculations of debit and credit amounts in reports. Specifically, it addresses a situation where negative price units resulted in invalid report totals. This ensures accurate financial reporting and avoids validation errors.
Original PR description
This is one of several commits fixing the FAIA xml export: - #113452 - #113455 - #113846 - #113720 When an invoice line has a negative `price_unit`, the `Invoice/Line/InvoiceLineAmount/Amount` element has a negative value. This causes validation errors when comparing the total debit or credit values (such as `SalesInvoices/TotalDebit`) to the individual amounts, as the sum of individual "debit" lines will include some credit amounts and vice versa. Solution: record if the line is actually a debit or a credit, then use the absolute value of the balance in the Amount element. opw-5427296 [Link](https://www.odoo.com/odoo/unassigned-tasks/5427296)
This update fixes a misleading warning that appeared when generating payslips, specifically related to contract dates overlapping with payslip periods. The change improves the user experience by removing the warning when a contract partially overlaps with a payslip, aligning with the behavior in version 19. This ensures accurate payslip generation without unnecessary alerts.
Original PR description
Bug reproduction: 1 - Select Hong Kong (actually there is nothing about Hong Kong, you can select other companies as well) 2 - Create an employee and make its contract from 01-01-2025 to 05-03-2026…
Bug reproduction:
1 - Select Hong Kong (actually there is nothing about Hong Kong, you can select other companies as well)
2 - Create an employee and make its contract from 01-01-2025 to 05-03-2026 (DD/MM/YYYY) format.
3 - Generate payslip for March, the warning of "The period selected does not match the contract validity period" popups.
4 - But we do not want that, even though there is 1 overlapping day in contract with payslip we can continue.
Bug cause:
1 - In >= v.17 (not in v.19), there was a warning, when the contract dates do not fully contains the payslip dates, the warning was appearing.
2 - In v.19 it is not the case, when there is a contract that overlaps at least one dat of the payslip then we are fine, if no overlap then no contract on payslip warning should appear
Bug solution:
1 - I replaced old warning "The period selected does not match the contract validity period" with the one in v.19 "No running contract over payslip period"
Tests:
1 - There was a unit test about old warning (test_payslip_warnings), I changed that parts.
2 - I added further steps to the existing test about the new warning that should appear (No running contract over payslip period)
Last Test Update:
1 - I noticed that contract date changes was not affecting the warning appearance directly
2 - Unit test is expanded with contract date change and observing the warning appearance
Note: Implemented feature: need to check what happens after v.17, should be removed in v.19 latest, maybe before as well.
task - 6006693This update resolves an issue where simultaneous POS operations (across multiple devices) caused order synchronization problems. Previously, changes made in one POS wouldn't consistently reflect in other POS instances. The fix ensures that orders are correctly updated across all connected POS devices, improving data accuracy and operational efficiency.
Original PR description
Step to reproduce: - have two pos, both trust each other, pos A and B - open pos A , create a order and save it - go to backend , open pos B - process the order, go to backend - open pos A (notice,…
Step to reproduce: - have two pos, both trust each other, pos A and B - open pos A , create a order and save it - go to backend , open pos B - process the order, go to backend - open pos A (notice, last save order is still loaded) - removed older lines, and add new ones and save this again - go to backend and open pos B - notice that order is not loaded in other pos Cause: - Draft orders are stored in local storage. - When shared with another POS, `pos.order` is created via `create_from_ui` and receives a `server_id`. - If that order is later processed from another POS, the backend state changes. - When the original POS is reopened, the local data still treats the order as draft. - Saving the order again does not create a new order because it already has a `server_id`. - This causes inconsistency with the backend and prevents the order from appearing in other POS sessions. Fix: - Before loading orders from JSON, verify that orders with `server_id` are still in `draft` state on the server. - Discard orders whose backend state is no longer `draft`. opw-5946355 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr