Daily updates from Odoo
Friday, February 6, 2026
200 changes
43 changes
Resolved issues and error corrections
This update resolves an issue where dynamic product snippets would cause horizontal scrolling when the content width was set to 'max'. The fix repositions the navigation buttons to ensure they remain within the visible area, improving the user experience on larger devices.
Original PR description
Steps to reproduce: 1. Drag and drop the dynamic products snippet. 2. Select it and change the content width to **max**. Issue: When the content width is set to **max**, an unnecessary horizontal scroll appears. Reason: The issue occurs because the `previous` and `next` navigation buttons were not properly positioned. Fix: For devices larger than "mobile", the `previous` and `next` buttons are re-positioned, horizontally inward by "**50%**" of their own width with the help of `transform` property. This keeps the controls within the visible area and prevents horizontal scrolling. task-5090468 Before: <img width="1915" height="966" alt="image" src="https://github.com/user-attachments/assets/0c20d0b6-32cc-477b-8403-55bb0d372d8d" /> After: <img width="1920" height="963" alt="image" src="https://github.com/user-attachments/assets/4194b0f1-f3ad-4818-aa6f-2fda4561d2c7" /> Forward-Port-Of: odoo/odoo#237876
This update resolves an issue where processing refunds for returned POS orders with shipped original orders would cause an error. The fix ensures that picking values are generated correctly, regardless of whether the original order was shipped, allowing for seamless refund processing. This improves the reliability of the POS refund functionality.
Original PR description
Currently, an error occurs when processing the payment of a return POS order whose original order has already been shipped. **Steps to Reproduce:** 1. Install the stock and pos modules with demo…
Currently, an error occurs when processing the payment of a return POS order whose original order has already been shipped. **Steps to Reproduce:** 1. Install the stock and pos modules with demo data. 2. In config, activate the "**Allow Ship Later**" for _Furniture Shop_. 3. Open register and create an order with a Ship Later date. 4. Inventory > Delivery Orders > Validate the picking generated for that order. 5. Open original POS order (form), click "**Return Products**". 6. Open the returned order, click "**Payment**" and make the payment. **Error:** `ValueError - Expected singleton: pos.order(2, 1)` **Cause:** At [1], `reference_ids.pos_order_ids` is a many2many relation, but the logic assumes it contains only a single order. As a result, accessing `order.session_id.id` or `order.id` raises a singleton error when multiple related orders are present. **Fix:** This commit ensures that picking values are generated using a single pos order reference by selecting the relevant one from the multiple pos orders. [1] - https://github.com/odoo/odoo/blob/569b2e27699a76f9bac210e61b47f8a5708c814b/addons/point_of_sale/models/stock_picking.py#L157-L160 sentry- 7071798497 Forward-Port-Of: odoo/odoo#238467
This update resolves a problem in Kiosk Mode where the 'Buy an RFID Device' link incorrectly directed users to a French Amazon site that didn't ship to the United States. The link has been corrected to use the US Amazon site and a compatible merchant, ensuring users can now successfully purchase the necessary device.
Original PR description
Steps to reproduce: ----------------------------------- 1. Install the Attendance module with demo data 2. Go to Kiosk Mode > click on the link to 'Buy an RFID Device' 3. On the opened Amazon page, change the delivery country to United States Observation: ----------------------------------- The Amazon product page becomes blank after switching the delivery country to the United States Issue: ----------------------------------- The link redirects to the French Amazon website (`amazon.fr`) with a merchant that does not ship RFID devices to the United States Solution: ----------------------------------- Update the link to use `amazon.com` instead of `amazon.fr`. Change the merchant ID to one with broader delivery availability, including the United States. opw-5479568 Forward-Port-Of: odoo/odoo#246041
This update optimizes how the system searches for a user's preferred project within timesheets. Previously, the search was performed unnecessarily every time a related record was accessed. This change ensures the preferred project is only identified when required, improving performance and reducing potential delays.
Original PR description
Before this commit, each time the default_get method is called for `account.analytic.line` model, the favorite project is computed even if we don't expect to search the default value for `project_id` field. This commit makes sure we will only compute the default project when it is really needed.
This update resolves an issue where the SE blackbox wasn't sending the correct POS ID. The fix ensures accurate data transmission, which is crucial for reliable reporting and integration with our cash management systems. This change improves the stability and accuracy of data sent to the SE blackbox.
Original PR description
When using a v1 CleanCash blackbox, the command being sent to the blackbox was mistakenly sending a POS ID of " ". It just so happened this worked correctly when testing with our blackbox because it had " " registered as a POS ID. The POS ID is now sent correctly. task-5077448 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves a bug where adding a second file to the Activity composer didn't work correctly. The fix ensures that subsequent file uploads are properly processed, preventing the selection from being lost and allowing users to add multiple attachments. This improves the usability of the Activity composer.
Original PR description
…omposer Problem: In the "Activity" tab of the composer, adding a second file does not work. The first file is added correctly, but subsequent uploads are ignored. Cause: The selection is lost during…
…omposer Problem: In the "Activity" tab of the composer, adding a second file does not work. The first file is added correctly, but subsequent uploads are ignored. Cause: The selection is lost during file selection because the component is re-rendered, which recreates the DOM nodes. This re-render only happens in `HtmlMailField` because it processes the value through `convert_inline`. Even when `lastValue` and `value` are logically the same in `useRecordObserver`, they differ in markup: - `lastValue` contains self-closing `v:image` and `v:fill` tags. - `value` contains open/closing versions of those tags because they are not excluded from the self-closing to open/closing conversion. This mismatch triggers a re-render, causing the selection to be lost and preventing the second file from being inserted. Solution: Exclude `v:image` and `v:fill` from the self-closing to open/closing tag conversion so that `lastValue` and `value` remain equivalent. This prevents the unnecessary re-render and preserves the selection. Steps to reproduce: - Click on "Activity" in the chatter to open the dialog. - Click in the "Log a note..." field. - Use the upload button to add a file. - Press Enter. - Use the upload button again to add another file. - Observe that the second file is not added. task-5490722 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#245721
This update fixes an issue where loyalty programs were incorrectly displaying currency information in shops that don't support multiple currencies. The fix prevents loading programs with incompatible currencies, ensuring accurate pricing and a better user experience. This resolves a potential confusion point for customers.
Original PR description
Currently, the pos does not support multi-currencies. However, nothing was making sure the programs loaded in a shop were compatible in terms of currencies. Steps to reproduce: ------------------- * Create a coupon loyalty program, coupons * Change currency to euro * Create coupons * Copy obe of the code * Open USD Shop * Apply coupon, cancel order, apply coupon again > The popup does not show the correct currency Why the fix: ------------ As the pos is not ready for multi-currency we should not even load programs with different currencies. opw-5220834 Forward-Port-Of: odoo/odoo#238491
This update fixes an issue where invoices created in one company could incorrectly use accounts from a different company. The change adds a validation check to ensure that invoice line accounts always belong to the invoice's company, preventing accounting inconsistencies and improving data accuracy.
Original PR description
### Issue: When an invoice is created for a company and then its company and journal are changed to another company valid combination, the accounts on the invoice lines are not updated automatically This leads to inconsistencies where move lines use accounts that do not belong to the move’s company ### Cause: A validation check ensuring that move line accounts belong to `move.company_id` or parents was missing in `_post()` for account moves ### Steps to reproduce: - Create Company A and Company B - Create an invoice on Company A with one line having an account in Company A - Change the invoice company to Company B and set a journal belonging to Company B - Save and confirm the invoice opw-5167958 Forward-Port-Of: odoo/odoo#243243
This update resolves an issue where the 'Create Page' button wasn't appearing when adding a new menu item. The change ensures that the system checks the menu URL again after edits, synchronizing the page existence status and providing the correct suggestion. This improves the user experience when building the website.
Original PR description
Since commit 45e15673a70cf770d8e343a0a3b805eccdbed0d1, the information about whether a page of a menu exists is fetched asynchronously. Thus, when the dialog to change the url is closed to save the change, the value whether the page exists may not be in sync with the url. This commit checks the url again after the edit dialog is closed to correctly suggest to create a page. Steps to reproduce: - Open website builder - Click on the header - Click on "Edit Menu" - Click "Add new menu" - Type a title for which there is no existing corresponding page and _quickly_ click "Continue" - Bug: The button to suggest to create a page does not appears task-5474734 Forward-Port-Of: odoo/odoo#242583
This update enhances the orderpoint wizard in the stock module, making it easier for users to manage replenishment quantities. Specifically, the wizard now allows users to save desired minimum and maximum quantities, and displays deadlines in red if they've passed. This improves usability and ensures accurate orderpoint tracking.
Original PR description
- if deadline_date is in the past, display it in red - allow the user to save a new min and/or max qty when closing the wizard - make sure the table rows stay in order when saving task 5410931 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#240096
This update resolves an issue preventing sales users from creating orders with products having custom value attributes. The fix adjusts security permissions to ensure sale users retain access needed to populate these attributes, addressing a previous restriction that limited functionality. This ensures all users can properly create and manage sale orders.
Original PR description
### Issue: Due to this issue, sale group cannot create a sale order with a product with custom value attribute. #### Steps to reproduce: 1- Create a product using admin with a custom value attribute. 2- Using demo user with sale access group, create a so. 3- Add the created product, and fill the custom value. The sale order cannot be saved due to access error. ### Cause: This is due to #197286. However that shouldn't have been applied to `product.attribute.custom` as that shouldn't be only accessed by people who can manage product like the rest of deleted accesses, but also it's needed by sale groups creating SOs. opw-5498719 Forward-Port-Of: odoo/odoo#247276
This update corrects a technical issue with the URL used to connect to the Polish Electronic Data Interchange (KSeF) system. The change ensures that Odoo can properly transmit and receive data required for Polish tax reporting, maintaining compliance. This fix is crucial for businesses using the Odoo accounting module in Poland.
Original PR description
The production URL for the Polish EDI (KSeF) was incorrect. This commit updates the endpoint to the current valid URL to ensure proper connectivity. Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#247424
This update fixes a problem where users couldn't select payment method journals if the company wasn't a parent or child of the current POS company. Now, the system prevents users from choosing these invalid journals, ensuring payment methods load correctly and preventing errors in the Point of Sale configuration.
Original PR description
Before this commit: =========== - Selecting a journal for a payment method belonging to a company that was neither a parent nor a child of the current company caused payment methods to fail loading for the POS session, resulting in no payment methods being available for the configuration. After this commit: =========== - Users are now prevented from selecting journals belonging to companies that are neither parent nor child of the current company. task-5158448 Forward-Port-Of: odoo/odoo#241519
This pull request updates the core spreadsheet component (o_spreadsheet) to the latest version, addressing several bugs and improving stability. The changes include fixes for crashes, incorrect calculations, and UI issues, ensuring a smoother user experience when working with spreadsheets within Odoo.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/67a692f068 [REL] 19.1.6 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/67a692f068 [REL] 19.1.6 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/8f34d5715d [FIX] dom_helpers: wait for document ready [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/ce4efeedb2 [FIX] Cell: do not rely on key presence in commands [Task: 5499921](https://www.odoo.com/odoo/2328/tasks/5499921) https://github.com/odoo/o-spreadsheet/commit/23bd59864c [FIX] regexextract : invalid regex throw error [Task: 5892417](https://www.odoo.com/odoo/2328/tasks/5892417) https://github.com/odoo/o-spreadsheet/commit/1f06628b29 [FIX] find_and_replace_store: crash after sheet deletion [Task: 5453311](https://www.odoo.com/odoo/2328/tasks/5453311) https://github.com/odoo/o-spreadsheet/commit/5cc8a0c065 [FIX] evaluation: do not overwrite current sheet [Task: 5868007](https://www.odoo.com/odoo/2328/tasks/5868007) https://github.com/odoo/o-spreadsheet/commit/fd532281cd [FIX] menu: can open empty menu popover [Task: 5863077](https://www.odoo.com/odoo/2328/tasks/5863077) https://github.com/odoo/o-spreadsheet/commit/379894f6bd [FIX] *: fix faulty css zoom detection [Task: 5453400](https://www.odoo.com/odoo/2328/tasks/5453400) https://github.com/odoo/o-spreadsheet/commit/bb484e3428 [FIX] XLSXImport: Fix crash on incomplete xlsx file with external reference [Task: 5499753](https://www.odoo.com/odoo/2328/tasks/5499753) 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 fixes an issue where vendor bill labels on payable lines were empty when a payment reference wasn't provided. Now, the payable line automatically displays the bill reference, and updating the payment reference correctly updates the label. This ensures more accurate and informative reporting on vendor payments.
Original PR description
Before PR: - On vendor bills and refunds, if the Payment Reference is empty, a placeholder saying `Use Bill Reference` is shown. But the Bill reference is still not written on the Payable line, making the label empty. - When Payment Reference is set, updating the Payment Reference does not update the payable line label. After PR: - The payable line label is now populated with the Bill Reference when the Payment Reference is empty. - Now, when Payment Reference is set, updating the Payment Reference updates the payable line label. - Modified the test cases which were failing due to an empty label. Related PR (Enterprise) : https://github.com/odoo/enterprise/pull/91535 Task : 4982864 Forward-Port-Of: odoo/odoo#247345 Forward-Port-Of: odoo/odoo#221491
This update fixes an error in the calculation of VAT payable or refundable on Welsh tax returns. The previous formula incorrectly subtracted input VAT from output VAT. The change updates the formula to accurately reflect the correct calculation – output VAT minus input VAT – ensuring accurate reporting for Welsh businesses.
Original PR description
**Steps to produce:** - Install the l10n_cy and accountant modules - Switch to `CY Company`. - Go to accounting > reports > Tax return. **Issue:** - The formula for VAT payable or refundable (difference between box 4 and 3) is incorrect. - box 3 refers to `Total output VAT` and box 4 refers to `Input VAT`. - Current formula: `cy_4.balance - cy_3.balance` **Fix:** - Formula for VAT payable or refundable should be output VAT - input VAT. - Update the formula to: `cy_3.balance - cy_4.balance` <img width="769" height="86" alt="image" src="https://github.com/user-attachments/assets/923a92f9-fc57-465a-9592-771730ee6870" /> opw-5751369 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#247309 Forward-Port-Of: odoo/odoo#246273
This update allows users to reset Vendor Bills issued by ANAF (the Romanian tax authority) to a draft state, even if they are currently in an ‘EDI’ processing status. This change is necessary due to a recent update consolidating the e-invoice functionality into the broader ‘l10n_ro_edi’ module. It ensures proper handling of e-invoices and simplifies the process for users.
Original PR description
Adjusting the visibility check for "Reset to draft" button to allow Vendor Bills received from ANAF to be reset even when they have a EDI state. Will require to be shifted to `l10n_ro_edi` in 18.0+ as the efactura module is merged into it. task-5892651 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#247266 Forward-Port-Of: odoo/odoo#246697
This update resolves a problem that occurred when renaming inherited custom fields in Odoo. To ensure correct operation, the system now removes the associated inherited fields from the database before renaming. This prevents data inconsistencies and ensures a smoother user experience.
Original PR description
When renaming a custom field that is inherited, first remove the generated inherited fields from the database. task-5172546 backport of #240603 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#247344
This update resolves an issue where search requests using 'limit=False' were incorrectly interpreted as applying a limit of zero, resulting in empty search results. The change ensures that 'limit=False' is treated as 'no limit', maintaining the expected behavior for users. This ensures search results are accurate and consistent.
Original PR description
Some callers use `limit=False` to mean "no limit" (e.g. from RPC, where `None` is not available). Since `bool` is a subclass of `int`, `False` was treated as `0` and ended up applying `LIMIT 0`, returning an empty result set. This PR updates `_search` to treat `limit=False` as "no limit" while preserving the valid semantics of `limit=0`. Note: `limit=True` is left unchanged for backward compatibility and continues to behave as `LIMIT 1`. Fixes #228555 merge=merge -- I confirm I have signed the CLA and read the PR guidelines at [www.odoo.com/submit-pr](http://www.odoo.com/submit-pr) Forward-Port-Of: odoo/odoo#247304
This update fixes an error in the Spanish VAT (EDI) invoice generation process. Previously, negative invoice amounts (like discounts) caused incorrect tax calculations. This change ensures accurate VAT and withholding tax calculations, even when negative amounts are used, improving invoice accuracy and compliance.
Original PR description
Issue: When using negative amounts, for example to explicitly show a discount, the tax calculation is incorrect due to the application of the `abs` function. Furthermore, the way to find out if a tax…
Issue:
When using negative amounts, for example to explicitly show a discount, the tax calculation is incorrect due to the application of the `abs` function. Furthermore, the way to find out if a tax is of the withholding type is based on the sign of the value, which can lead to error in these cases.
Cause:
A previous change (#237235) added the `abs` function so the `TotalTaxesWithheld` would be always with positive value. But this also affects the calculation of taxes `TotalTaxOutputs` in some cases, such as if the invoice line has negative values.
Steps to reproduce:
- Install `l10n_es_edi_facturae`
- With the ES company, create an invoice with some standard lines and one line with negative amounts, as an explicit discount
- Confirm the invoice and send (facturae)
- Open the XML attached in the chatter
- Observe that the taxes amounts (VAT and WITHHOLDING) are erroneous
A correct invoice should be for example:
```
Product Price Taxes Amount
---------------------------------------------
PRODUCT-A 1000 21%VAT 15%WHI 1000
Discount -100 21%VAT 15%WHI -100
---------------------------------------------
Untaxed amount 900
Withholding 15% -135
VAT 21% 189
-----------------------
TOTAL 954
```
This PR replaces #240808
---
I confirm I have signed the [CLA](https://github.com/odoo/odoo/pull/157955) and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#244428This update fixes an issue where task titles and descriptions generated from sales orders were incorrectly formatted. Now, task titles accurately reflect the sales order line description, and descriptions include all relevant details, regardless of whether the sales order line had a single or multi-line description. This ensures consistent and accurate task information.
Original PR description
Steps to reproduce: - - Create a sales order with a service product that generates a task. - Add a multi-line description to the sales order line. - Confirm the order to generate the task. - View the generated task’s title, description. Issue: - - Task titles were generated in the format sales order name + first line of the product description, and the description contained only the remaining lines. Fix: - - If the sales order line has a single-line description, it is used as the task title. - If the sales order line has a multi-line description or no description, the product name is used as the task title, and the sales order line description is used as the task’s description. Commits 588c3be420a542d8594b26ecc200ca68e35d15fc, c3877b2acd74f1f798d0046b168418300f9e27ca, and 18edce4d859935bd1425144e4c835acabc5f68f4 previously attempted to fix this issue. task-4903208 Forward-Port-Of: odoo/odoo#217035
This update resolves a bug where employees were not being fully removed from 'Basic' and 'Minimal' rights groups within the POS settings. The fix ensures that all employees are correctly removed when group memberships are updated, maintaining accurate user permissions. This prevents inconsistencies in employee access levels.
Original PR description
Steps to reproduce ------------------ 1. Enable "Log in with Employees" 2. Add employee "A" to the "Basic rights" group. 3. Add employee "B" to the "Minimal rights" group. 4. Make sure to remove all…
Steps to reproduce ------------------ 1. Enable "Log in with Employees" 2. Add employee "A" to the "Basic rights" group. 3. Add employee "B" to the "Minimal rights" group. 4. Make sure to remove all other employees from these 2 groups!! 5. Now save and go back to the main settings page, remove employee "A" from "Basic rights" group, such that this group is now empty. 6. Save the changes. Observation -> Employee "A" is still in the group "Basic rights"!! Why the issue ------------- When deleting records from an `x2many` field in pos, from the main settings page, we do not pass the associated `unlink` commands in the arguments of `web_save` when clicking "Save", we just pass an empty commands list `[]`, because the backend, specifically the method `_preprocess_x2many_vals_from_settings_view` will take care of unlinking all the records before applying the new commands. So passing an empty commands list when updating an `x2many` field will be equivalent to saying "Unlink all records for that field, then apply no commands", i.e. just unlink all records for that field. However, after https://github.com/odoo/odoo/commit/1f45b035354bb9040be3aba3a79392e603e870b4, we now filter out updates having an empty commands list, and thus now trying to unlink all records of a `x2many` does not work, since an empty command list will be dropped from the updates, before reaching `_preprocess_x2many_vals_from_settings_view`. The fix ------- We add stricter filtering logic, to keep valid command lists, even when they are empty. opw-5725879 Forward-Port-Of: odoo/odoo#245261
This update resolves a performance issue within the spreadsheet dashboard by ensuring the underlying model is correctly marked as 'raw.' This prevents unnecessary reactivity, significantly improving dashboard loading times. The change addresses a design flaw that made it difficult for developers to manage reactivity correctly.
Original PR description
Since we split o-spreadsheet in two: - core engine, independent from owl and DOM - UI The `Model` doesn't mark itself as raw for owl's reactivity. It must be done manually at every call site where it's needed. Here the entire `DashboardLoader` is made reactive, including its properties. We cannot let the model be reactive as it would hurt performance very badly. From a DX POV, the current situation is a bad design because the developer doesn't know the model needs to be marked as raw, and even if the developer knows it, it's very easy to overlook (as we did and this commit proves) It would be probably better with a private constructor and factory methods with clear names. Task-5916564 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 creating invoices for purchase orders with subcontracted tracked products previously caused errors. The change ensures proper handling of multiple finished product lines, addressing problems related to tracked products, backorder flows, and potential upgrade scripts. This ensures accurate invoicing for these transactions.
Original PR description
Before this commit, creating an invoice for a purchase order with a subcontracted tracked product triggered a singleton error. This commit fixes the issue by properly handling multiple finished move lines for the same product, which occurs with tracked products, some back order flows, and possibly upgrade scripts. OPW-5712931 Forward-Port-Of: odoo/odoo#245880
A bug in the custom color picker was causing the color slider to reset unexpectedly when selecting white. This fix prevents unnecessary UI updates, ensuring the color picker functions correctly and reliably for users. The change improves the overall user experience and prevents visual inconsistencies.
Original PR description
**Current behavior before PR:** In editor's custom gradient picker, if `#FFFFFF` is picked from the very top of picker area, the color slider is reset to color `red`. This happens because when moving picker pointer to the top of area, `selectedColor` prop is updated to `#FFFFFF`, which calls `onWillUpdateProps` callback. As result, `convertRgbToHsl` sets hue value 0 for `#FFFFFF`, setting color slider to red. **Desired behavior after PR is merged:** This commit ensures that in `onWillUpdateProps` callback, `setSelectedColor` should not get called if `newSelectedColor` is the same as `this.colorComponents.cssColor` to prevent updating UI twice while picking the color. task-5170041 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#246988 Forward-Port-Of: odoo/odoo#236644
This update fixes an issue where pasting content into the website editor, particularly within iframes, would unexpectedly remove elements. The change adjusts how the editor handles inline elements, preventing the removal of unremovable content during the pasting process. This ensures a more reliable and predictable experience for website builders.
Original PR description
*: website Before this commit: when a editable container is wrapped inside a non-contenteditable, which could happen inside an iframe, pasting on a selection including an unremovable element will remove the element. This is because the config parameter `allowInlineAtRoot` is false by default, the editable container of Contact us button is considered as the edition boundary, and then `wrapInlinesInBlocks` is called on it at insert, which removes invisible nodes in the wrapping process. After this commit: we now use predicates to decide areInlinesAllowedAtRoot We add a predicate specifically for the container of Contact Us button, to allow inline element in the root. The `wrapInlinesInBlocks` won't be called on the container on paste anymore. task-5109662 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#246987 Forward-Port-Of: odoo/odoo#241836
This update fixes an issue where POS order confirmation emails displayed order amounts without currency symbols or proper formatting. The change uses a standard Odoo formatting function to ensure emails consistently show amounts in the correct currency and locale for each user, improving clarity and professionalism.
Original PR description
**Problem:** POS self-order confirmation emails (delivery and takeout) display the order amount without the currency symbol and proper formatting. **Steps to reproduce:** 1. Create a POS self-order…
**Problem:** POS self-order confirmation emails (delivery and takeout) display the order amount without the currency symbol and proper formatting. **Steps to reproduce:** 1. Create a POS self-order with delivery or takeout 2. Preview or send the confirmation email 3. Observe the amount displays without currency symbol or formatting **Current behavior:** Email shows amount as a plain number (e.g., "2.0") without currency symbol or locale-specific formatting. **Expected behavior:** Email should display amount with currency symbol and proper formatting based on user's locale (e.g., "2,00€", "$2.00", etc.). **Cause of the issue:** The email templates used direct field output `t-out="object.amount_total"` which renders only the numeric value without any formatting. This bypasses Odoo's standard currency formatting that handles both the symbol and locale-specific decimal/thousand separators. **Fix:** Use the `format_amount()` helper function which properly formats monetary values with currency symbols and locale-appropriate separators. The function takes the amount and currency as parameters and returns the fully formatted string respecting the user's language settings. opw-5485801 Forward-Port-Of: odoo/odoo#244042
This update resolves an issue where the Point of Sale (POS) system would become unusable after archiving a journal associated with a payment method. The change prevents archiving a journal while it's linked to a POS payment method, ensuring smooth POS operation. This improves stability and prevents disruptions during sales transactions.
Original PR description
Currently, in pos, we only prevent archiving `account.journal` records when a payment in an active pos session is linked to that specific journal. This can lead to issues if a journal is archived while being linked to a `pos.payment.method`. In this commit we prevent that from happening, by only allowing the archival of `account.journal` records when they are not linked to `pos.payment.method`. Steps to reproduce: - in payment method configuration set the journal bank on your card payment method - Link this payment method to your POS - Archive the bank journal in the backend - Open POS - Make a sale - Close register - You're stuck because the POS cannot input the journal item into the archived journal Task 5896123 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#247015
This update resolves an issue where duplicating a warehouse with a Point of Sale (POS) operation type resulted in only one instance being created. The fix ensures that both the original and duplicated warehouses correctly inherit and duplicate the POS operation type, improving data consistency and functionality.
Original PR description
## Short functional explanation of the error When duplicating a warehouse, if it has an PoS operation type, this operation type will not be duplicated. On the other hand, all other operation types…
## Short functional explanation of the error When duplicating a warehouse, if it has an PoS operation type, this operation type will not be duplicated. On the other hand, all other operation types will be duplicated. ## Reproduction Steps 1. Make sure PoS and inventory are well installed. 2. Go to inventory. 3. Click on configuration, then warehouse. 4. Select a warehouse, click on action, then duplicate. 5. Click on configuration, then on Operation Types. ### Expected behavior We should be able to see 2 instances of PoS operation type: one for the original company, and one for the copy. ### Unexpected behavior There's only one instance of PoS operation type, which is related to the original company. ## Origin of the issue PoS operation type is a model inherited from stock.warehouse, and no copy method was defined. Therefore, upon duplication, the copy method of the original stock.warehouse was called, leading to issues with the field created in the inherited version. __ opw-4991271 Forward-Port-Of: odoo/odoo#227635 Forward-Port-Of: odoo/odoo#222694
This update corrects an issue where the Product Configurator dialog's border radius was unintentionally changing due to button styling. The fix ensures a consistent and professional look across all industries, resolving a visual inconsistency that impacted customer experience. This change improves the overall design and usability of the product configurator.
Original PR description
`Description of the issue this PR addresses:` The Product Configurator dialog border radius was unintentionally affected by button styling. The dialog inherited its border radius from the…
`Description of the issue this PR addresses:`
The Product Configurator dialog border radius was unintentionally affected by button styling. The dialog inherited its border radius from the $btn-border-radius variable, which is intended only for buttons and is customized in the design template.
`Current behavior before PR:`
- The Product Configurator dialog uses --modal-border-radius: #{$btn-border-radius};.
- $btn-border-radius is customized to make buttons fully rounded.
- Due to this linkage, the dialog border radius changes unintentionally.
- The issue is reproducible across multiple industries such as electronic_store, outdoor_activities, and team_sports_club.
`Desired behavior after PR is merged:`
- The Product Configurator dialog no longer depends on $btn-border-radius.
- Dialog border radius remains consistent and independent of button styling.
- Button border radius customization does not affect modal dialogs.
- Styling remains consistent across all affected industries.
Task ID: 5913300This update resolves issues preventing correct QR code generation on POS invoices, particularly when ZATCA invoice processing encounters problems. The fix ensures invoices and receipts display the appropriate QR code format, improving compliance and usability for users. It addresses both incorrect QR codes on reprinted invoices and the display of phase 2 QR codes when e-invoicing is disabled.
Original PR description
Ensure proper handling of QR code generation and POS EDI behavior by fixing multiple issues across invoice reprints and journal onboarding. QR codes now correctly appear on reprinted invoices when…
Ensure proper handling of QR code generation and POS EDI behavior by fixing multiple issues across invoice reprints and journal onboarding. QR codes now correctly appear on reprinted invoices when journal problems occur during order confirmation. POS correctly falls back to the Phase 1 flow when the journal is not onboarded and electronic invoicing is not enabled. Additionally, POS receipts now display the proper Phase 1 QR code whenever the EDI module is installed. Problem 1: If ZATCA does not properly receive the invoice generated from a POS order (wrong onboarding, wrong details on company, etc.) the invoice printed from POS will not contain the QR code, even after successfully resubmitting the invoice to ZATCA, load the order and reprint the invoice to see this Testing the fix: Change the VAT number on the company to be faulty, create a POS order, Fix the VAT number and resubmit the invoice, load the POS order and reprint invoice, it will now show the QR code. Problem 2: When disabling the E-invoicing for a phase 2 journal, the POS receipt will still try to print the phase 2 QR code but the system will flag it as 'not legal' leaving the POS receipt empty, when it should instead print the phase 1 QR code Testing the fix: On the journal, disable the E-invoicing, and create a POS order, it will now show the phase 1 QR code on the receipt task-5032474 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#246932 Forward-Port-Of: odoo/odoo#234945
This update fixes a visual issue in the Expenses app where the layout would become distorted when there were no expenses to process. The fix ensures a consistent and stable workspace for the 'Upload or Drop Your Receipt' helper, preventing misalignment and overlapping elements. This improves the overall user experience.
Original PR description
Steps to reproduce: 1. Open the Expenses app and navigate to 'Expenses to Process'. 2. Ensure no expenses are present so that the 'Upload or Drop Your Receipt' helper appears. 3. Remove filters. 4.…
Steps to reproduce: 1. Open the Expenses app and navigate to 'Expenses to Process'. 2. Ensure no expenses are present so that the 'Upload or Drop Your Receipt' helper appears. 3. Remove filters. 4. The layout becomes 'disturbed'—the upload overlay misaligns and overlaps the dashboard. Issue: The issue occurred because the SCSS selector was incorrectly targeting the combination of .hr_expense and .o_list_view. In the Odoo DOM structure, the hr_expense class is added to the Renderer via XML, while o_list_view is assigned to the main Controller. Because the selector never matched an actual element, the min-height: 100% rule remained inactive. Without a stable minimum height, the Renderer container collapses when empty. This prevents the 'Pink Overlay' from having a stable anchor point, leading to layout shifts and visual interference with the Search Panel and Dashboard headers. Solution: Update the SCSS selector to target &.o_list_renderer and &.o_kanban_renderer. This ensures the rule correctly matches the element carrying the hr_expense class. By forcing a min-height: 100% !important on the renderer itself, the container remains stable regardless of the data count. This provides a consistent workspace for the 'No Content' helper to render without disrupting the surrounding flexbox layout. opw-5452618 Forward-Port-Of: odoo/odoo#247366
This update corrects a technical issue where some track visitors were missing essential information, causing errors when users accessed event tracks. The fix adds checks to ensure valid visitor IDs are used, preventing these errors and improving the stability of the event tracking feature. This ensures a smoother experience for users browsing event tracks.
Original PR description
[1] added asserts preventing the use of falsy ids when browsing. To compute "wishlist_visitor_ids" we did not take into account that some "track visitors" don't have a visitor set. Leading to a traceback when opening some tracks. [1]: 4290724a4c8c57fba4f4d3d688d38f65dadcc38f task-5911184
This update fixes a recent issue where creating new projects from templates was blocked when project stages were enabled in the kanban view. The change ensures users can now seamlessly create projects from templates, regardless of whether project stages are active, improving workflow efficiency.
Original PR description
In a previous commit, the feature allowing to create a new project from project templates was mistakenly removed in kanban view, when project stages were enabled. This commit resolves the issue, so to still be able to create a project from templates with project stages enabled. task-5877215
This update enhances the Glory cash machine integration within the POS system, streamlining the user interface and fixing several technical issues. Key improvements include clearer cash display, reduced UI clutter, and optimized communication with the Glory machine for better performance.
Original PR description
- Cash machine UI in the POS has been cleaned up - Reset button and Download logs button have been moved to the backend. - Warnings about low cash now take up less space. - The cash inserted amount…
- Cash machine UI in the POS has been cleaned up
- Reset button and Download logs button have been moved to the
backend.
- Warnings about low cash now take up less space.
- The cash inserted amount is now shown inside the payment line status
box.
- Shortcut to the Glory admin page has been added to the payment method
form.
- Error detail text is now shown when provided by the cash machine.
- Bugfixes
- There should no longer be multiple disconnected popups appear if the
tab is left inactive for a while.
- The session/occupy settings of the connected Glory machine are now
respected, this reduces the number of requests sent when they are
not enabled.
- Some tests have been added for the Glory service.
In order to add Glory functionality in the backend, the Glory service was split into two components. The `glory_service.js` file handles all the communication with the Glory machine, but it doesn't handle the POS integration at all. The POS side is now handled by `payment_glory.js`. This means that in the backend we can still use `glory_service.js` to interact with the machine without being in the POS.
task-5891688
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#246986This update resolves a discrepancy in how the 'Line Extension Amount' is calculated within the account_edi_ubl_cii module. The change ensures accurate untaxed and total amounts in invoices, addressing a potential inconsistency related to global tax rounding. This improves invoice accuracy and compliance.
Original PR description
…-10] According to [BR-CO-10], LineExtensionAmount should be: <quantity> * <price_unit_wo_tax> + charges - allowances It was implemented as: <quantity> * <price_unit_wo_tax> + charges - allowances + <delta_total_excluded> <delta_total_excluded> is needed because it's the additional delta distributed by the global rounding of taxes accross the lines. If you don't add it, you will change the untaxed and total amount of your document. Instead, this commit adds 2 new values in the base_lines's tax_details: gross_total_excluded & discount_amount being the rounded versions of raw_gross_total_excluded & raw_discount but taking care of maintaining a global consistency regarding the global rounding. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#247423 Forward-Port-Of: odoo/odoo#246382
This update fixes a visual problem where call cards overlapped when a video stream was active in a chat window. The change ensures that call cards now maintain a standard 16:9 aspect ratio when a video is present, improving the user experience during video calls. This resolves a previous display issue.
Original PR description
Before this commit, when in a call in a chat window and someone in call stream video, the cards were overlapping. This happens because [1] removed the `w-100` on `<video>` which let them have bigger width than imposed by `arrangeTiles`. This change was motivated because the card has aspect ratio of 1 in chat window and this was too small. However the correct fix was to impose the 16:9 ratio on cards when there's at least 1 video stream, which is what this commit does. Task-5917628 [1]: https://github.com/odoo/odoo/pull/241924 Before / After <img width="387" height="607" alt="Screenshot 2026-02-06 at 16 58 51" src="https://github.com/user-attachments/assets/39569572-4eea-4d58-a383-27f9c69e4bb5" /> <img width="386" height="600" alt="Screenshot 2026-02-06 at 16 58 29" src="https://github.com/user-attachments/assets/f9b60e9a-6980-4708-b475-14f9d5a77a36" />
This update fixes a technical issue that prevented the live chat composer from correctly displaying its open state. The change updates a selector used in testing, ensuring the live chat functionality works as expected for users. This resolves a reported error and improves the overall user experience.
Original PR description
Purpose of this commit, To update the selector for asserting the presence of the livechat chat window in open state. runbot error - https://runbot.odoo.com/odoo/error/232912
This update fixes a minor issue where the channel name wasn't displayed in invitation dialogs when inviting members to Discuss channels. Now, the channel name is correctly shown, improving the clarity and usability of the invitation process. This ensures users have the necessary context when extending discussions.
Original PR description
Before this PR, when a user opened any Discuss channel and invited people from the member list, the channel name was missing in the invitation dialog. This commit fixes the issue by correctly displaying the thread name in the invitation dialog. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where delivery valuations weren't accurately reflecting the existing stock levels (FIFO method) during order fulfillment. The change ensures that the quantity already delivered is properly accounted for, leading to more precise cost of goods calculations. This improves the accuracy of financial reporting.
Original PR description
Steps to reproduce: - Have a product valued in fifo - Create 3 PO for it, each for 1 qty of price 10, 20 and 30. - Confirm these PO & validate their receipts - Create 2 SO for this product, each for 1 qty - Confirm these SO & validate their deliveries together Issue: The value associated to the delivery moves (and so the cogs generated from them) is 10 for both. When calling `_action_done()` on the moves, we'll set the value of each move before moving them. To get the correct value from the fifo stack, we rely on the `qty_available` at the time. However, since we're going to set the value of multiple moves before validating them, the `qty_available` won't be updated between each call. opw-5359484 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238680
This update resolves an issue where tests within the Sale Stock module were previously disabled. The team has re-enabled these tests, ensuring the continued stability and reliability of the Sale Stock functionality. This change improves the quality and trustworthiness of the Odoo system.
Original PR description
Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#246522
This update resolves an issue where incorrect data related to vendor refunds was being imported through the account_edi_ubl_cii module. The fix prevents this import, ensuring accurate financial reporting and compliance. This change improves data integrity and avoids potential errors in accounting processes.
Original PR description
opw-5870516 opw-5898302 opw-5917394 opw-5892671 Forward-Port-Of: odoo/odoo#247619
This update resolves a problem where time off requests weren't being correctly processed, specifically when reporting to the next month. The issue stemmed from a rounding error that created a tiny, incorrect work entry. This fix ensures accurate time off calculations and reporting, preventing potential payroll discrepancies.
Original PR description
STEP TO REPRODUCE: ------------------ 1- Set to an employee a schedule of 7h36 hours per day 2- Create a payslip for him on february and pay it 3- Create a time off from 28th debruary to 4th of march 4- Approve it and click on the button "Report to Next Month" You will have an issue but you should be able to do it REASON: ------- A rounding issue caused the creation of work entry of 1*10^-15 hours
16 changes
Resolved issues and error corrections
This update adds support for commodity codes (Intrastat, UNSPSC, and CPV) within the account_edi_ubl_cii module. This enhancement ensures accurate reporting and compliance with international trade regulations, particularly for export and import transactions. The change addresses a technical requirement to properly classify goods for reporting purposes.
Original PR description
task-5890887 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#247025
This update fixes a visual issue in the Expenses app where the layout would become distorted when no expenses were present. The fix ensures a consistent and stable appearance of the 'Upload or Drop Your Receipt' helper, preventing misalignment and overlapping elements. This improves the user experience for all users.
Original PR description
Steps to reproduce: 1. Open the Expenses app and navigate to 'Expenses to Process'. 2. Ensure no expenses are present so that the 'Upload or Drop Your Receipt' helper appears. 3. Remove filters. 4.…
Steps to reproduce: 1. Open the Expenses app and navigate to 'Expenses to Process'. 2. Ensure no expenses are present so that the 'Upload or Drop Your Receipt' helper appears. 3. Remove filters. 4. The layout becomes 'disturbed'—the upload overlay misaligns and overlaps the dashboard. Issue: The issue occurred because the SCSS selector was incorrectly targeting the combination of .hr_expense and .o_list_view. In the Odoo DOM structure, the hr_expense class is added to the Renderer via XML, while o_list_view is assigned to the main Controller. Because the selector never matched an actual element, the min-height: 100% rule remained inactive. Without a stable minimum height, the Renderer container collapses when empty. This prevents the 'Pink Overlay' from having a stable anchor point, leading to layout shifts and visual interference with the Search Panel and Dashboard headers. Solution: Update the SCSS selector to target &.o_list_renderer and &.o_kanban_renderer. This ensures the rule correctly matches the element carrying the hr_expense class. By forcing a min-height: 100% !important on the renderer itself, the container remains stable regardless of the data count. This provides a consistent workspace for the 'No Content' helper to render without disrupting the surrounding flexbox layout. opw-5452618
This update fixes an issue where invoices created in one company could incorrectly use accounts from a different company. The change adds a validation check to ensure invoice line accounts always belong to the invoice's company, preventing accounting inconsistencies and ensuring accurate financial reporting.
Original PR description
### Issue: When an invoice is created for a company and then its company and journal are changed to another company valid combination, the accounts on the invoice lines are not updated automatically This leads to inconsistencies where move lines use accounts that do not belong to the move’s company ### Cause: A validation check ensuring that move line accounts belong to `move.company_id` or parents was missing in `_post()` for account moves ### Steps to reproduce: - Create Company A and Company B - Create an invoice on Company A with one line having an account in Company A - Change the invoice company to Company B and set a journal belonging to Company B - Save and confirm the invoice opw-5167958 Forward-Port-Of: odoo/odoo#243243
This update resolves an issue where portal users couldn't properly close recurrent tasks. The fix utilizes a temporary bypass of access restrictions during task creation to ensure the state change is applied correctly. This improvement allows portal users to manage their recurring tasks effectively.
Original PR description
to reproduce: ============= - create a project with recurrent task and share it with a portal user - log in with the portal user and open the recurrent task - change the state to 'Done' and save -> the state is not changed to 'Done' and the task is not closed problem: ======== the method responsible for creating the next occurrence of a recurrent task executes some operations that portal users are not allowed to do, causing the whole operation to fail and preventing the task from being updated. solution: ========= use sudo() to bypass access rights checks when creating the next occurrence of the recurrent task. This is safe because the operations being performed do not involve any sensitive data or actions that could compromise security. opw-5442919 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves a bug where formatting the signature field in user preferences could cause issues with message sending, specifically related to the 'Full Composer' feature. The fix adds a specific data attribute to ensure consistent handling of quotes and formatting within signatures.
Original PR description
**Steps to reproduce:** - Go to the current user preferences - Go to its signature field - The current state should be something like: ``` -- Mitchell Admin ``` - Apply bold formatting on the text -…
**Steps to reproduce:** - Go to the current user preferences - Go to its signature field - The current state should be something like: ``` -- Mitchell Admin ``` - Apply bold formatting on the text - Save the changes - Refresh - Remove the bold formatting - Press enter between the two lines (at the end of `--`) - Save the changes - Go to the Contact app - Select any record - Go to its chatter - Click on `Send Message` and then the `Full Composer` expand button - Send the mail - In the chatter multiple `Read More` are added for the same signature (I think it can appears in multiple operations, this is just an example related to the `<strong>` element becoming `<span>` on removal) **Issue:** Playing with the html editor on the signature field can break the `tag_quote` flow due to the added elements. **Fix:** Explicitly add `"data-o-mail-quote"` to the signature container which is added when opening the `fullComposer`. It could also be an issue related to the html_editor but this seems cleaner to fix it here. This issue was fixed in 19.0 in a similar way by adding a common div around the signature and adding the same attribute. related: https://github.com/odoo/odoo/commit/6eb55c42158b08652c4c533bf56b5333c162bd3a opw-5149505 Forward-Port-Of: odoo/odoo#246982 Forward-Port-Of: odoo/odoo#231954
This update corrects a broken link used by Odoo to connect with Poland's KSeF (tax reporting) system. The previous URL was outdated, preventing proper data transmission. This change ensures Odoo can now correctly process and submit tax information required by Polish regulations.
Original PR description
The production URL for the Polish EDI (KSeF) was incorrect. This commit updates the endpoint to the current valid URL to ensure proper connectivity. Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#247424
This update resolves an issue where modifying the quantity of a subcontracting receipt after a BOM change could lead to incorrect quantities displayed on the move line. The fix ensures accurate stock tracking by correctly updating move line quantities when a BOM is modified, preventing inconsistencies between the move and move line.
Original PR description
**Issue** In subcontracting, if a BOM is modified after the creation of a PO, then modifying the move quantity of the associated receipt can lead to inconsistency between move and move line…
**Issue** In subcontracting, if a BOM is modified after the creation of a PO, then modifying the move quantity of the associated receipt can lead to inconsistency between move and move line quantities. **Steps to reproduce** - Create a subcontracting BOM of a final product using 1 component product - Create a PO of the final product for a quantity of 10 and confirm it - Modify the BOM to use 2 component products instead - Go to the receipt of the PO and modify the quantity to 2 and validate it - Click on the move line of the receipt -> The displayed quantity is 10 instead of 2 **Cause** Setting the quantity triggers this line: https://github.com/odoo/odoo/blob/c496235b9520b2a33040174974de7d37e74b0580/addons/mrp_subcontracting/models/stock_move.py#L78-L78 which calls: https://github.com/odoo/odoo/blob/c496235b9520b2a33040174974de7d37e74b0580/addons/mrp_subcontracting/models/stock_move.py#L107 Since the BOM has been modified, a `consumption_issues` is detected and `_update_finished_move()` won't be called: https://github.com/odoo/odoo/blob/c496235b9520b2a33040174974de7d37e74b0580/addons/mrp_subcontracting/models/mrp_production.py#L86-L89 And since the returned action is not used when calling `subcontracting_record_component`, `_update_finished_move()` won't be called later neither, which is the method responsible for updating the move line quantities: https://github.com/odoo/odoo/blob/c496235b9520b2a33040174974de7d37e74b0580/addons/mrp_subcontracting/models/mrp_production.py#L142-L146 **Solution** Since the consumption issue actions are ignored in this case, just skipped it and avoid inconsistencies. opw-5493577 Forward-Port-Of: odoo/odoo#246433 Forward-Port-Of: odoo/odoo#245065
This update fixes an error in the calculation of VAT payable or refundable when generating Welsh tax returns. The previous formula incorrectly subtracted input VAT, leading to inaccurate reporting. The change updates the formula to accurately reflect the difference between total output and input VAT, ensuring compliance with Welsh tax regulations.
Original PR description
**Steps to produce:** - Install the l10n_cy and accountant modules - Switch to `CY Company`. - Go to accounting > reports > Tax return. **Issue:** - The formula for VAT payable or refundable (difference between box 4 and 3) is incorrect. - box 3 refers to `Total output VAT` and box 4 refers to `Input VAT`. - Current formula: `cy_4.balance - cy_3.balance` **Fix:** - Formula for VAT payable or refundable should be output VAT - input VAT. - Update the formula to: `cy_3.balance - cy_4.balance` <img width="769" height="86" alt="image" src="https://github.com/user-attachments/assets/923a92f9-fc57-465a-9592-771730ee6870" /> opw-5751369 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#247309 Forward-Port-Of: odoo/odoo#246273
This update addresses several critical bugs within the Odoo spreadsheet component. It includes fixes for crashes related to sheet deletion and incomplete Excel files, ensuring improved stability and functionality for users working with spreadsheets. Multiple developers collaborated on this release.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/a906c68b8e [REL] 18.3.35 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/a906c68b8e [REL] 18.3.35 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/7d959d419d [FIX] find_and_replace_store: crash after sheet deletion [Task: 5453311](https://www.odoo.com/odoo/2328/tasks/5453311) https://github.com/odoo/o-spreadsheet/commit/addf98c28c [FIX] Cell: do not rely on key presence in commands [Task: 5499921](https://www.odoo.com/odoo/2328/tasks/5499921) https://github.com/odoo/o-spreadsheet/commit/17e5af05f7 [FIX] tests: fix network serialization in mock [Task: 5499921](https://www.odoo.com/odoo/2328/tasks/5499921) https://github.com/odoo/o-spreadsheet/commit/630faa62a2 [FIX] evaluation: do not overwrite current sheet [Task: 5868007](https://www.odoo.com/odoo/2328/tasks/5868007) https://github.com/odoo/o-spreadsheet/commit/e5af7c65d3 [FIX] XLSXImport: Fix crash on incomplete xlsx file with external reference [Task: 5499753](https://www.odoo.com/odoo/2328/tasks/5499753) 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 resolves an issue where non-manager users were receiving an error message when opening validated time off records. The fix prevents unnecessary updates to a field that wasn't required, ensuring a smoother experience for all users. This improves the usability of the time off management feature for Indian companies.
Original PR description
Steps to reproduce: ------------------- 1. Install `l10n_in` and `l10n_in_hr_holidays` 2. Switch to an Indian company 3. Create a user and related employee without Time Off rights 4. Log in with the…
Steps to reproduce: ------------------- 1. Install `l10n_in` and `l10n_in_hr_holidays` 2. Switch to an Indian company 3. Create a user and related employee without Time Off rights 4. Log in with the new user and create a past time off 5. Approve the time off as an time off manager/admin 6. Open the validated time off record as the employee Issue: ------ Opening a validated time off raises the following UserError: ```python You must have manager rights to modify/validate a time off that already begun. ``` Cause: ------ The `_get_durations` method in `l10n_in_hr_holidays` was updating the `l10n_in_contains_sandwich_leaves` field every time it was executed. When a user opened a validated time off record, this triggered a `write()` operation. Since non-manager users are not allowed to write on already started validated leaves, this caused a [UserError](https://github.com/odoo/odoo/blob/047d5b61a5f3fc5c41f5bc3975938a53b5da49a7/addons/hr_holidays/models/hr_leave.py#L793-L798) The field `l10n_in_contains_sandwich_leaves` does not need to be updated when `l10n_in_is_sandwich_leave` is False. See [[1]](https://github.com/odoo/odoo/blob/047d5b61a5f3fc5c41f5bc3975938a53b5da49a7/addons/l10n_in_hr_holidays/models/hr_leave.py#L156-L157) & [[2]](https://github.com/odoo/odoo/blob/047d5b61a5f3fc5c41f5bc3975938a53b5da49a7/addons/l10n_in_hr_holidays/models/hr_leave.py#L62) And this [part of the code](https://github.com/odoo/odoo/blob/047d5b61a5f3fc5c41f5bc3975938a53b5da49a7/addons/l10n_in_hr_holidays/models/hr_leave.py#L160-L173) is responsible to update `l10n_in_contains_sandwich_leaves` value. **NOTE:** Opening future validated time off records as a non-manager user triggers `AccessError` as it is not allowed to update the validated time off record. Solution: --------- Ensure that `l10n_in_contains_sandwich_leaves` is updated only when `indian_leaves` is applicable. opw-5373055 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#240056
This update corrects how task titles and descriptions are generated from sales orders. Previously, task titles were inconsistent. Now, the task title uses the product name or sales order line description, ensuring accurate and informative task details are created when a service product generates a task.
Original PR description
Steps to reproduce: - - Create a sales order with a service product that generates a task. - Add a multi-line description to the sales order line. - Confirm the order to generate the task. - View the generated task’s title, description. Issue: - - Task titles were generated in the format sales order name + first line of the product description, and the description contained only the remaining lines. Fix: - - If the sales order line has a single-line description, it is used as the task title. - If the sales order line has a multi-line description or no description, the product name is used as the task title, and the sales order line description is used as the task’s description. Commits 588c3be420a542d8594b26ecc200ca68e35d15fc, c3877b2acd74f1f798d0046b168418300f9e27ca, and 18edce4d859935bd1425144e4c835acabc5f68f4 previously attempted to fix this issue. task-4903208 Forward-Port-Of: odoo/odoo#217035
This update resolves an issue where the 'Contact Us' button on product pages wasn't correctly redirecting to snippets, specifically when using anchors. The fix ensures that the button functions as intended, directing users to the desired snippet after they click, even with zero-priced products. This improves the user experience for contacting the business.
Original PR description
Issue: ------- When a zero price product is created and the contact us button on the product page is intended to redirect to some snippets created through drag and drop then the button doesn't work…
Issue: ------- When a zero price product is created and the contact us button on the product page is intended to redirect to some snippets created through drag and drop then the button doesn't work as intended meaning it doesn't redirects to the desired snippet even after putting the correct anchor. for ex: `#snippet-anchor` in the `Button URL` field in the settings. Cause: -------- This works fine for the pages having '/contactus' or '/'. Issues raise only when we try to redirect to a snippet. Now, if the we try to redirect to any snippet on click of the button(Contact Us) by placing the corresponding anchor, it will not redirect/work as intended. This is because of the appending`?subject=product_name` that took place. Solution: ------------ To concatenate the `subject=product_name` conditionally if the url has '#' in it If yes, we just use the `url` in the URL so that it redirects as intended else concatenate the subject & so on. This is because for redirecting to snippets we use anchors such as '#Let's-Connect'. So, In an anchor the '#' will definitely reside. Steps to reproduce: ----------------------- 1. Create a db in version 18.3 with website_sale installed. 2. Enable the `Prevent Sale of Zero Priced Product` checkbox in the settings. 3. Create a zero price product and few snippets under it and copy the anchor of one of the snippets to redirect when clicked on the 'Contact Us' button. 4. Use the Anchor(for ex: '#Let's-Connect') in the 'Button URL' field of settings. 5. Navigate to the created product and click on the 'Contact Us' button. Nothing happens & no intended redirection to the desired snippet. Ref PR: ---------- https://github.com/odoo/odoo/pull/189049/changes#diff-39e02d03a8b765b4e3afc68627aeb33f11b587163638fedfb92ed5657c3336e7R398-R399 Attachments: ----------------- **Before Fix:** [vokoscreenNG-2026-02-06_17-36-37.webm](https://github.com/user-attachments/assets/a09101d4-13df-415d-a902-420a28aedef0) **After Fix**: [vokoscreenNG-2026-02-06_17-38-37.webm](https://github.com/user-attachments/assets/a6256d0f-d8cb-4146-b95e-33452a0a79c5) - OPW - [5494517](https://www.odoo.com/odoo/project/70/tasks/5494517) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where Safari browsers, particularly when used in collaboration mode, would display incorrect HTML editor content. The fix ensures the HTML editor accurately reflects changes made in Chrome, preventing display errors and improving the user experience for Safari users. This was triggered by Chrome's undo/redo functionality.
Original PR description
Before this commit: safari returns invalid document in collaboration, typically when a chrome user is sending history steps with undo. Reproduction steps: 1. In chrome, use an existing task with…
Before this commit: safari returns invalid document in collaboration, typically when a chrome user is sending history steps with undo. Reproduction steps: 1. In chrome, use an existing task with empty description or create a task in the project (first create the task title in the kanban view, then click edit), enter 4 lines of text 2. In one of the middle lines, delete one character --> undo --> add a new character 3. Save the task, open the task in Safari incognito, log in as demo (not admin), go to the task and click the description field 4. TraceBack: IndexSizeError: The index is not in the allowed range. After this commit: we use the range of the DOM selection to set the offsets of activeSelection. If the DOM selection is too wrong to be corrected, e.g. the selection's anchor node isn't the same with range's start container (or end container if direction is right to left), we do not set new activeSelection but just return the previous activeSelection task-5428788 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#246056
A bug was causing the 'New Task' button to incorrectly change task priorities instead of creating new tasks. This has been resolved by changing the button's shortcut from Alt+R to Alt+C, ensuring the correct functionality is now triggered.
Original PR description
Steps to Reproduce: - - Open Project → Tasks. - Press Alt key to view shortcut hints. - New button control show Alt+R. - Pressing Alt+R triggers priority change instead of creating a new record. Issue: - Pressing the shortcut displayed on the New button (Alt+R) does not create a new task but instead changes the task priority. Cause: - The New button and the Priority widget share the same shortcut (Alt+R), causing the wrong action to trigger. Solution: - Changed the shortcut for the New button from Alt+R to Alt+C to avoid conflict and ensure correct behavior. task-5270075
This update resolves an issue where the opening date field in the tax returns wizard remained uneditable after posting an opening move. The fix ensures the date is always editable, aligning with the current workflow and maintaining user familiarity. It also updates the opening move date if the move is still in draft.
Original PR description
To reproduce the issue (in enterprise): - Go to accounting > configuration - click on "Review Manually" (under Accounting Import) - add a balance to 1 or 2 accounts - Search for the created draft opening move in the journal entries, and post it - On the dashboard, click on "Tax returns" ====> The opening date is not set in the wizard, and still, it's not editable. You're stuck The opening date was originally introduced in the setup bar flows, years ago. Today, this field isn't really used anymore, except for creating the returns, and it then does not especially always correspond to the date of the opening move. To solve the issue, we just always allow editing it in the wizard. To keep things comfortable for users who would be used to the previous way it worked, we still modify the date of the opening move when doing so if it's still in draft.
This update corrects a bug where the product name was duplicated on delivery slips when selling products with 'never' variants and descriptions. The fix ensures that product information is accurately displayed, preventing confusion during order fulfillment. This impacts sales order delivery processes.
Original PR description
When creating a delivery slip, if the product sold has variant of type never and have a description, the name will be repeated. ### Steps to reproduce: * Create a product A with variants of type…
When creating a delivery slip, if the product sold has variant of type never and have a description, the name will be repeated. ### Steps to reproduce: * Create a product A with variants of type never * Create a sales order with two product A and confirm it * Go on the delivery (don't validate it) and create a delivery slip -> Issue, the name of the product appears twice. * Reduce the quantity of product delivered to one * Confirm and create a backorder * Print the deliveryslip -> Issue, the name of the product appears twice in the backorder section ### Observation: When confirming the SO: It creates the procurement values, where the product_description_variants are obtained from _get_sale_order_line_multiline_description_variants. In our case, we will have several elements regarding the variant: https://github.com/odoo/odoo/blob/3e5aabf66a19d406fa49c9ff2f6e4db6d5ba124a/addons/sale_stock/models/sale_order_line.py#L300 This information is added to the picking_description (for which the fallback value is the product name): https://github.com/odoo/odoo/blob/626d06734991bcd3b94a6c9454317f311164e9dc/addons/stock/models/stock_rule.py#L339-L340 When printing the delivery_slip, it uses description_picking (and attempts to filter out the name): https://github.com/odoo/odoo/blob/842025976ab65e92551366def88cdd243549e5ee/addons/stock/report/report_deliveryslip.xml#L74 However, in our case, since the variant information is included, it will not be filtered out because the value is no longer just the name. The same issue is present here : https://github.com/odoo/odoo/blob/e99e07f2f22b0987468c45d3d7da287cdf703588/addons/stock/report/report_deliveryslip.xml#L179-L180 opw-5153222 Forward-Port-Of: odoo/odoo#239693
10 changes
Resolved issues and error corrections
This update streamlines the database synchronization process by removing outdated XMLRPC support and improving error handling. The user interface wizard for KPI selection has been simplified, and synchronization errors are now reported clearly instead of disrupting the entire process. This enhances the stability and efficiency of database updates.
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. ### [FIX] databases: disable the KPI-selection wizard With this commit, we disable the wizard displayed at the end of a synchronization to select which KPIs are added to the properties field. Instead, we always store all the KPIs that are provided by the databases, and the users can still select which ones they want to display on the list view. The wizard is still used in the background for stable compliance, but it is not displayed to the user any more. It will be removed in the next stable version (saas~19.2). Task-id: [5868314](https://www.odoo.com/odoo/project.task/5868314) ### [FIX] databases: handle fetch errors better With this commit, fetching errors like 502 Bad Gateway are handled better, as they are reported as an error message in the final summary instead of interrupting the whole synchronization and showing a traceback to the end user. ### [FIX] databases: synchronize up to immediate_sync_limit databases synchronously Previously, if the number of databases to be synchronized exceeded `databases.immediate_sync_limit`, no databases were synchronized synchronously. Instead, all were queued for a triggered scheduled action. With this commit, the synchronization process will handle up to `immediate_sync_limit` databases synchronously, while the remaining databases will be sent to the scheduled action. Forward-Port-Of: odoo/enterprise#105965 Forward-Port-Of: odoo/enterprise#105176
This update fixes a bug preventing appraisal templates from displaying departments without a linked company. The issue stemmed from a filtering error in the template selection process. Now, all departments, including those without a company association, are correctly available for selection on appraisal templates.
Original PR description
### Issue:
On the appraisal template form view, the dropdown of "Departments" does not show departments with no company.
### Steps to reproduce:
- In the Employee app create a new Department with no company
- Go in Appraisals > Configuration > Appraisal Templates
- Click on a template, remove it's company if it has one
- Try to change the Department of the template
- The new department does show
### Cause:
The field `department_ids` on `hr.appraisal.template` have this domain: `(company_id and [('company_id', 'in', [company_id, False])] or [('company_id', 'in', allowed_company_ids)])` It excludes departments with no company when the template have no company because `allowed_company_ids` doesn't contain `False`.
### Solution:
Add `False` in `allowed_company_ids`.
opw-5354581
Forward-Port-Of: odoo/enterprise#103531This update resolves an issue where toggling the Studio feature in Odoo Enterprise could disrupt the layout of form stat buttons. The fix ensures the stat button layout remains consistent, regardless of whether Studio is active, improving the user experience and preventing potential design inconsistencies.
Original PR description
**Before this commit:** Toggling Studio could break the layout of form stat buttons. **After this commit:** The stat button layout remains intact when Studio is toggled. task-5480309 Forward-Port-Of: odoo/enterprise#106452
This update resolves an issue where sale commission IDs exceeded JavaScript's maximum safe integer, causing errors. The fix increases the range of the plan ID, allowing for a significantly larger number of sales plans (from 900 to 90,000) while maintaining security and minimizing potential data conflicts. This improves the system's ability to handle increased sales volume.
Original PR description
Issue: 10^13 was too big of an exponent as such the id generated were bigger than JS limit `Number.MAX_SAFE_INTEGER`, this resulted in the id being rounded to the nearest reprentable integer. Which resulted in a traceback as we were fetching records that didn't exist. This fix allow a bigger margin for the plan_id while keeping the collusion risk equal, as we have the following: - user_id margin is 10^5 - date is in YYMMDD format, so it occupies at most 6 integer - plan_id can thus occupy the space after which is 5 + 6 so 10^11 Only issue possible left with this id generation would be to have user that are 1000 id apart, with same date and same plan. Or that we have too much plan that we exceed the JS limit. Number of plan that can be handled with this change goes from ~900 -> ~90000 which seems reasonable. Forward-Port-Of: odoo/enterprise#106513
This update corrects a previous error that prevented users from posting miscellaneous operations with both expense and revenue accounts when deferred entry methods were configured differently. The fix ensures the validation process now correctly targets lines with actual deferred dates, improving usability and preventing unnecessary errors.
Original PR description
The `_get_deferred_entries_method` checks for expense/income account conflicts using all line accounts, not just lines with deferred dates. This causes a false positive error when posting misc…
The `_get_deferred_entries_method` checks for expense/income account conflicts using all line accounts, not just lines with deferred dates. This causes a false positive error when posting misc entries with both expense and revenue accounts but no deferred dates configured. https://github.com/odoo/enterprise/blob/3e6d2f3ca7e2d4e940f2c2022f816202c72cbd1b/account_accountant/models/account_move.py#L150-L151 Steps To Reproduce: 1. Go to Settings → Accounting and set different "Generate Entries" methods for deferred expenses "On bill validation" and deferred revenues "Manually & Grouped". 2. Go to Accounting Dashboard and create a new Miscellaneous Operation. 3. Create 2 journal items: one with an expense account and one with a revenue account (neither configured for deferred entries). 4. Try to post the entry. 5. Error appears: "Having different deferred entries generation methods for expenses and revenues is not supported..." The validation should only apply when lines actually have deferred dates set, not for all misc entries with mixed account types. Commit that caused the issue: https://github.com/odoo/enterprise/commit/3e6d2f3ca7e2d4e940f2c2022f816202c72cbd1b Ticket [link](https://www.odoo.com/odoo/project.task/5486114) opw-5486114 Forward-Port-Of: odoo/enterprise#104476
This update simplifies the one-time payment form by removing a redundant version field. The form now automatically displays payments for the correct employee based on the context, ensuring a more streamlined and accurate user experience. This change improves usability and avoids potential errors.
Original PR description
… payment form The one time payment view is accessed only via the smart button on the employee form for a specific version. This view displays only that employee's one time payments for the selected version. Since the version is provided by the context and creating a payment for a different employee or version would not make sense, the version field is made invisible. Task: 5384437 Forward-Port-Of: odoo/enterprise#103245
This update resolves an issue where older sign requests without a designated 'communication company' would cause the system to crash. The fix automatically uses the user's company date format, ensuring sign requests can be processed correctly regardless of the initial company setting. This improves the reliability of the sign request workflow.
Original PR description
For old databases that were created before 16.0, existing sign request might not have a communication company set. Following commit odoo/enterprise@6b505a34f7bdee89c155eed7507296d5acfd8a9b trying to…
For old databases that were created before 16.0, existing sign request might not have a communication company set.
Following commit odoo/enterprise@6b505a34f7bdee89c155eed7507296d5acfd8a9b trying to open such sign request will result in a crash:
```
Traceback:
...
File "/data/build/odoo/enterprise/saas-18.3/sign/controllers/main.py", line 354, in get_document
context = self.get_document_qweb_context(request_id, token)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/data/build/odoo/enterprise/saas-18.3/sign/controllers/main.py", line 88, in get_document_qweb_context
date_format = posix_to_ldml(lang.date_format, locale=locale)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/data/build/odoo/odoo/saas-18.3/odoo/tools/misc.py", line 606, in posix_to_ldml
for c in fmt:
TypeError: 'bool' object is not iterable
```
This commit fallback to the create user's company to determine the date language when there is not communication company set.
no-task (from feedback pad)
Forward-Port-Of: odoo/enterprise#87526This update resolves a technical issue preventing the correct installation of the l10n_be_hr_payroll_fleet module. The fix ensures the module correctly relies on the hr_fleet module, avoiding a missing field error when demo data is created. This ensures the module functions as intended.
Original PR description
Steps to reproduce: 1. Install l10n_be_hr_payroll_fleet with --skip-auto-install and demo data. 2. Traceback when creating demo data because driver_employee_id is missing on the model fleet.vehicle Cause: The module depends on fleet instead of hr_fleet so hr_fleet is only auto installed. Thus, when skipping auto install, the field driver_employee_id doesn't exist. Fix: Change the dependency from fleet to hr_fleet to force the module to be installed. Runbot error: https://runbot.odoo.com/odoo/runbot.build.error/237909 Task: 5875410 Forward-Port-Of: odoo/enterprise#106256 Forward-Port-Of: odoo/enterprise#106199
This update corrects a technical issue related to the Swiss localization of Odoo's payroll system. Specifically, a test tour was incorrectly triggered due to differences in how work entries are handled in Switzerland. This change ensures the tour functions correctly for Swiss companies, streamlining the payroll setup process.
Original PR description
The Work Entries button on the form view of the hr_payslips is defined differently in the Swiss localization. We need to override the tour to make it work for swiss companies. Runbot Error: 234647 Forward-Port-Of: odoo/enterprise#106311 Forward-Port-Of: odoo/enterprise#106147
This update resolves an issue where Worldline receipts were incorrectly duplicated in POS receipts. The change ensures receipts are only updated when a Worldline transaction is fully completed, improving the accuracy of sales records. This prevents data inconsistencies and ensures reliable reporting.
Original PR description
This PR fixes the issue where Worldline receipts were sometimes added twice to the pos receipt by only modifying the receipt if the transaction has been finished (currently we modify the receipt no matter the message type (cancellation/payment failed etc.)) ticket-5342655 Forward-Port-Of: odoo/enterprise#106554
1 change
Resolved issues and error corrections
This update resolves an issue where uploading PDF files with duplicate metadata caused errors in the sign module. The fix prevents these errors, ensuring users can successfully upload PDFs with multiple form field definitions, improving the reliability of the sign process.
Original PR description
Currently, an error occurs when uploading a PDF file that contains `duplicate metadata` definitions. **Steps to produce:** - Install the `sign` module. - Open `sign` app and upload duplicate metadata pdf file [1]. **Error:** `PyPDF2.errors.PdfReadError: Multiple definitions in dictionary at byte 0x5f for key /PageMode` **Root cause:** At [2], the code tries to read form fields using `pdf_reader.getFormTextFields()`, when the uploaded PDF contains `duplicate metadata`, Python raises an `error`. **Fix:** This commit prevents errors and ensures that users can successfully upload PDF files containing `duplicate metadata`. [1]: https://drive.google.com/file/d/1wtyEt3lLqUrSkhvZC9t-A1AQ2eHozu-g/view?usp=sharing [2]: https://github.com/odoo/enterprise/blob/0c42f35727097d4a301bed855b782baa26274667/sign/utils/pdf_handling.py#L31 sentry-6941428081
16 changes
Resolved issues and error corrections
This update fixes an issue where month names were incorrectly displaying based on the server's locale instead of the user's environment. The change ensures month names are displayed in the correct language for each user, improving the user experience across Odoo modules.
Original PR description
Month name is using the locale language instead of the env language Get month name in the env language Enterprise PR: odoo/enterprise#106175 Task [link](https://www.odoo.com/odoo/project.task/5902364) task-5902364
This update corrects a broken link used by Odoo to connect with the Polish Electronic Data Interchange (KSeF) system. The change ensures that Odoo can properly transmit and receive data required for Polish tax compliance. This resolves a connectivity issue impacting the functionality of the l10n_pl_edi module.
Original PR description
The production URL for the Polish EDI (KSeF) was incorrect. This commit updates the endpoint to the current valid URL to ensure proper connectivity. 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 corrects a bug where empty loyalty cards were created when multiple loyalty programs existed, even if only one applied points to an order. The fix ensures that loyalty cards are only created when points are actually earned, reducing unnecessary record creation and improving data accuracy.
Original PR description
Currently, when you have multiple loyalty program but only 1 applies points on the current order, the other will have a loyalty card created with 0 points. steps to reproduce: ------------------- * Create a loyalty program giving you 1 point per $ on product 1 * Create a loyalty program giving you 1 point per § on product 2 * Make a pos order with just product 1, add a customer * Check the programs in the backend > Observation, a loyalty card with 0 points was create for the second loyalty program Why the fix: ------------ This creates a lot of unecessary records. We now only create cards where there are points or when there 0 points because a reward has been applied, thus keeping history. opw-5405109
This update corrects a display issue in the self-order point module where the price of added items after the initial order was incorrectly calculated. The fix ensures that the price shown for each line accurately reflects the quantity added, resolving a discrepancy between the quantity and total price. This improves the accuracy of the order total for customers using the 'Pay After Meal' option.
Original PR description
Steps to reproduce ------------------ If we set pay after to "meal", order one product A for price 10, then on the same order, adds again product A and go to cart page, we see "product A: 1" as expected, but its price set to "20". -> Mismatch between the shown quantity and the total price of that line. Why it's happening ------------------ When displaying the line qty, we just display the diff (1), however, when displaying its price, we take the price of the whole line (having qty 2). Fix --- Backport the line price display amount change made in saas-18.2 in https://github.com/odoo/odoo/commit/98f0534450520ce037039ffe0be17cf1dc3b91ba. We also fix "Your Order" to show the price of only the products of the newly added lines. opw-5467612
This update fixes an issue where Vendor Pricelists linked to Blanket Orders were incorrectly assigned to the user's active company instead of the Blanket Order's company. This ensured data consistency and accurate product pricing within multi-company Odoo environments. The change ensures pricelists are correctly linked to the purchase agreement.
Original PR description
Description of the issue/feature this PR addresses: In a multi-company environment, confirming a Purchase Agreement (Blanket Order) automatically generates Vendor Pricelist (product.supplierinfo)…
Description of the issue/feature this PR addresses: In a multi-company environment, confirming a Purchase Agreement (Blanket Order) automatically generates Vendor Pricelist (product.supplierinfo) entries for the linked products. Currently, these entries default to the user's current active company rather than the company specified on the Purchase Agreement. This leads to data inconsistency where pricelists are visible and owned by the wrong company. Current behavior before PR: When a Blanket Order belonging to Company A is confirmed by a user who has Company B as their current active company, the resulting Vendor Pricelist record is assigned to Company B. This is because the company_id is not explicitly passed during the creation of the product.supplierinfo record, causing it to fall back to the environment default. Desired behavior after PR is merged: The Vendor Pricelist record will explicitly use the company_id from the Purchase Agreement it originated from. This ensures that the pricelist is correctly assigned to the agreement's company rather than from the active company related to ticket i made #5909892
This update fixes an issue where product names were duplicated on unvalidated delivery slips when products with 'never' variants and descriptions were involved. The fix ensures that product descriptions are correctly handled during report generation, preventing redundant name displays. This improves the accuracy of delivery slip reports.
Original PR description
When creating a delivery slip, if the product sold has variant of type never and have a description, the name will be repeated. ### Steps to reproduce: * Create a product A with variants of type…
When creating a delivery slip, if the product sold has variant of type never and have a description, the name will be repeated. ### Steps to reproduce: * Create a product A with variants of type never * Create a sales order with two product A and confirm it * Go on the delivery (don't validate it) and create a delivery slip -> Issue, the name of the product appears twice. * Reduce the quantity of product delivered to one * Confirm and create a backorder * Print the deliveryslip -> Issue, the name of the product appears twice in the backorder section ### Observation: When confirming the SO: It creates the procurement values, where the product_description_variants are obtained from _get_sale_order_line_multiline_description_variants. In our case, we will have several elements regarding the variant: https://github.com/odoo/odoo/blob/3e5aabf66a19d406fa49c9ff2f6e4db6d5ba124a/addons/sale_stock/models/sale_order_line.py#L300 This information is added to the picking_description (for which the fallback value is the product name): https://github.com/odoo/odoo/blob/626d06734991bcd3b94a6c9454317f311164e9dc/addons/stock/models/stock_rule.py#L339-L340 When printing the delivery_slip, it uses description_picking (and attempts to filter out the name): https://github.com/odoo/odoo/blob/842025976ab65e92551366def88cdd243549e5ee/addons/stock/report/report_deliveryslip.xml#L74 However, in our case, since the variant information is included, it will not be filtered out because the value is no longer just the name. The same issue is present here : https://github.com/odoo/odoo/blob/e99e07f2f22b0987468c45d3d7da287cdf703588/addons/stock/report/report_deliveryslip.xml#L179-L180 opw-5153222
This update resolves an issue where public holidays weren't appearing in the Time Off dashboard when applied to work schedules that didn't have a company assigned. The fix ensures that public holidays are correctly considered when calculating leave availability, regardless of whether a company is associated with the work schedule. This prevents incorrect time-off durations.
Original PR description
**Steps to reproduce** 1. Remove the company of the Working Schedule (needs to be done in a multi-company environment from the UI) used by an employee. 2. Using the company of this employee, create a…
**Steps to reproduce**
1. Remove the company of the Working Schedule (needs to be done in
a multi-company environment from the UI) used by an employee.
2. Using the company of this employee, create a Public Holiday
(for the employee's schedule or all schedules).
Issues:
- the public holiday doesn't appear in the Time Off dashboard
- when taking a time off on that day, the public holiday is
included in the duration
**Cause**
The fix in https://github.com/odoo/odoo/commit/a95af8b78a94a795e05a0adf299837adc0ef2117 will result
in a search domain for public holidays of `('company_id', 'in', [False])`
when the working schedule has no company, ignoring any public
holidays with a company set. This is especially problematic since the
company of the public holiday is always forced.
https://github.com/odoo/odoo/blob/7bce5f3f95429a4d4ba034a66c350ee2a5868567/addons/resource/models/resource_calendar_leaves.py#L49-L51
**Solution**
Since the intent of the original fix https://github.com/odoo/odoo/commit/d58ecdccb89401751c8ee056c4166427ea005f5e
was to correct an issue related to the computation of some `project.task`
fields calling resource methods, we can instead go for a safer solution
in `project` which doesn't affect `resource`/`hr` modules.
Code below the search already ensures that leaves are only applied
when their company matches the resource's company:
https://github.com/odoo/odoo/blob/fdd9edb6a4ef3aa18449be537c954a06b32578e3/addons/resource/models/resource_calendar.py#L409-L410
When `_leave_intervals_batch` is called without resources, existing code
adds a company domain (see `_get_unusual_days` for example).
opw-5496999
opw-5401425This update addresses several bugs and improves the stability of the spreadsheet functionality within Odoo. Specifically, it fixes issues related to crashes during sheet deletion and improvements to importing incomplete Excel files. This ensures a more reliable spreadsheet experience for users.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/4587c34166 [REL] 18.0.56 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/4587c34166 [REL] 18.0.56 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/83a2147ebf [FIX] find_and_replace_store: crash after sheet deletion [Task: 5453311](https://www.odoo.com/odoo/2328/tasks/5453311) https://github.com/odoo/o-spreadsheet/commit/03ebb687fa [FIX] Cell: do not rely on key presence in commands [Task: 5499921](https://www.odoo.com/odoo/2328/tasks/5499921) https://github.com/odoo/o-spreadsheet/commit/d953505355 [FIX] tests: fix network serialization in mock [Task: 5499921](https://www.odoo.com/odoo/2328/tasks/5499921) https://github.com/odoo/o-spreadsheet/commit/2f4cf70fc1 [FIX] evaluation: do not overwrite current sheet [Task: 5868007](https://www.odoo.com/odoo/2328/tasks/5868007) https://github.com/odoo/o-spreadsheet/commit/0dcc3ce629 [FIX] XLSXImport: Fix crash on incomplete xlsx file with external reference [Task: 5499753](https://www.odoo.com/odoo/2328/tasks/5499753) 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 ensures that invoice due dates accurately reflect the payment terms (e.g., 'pay later') selected for a customer. Previously, invoices didn't display the correct payment term, leading to discrepancies. This fix corrects a bug introduced when payment terms were initially removed and later re-enabled for the 'pay later' method.
Original PR description
Payment terms set on contact form do not reflect on invoice. Steps to reproduce: ------------------- - Create a new Contact and add a payment term to this contact (30 days) - Open POS and create an order - Select the new contact as the customer - Go to payment, select the option to create an invoice and validate > The invoice shows today as the due date. If instead we're settling an order with this payment term and the customer account then the due date is in 30 days. Why the fix: ------------ Initially payment terms have been removed here as they were not supported: https://github.com/odoo/odoo/commit/1010aaaad0e09f0e5f2d5e824a28d9e39b877912 They were brought back later only when using 'pay_later' payment method. https://github.com/odoo/odoo/commit/b5a502cbe530b2fef87548af66c67bfc0d13b01e We backport it. opw-5911241
This update replaces a real tax ID placeholder in the Odoo Base VAT module for Turkey. This change prevents users from accidentally using the placeholder for actual transactions, ensuring data integrity and compliance. It's a minor update focused on security and accuracy.
Original PR description
The previous placeholder used a real tax ID. Replacing it with a dummy prevents users from using it to submit transactions. task-5441218 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#246837 Forward-Port-Of: odoo/odoo#242189
This update resolves an error that occurred during upgrades of Odoo 18, specifically related to warehouse configurations. The fix ensures that warehouses are correctly identified with production locations, preventing upgrade failures and maintaining smooth stock operations. This change was implemented by borrowing logic from the MRP module.
Original PR description
The warehouses need at least a Production location[^2] to avoid triggering an error, but they are not considered a missing location. The function is borrowed from the `mrp` module[^mrp]. This error was found during upgrades. To reproduce: - In 17, install repair and don't install mrp. - Archive the production locations. - Upgrade to 18. - It will trigger an error[^1] while upgrading stock. [^1]:https://github.com/odoo/upgrade/blob/b46cf7ea8770c5d428ea3d569148eb76d16903b9/migrations/stock/saas~17.3.1.1/end-migrate.py#L16 [^2]:https://github.com/odoo/odoo/blob/ab3c2d52bcaee516eae319ccd20088eb48c819f1/addons/repair/models/stock_warehouse.py#L67 [^mrp]:https://github.com/odoo/odoo/blob/ab3c2d52bcaee516eae319ccd20088eb48c819f1/addons/mrp/models/stock_warehouse.py#L278-L283
This update simplifies sales order reporting for subscription customers. The 'remaining hours' field, which could be misleading due to recurring subscription delivery cycles, has been hidden when a sales order line is linked to a subscription. This ensures a clearer and more accurate view for our customers.
Original PR description
This change hides the remaining_hours_so field when the sales order line is linked to a subscription. Unlike standard service or time-based sales orders, where this field reflects the difference between the quantity ordered and the quantity delivered, the concept does not translate well to subscription logic. In the context of a subscription, the service is delivered on a recurring period (monthly, yearly, etc.). Delivery quantities continuously accumulate over time, and because the subscription renews indefinitely until cancellation, the “remaining hours” calculation quickly becomes misleading. In many cases it can drift into negative values, giving the impression of an error or over-consumption when, in reality, the subscription is simply following its recurring delivery cycle. To avoid confusing end-users and to maintain a clean, intuitive interface, we hide this field whenever the line is part of a subscription. opw-5246238
This update removes the direct technical contact email (peppol.iap@odoo.com) from the Peppol integration, aligning with previous versions. This change enhances security and privacy by only displaying the service name, as was done in prior releases. It ensures clients receive accurate information without exposing internal support details.
Original PR description
…pport Our TechnicalContactUrl is peppol.iap@odoo.com, it should not be exposed to the client as the support contact. Let's just expose the name of the service like we do above 18.0. task-none Forward-Port-Of: odoo/odoo#247607
This update fixes an issue where month names were being displayed using the system's locale language instead of the specific business environment's language. This ensures that month names are consistently shown in the correct language for each Odoo enterprise instance, improving accuracy and user experience. The change impacts several payroll and reporting modules.
Original PR description
Month name is using the locale language instead of the env language Get month name in the env language Community PR: odoo/odoo#246790 Task [link](https://www.odoo.com/odoo/project.task/5902364) task-5902364
This fix resolves an issue where Modelo 390 reports for past years were generating empty BOE files. The problem stemmed from incorrect data retrieval based on the report period, which was corrected to accurately reflect the specified year. This ensures accurate tax reporting for Spanish businesses.
Original PR description
### Issue: When exporting Modelo 390 reports for a past year, the BOE file was empty — all values were 0 ### Cause: In `export_boe()`, the `report_lines` were get based on the `section_report`…
### Issue: When exporting Modelo 390 reports for a past year, the BOE file was empty — all values were 0 ### Cause: In `export_boe()`, the `report_lines` were get based on the `section_report` options However, `section_reports` do not store the date or return periodicity of the selected report As a result, using their options always fetched data for the current period instead of the specified year ### Note: `_generate_mod_390_page2()` also had issues: some lines were missing or incorrectly indexed The mod 360 format, it strict in the structure with specific index so it may produce invalid documents The latest documentation for mod 390: https://sede.agenciatributaria.gob.es/static_files/Sede/Disenyo_registro/DR_300_399/archivos_25/dr390e2025.xlsx ### Steps to reproduce: - Install `l10n_es_reports` and switch to ES Company - Create an Invoice and a Bill (Any product, Price: 100.00, Tax: 21%, Invoice Date: 01/01/2025) - Open Tax Return, switch to Mod 390, and set year to 2025 - You should see data in the 2 first sections - Use the gear icon, and download the BOE - Use the gear icon to download the BOE, fill the wizard (Natural Person – Name: Test, Principal activity: Test, Activity Code: 12345), and generate the file Before the fix: all values in the BOE were 0 instead of matching the report opw-5457374 Forward-Port-Of: odoo/enterprise#104928
This update resolves an issue where customer display URLs weren't consistently being sent to the IoT device boxes when records were updated. The change ensures that the correct URL is transmitted, improving the connection and data flow between the enterprise system and the IoT devices. This enhances the functionality of the IoT integration.
Original PR description
This PR fixes the customer display url not being sent to the iot box when updating the corresponding record in iot device form view. By replacing onWillSaveRecord by onRecordSaved we ensure that our method is always called ticket-5782927 Forward-Port-Of: odoo/enterprise#106331
14 changes
Resolved issues and error corrections
This update allows purchase users to delete incorrect line items when creating bills from purchase orders. Previously, users couldn't remove unwanted items, leading to inaccurate billing records. This change ensures purchase bills accurately reflect the ordered products, improving data integrity.
Original PR description
* Problem: when purchase user create bill from PO they only to record bill for some product not all so some move line need to be deleted, but no deleted button appear * Reason: Purchase User only have read, create, write access to journal items 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 fixes a problem where resending invoices through the Peppol network could incorrectly mark them as ‘skipped’. The change prevents users from repeatedly resending invoices in a ‘processing’ or ‘skipped’ state, ensuring accurate invoice tracking and delivery. This improves the reliability of our Peppol integration.
Original PR description
This fix addresses two issues related to resending invoices via Peppol. It prevents users from accidentally resending an invoice and having its status incorrectly set to “skipped”. It also prevents from resending an invoice via Peppol when it is already in a “processing”, then "skipped" state. Steps to reproduce: - Create and send a customer invoice to Peppol - Try to send it again, Odoo sets the status to “skipped” - Try to send it again, Odoo resends the invoice via Peppol This fix is a light adaptation of the `_is_applicable_to_move` method introduced in version 18. After the fix: Trying to resend to Peppol an invoice already in "processing" or "done" state is prevented. opw-5491341 Forward-Port-Of: odoo/odoo#247324
This pull request updates the core spreadsheet library used in Odoo. It addresses several bugs and improves stability, specifically fixing issues with importing Excel files and improving the reliability of the spreadsheet functionality. These changes ensure a smoother and more robust experience for users working with spreadsheets within Odoo.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/5a46aed424 [REL] 17.0.86 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/5a46aed424 [REL] 17.0.86 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/045e5c6457 [FIX] Cell: do not rely on key presence in commands [Task: 5499921](https://www.odoo.com/odoo/2328/tasks/5499921) https://github.com/odoo/o-spreadsheet/commit/96220f7707 [FIX] tests: fix network serialization in mock [Task: 5499921](https://www.odoo.com/odoo/2328/tasks/5499921) https://github.com/odoo/o-spreadsheet/commit/2ed5b7ce4b [FIX] XLSXImport: Fix crash on incomplete xlsx file with external reference [Task: 5499753](https://www.odoo.com/odoo/2328/tasks/5499753) 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 resolves an issue preventing users with restricted company access from reloading translations. The fix bypasses a privilege check during data retrieval, allowing the translation reload process to continue smoothly. This improves usability for users who don't have access to all company data.
Original PR description
When a user doesn't have access to all companies, he couldn't reload the translation terms. However, the exception occurs in the call to _get_chart_template_data, which doesn't especially require privileges, because it is static data. With this commit, we bypass the lack of company access to retrieve this data, and let the user continue the language reloading process. Task-id: [5916490](https://www.odoo.com/odoo/project.task/5916490)
This update fixes a previous issue where mention suggestions prioritized recent chat conversations over the record's followers. Now, mention suggestions will prioritize the record's followers, ensuring users are alerted to relevant discussions and individuals. This enhancement improves the efficiency of communication within Odoo.
Original PR description
Before this commit, mention suggestions prioritized partners from recent chats over the record's followers. This commit fixes the behavior by reordering the sequence numbers to have the following priority order: Thread followers > Internal users > Recent chat partners. <img width="1051" height="316" alt="image" src="https://github.com/user-attachments/assets/04b80028-07b5-40b2-8972-e80f933980c7" /> task-5313114
This update ensures consistent styling for mentions across both small and full composer views. The change improves the visual presentation and addresses potential overflow issues, particularly on smaller devices, resulting in a cleaner and more user-friendly experience.
Original PR description
Use the same style in full composer than in small composer. Tweak style to account for small device, better handle overflows task-5916878 Before / After (small composer) <img width="342" height="466" alt="image" src="https://github.com/user-attachments/assets/234ff152-3c5a-4c82-b257-2800a752dd3a" /> <img width="496" height="476" alt="image" src="https://github.com/user-attachments/assets/60b3d12d-38ea-429a-9dec-441886ac022e" /> Before / After (full) <img width="413" height="394" alt="image" src="https://github.com/user-attachments/assets/c51e053f-7eb2-4ee0-8a9a-bd068ee9ded0" /> <img width="487" height="555" alt="image" src="https://github.com/user-attachments/assets/d0a3514d-aa1f-4d89-8fe4-7964ec20a288" />
This update fixes a bug in the BoM report that prevented users from switching between product variants. The issue stemmed from a discrepancy in how variant order was handled between the backend and the frontend, leading to incorrect variant selection. The fix ensures the frontend uses the explicitly passed variant ID for accurate switching.
Original PR description
Steps to reproduce on runbot ------------------ Select a product with several variants and a Bill of Materials (e.g. Stool). Change the variants order so that their ids are not ordered, this can be…
Steps to reproduce on runbot ------------------ Select a product with several variants and a Bill of Materials (e.g. Stool). Change the variants order so that their ids are not ordered, this can be done by modifying the default_code for example (e.g. Internal Reference for variant "Color: Green" set to "A"). When accessing the BoM report, you won’t be able to switch to one of the possible variants (in the example the Dark Blue variant). Why it is happening ------------------ The default variant to be displayed when opening the report is selected in the backend using the product_variant_id field. This field is computed as the first element in product_variant_ids as they are ordered in the model. We then send this variant’s information to the frontend and a dictionary containing every variant (key= id and value = display_name). In the serialization process, the object is reordered based on the keys. Thus, if the variants were not ordered based on their ids in python, the order will change. The displayed variant is correct as it has been passed directly but the frontend also computes the currentVariant attribute. This is computed as the first element in the dictionary but in this case, it is not the one that has been selected in the backend, as the order changed. As a result, you see the report for a variant A but the frontend considers you are on the report for variant B so you cannot switch to variant B as you are supposed to be already on it. The fix ------------------ I propose to use the explicitly passed id as the currentVariantId. opw-5409493 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves a previous issue where switching between Invoice and Credit Note types on already-posted transactions caused errors. Now, users can switch these types even if the transaction's internal/external move sequence has been manually cleared, eliminating the need for manual data exports and re-imports. This improves user efficiency and reduces potential data errors.
Original PR description
Previously, switching an Invoice to a Credit Note (or vice versa) on a posted in_()/out_() move raised a blocking error. This forced users to export, delete, and re-import the document with the correct move type. This **PR** relaxes the restriction for posted moves whose sequence has been manually cleared, allowing the `Switch Invoice/Credit Note` action to proceed in that specific case. **task**-5905206
This update fixes an issue where suggested mentions in the full composer weren't correctly sorted, preventing users from easily seeing followers at the top. The change ensures that mention suggestions are now properly sorted based on follower relationships, improving the composer's usability and efficiency. This resolves a minor inconvenience for users.
Original PR description
Fetch/sort suggestion in the full composer don't receive the thread param which leads to follower not being sorted at the top. task-5917226
This update corrects a bug where URL parameters were lost during website redirects, leading to errors and incorrect functionality. The fix ensures that all parameters passed during a redirect are correctly encoded, preventing issues with features like appointment scheduling. This improves the reliability of the website for users.
Original PR description
Scenario from 17.0:
- set domain on website
- go to website /website/force/1?path=%2F%3Fa%3Db%26c%3Dd with another
domain
=> you are redirected to {domain}/?a=b instead of {domain}/?a=b&c=d
Scenario from 18.0:
- set domain on website
- go to /appointment/1 on other domain, select person date and time
- click on "Editor"
=> you get error:
> TypeError: AppointmentController.appointment_type_id_form() missing 1
> required positional argument: 'duration'
Cause: the /website/force/ domain redirection doesn't encode the
parameter when redirecting, so we lose parameters after the first one.
Fix: encode parameters when redirecting domain in /website/force/ route.
opw-5441957This update resolves an issue with the calculation of Spanish VAT (Mod 390) within the Odoo accounting system. Specifically, it adjusts how balances from certain accounts are incorporated into the VAT calculation, ensuring accurate reporting for Spanish businesses. This change improves compliance with Spanish tax regulations.
Original PR description
In this commit: Fixing 390 computation: - Add balance from 27, 29, 649 and 31 to casilla 33. - Add balance from 28, 30, 650 and 32 to casilla 34. Related PR : https://github.com/odoo/enterprise/pull/105597 task-5732679
This update removes the direct technical contact email address (peppol.iap@odoo.com) from the Peppol proxy, enhancing data security. Instead, the service name is now displayed, aligning with previous versions and simplifying client interactions. This change ensures our support information is presented in a more secure and consistent manner.
Original PR description
…pport Our TechnicalContactUrl is peppol.iap@odoo.com, it should not be exposed to the client as the support contact. Let's just expose the name of the service like we do above 18.0. task-none Forward-Port-Of: odoo/odoo#247607
This update corrects a technical issue within the account_edi_ubl_cii module that was incorrectly importing data related to vendor refunds. The change ensures that only the necessary financial information is processed, improving data accuracy and preventing potential errors in financial reporting. This resolves issues reported through internal tracking (opw-5870516, opw-5898302, opw-5917394, opw-5892671).
Original PR description
opw-5870516 opw-5898302 opw-5917394 opw-5892671
This update fixes inaccuracies in the Kardex report for Peru by incorporating landed costs and price adjustments, ensuring accurate reporting of stock movements. The changes improve the report's reliability and align it with Odoo's valuation layer data.
Original PR description
Refactored the logic to generate the Kardex report based on `stock.valuation.layer`, for the following reasons: 1. **Landed costs**: These must be considered in the report. Odoo already creates…
Refactored the logic to generate the Kardex report based on `stock.valuation.layer`, for the following reasons: 1. **Landed costs**: These must be considered in the report. Odoo already creates valuation layers for landed costs, and the report must use the date when the landed cost was recorded, not the original stock move date. 2. **Price adjustments**: Product price adjustments generate valuation layers without stock moves. These layers are now included in the report. Additional fixes and improvements: - Correctly map columns 18 to 26 in Report 13.1: - 18–20: Incoming movements - 21–23: Outgoing movements - 24–26: Final balance - Ensure `cost_in` and `cost_out` values are always positive. The sign now depends on the movement quantity, not the unit cost. - Replace the product list with a dictionary to track accumulated quantities and values per product for accurate balance calculation. - Extend test coverage to include cases where the report includes opening balances due to past transactions. - **MRP movements**: MRP processes don’t generate pickings, but their stock moves are linked to operation types. The report now uses codes `19` for incoming and `27` for outgoing MRP-related movements. - **Reversal of pickings**: Since Odoo copies the original picking and skips reassignment logic, we now override the reversal wizard to set the correct PE operation type: - `25` for incoming reversals - `24` for outgoing reversals - Force operation type `99` for all `A1` lines, as required by the report. - Ensure report dates are processed in the user's timezone for consistency with the layer view in Odoo.