Daily updates from Odoo
Thursday, October 16, 2025
204 changes
22 changes
Security fixes and vulnerability patches
Point of Sale now only lets an employee return to the backend when that employee is linked to the currently connected user. This reduces unintended backend access while still allowing managers to close POS sessions when needed.
Original PR description
Task: [5154178](https://www.odoo.com/odoo/project/1737/tasks/5154178) --- Previously, any employee with the role `manager` could go to the backend. Now, the only employees that can go back to the backend are those binded to the user connected. Managers can still close the session. Forward-Port-Of: odoo/odoo#231063 Forward-Port-Of: odoo/odoo#230756
Enhancements to existing features
Italian electronic invoices are now sent one at a time instead of in large batches. This reduces timeout errors when many invoices are submitted together and helps prevent scheduled processing from getting stuck.
Original PR description
Some clients reported that when they send a full batch size=20 invoices at once, they get a timeout response and the cron job get's stuck. Processing invoices one by one instead of a full batch. IAP-apps PR: https://github.com/odoo/iap-apps/pull/1230 Task [link](https://www.odoo.com/odoo/project.task/5045529) task-5045529 Forward-Port-Of: odoo/odoo#231742 Forward-Port-Of: odoo/odoo#230146
The IoT client no longer waits for each message to the IoT Box to finish sending before continuing. This helps keep workflows more responsive when devices are communicating in the background.
Original PR description
In order to avoid blocking code execution when sending websocket messages to the IoT Box from the client, we stopped waiting for the `send_message` call to complete.
The Documents folder action menu now opens right away instead of waiting for all actions to load. Users also get quicker feedback when enabling embedded actions, with fewer repeated server updates during rapid changes.
Original PR description
The cogwheel which holds the folder actions was slow to open because it loads the actions at startup. To speedup it up, we backport the fix odoo/enterprise#90124 that allows the cogwheel to be open while loading the actions (instead of waiting that the actions are loaded). We also add a spinner while it is being loaded. When selecting action to embed for the folder, it was slow as well. To solve the problem, we toggle the action immediately (not waiting the answer of the server) and roll it back in case of failure. Finally, to limit the number of calls to the server, we only reload the search model if there are no pending toggle of action. So if you activate for example 5 actions in a row and the connection is slow enough, the search model will only be reloaded once instead of 5 times (when the 5 actions are toggled). Task-4828503 Forward-Port-Of: odoo/enterprise#94141
Resolved issues and error corrections
This update refreshes the spreadsheet component with multiple fixes that improve everyday reliability, including clipboard pasting, data validation, charts, mobile editing, and table creation. Users should see fewer visual glitches and more accurate behavior when working with spreadsheets and dashboards.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/bc55c401f [REL] 18.4.14 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/bc55c401f [REL] 18.4.14 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/cd0f0dc61 [FIX] clipboard: paste as value with empty format string [Task: 5156459](https://www.odoo.com/odoo/2328/tasks/5156459) https://github.com/odoo/o-spreadsheet/commit/740d5d9fc [FIX] table: create dynamic table on #SPILL! errors [Task: 5102771](https://www.odoo.com/odoo/2328/tasks/5102771) https://github.com/odoo/o-spreadsheet/commit/03c9ad344 [FIX] data_validation: selecting range from another sheet [Task: 4948201](https://www.odoo.com/odoo/2328/tasks/4948201) https://github.com/odoo/o-spreadsheet/commit/5a7901b82 [FIX] find & replace: fix arrow buttons sizing [Task: 5154004](https://www.odoo.com/odoo/2328/tasks/5154004) https://github.com/odoo/o-spreadsheet/commit/de3bc021c [FIX] RibbonMenu: hint the scrollable menu [Task: 5106796](https://www.odoo.com/odoo/2328/tasks/5106796) https://github.com/odoo/o-spreadsheet/commit/208407c39 [FIX] RibbonMenu: reset scroll value on menu exploration [Task: 5106796](https://www.odoo.com/odoo/2328/tasks/5106796) https://github.com/odoo/o-spreadsheet/commit/d3343952e [PERF] evaluation: stop the dependencies search early [Task: 4954710](https://www.odoo.com/odoo/2328/tasks/4954710) https://github.com/odoo/o-spreadsheet/commit/8eaa1f176 [FIX] composer: show spreaded cell placeholder on mobile composer [Task: 5139519](https://www.odoo.com/odoo/2328/tasks/5139519) https://github.com/odoo/o-spreadsheet/commit/156e38779 [FIX] composer: hide `Fx` icon when composer has a placeholder [Task: 5139519](https://www.odoo.com/odoo/2328/tasks/5139519) https://github.com/odoo/o-spreadsheet/commit/22c856306 [FIX] functions: fix LINEST error massage [Task: 5059375](https://www.odoo.com/odoo/2328/tasks/5059375) https://github.com/odoo/o-spreadsheet/commit/4d5c304ea [FIX] chart: clip show value text to chart area [Task: 5125970](https://www.odoo.com/odoo/2328/tasks/5125970) https://github.com/odoo/o-spreadsheet/commit/2e2ef1e20 [FIX] chart: wrong position for chart menu in dashboard [Task: 5153929](https://www.odoo.com/odoo/2328/tasks/5153929) https://github.com/odoo/o-spreadsheet/commit/c0cf1b1d7 [FIX] chart: tooltip has wrong format for date chart [Task: 5126261](https://www.odoo.com/odoo/2328/tasks/5126261) https://github.com/odoo/o-spreadsheet/commit/6686dc5eb [FIX] xlsx: import data validation rules with formula [Task: 5062253](https://www.odoo.com/odoo/2328/tasks/5062253) https://github.com/odoo/o-spreadsheet/commit/30d6626b9 [FIX] chart: wrong label format for date chart [Task: 4908471](https://www.odoo.com/odoo/2328/tasks/4908471) https://github.com/odoo/o-spreadsheet/commit/a96e9bcd7 [FIX] charts: prevent unnecessary treemap animations [Task: 5003595](https://www.odoo.com/odoo/2328/tasks/5003595) 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: Dhrutik Patel (dhrp) <dhrp@odoo.com> Co-authored-by: Adrien Minne (adrm) <adrm@odoo.com> Co-authored-by: Ronak Mukeshbhai Bharadiya <rmbh@odoo.com> Co-authored-by: Florian Damhaut (flda) <flda@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>
The project task calendar no longer crashes for customers using the Community edition without Enterprise project planning features. It now only relies on Enterprise-only scheduling information when that Enterprise module is actually installed.
Original PR description
Before this commit, when the user with just Odoo community version tries to go to tasks calendar of a project, he will get a traceback saying `planning_date_begin` field does not exist in `project.task` model. The reason is because that field only exist when `project_enterprise` module is installed. This commit makes sure we only use that field when project_enterprise is installed. Closes #228178
Project calendar views now apply the correct filtering when finding tasks that can be planned. This helps ensure users see the right tasks in scheduling views and avoids inappropriate tasks appearing in planning workflows.
Original PR description
This commit overrides a hook created in related Community PR to add a condition in the domain to fetch tasks to plan inside for task calendar views.
Electronic payments registered from an invoice now correctly keep their connection to that invoice. This improves payment traceability and helps users see the full payment history from the invoice record.
Original PR description
Steps to reproduce: - Create an invoice through Accounting app - Post the invoice - Register the payment using the "Register Payment" wizard with an electronic payment method. Description of the…
Steps to reproduce: - Create an invoice through Accounting app - Post the invoice - Register the payment using the "Register Payment" wizard with an electronic payment method. Description of the issue/feature this PR addresses: **The payment transaction was not being linked to the invoice for electronic payments.** To resolve this, I passed the current invoice IDs as context through action_register_payment in the account.move.line model. Then, I retrieved this context value in _prepare_payment_transaction_vals of the account.payment model to set the invoice_ids Many2many field. Current behavior before PR: The payment transaction is not linked to the invoice for electronic payments. Desired behavior after PR is merged: The payment transaction will be correctly linked to the invoice for electronic payments. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#208520 Forward-Port-Of: odoo/odoo#197091
Romanian eTransport exports now use the EU VAT-standard country code for Greece, changing it from GR to EL where required. This helps prevent validation errors when submitting transport documents and keeps partner and transporter country data consistent.
Original PR description
Added a mapping for EU VAT country codes to ensure that the VAT prefix aligns with EU standards (e.g., 'GR' -> 'EL') in EDI exports. ## Description of the issue/feature this PR addresses: This PR…
Added a mapping for EU VAT country codes to ensure that the VAT prefix aligns with EU standards (e.g., 'GR' -> 'EL') in EDI exports. ## Description of the issue/feature this PR addresses: This PR adds country code mapping functionality to ensure compatibility with the format required by the Romanian eTransport system. Specifically, it adds the conversion of the country code "GR" (Greece) to "EL" according to European VAT standards and applies this mapping to relevant fields in transport documents. ## Current behavior before PR: Before this PR, the country code for Greece was sent as "GR" to the eTransport system, which could cause validation errors because in European VAT systems, Greece is identified by the code "EL". Also, there was no consistent mapping for country codes in different parts of the system. ## Desired behavior after PR is merged: After implementing this PR, country codes will be correctly mapped to comply with European VAT standards, especially the conversion of "GR" to "EL" for Greece. This ensures that documents sent through eTransport contain the correct country codes and will pass system validations. The mapping is applied to country codes for both commercial partners and transporters. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#216122 Forward-Port-Of: odoo/odoo#214621
Users can now create their first timesheet even when they do not have access to the company’s internal project. The system avoids selecting a restricted project by default, preventing an error and allowing timesheet entry to continue.
Original PR description
To reproduce: ============= - make the internal project of the company for invited internal users only - with internal user that doesn't have access to the internal project, and no previous timesheet created, try to create a timesheet - you get a traceback Problem: ======== when not having a previous timesheet, in the default value we set project_id based on the internal project of the company. But if the user doesn't have access to this project, it raises an access error. Solution: ========= check if the user has access to the internal project of the company, if not, use `False` as default value. opw-5119839 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#229818
When users view more themes during website setup, Odoo now shows a fullscreen loading screen until the additional themes finish loading. This prevents users from accidentally selecting an existing theme while the theme list is still being updated.
Original PR description
Steps to reproduce: 1. Create a new website and proceed to the theme configuration step. 2. Click on View More Themes. -> You’ll notice a loading effect on the button, but the existing themes remain selectable. Before this commit: Users could still select existing themes while additional themes were being loaded. After this commit: A fullscreen loader is displayed while loading more themes via the View More Themes button, preventing any unintended interactions. task-4661292 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#230557
The checkout progress steps are now translated correctly when shoppers use the website in a language other than English. This improves the checkout experience for multilingual websites and avoids confusing mixed-language pages.
Original PR description
Versions -------- - saas-18.3+ Steps ----- 1. Have a website; 2. enable a new language (other than English); 3. use website in this language; 4. go to checkout. Issue ----- The checkout steps on the top-left aren't translated. Cause ----- Commit dbd22d93183f2 added the `website.checkout.step` model. Like `website.menu`, they have a default record that gets set on initialization, which is then gets used to create a new record per website. The issue is that when enabling a new language, it only translates the default records. The records that are website-specific remain unchanged. Solution -------- Because they function the same we as `website.menu`, we can use the same approach that was taken to translate website menus, and add a `_load_module_terms` override to `ir.module.module`, constructing a SQL query that copies the translations from the default records to the website-specific records. opw-4985676 Forward-Port-Of: odoo/odoo#223019
Users can now open import screens that offer more than one sample template without the page crashing. The template buttons are also spaced more cleanly, making the import experience smoother.
Original PR description
Import templates are defined on models to allow developpers to provide
sample import files to users. These templates are fetched by the client
as an array of objects of the form {label: string, template: string},
where label is the label to display and template the URL of the file.
The iteration on `importTemplates` goes through this list, and if more
than one element is present in it, the t-key for both elements will be
the same (`[[object Object]]`), leading to a crash of the client
action's template.
This commit uses the 'template' url as the key, as it should be unique
(the label is less trustworthy, as it is translatable).
It also slightly changes the styling, as having an mb32 between multiple
buttons looked rather bad.
Forward-Port-Of: odoo/odoo#231521
Forward-Port-Of: odoo/odoo#231407Fixed an issue where certain Argentine vendor bills generated only one of the two required AFIP text files. This ensures Type C invoices and invoices without taxes produce complete VAT report exports for compliance.
Original PR description
…afip code '0' **Description of the issue/feature this PR addresses:** This PR addresses an issue identified in the generation of .txt files for invoices that utilize AFIP tax code '0' **Current behavior before PR:** The system is only generating one of the two .txt files required by AFIP for specific invoice types. Affected Cases: - Invoices of type 'C'. - Invoices that have no taxes. **Desired behavior after PR is merged:** Two .txt files should be generated for all invoice types, as per AFIP requirements. [HERE](https://app.screencastify.com/watch/2mtioGVxEOwW0rAHJS2v) is a video replicating the issue: 1. In localization Argentina, create a vendor bill type 'C' 2. In 'Tax Return' report, filter by date and 'Tax Type: Purchase' 3. Download .ZIP file and see only one .txt Forward-Port-Of: odoo/enterprise#96052
Employees and HR teams can once again see weekends and public holidays that occurred before the start date of the current contract. The fix uses past expired contracts to provide accurate working-time information while still excluding draft contracts that should not count.
Original PR description
Since changes made in https://github.com/odoo/odoo/pull/212959, we don't see anymore the week-end and banck holidays before the start date of your current contract. As the goal of the initial commit was to prevent to use the contracts in state 'new', we add the contracts 'exppired' that are contracts of the past that really give information of the working hours. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#231400
This change reverts a prior update that made some tax return periods depend on a company's fiscal year. The revert prevents incorrect date offsets for VAT returns that should follow a standard reference date instead, helping ensure reports are generated for the right periods.
Original PR description
This reverts commit 2c36fcb1965f9ebc26d3a03ac05efe22efaa2f70.
This is causing error in offsets for vat returns which are now based on fiscal year instead of the defasult fields.Date.from_string('2025-01-01').
Some return can be based on that fiscal year but not every returns.Website form fields now retain their spacing offset when display settings such as label position or descriptions are adjusted or previewed. This prevents accidental layout changes and saves users from having to reapply formatting while editing forms.
Original PR description
Before this commit, changing display parameters of a field (label position, description, etc.) would remove the offset already added. It would require to add them again if a change was made on the display, even if the mouse just hovered the buttons. This commit solves the issue. Steps to reproduce the bug: - Add a form snippet - Add an offset to a field - In the snippet customization, hover over the label position (The offset was removed for good) task-3675509 Forward-Port-Of: odoo/odoo#231297 Forward-Port-Of: odoo/odoo#181344
Fixed an issue where using the keyboard to navigate search suggestions in the Helpdesk knowledge base could trigger an error page. This keeps customer self-service search usable and prevents interruptions when visitors browse help articles.
Original PR description
Steps to Reproduce: 1. Navigate to '/helpdesk/customer-care-1/knowledgebase'. 2. Enter any text in the search bar to trigger suggestions. 3. Press the down arrow key twice. 4. A traceback error occurs, indicating an Odoo Client Error. Before this commit, we had a crash when a user types something in a searchbar in the website helpdesk and do keydowns: "Cannot read properties of undefined (reading 'nextElementSibling')" To fix this, we need to add the 'data-bs-toggle' attribute to let BS find it to set '_element' (which must be the previous sibling of the dropdown-menu). This data attribute was probably not set before because in this case the BS dropdown is not used on a button or a link as documented; we use it as an autocomplete functionnality. task-4752497 Forward-Port-Of: odoo/enterprise#97149 Forward-Port-Of: odoo/enterprise#90228
The Point of Sale product information popup now shows inventory for the exact product variant selected, rather than potentially using the broader product template. This helps store staff see accurate stock availability when selling products with multiple variants.
Original PR description
Before this commit, when a product template had several variants, opening the product info while a specific variant was selected would not display the inventory information of the selected variant. opw-5161698 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#231266
Tooltips in Live Chat, Discuss, Point of Sale, and web interface elements are now included in the normal translation process. This fixes cases where helpful hover text could remain untranslated, improving consistency for users working in different languages.
Original PR description
Unless you tell Owl to do so, custom attributes like data-tooltip aren't translated. This commit adds the data-tooltip attribute to the list of translated attributes when missing. *: im_livechat, mail, point_of_sale Forward-Port-Of: odoo/odoo#231541 Forward-Port-Of: odoo/odoo#231006
This fix ensures that when an IoT device action fails, the system reports the error instead of incorrectly showing the device as connected. This helps users and support teams see the real issue immediately rather than assuming the action succeeded.
Original PR description
Before this commit, if an error occurred during the execution of an action, it was catch in the _do_action method. To signal that an error occured, we put "error" in the status of the response. However, before this commit, the status was overriden with a "connected" value right after being set to "error", which led to the frontend thinking everything was fine. This is now solved by only setting one status. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue that could cause an error when opening Studio from the activity display in Point of Sale preparation displays. It helps keep configuration workflows reliable and avoids disruption from an internal temporary record reference.
Original PR description
This commit prevents a NewId to be used in a domain when opening studio from the activity display. runbot error #233396 Forward-Port-Of: odoo/enterprise#97332
24 changes
Security fixes and vulnerability patches
Point of Sale now only allows an employee to return to the backend when that employee is linked to the currently connected user. This prevents managers using another employee login from accessing backend areas, while still allowing managers to close POS sessions.
Original PR description
Task: [5154178](https://www.odoo.com/odoo/project/1737/tasks/5154178) --- Previously, any employee with the role `manager` could go to the backend. Now, the only employees that can go back to the backend are those binded to the user connected. Managers can still close the session. Forward-Port-Of: odoo/odoo#231063 Forward-Port-Of: odoo/odoo#230756
Enhancements to existing features
This update adds automated test coverage for the Turkish Nilvera e-invoice integration. It helps reduce the risk of future changes breaking invoice exchange behavior with the external Nilvera service.
Original PR description
There are no tests for the Turkish e-invoice module. This commit adds that. Task ID: 4655864 Forward-Port-Of: odoo/odoo#229980 Forward-Port-Of: odoo/odoo#216179
Users can now upload e-Receipt XML files exported from the Nilvera Portal directly from the Receipts list. Odoo creates draft receipts from the uploaded files and opens the generated receipts, reducing manual entry for Turkish e-dispatch workflows.
Original PR description
This PR introduces a new option to import e-Receipt XML files exported from the Nilvera Portal. - An "Upload e-Receipt (XML)" button is now added in the list view of Receipts (stock picking). - Upon upload, draft receipts are created based on the XML data. - After successful import, the user is redirected to a new view displaying the generated receipts. TaskID:4452521 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#231600 Forward-Port-Of: odoo/odoo#217530
Users printing special shipping labels or documents without a linked IoT printer now see a clear error message instead of a technical crash. This helps warehouse and shipping teams understand what is missing and reduces support confusion.
Original PR description
Shipping Labels/Shipping Documents are empty reports created only to allow printing special documents from an IoT Printer. To prevent users from getting a traceback if they try printing it without linking an IoT Printer, we now raise a UserError. backport of odoo/enterprise#86818 Task: 4792491 Forward-Port-Of: odoo/enterprise#96054 Forward-Port-Of: odoo/enterprise#95794
The Documents folder action menu now opens immediately instead of waiting for all actions to load, with a spinner shown while loading continues. Selecting embedded folder actions also feels faster because changes appear right away, while unnecessary server refreshes are reduced during multiple quick selections.
Original PR description
The cogwheel which holds the folder actions was slow to open because it loads the actions at startup. To speedup it up, we backport the fix odoo/enterprise#90124 that allows the cogwheel to be open while loading the actions (instead of waiting that the actions are loaded). We also add a spinner while it is being loaded. When selecting action to embed for the folder, it was slow as well. To solve the problem, we toggle the action immediately (not waiting the answer of the server) and roll it back in case of failure. Finally, to limit the number of calls to the server, we only reload the search model if there are no pending toggle of action. So if you activate for example 5 actions in a row and the connection is slow enough, the search model will only be reloaded once instead of 5 times (when the 5 actions are toggled). Task-4828503 Forward-Port-Of: odoo/enterprise#94141
Resolved issues and error corrections
This update brings the spreadsheet component up to its latest version with fixes for copying values, data validation, dynamic tables, charts, and Excel imports. Users should see fewer spreadsheet errors, clearer chart displays, and faster recalculation in some cases.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/f13dd1c3e [REL] 18.3.24 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/f13dd1c3e [REL] 18.3.24 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/1d848dc70 [FIX] clipboard: paste as value with empty format string [Task: 5156459](https://www.odoo.com/odoo/2328/tasks/5156459) https://github.com/odoo/o-spreadsheet/commit/ebb2d5487 [FIX] table: create dynamic table on #SPILL! errors [Task: 5102771](https://www.odoo.com/odoo/2328/tasks/5102771) https://github.com/odoo/o-spreadsheet/commit/fb62e0400 [FIX] data_validation: selecting range from another sheet [Task: 4948201](https://www.odoo.com/odoo/2328/tasks/4948201) https://github.com/odoo/o-spreadsheet/commit/7e8bd49f1 [FIX] find & replace: fix arrow buttons sizing [Task: 5154004](https://www.odoo.com/odoo/2328/tasks/5154004) https://github.com/odoo/o-spreadsheet/commit/018e7a8ce [PERF] evaluation: stop the dependencies search early [Task: 4954710](https://www.odoo.com/odoo/2328/tasks/4954710) https://github.com/odoo/o-spreadsheet/commit/67031f419 [FIX] functions: fix LINEST error massage [Task: 5059375](https://www.odoo.com/odoo/2328/tasks/5059375) https://github.com/odoo/o-spreadsheet/commit/0de6c3310 [FIX] chart: clip show value text to chart area [Task: 5125970](https://www.odoo.com/odoo/2328/tasks/5125970) https://github.com/odoo/o-spreadsheet/commit/436323d38 [FIX] chart: tooltip has wrong format for date chart [Task: 5126261](https://www.odoo.com/odoo/2328/tasks/5126261) https://github.com/odoo/o-spreadsheet/commit/4b197537a [FIX] xlsx: import data validation rules with formula [Task: 5062253](https://www.odoo.com/odoo/2328/tasks/5062253) https://github.com/odoo/o-spreadsheet/commit/13cf6886a [FIX] chart: wrong label format for date chart [Task: 4908471](https://www.odoo.com/odoo/2328/tasks/4908471) 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: Dhrutik Patel (dhrp) <dhrp@odoo.com> Co-authored-by: Adrien Minne (adrm) <adrm@odoo.com> Co-authored-by: Ronak Mukeshbhai Bharadiya <rmbh@odoo.com> Co-authored-by: Florian Damhaut (flda) <flda@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>
This fix prevents an internal placeholder record from being used when opening Studio from the preparation activity display. It helps avoid a runbot error and improves reliability for users customizing or accessing this point of-sale preparation screen.
Original PR description
This commit prevents a NewId to be used in a domain when opening studio from the activity display. runbot error #233396
This update fixes a timing issue in Discuss calls that could cause an error when handling a peer-to-peer call offer. It improves call reliability by ensuring delayed offer handling does not use outdated connection information.
Original PR description
Before this commit, since https://github.com/odoo/odoo/pull/205198, the handling of an offer can be arbitrarily delayed by the `acceptOffer` callback. This could lead to a traceback when the reference to `peer` is stale by the time the event is handled. Forward-Port-Of: odoo/odoo#231620
This fixes an error that could prevent employees from creating their first timesheet when they did not have access to the company’s internal project. The system now avoids selecting a restricted project by default, allowing timesheet entry to proceed normally.
Original PR description
To reproduce: ============= - make the internal project of the company for invited internal users only - with internal user that doesn't have access to the internal project, and no previous timesheet created, try to create a timesheet - you get a traceback Problem: ======== when not having a previous timesheet, in the default value we set project_id based on the internal project of the company. But if the user doesn't have access to this project, it raises an access error. Solution: ========= check if the user has access to the internal project of the company, if not, use `False` as default value. opw-5119839 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#229818
The website setup flow now shows a fullscreen loading screen when users click to view more themes. This prevents users from accidentally selecting an existing theme while additional theme options are still loading, making setup more reliable.
Original PR description
Steps to reproduce: 1. Create a new website and proceed to the theme configuration step. 2. Click on View More Themes. -> You’ll notice a loading effect on the button, but the existing themes remain selectable. Before this commit: Users could still select existing themes while additional themes were being loaded. After this commit: A fullscreen loader is displayed while loading more themes via the View More Themes button, preventing any unintended interactions. task-4661292 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#230557
Electronic payments registered from an invoice will now keep the payment transaction connected to that invoice. This makes payment tracking and reconciliation clearer for accounting users and prevents missing invoice links in electronic payment records.
Original PR description
Steps to reproduce: - Create an invoice through Accounting app - Post the invoice - Register the payment using the "Register Payment" wizard with an electronic payment method. Description of the…
Steps to reproduce: - Create an invoice through Accounting app - Post the invoice - Register the payment using the "Register Payment" wizard with an electronic payment method. Description of the issue/feature this PR addresses: **The payment transaction was not being linked to the invoice for electronic payments.** To resolve this, I passed the current invoice IDs as context through action_register_payment in the account.move.line model. Then, I retrieved this context value in _prepare_payment_transaction_vals of the account.payment model to set the invoice_ids Many2many field. Current behavior before PR: The payment transaction is not linked to the invoice for electronic payments. Desired behavior after PR is merged: The payment transaction will be correctly linked to the invoice for electronic payments. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#208520 Forward-Port-Of: odoo/odoo#197091
Romanian eTransport exports now use the EU VAT-standard country code for Greece, changing it from GR to EL where required. This helps avoid validation errors when sending transport documents and keeps partner and transporter country data consistent.
Original PR description
Added a mapping for EU VAT country codes to ensure that the VAT prefix aligns with EU standards (e.g., 'GR' -> 'EL') in EDI exports. ## Description of the issue/feature this PR addresses: This PR…
Added a mapping for EU VAT country codes to ensure that the VAT prefix aligns with EU standards (e.g., 'GR' -> 'EL') in EDI exports. ## Description of the issue/feature this PR addresses: This PR adds country code mapping functionality to ensure compatibility with the format required by the Romanian eTransport system. Specifically, it adds the conversion of the country code "GR" (Greece) to "EL" according to European VAT standards and applies this mapping to relevant fields in transport documents. ## Current behavior before PR: Before this PR, the country code for Greece was sent as "GR" to the eTransport system, which could cause validation errors because in European VAT systems, Greece is identified by the code "EL". Also, there was no consistent mapping for country codes in different parts of the system. ## Desired behavior after PR is merged: After implementing this PR, country codes will be correctly mapped to comply with European VAT standards, especially the conversion of "GR" to "EL" for Greece. This ensures that documents sent through eTransport contain the correct country codes and will pass system validations. The mapping is applied to country codes for both commercial partners and transporters. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#216122 Forward-Port-Of: odoo/odoo#214621
Argentina VAT report exports now correctly generate both required AFIP text files for type C vendor bills and invoices without taxes. This helps businesses submit complete tax return files and avoid missing documentation in AFIP reporting.
Original PR description
…afip code '0' **Description of the issue/feature this PR addresses:** This PR addresses an issue identified in the generation of .txt files for invoices that utilize AFIP tax code '0' **Current behavior before PR:** The system is only generating one of the two .txt files required by AFIP for specific invoice types. Affected Cases: - Invoices of type 'C'. - Invoices that have no taxes. **Desired behavior after PR is merged:** Two .txt files should be generated for all invoice types, as per AFIP requirements. [HERE](https://app.screencastify.com/watch/2mtioGVxEOwW0rAHJS2v) is a video replicating the issue: 1. In localization Argentina, create a vendor bill type 'C' 2. In 'Tax Return' report, filter by date and 'Tax Type: Purchase' 3. Download .ZIP file and see only one .txt Forward-Port-Of: odoo/enterprise#96052
Website form fields now keep their spacing offset when display settings such as label position or descriptions are previewed or changed. This prevents users from having to reapply layout spacing after simple customization actions in the website editor.
Original PR description
Before this commit, changing display parameters of a field (label position, description, etc.) would remove the offset already added. It would require to add them again if a change was made on the display, even if the mouse just hovered the buttons. This commit solves the issue. Steps to reproduce the bug: - Add a form snippet - Add an offset to a field - In the snippet customization, hover over the label position (The offset was removed for good) task-3675509 Forward-Port-Of: odoo/odoo#231297 Forward-Port-Of: odoo/odoo#181344
The website SEO Auto-Fill action no longer crashes on system pages such as login, signup, password reset, and donation payment pages. This lets website managers use SEO optimization tools reliably across these pages without encountering an error.
Original PR description
Steps to Reproduce: 1.Go to the website and open a system page such as: /web/login /web/signup /web/reset_password /donation/pay 2.In the top menu, go to Site → Optimize SEO. 3.Click the Auto-Fill button. 4.Observe that a traceback appears. Before this commit: Clicking the Auto-Fill button caused a traceback error because pageTextContentEl was null due to wrong selector. As a result, getElementsByTagName could not be accessed. In this commit: We provide the correct querySelector value so that pageTextContentEl properly references the intended DOM element. This fix prevents the error and ensures that the SEO Auto-Fill button works correctly, populating all required fields without issue. task-4974618
Fixed an issue where using the keyboard arrows in the Helpdesk knowledge base search suggestions could trigger an error. This keeps customer self-service browsing smoother and prevents users from being interrupted while searching for help articles.
Original PR description
Steps to Reproduce: 1. Navigate to '/helpdesk/customer-care-1/knowledgebase'. 2. Enter any text in the search bar to trigger suggestions. 3. Press the down arrow key twice. 4. A traceback error occurs, indicating an Odoo Client Error. Before this commit, we had a crash when a user types something in a searchbar in the website helpdesk and do keydowns: "Cannot read properties of undefined (reading 'nextElementSibling')" To fix this, we need to add the 'data-bs-toggle' attribute to let BS find it to set '_element' (which must be the previous sibling of the dropdown-menu). This data attribute was probably not set before because in this case the BS dropdown is not used on a button or a link as documented; we use it as an autocomplete functionnality. task-4752497 Forward-Port-Of: odoo/enterprise#97149 Forward-Port-Of: odoo/enterprise#90228
Contacts that are linked to Point of Sale orders can no longer be deleted, preventing past orders from losing their customer information. This preserves sales history accuracy and avoids gaps in reporting or customer service records.
Original PR description
Before this commit, it was possible to delete a contact record even if it was linked to PoS orders, which would cause it to be unlinked from those orders. opw-5164368 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#231612 Forward-Port-Of: odoo/odoo#231442
Tooltips in live chat, messaging, point of sale, and emoji picker screens are now included in the normal translation process. This ensures users see helpful hover text in their selected language, improving consistency across localized deployments.
Original PR description
Unless you tell Owl to do so, custom attributes like data-tooltip aren't translated. This commit adds the data-tooltip attribute to the list of translated attributes when missing. *: im_livechat, mail, point_of_sale Forward-Port-Of: odoo/odoo#231541 Forward-Port-Of: odoo/odoo#231006
This fixes employee contract calendars so weekends and public holidays from past, expired contracts are shown again before a current contract starts. It helps HR and payroll users see accurate historical working-time information while still excluding draft contracts that should not be used.
Original PR description
Since changes made in https://github.com/odoo/odoo/pull/212959, we don't see anymore the week-end and banck holidays before the start date of your current contract. As the goal of the initial commit was to prevent to use the contracts in state 'new', we add the contracts 'exppired' that are contracts of the past that really give information of the working hours. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#231400
This update ensures accounting localization tests always install the needed demo data before running. It keeps test behavior consistent across versions and reduces the risk of false test failures, with no direct impact on end users.
Original PR description
In later versions, we improve the testing suite to avoid having to install demo data in order to reduce the testing time. In order to keep the testing configuration simple across versions, we force the installation of demo data instead of only asserting that demo is installed before launching the script. Forward-Port-Of: odoo/odoo#231810 Forward-Port-Of: odoo/odoo#231660
This fixes an issue in the HTML editor where typing near the edge of a link inside formatted text could lose the surrounding formatting. Users editing rich text content can now add links within styled text without accidentally creating mismatched or unformatted characters.
Original PR description
Problem: If we add a link on a slice of formatted text we end up being able to type unformatted content at the link edges. Cause: After https://github.com/odoo/odoo/commit/3bcbd6f34facb9c88290dbd6496cc5103665a0a2 the `span` can be split and `feff`s are placed around the link, precisely between the link and the `span`. This allows writing unformatted content at the caret when placed between them. Solution: Ensure that the link is created inside the `span`. Also prevent the formatting applied by `.btn` when the link is inside a `span`. Steps to reproduce: 1. Add "abc". 2. Format all the text: set font size 48 (or whatever). 3. Select "b". 4. Create a link on "b" only. 5. Put caret before "a". 6. Press Arrow left. 7. Type any character. → The character is not formatted as the link content. task-5092298 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#231464 Forward-Port-Of: odoo/odoo#228353
Companies based outside the EU can now save valid European VAT numbers without being incorrectly blocked by country-specific validation rules. This helps businesses record accurate tax information for international customers and partners.
Original PR description
****Behavior:**** **Current:** When a company is assigned a VAT number, the integrity of the VAT is checked according to the rules of the company's country except when a EU country is assigned an other EU country's VAT, then the integrity of the VAT is checked according to the other EU country's rules. **Expected:** We want to allow Foreign companies to have valid European VAT numbers. **Steps to reproduce:** - Create a new contact, select company and add any name - Select a country that is not in the EU and has implemented the VAT system (Ex: China, Australia | Some countries, like the US or some smaller countries, don't have an implementation in Odoo, or just dont use VATs, in that case they are allowed to put whatever in the VAT field) - Input a valid EU VAT number in the Tax ID field (ex: FR17698800935) - when saving, the system should raise a Validation Error. opw-5080231
This change restores the previous currency translation behavior for cumulative translation adjustment calculations. It avoids incorrect year-over-year balance sheet revaluations by using the appropriate closing rate instead of a current rate that produced unexpected results.
Original PR description
This reverts commit c440bb52d19b8dcec8b708509973c4095a577b34 as it doesn't work as expected in year-over-year re-evaluation in balance sheets. task-5085888 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#231823 Forward-Port-Of: odoo/odoo#231718
Miscellaneous changes
opw-5018450 Forward-Port-Of: odoo/odoo#231654 Forward-Port-Of: odoo/odoo#231394
Original PR description
opw-5018450 Forward-Port-Of: odoo/odoo#231654 Forward-Port-Of: odoo/odoo#231394
6 changes
Enhancements to existing features
The Documents folder action menu now opens right away instead of waiting for all available actions to load. Users also get quicker feedback when enabling folder actions, with fewer background server refreshes during multiple changes.
Original PR description
The cogwheel which holds the folder actions was slow to open because it loads the actions at startup. To speedup it up, we backport the fix odoo/enterprise#90124 that allows the cogwheel to be open while loading the actions (instead of waiting that the actions are loaded). We also add a spinner while it is being loaded. When selecting action to embed for the folder, it was slow as well. To solve the problem, we toggle the action immediately (not waiting the answer of the server) and roll it back in case of failure. Finally, to limit the number of calls to the server, we only reload the search model if there are no pending toggle of action. So if you activate for example 5 actions in a row and the connection is slow enough, the search model will only be reloaded once instead of 5 times (when the 5 actions are toggled). Task-4828503 Forward-Port-Of: odoo/enterprise#94141
Resolved issues and error corrections
Fixed an issue where Argentine VAT reports for certain vendor bills, such as type C invoices without taxes, produced only one of the two files required by AFIP. Businesses can now generate complete report ZIP files for these cases, helping ensure compliant tax submissions.
Original PR description
…afip code '0' **Description of the issue/feature this PR addresses:** This PR addresses an issue identified in the generation of .txt files for invoices that utilize AFIP tax code '0' **Current behavior before PR:** The system is only generating one of the two .txt files required by AFIP for specific invoice types. Affected Cases: - Invoices of type 'C'. - Invoices that have no taxes. **Desired behavior after PR is merged:** Two .txt files should be generated for all invoice types, as per AFIP requirements. [HERE](https://app.screencastify.com/watch/2mtioGVxEOwW0rAHJS2v) is a video replicating the issue: 1. In localization Argentina, create a vendor bill type 'C' 2. In 'Tax Return' report, filter by date and 'Tax Type: Purchase' 3. Download .ZIP file and see only one .txt Forward-Port-Of: odoo/enterprise#96052
Reverse charge taxes are now reported with the actual tax payable amount instead of zero in SAF-T exports. This helps ensure Romanian tax reports match tax authority expectations and reduces the risk of incorrect filings.
Original PR description
When a reverse charge tax is used, we export a `TaxInformation` with a zero amount instead of the real amount of the tax. The tax authority requires to show the tax to pay and doesn't care about the tax to receive... In order to fix this, we only sum the tax details of lines having positive repartition lines. opw-5125678 Forward-Port-Of: odoo/enterprise#97161 Forward-Port-Of: odoo/enterprise#97117
This fix prevents the Helpdesk knowledge base search suggestions from causing an error when users navigate results with the keyboard. It makes the search experience more reliable for customers using the self-service helpdesk pages.
Original PR description
Steps to Reproduce: 1. Navigate to '/helpdesk/customer-care-1/knowledgebase'. 2. Enter any text in the search bar to trigger suggestions. 3. Press the down arrow key twice. 4. A traceback error occurs, indicating an Odoo Client Error. Before this commit, we had a crash when a user types something in a searchbar in the website helpdesk and do keydowns: "Cannot read properties of undefined (reading 'nextElementSibling')" To fix this, we need to add the 'data-bs-toggle' attribute to let BS find it to set '_element' (which must be the previous sibling of the dropdown-menu). This data attribute was probably not set before because in this case the BS dropdown is not used on a button or a link as documented; we use it as an autocomplete functionnality. task-4752497 Forward-Port-Of: odoo/enterprise#97149 Forward-Port-Of: odoo/enterprise#90228
This fixes how French VAT report data is prepared for ASPOne submissions so key name and address fields respect required length limits. It helps prevent filing issues caused by values that do not match the official XML-EDI format.
Original PR description
The aim of this commit is making sure that the field Designation, DesignationSuite1, DesignationSuite2, AdresseVoie and AdresseComplement are correctly filled. Indeed, the XSD implied that these fields have to be respectively 35, 35, 35, 30 and 35 characters max. [Documentation 2025](https://www.aspone.fr/files/tutoriaux/xmledi/Documentation_XML-EDI.zip) no task id Forward-Port-Of: odoo/enterprise#97199
Financial reports now translate currency amounts using the closing rate for the reporting period instead of the current rate. This restores the expected behavior for more accurate period-based accounting reports, especially for aged balances, ledgers, trial balances, and currency tables.
Original PR description
This reverts commit 0719c63a646c360a4b090745cd8105128332ef38. task-5085888 Forward-Port-Of: odoo/enterprise#97271
18 changes
Enhancements to existing features
Changes made to POS category names or ordering now update correctly in UrbanPiper when menus are synced again. This keeps online menus aligned with in-store POS setup and reduces manual correction after category changes.
Original PR description
Before this commit: ----------------------------------------- - After syncing the menu, changes in a POS category (e.g., name or sequence) were not reflected in UrbanPiper when the menu was synced again. After this commit: ----------------------------------------- - Category updates (name or sequence) are now synced with UrbanPiper on subsequent menu syncs. Task-5122804 Forward-Port-Of: odoo/enterprise#96270
This update fine-tunes point-of-sale checks around preparation warning dialogs and simplifies how the partner button styling is handled. It helps keep POS workflows and automated validations more reliable without changing day-to-day business processes.
Original PR description
*: pos_restaurant_preparation_display, l10n_de_pos_res_cert, pos_settle_due This commit makes the following improvements: Adjusts the `discardOrderWarningDialog` tour step to check on the Product screen. Refactors the partner button class to use a getter instead of XML inheritance. Task-5116688
POS users can now change whether a product is available for food delivery directly from the product information popup. This helps restaurants react faster when items sell out or become available again, without leaving the POS workflow.
Original PR description
Before this commit: ------------------------- There was no way to change the food availability status of a product from the POS terminal. After this commit: ------------------------- Added an option in the POS UI product info popup to toggle the availability of products for configurations that support food delivery handling. Task: 4951476
Click and collect orders can now be placed for products that are out of stock when the business has chosen to keep selling them. This helps retailers avoid blocking eligible pickup sales and better support backorders or replenishment-based sales.
Original PR description
Allow selling with click and collect when a product is out of stock and continue selling. See also: - https://github.com/odoo/documentation/pull/14799
Resolved issues and error corrections
This fixes payroll work entries so they are properly updated when employee attendances are created, changed, or deleted. Payroll teams will see attendance durations reflected correctly, reducing duplicate, missing, or incorrect work entries.
Original PR description
Steps to reproduce: - In attendance, create, modify or delete an attendance - In payroll, go to the work entries tab - If creating an attendance, work entries with the previous and current attendance…
Steps to reproduce: - In attendance, create, modify or delete an attendance - In payroll, go to the work entries tab - If creating an attendance, work entries with the previous and current attendance duration will be displayed - If modifiying an attendance, changing the duration would not create a new attendance nor modify the existing one - If deleting an attendance, the work entry would be deleted even if there were other attendances on the same day Reason: - For creation, the method did not check if there was already a work entry linked to this day to archive it. - For modification, nothing was done to regenerate the work entry after editing the duration. - For deletion, the method archived work entries regardless of whether or not there were other attendances in the day. How it was fixed: - For creation, the create method now checks if there is another work entry and archives it when creating the new one - For modification, if the modified attendance has a different duration to its linked work entry, the work entry is regenerated - For deletion, the work entry is only deleted when no attendances are left, and if not, regenerate the work entry to match the new total attendance duration Task ID: 5116353
This update brings the spreadsheet engine to a newer version with multiple fixes for everyday spreadsheet tasks. Users should see more reliable copy-paste, formulas, charts, data validation, mobile editing, and dashboard interactions, along with a performance improvement for spreadsheet calculations.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/0d4315afa [REL] 19.0.6 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/0d4315afa [REL] 19.0.6 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/cd9e8ef80 [FIX] clipboard: paste as value with empty format string [Task: 5156459](https://www.odoo.com/odoo/2328/tasks/5156459) https://github.com/odoo/o-spreadsheet/commit/1e17e5ef1 [FIX] table: create dynamic table on #SPILL! errors [Task: 5102771](https://www.odoo.com/odoo/2328/tasks/5102771) https://github.com/odoo/o-spreadsheet/commit/1b8aefd16 [FIX] data_validation: selecting range from another sheet [Task: 4948201](https://www.odoo.com/odoo/2328/tasks/4948201) https://github.com/odoo/o-spreadsheet/commit/7b8deb442 [FIX] RibbonMenu: hint the scrollable menu [Task: 5106796](https://www.odoo.com/odoo/2328/tasks/5106796) https://github.com/odoo/o-spreadsheet/commit/559da3805 [FIX] RibbonMenu: reset scroll value on menu exploration [Task: 5106796](https://www.odoo.com/odoo/2328/tasks/5106796) https://github.com/odoo/o-spreadsheet/commit/f8ca858c8 [FIX] find & replace: fix arrow buttons sizing [Task: 5154004](https://www.odoo.com/odoo/2328/tasks/5154004) https://github.com/odoo/o-spreadsheet/commit/33783882b [PERF] evaluation: stop the dependencies search early [Task: 4954710](https://www.odoo.com/odoo/2328/tasks/4954710) https://github.com/odoo/o-spreadsheet/commit/dd5b415cd [FIX] composer: show spreaded cell placeholder on mobile composer [Task: 5139519](https://www.odoo.com/odoo/2328/tasks/5139519) https://github.com/odoo/o-spreadsheet/commit/867dad408 [FIX] composer: hide `Fx` icon when composer has a placeholder [Task: 5139519](https://www.odoo.com/odoo/2328/tasks/5139519) https://github.com/odoo/o-spreadsheet/commit/bd3206526 [FIX] functions: fix LINEST error massage [Task: 5059375](https://www.odoo.com/odoo/2328/tasks/5059375) https://github.com/odoo/o-spreadsheet/commit/ca6d1e982 [FIX] chart: wrong position for chart menu in dashboard [Task: 5153929](https://www.odoo.com/odoo/2328/tasks/5153929) https://github.com/odoo/o-spreadsheet/commit/21c70cf74 [FIX] chart: clip show value text to chart area [Task: 5125970](https://www.odoo.com/odoo/2328/tasks/5125970) https://github.com/odoo/o-spreadsheet/commit/99d115b00 [FIX] composer: set cursor on prettified formula [Task: 5095470](https://www.odoo.com/odoo/2328/tasks/5095470) https://github.com/odoo/o-spreadsheet/commit/93593dbe5 [FIX] chart: tooltip has wrong format for date chart [Task: 5126261](https://www.odoo.com/odoo/2328/tasks/5126261) https://github.com/odoo/o-spreadsheet/commit/8ab1ba912 [IMP] carousel: add context menu button [Task: 5081771](https://www.odoo.com/odoo/2328/tasks/5081771) https://github.com/odoo/o-spreadsheet/commit/fb48bcd9b [FIX] xlsx: import data validation rules with formula [Task: 5062253](https://www.odoo.com/odoo/2328/tasks/5062253) https://github.com/odoo/o-spreadsheet/commit/ca2956ff7 [FIX] chart: wrong label format for date chart [Task: 4908471](https://www.odoo.com/odoo/2328/tasks/4908471) https://github.com/odoo/o-spreadsheet/commit/c493bf2bd [FIX] charts: prevent unnecessary treemap animations [Task: 5003595](https://www.odoo.com/odoo/2328/tasks/5003595) 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: Dhrutik Patel (dhrp) <dhrp@odoo.com> Co-authored-by: Adrien Minne (adrm) <adrm@odoo.com> Co-authored-by: Ronak Mukeshbhai Bharadiya <rmbh@odoo.com> Co-authored-by: Florian Damhaut (flda) <flda@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>
Project portal users can now navigate back more easily from the shared project Gantt view. This fixes a navigation gap and makes the project sharing experience smoother for external users.
Original PR description
Currently, project portal users cannot easily navigate back from the project portal view.This commit adds a back button in the gantt view of project sharing to improve navigation. Also, the project sharing gantt view is added in this commit- https://github.com/odoo/enterprise/pull/80545/commits/daaea2742a9ee786045ea805941eb3e8374c99d1 task: 5075423
Clicking the AI icon on blog records no longer triggers an error when activity tracking is unavailable. This improves reliability for website blog users by letting the AI panel open normally instead of blocking the workflow.
Original PR description
Currently, an error occurs when the user clicks on the AI icon at the top. Steps to Reproduce: - Install the `website_blog` module. - Go to `Website > Configuration > Blog > Blogs`. - Open any `blog`…
Currently, an error occurs when the user clicks on the AI icon at the top. Steps to Reproduce: - Install the `website_blog` module. - Go to `Website > Configuration > Blog > Blogs`. - Open any `blog` and click the `AI icon` at the top. `AttributeError: 'blog.blog' object has no attribute 'activity_ids'` This error occurs after [this commit]. When the user clicks the AI icon, it attempts to create an AI channel and fetch planned activities if any exist. However, the blog.blog model does not have the activity_ids attribute because it does not inherit from mail.activity.mixin. As a result, the error is raised [1]. This commit ensures that the system only checks for activities if the record has the activity_ids attribute; otherwise, it returns empty data, indicating no activities found. [1]- https://github.com/odoo/enterprise/blob/64fa9e46f6195bd4312130cce33b94a129584523/ai/models/mail_thread.py#L12 [this commit]: https://github.com/odoo/enterprise/commit/7333dc779c75479c708edb7ecd1c0a0d4d2ae619 sentry-6942245851
This fix keeps analytic accounting fields in sync when the project plan setting is changed. It prevents sales order confirmations from failing for service products that create projects, improving reliability for accounting and sales workflows.
Original PR description
[FIX] analytic: Add support for updating the analytic.project_plan system parameter The dynamic fields created for each analytic plan, besides the project plan do not update when the project plan…
[FIX] analytic: Add support for updating the analytic.project_plan system parameter
The dynamic fields created for each analytic plan, besides the project plan do not update when the project plan system parameter changes.
Steps to reproduce
-----
1. Set the analytic.project_plan system parameter to a value other than 1
2. Enable Analytic Accounting setting under Accounting > Analytic
3. Create a sales order with a service product that creates a project.
4. Confirm sales order and receive a traceback:
ValueError: Invalid field account.analytic.line.x_plan1_id in leaf ('x_plan1_id', 'in', [23])
Cause
-----
A field on account.analytic.line is created for every plan using the id of the plan to make the names unique, like x_plan{id}_id. The plan that has the ID of the analytic.project_plan parameter does not get a dynamic field, it uses account_id. If you change the system parameter for analytic.project_plan, the plan with the corresponding value will now use account_id, and the plan that corresponds to the previous default value will have no corresponding field on account.analytic.line.
Solution
-----
Extend the write method on ir.config_parameter so that when the value of the analytic.project_plan is changed the dynamic fields on account.analytic.line are properly added and removed. This solution always creates a field for the previous value and deletes a field for the new value so that no plan ever has two fields referencing it.
opw-ticket 5069381Live Chat no longer offers the option to create a new user directly from the agent selection list. This avoids a confusing failed save caused by missing required information and keeps agent management on the intended user setup flow.
Original PR description
**Steps to reproduce:** Go to 'Live Chat' Open the live chat channel form view by clicking on the hamburger icon Click 'Add a line' to add another agent A popup with live chat users will appear Click 'New' at the bottom to create the new user A simplified form view will open to create a user Fill in all the details and click 'Save & Close' **Current behavior before PR:** A banner appears with the message 'Missing required fields'. This occurs because the 'partner_id' field, which is required, is included in the agent list view but not in the user creation form. As a result, the user creation process cannot be completed. **Desired behavior after PR is merged:** It will no longer be possible to create a new user from the agent list view. task-5172541 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Romanian eTransport exports now use the EU VAT-standard country code for Greece, sending "EL" instead of "GR" where required. This helps avoid validation errors when submitting transport documents and keeps partner and transporter data consistent.
Original PR description
Added a mapping for EU VAT country codes to ensure that the VAT prefix aligns with EU standards (e.g., 'GR' -> 'EL') in EDI exports. ## Description of the issue/feature this PR addresses: This PR…
Added a mapping for EU VAT country codes to ensure that the VAT prefix aligns with EU standards (e.g., 'GR' -> 'EL') in EDI exports. ## Description of the issue/feature this PR addresses: This PR adds country code mapping functionality to ensure compatibility with the format required by the Romanian eTransport system. Specifically, it adds the conversion of the country code "GR" (Greece) to "EL" according to European VAT standards and applies this mapping to relevant fields in transport documents. ## Current behavior before PR: Before this PR, the country code for Greece was sent as "GR" to the eTransport system, which could cause validation errors because in European VAT systems, Greece is identified by the code "EL". Also, there was no consistent mapping for country codes in different parts of the system. ## Desired behavior after PR is merged: After implementing this PR, country codes will be correctly mapped to comply with European VAT standards, especially the conversion of "GR" to "EL" for Greece. This ensures that documents sent through eTransport contain the correct country codes and will pass system validations. The mapping is applied to country codes for both commercial partners and transporters. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#216122 Forward-Port-Of: odoo/odoo#214621
This fix improves the Malaysian MyInvois submission flow by showing clearer error messages and preventing crashes when invoice lines have no taxes. It also applies more appropriate tax classifications for zero-tax and no-tax cases, helping users submit invoices with fewer interruptions.
Original PR description
### PURPOSE - While clicking on the 'Send To MyInvoice' button, the current Error shows HTML tags. - Improve Malaysian Tax Type computation. - There is a traceback when there is no tax selected on…
### PURPOSE
- While clicking on the 'Send To MyInvoice' button, the current Error shows HTML tags.
- Improve Malaysian Tax Type computation.
- There is a traceback when there is no tax selected on any of the lines of the invoice, and we click on the Send To MyInvoice button.
### SPECIFICATION
- Fixing the Display message shown inside UserError.
- Change the computation of tax,
- If the tax amount is 0 and the tax scope is set, the tax type will be set to `Exempt` (Based on the default tax data provided)
- Fix traceback when submitting to MyInvois occurs when no tax is selected in the invoice.
- Additionally, we handle flow when there is no tax on the product and submit to MyInvois.
- If the case is of a Consolidated Invoice in POS, there will be no UserError to notify the User to set taxes (coz we do that in batch), and by default the tax will be set to 'Not Applicable'.
- If the user tries to send a separate invoice and the tax is not set, then there will be a UserError that notifies the user that they must set tax on the invoice line.
task-5086207This update adds validation for Dutch structured payment references and prevents SEPA QR codes from incorrectly treating free-text payment notes as structured references. This helps reduce payment processing errors for customers using Dutch payment formats.
Original PR description
[SEE THIS PR](https://github.com/odoo/odoo/pull/200922) [IMP] account: Check NL structured reference The aim of this commit is implementing a new function to check the structured reference for the Netherlands. Even if dutch people can use the ISO format, they can still use the NL format. no task id [FIX] account_qr_code_sepa: Don't fill structured communication with unstructured communication This commit ensures that unstructured communication is not mistakenly used as structured communication in the QR code values. To achieve this, we use is_valid_structured_reference, a simple validation approach that checks all available is_valid_structured_reference functions. While this method may lead to occasional false positives, we consider this trade-off acceptable. opw-4575004 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#231373
Social app users can now add images to Twitter/X comments without upload errors because the correct file type is sent. Comment drafts are also preserved when adding emojis or uploading files, reducing accidental loss of typed text.
Original PR description
Issue 1 ======= Steps to reproduce ----------------------- 1. Go to the Social app. 2. Create or Select any twitter post. 3. Add a comment to that post with an image. 4. Press Enter. ---> An error…
Issue 1
=======
Steps to reproduce
-----------------------
1. Go to the Social app.
2. Create or Select any twitter post.
3. Add a comment to that post with an image.
4. Press Enter.
---> An error notification will be shown.
When adding an image in a post comment to Twitter, the image was not uploaded properly because the MIME type was not set, and it defaulted to `application/octet-stream`.
This caused the following error:
```
{"errors": [{"parameters": {"$.media_type": ["'application/octet-stream'"]},
"message": "$.media_type: does not have a value in the enumeration
[video/mp4, video/webm, video/mp2t, video/quicktime, text/srt, text/vtt,
model/gltf-binary, model/vnd.usdz+zip, image/jpeg, image/gif, image/bmp,
image/png, image/webp, image/pjpeg, image/tiff]"}], "title": "Invalid Request",
"detail": "One or more parameters to your request was invalid.",
"type": "https://api.twitter.com/2/problems/invalid-request"}
```
From the above error, it's clear that Twitter only accepts specific MIME types.
This fix ensures the image has the correct MIME type so it can be uploaded without issues.
-------------------------------------------------------------------------------------------------------------------------------
Issue 2
=======
Steps to Reproduce
------------------------------
1. Select any post from social feed.
2. Add text comment or edit existing comment.
3. Upload file or add emoji.
=> The comment text is cleared/reset to its initial value.
Technical
------------------------------
With commit [1] we added `t-att-value` which sets the value of the textarea
on every re-render of the component.
After this commit
------------------------------
The initial value is only set once when component is mounted.
Removed `remove image` button for attachment while posting comments.
[1] https://github.com/odoo/enterprise/commit/ced5e88f433b7b9a8e1429259cd8bb6594b34852
Task-4845385
Forward-Port-Of: odoo/enterprise#91995This fixes an internal calculation issue in accounting reports that could use the wrong record context. It helps ensure report values are computed consistently and reduces the risk of incorrect financial reporting behavior.
Original PR description
Forward-Port-Of: odoo/enterprise#97144
Annual Statements now correctly includes localized report variants even when those variants are made up of multiple report sections. This prevents errors during setup or upgrades and helps ensure local financial statement layouts are applied automatically as intended.
Original PR description
The "Annual Statements" report comes with additional code at create() and write() of account.report, so that any new localized variant of the Balance Sheet, Trial Balance or Profit & Loss will automatically replace its root report in the Annual Statements report's sections. The idea behind that is to "magically" replace those generic reports by the right variant when it's created. The problem with that came when you tried adding a variant to one of those reports that was itself a composite report. In such case, you got a traceback stating a composite report's sections could not have sections themselves. We indeed only support one level of hierarchy for composite reports. We solve the issue by adding all the sections of such composite variant to the Annual Statements instead of adding the variant itself. Bug originally reported by Upgrade, here https://github.com/odoo/upgrade/pull/8571 . Forward-Port-Of: odoo/enterprise#97145
Documentation and clarification updates
This pull request adds a contributor license agreement record for arch-fan. It is an administrative legal update that enables their contributions to be accepted under the project's contribution rules, with no functional impact on Odoo users.
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
This pull request records that the contributor arch-fan has signed Odoo's Contributor License Agreement. This is an administrative legal update that enables their contributions to be accepted under the project's contribution rules.
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
22 changes
Enhancements to existing features
Refreshing UrbanPiper webhooks from settings now also disconnects existing products from the POS and sends a fresh menu update to UrbanPiper. This helps keep the external delivery platform aligned with the latest point-of-sale menu data.
Original PR description
Following this commit: - On refreshing webhooks from settings, products will be unlinked from pos. - Fresh menu will be updated to Urbanpiper platform task-5163764
This update adds automated coverage for Indian e-invoicing when exports are made without a Letter of Undertaking and prices already include tax. It helps ensure the reported taxable base matches the invoice total, reducing the risk of incorrect compliance data.
Original PR description
Add test for export without LUT and price included tax, but base should be equal to invoice total.
This update adjusts how partner records are handled when sending accounting documents, reducing the risk of using the wrong customer or vendor context. It helps make the accounting document sending process more reliable without changing the user-facing workflow.
Original PR description
[IMP] account: Use a variable that is filled in to call a function. - The function is modified so that the “parents” variable does not call the “find_or_create” function, since a variable is being used that is filled in each pass of the ‘for’ loop with “res.partner”. Therefore, when “find_or_create” is called, self may have more than one “partner,” so the solution we have implemented is to change the ‘partner’ variable when the function is called and replace it with “self.env[‘res.partner’]”. https://github.com/odoo/odoo/blob/18.0/addons/account/models/account_move_send.py#L156
Changing inventory valuation settings on very large product categories is now much faster. This helps businesses avoid long waits or timeouts when updating stock valuation methods for categories with many product variants.
Original PR description
Changing a product.category's valuation from manual to real-time or real-time to manual does mainly two things. The first one is emptying the current stock and valuation. The second is to replenish…
Changing a product.category's valuation from manual to real-time or real-time to manual does mainly two things. The first one is emptying the current stock and valuation. The second is to replenish the stock according to the new valuation. This process can be heavy when the number of product.products related to the active product.category is big. This can happen when product.attributes are set to "Creation: Instantly" for instance. This commit aims at improving the overall speed of this change in some cases. A first optimization is to use `product_tmpl_id` to retrieve the `product_variant_ids`. When there are a lot of products, it's faster to explicitely use the delegated field `product_tmpl_id`. This avoids lots of calls to `__getitem`/`__setitem__` in `_compute_related`. The downside of doing this is that subsequent calls to `self.product_variant_ids` are gonna raise a CacheMiss. So we have to explicitely use `product_tmpl_id.product_variant_ids` every time. We argue that it's not really an issue here as retrieving the variant_ids from a product.product itself is not that frequent in the codebase. A second optimization is to avoid calling `product.qty_available` in `_compute_value_svl` in case `avg_cost = 0`. With an avg_cost of 0, the total_value is always going to be 0. So there's no point in calling the heavy compute method `_compute_quantities` to retrieve `qty_available` here. #### speedup In a database with 228 000 product.products linked to the same product.category, the time to switch the category valuation from manual to real-time: +15min (timeout) -> 18s --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The website editor now detects when a browser or device cannot support image filters and disables that option instead of showing an error. This keeps editing stable for users on systems without WebGL support, such as some Linux Chrome setups.
Original PR description
On recent versions of Chrome for Linux (v140+), the old SwiftShader software fallback for WebGL has been removed. As a result, new window.WebGLImageFilter() now throws if no GPU context is available, typically when WebGL is disabled or unsupported. Since the application cannot enable WebGL from JavaScript, this commit improves the user experience by detecting the absence of a WebGL context early and disabling image filters in edit mode. Instead of raising a traceback, the editor now skips the filter feature and can optionally display a friendly message explaining that WebGL is required to use image filters. This avoids runtime errors and ensures a more robust behavior on platforms where WebGL is unavailable. task-5117584 Forward-Port-Of: odoo/odoo#229705
Resolved issues and error corrections
Fixes an issue where planned work-from-home days could disappear from future dashboard balances after an unapproved request in the current week. Employees and managers will now see more accurate upcoming leave entitlements for weekly accrual plans.
Original PR description
To reproduce: ============= - create accrual plan to get 1 day of WFH every week on monday, no carry over - create allocation with this plan for an employee - in the actual week you can see on…
To reproduce: ============= - create accrual plan to get 1 day of WFH every week on monday, no carry over - create allocation with this plan for an employee - in the actual week you can see on dashboard that you have 1 day of WFH - let's say we are a Monday, take 1 day of WFH on Wednesday (don't approve it) - before Wednesday dashboard shows 1 day of WFH - after Wednesday in same week dashboard shows 0 day of WFH - in next week dashboard shows 0 day of WFH which is wrong Problem: ======== The computation of virtual accrual leaves was wrong because it took into account the leaves already taken in the current week, while they should be ignored. Solution: ========= as we already check if the allocation we are computing virtual accrual for is in same time range as the current one here : https://github.com/odoo/odoo/blob/4c9eadc3c1b2d5ef6a495b89ab33481d5d545ec4/addons/hr_holidays/models/hr_leave_allocation.py#L625 we don't need to subtract the number of days/hours of the current allocation opw-4712586 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Spreadsheet field synchronization in Sales Management now remains stable when users use undo or redo. This prevents interruptions while editing spreadsheet-linked sales data and keeps version history handling reliable.
Original PR description
Fix an issue where field sync would crash when used with UNDO/REDO. Task: 4854879
OdooBot's preloaded canned responses are now shared with the right user group, making them visible to users as intended. This fixes demo and default data so teams can access the suggested replies without extra setup.
Original PR description
**Description of the issue this PR addresses:** Modify Canned Response master and demo data **Current behavior before PR:** Before this PR, canned responses created by OdooBot in master and demo data were not shared effectively, so they were not visible to anyone. **Desired behavior after PR is merged:** This PR ensures canned responses created by OdooBot are shared properly, by assigning a user group, ensuring that everyone can see them. task-[5069111](https://www.odoo.com/odoo/project/1519/tasks/5069111) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Cancelled Restaurant POS orders are now removed from the Ticket Screen instead of showing under paid orders. This prevents staff from seeing voided orders as completed sales and keeps order records clearer during service.
Original PR description
pos*: point_of_sale, pos_restaurant Steps to reproduce: - Open the Restaurant POS and place an order. - Send it to the preparation screen by clicking Order. - Reopen the order and cancel it via the Action button. Issue: - The cancelled order still appears under the Paid section on the Ticket Screen. Fix: - Cancelled orders are now excluded from the Ticket Screen display. - Remove canceled orders from local records. Task: 4936636
Spreadsheet pivot tables now support grouping by reference fields, making it possible to count activities linked to specific leads or other records. This helps users build more accurate activity reports, with safeguards requiring model context to avoid mixing records from different business objects.
Original PR description
This is a feedback from a partner at OXP, he wants to know the number of activities (late or not) linked to some Lead -> activities grouped by res_id. But grouping a pivot by a many2one_reference is currently not supported. This commit adds the support. Note that carelessly grouping by a many2one_reference mixes records linked to different models (same id, but different model). To avoid mixin apples and oranges, you have to either groupby model, *then* by res_id, or add the model to the domain. Task: 5102923 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix prevents tax report errors when a vendor bill includes multiple vehicle-related lines using the same split tax. Tax amounts are now matched per vehicle, so reports stay accurate and can be generated without interruption.
Original PR description
**Steps to reproduce:** 1. Install the *Fleet* and `accounting` modules. 2. Create a new purchase tax. 3. Configure the tax with a 50% repartition line for an `600000 expense` account and a 50%…
**Steps to reproduce:** 1. Install the *Fleet* and `accounting` modules. 2. Create a new purchase tax. 3. Configure the tax with a 50% repartition line for an `600000 expense` account and a 50% repartition line for a `101000 current asset` account for both income and refund. 4. Create a vendor bill with two product lines, each having a different vehicle assigned with the newly created tax in both lines. 5. Check the *Tax Report*(account>tax), including the date of this vendor bill. **Observed behavior:** * Tax lines linked to the current asset account are merged. * Tax lines linked to the expense account remain separate (since `vehicle_id` is set on the `account.move.line`). * This mismatch triggers an error in the tax report. **Root cause:** The tax details query does not account for the `vehicle_id` field when matching tax lines with base lines. As a result, tax lines are incorrectly merged across different vehicles. **Solution:** Override `_get_extra_query_base_tax_line_mapping` to include the `vehicle_id` in the matching condition, ensuring tax lines are only paired with base lines having the same `vehicle_id`. This prevents incorrect merging and resolves the report error. opw-5013757
Swedish Bankgiro and Plusgiro accounts are now handled correctly when generating SEPA payment files and Peppol invoices. This prevents missing bank identification details, helping Swedish payments and electronic invoices process successfully.
Original PR description
… number Bankgiro and Plusgiro accounts in Sweden normally do not have a BIC. However, for Peppol BIS 3 invoices, a BIC tag is required in the XML. The existing _skip_CdtrAgt logic prevents _get_CdtrAgt from being called when no BIC is set, causing the clearing_number to be missing in SEPA payment files for Bankgiro and Plusgiro accounts. This commit introduces overrides for SE-specific account types: _get_cleaned_bic_code: Returns 'SE:Bankgiro' or 'SE:Plusgiro' for Swedish Bankgiro and Plusgiro accounts, ensuring a BIC is present for the invoice XML. _skip_CdtrAgt: Returns False for Bankgiro and Plusgiro accounts to ensure _get_CdtrAgt is called, including the clearing number in the payment file. This guarantees that SEPA payment files and Peppol BIS 3 invoices for Sweden are generated correctly while preserving standard behavior for other banks and countries. Backport of https://github.com/odoo/enterprise/commit/0534491bcd7eed7d246bea85d6ac217a80af815b
Fixes an issue where analytic items could disappear when vendor bills were posted under certain accounting settings, such as disabled auto-check on post or active lock dates. This ensures bills with analytic accounts correctly create analytic reporting entries, improving the reliability of cost tracking and financial analysis.
Original PR description
To reproduce: 1. Ensure Analytic Accounting is activated in the accounting settings 2. Uncheck the option Auto-Check on Post in the Vendor Bills journal 3. Create a vendor bill and set analytic…
To reproduce: 1. Ensure Analytic Accounting is activated in the accounting settings 2. Uncheck the option Auto-Check on Post in the Vendor Bills journal 3. Create a vendor bill and set analytic accounts in at least one line 4. Post the vendor bill 5. Go to Accounting > Analytic Items 6. No analytic item was created for the vendor bill In some cases, such as when the vendor bill journal has `Auto-check on Post` disabled or a there is a lock date set, the analytic items are not created when posting the move, even if analytic accounts were set on the move lines. Cause: In #222196, a check is performed when writing an account.move.line, which unlinks analytic lines created for draft moves. However, this condition is too general, and if additional writes happen in between the analytic line creation and changing the move state to `posted`, the analytic lines are deleted. Solution: The unlinking on analytic lines should only be performed if `analytic_line_ids` are in vals. opw-5053179,opw-5154394 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The accounting contact page now ignores archived bank account records when checking whether another partner uses the same bank account number. This prevents misleading duplicate-account banners from appearing after obsolete bank records have been archived.
Original PR description
If a res_partner_bank record shares an acc_number with other res_partner_bank records, even archived ones, the field duplicate_bank_partner_ids still includes partners from those archived records. As…
If a res_partner_bank record shares an acc_number with other res_partner_bank records, even archived ones, the field duplicate_bank_partner_ids still includes partners from those archived records. As a result, the contact page shows a banner indicating other partners use the same bank account, even though those res_partner_bank records have been archived. Steps to reproduce the issue: 1. Create a new bank account which has the same bank account number as another bank account already associated to a partner 2. Assign this new bank account to another partner 3. Archive this new bank account 4. Go to the contact page of the partner (from step 1) which has a bank account with the same bank account number as the new bank account just created 5. A banner will pop up at the top of the contact saying that this partner uses the same bank account as the partner you set on the bank account in step 2 Solution: Add a condition to the JOIN clause that checks “other.active = TRUE” to ensure that other res_partner_bank records to search for that have the same account number are active. Also add a condition to the WHERE clause that checks “this.active = TRUE” to ensure that the current res_partner_bank record doing the search is active itself. opw-4967083
The help text for advanced employee access settings in Point of Sale now matches how the setting actually works. This reduces confusion for administrators configuring which employees can use advanced POS features.
Original PR description
Before this commit, the help text of the advanced_employee_ids field was inconsistent with its behavior, as it was not possible to keep it empty. This commit updates the help to reflect the actual behavior. opw-5112862 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Marketing cards now stop with an error if image generation fails, instead of appearing successfully synced while empty. Campaign changes also correctly flag all related cards for update, so reused or previewed cards are refreshed when mailings are updated.
Original PR description
If wkhtmltoimage fails for any reason we currently keep going as if an image was actually rendered. Instead if the result of the image render is `None`, raise a generic error. This avoids issues with cards being marked "synced" even though they are actually empty. Additionally, when the campaign gets reused: - preview two records - update cards on a mailing - preview a record again - modify one of the fields on the card - update the cards on a mailing again - the card that was previewed is not updated ALL cards must require sync after a change to the campaign not just active ones. Otherwise they will keep their "synced" status and not be synced when they're selected for update later on. task-5048534
This fix prevents German POS session closing from failing when an order is missing its assigned user during required DSFinV-K export generation. The system now uses the order creator as a fallback, helping stores complete closing procedures and keep export data valid.
Original PR description
Before this commit, closing a session was blocked if an order was missing the user_id field during DSFinV-K export generation. Although the exact reproduction steps are not consistently found, this issue is recurrent. This change makes the code more robust by defaulting to the order's create_uid when the user_id is empty or missing, ensuring the transaction export data remains valid. opw-5123890
Fixes an accounting issue where invoices for dropshipped kit products could record the wrong cost of goods sold when purchase prices were manually changed. This ensures invoice accounting reflects the actual purchase order cost, improving margin and financial reporting accuracy.
Original PR description
**Problem:** When confirming the invoice of an order delivered via dropship for some kit bom product with fifo/avco comp, if the price was manually set on the purchase order, the invoice lines…
**Problem:** When confirming the invoice of an order delivered via dropship for some kit bom product with fifo/avco comp, if the price was manually set on the purchase order, the invoice lines generated for the cogs are inaccurate **Steps to reproduce:** - In settings enable dropshipping, automatic account and anglosaxon accounting - Create a kit product with one component. - Set the route as Dropship for the component. - add a vendor in the purchase tab of the component. - set the cost of the component at 2 - Set the product category to AVCO (Automated) for the component and the product. - Create and confirm a sales order with a quantity of 2 for the product. - On the purchase order set the unit price at 20 for the component. - Confirm the purchase order, then validate the delivery and create the customer invoice. - Confirm the invoice **Current behavior:** In the journal items tab of the invoice the lines for the cogs (expenses and stock interim) have a value of 22 **Expected behavior:** The value should be 40, in accordance with the purchase order **Cause of the issue:** In the mrp_account override of _compute_average_price, the stock move has no bom because it was generated from the purchase order, so this condition will be true https://github.com/odoo/odoo/blob/936ab5f3f120413c7af901dd6ecc414d3e3a6d78/addons/mrp_account/models/product.py#L67 This is not a problem, however the problem comes from the fact that move.product_id is already equal to qty_to_invoice \*component_quantity. https://github.com/odoo/odoo/blob/936ab5f3f120413c7af901dd6ecc414d3e3a6d78/addons/mrp_account/models/product.py#L73 Multiplying it a second time by qty_to_invoice is an error. For instance in our steps, qty_to_invoice is 2, compenent_quantity is 1 and move.product_qty is 2. So when calling _compute_average_price for the comp, we call it with a qty_to_invoice parameter of 4 instead of 2. As a result, because the candidates svls only have a quantity of 2, there will be we a missing quantity. https://github.com/odoo/odoo/blob/936ab5f3f120413c7af901dd6ecc414d3e3a6d78/addons/stock_account/models/product.py#L927-L934 So the result will be the average between the quantity on the purchase order (20) and the standard price (2). Which is why the account line has a value of 22 (2*11) opw-4985440
This fix stops certain document-related attachments from being automatically uploaded to cloud storage when they need to remain available for document business processes. It helps avoid unintended storage behavior and keeps document handling consistent within Odoo.
Original PR description
Some models' attachments will automatically become document attachments which may be used in business code of documents. This commit avoids uploading these attachments to the cloud storage. 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
Point of Sale now reads quantity information included in GS1 barcodes when products are scanned. This helps cashiers add the right number of items automatically, reducing manual corrections and checkout errors.
Original PR description
Before this commit, the quantity encoded in a GS1 barcode was ignored when scanning. After this commit, the product will be added with the correct quantity extracted from the GS1 barcode. opw-5126522 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#229678
The payslip export option was pointing to a page that no longer exists, causing users to see a Page Not Found error. This fix removes or bypasses the broken action so payroll users no longer encounter a dead-end button.
Original PR description
Steps to reproduce: ------------------------- 1. Install `hr_payroll` module 2. Enable debug mode and click on Become Superuser 3. Go to All Payslips and open any payslip record 4. Click on the…
Steps to reproduce: ------------------------- 1. Install `hr_payroll` module 2. Enable debug mode and click on Become Superuser 3. Go to All Payslips and open any payslip record 4. Click on the Export Payslip button Observation: ------------------------- A 404 (Page Not Found) error appears when clicking the Export Payslip button Issue: ------------------------- The button triggers the route `/debug/payslip/<id>`, which was removed in the following commit https://github.com/odoo/enterprise/commit/57969bcaf876a13c36794adeb47e0da938e297ad#diff-0105b1a6a9e742e7eeaf7cc727745ebd3932177378d46332d4ca854f931b3359 The route was never reintroduced afterward, but the Export Payslip button remained in the view. As a result, clicking it leads to a 404 error Solution: ------------------------- 1. Temporarily bypass the `action_export_payslip` function. 2. Remove the Export Payslip button from the XML in the master forward port branch, as doing so does not impact any existing customizations relying on that button opw-5115946 Forward-Port-Of: odoo/enterprise#96359
Fixed a website issue where images added inside team member descriptions were forced to use the same small size as profile avatars on mobile. This keeps avatar styling intact while allowing description images to appear at their intended size, improving page presentation for visitors.
Original PR description
Scenario:
- Add s_company_team snippet ("Meet our team" with avatar side by side
with description)
- Add an image in the description (small or big)
- See the page with mobile
Result: all images in the description get a fixed 8rem height which was
only meant for the avatar image.
Fix: be more specific with the selector to target only the avatar. The
selector .row.s_col_no_resize > .o_not_editable img.o_editable_media
should only target the intended avatar.
opw-4997932
X-original-commit: 0bba8d78d8a6d3609db605428f8704440652e018
Forward-Port-Of: odoo/odoo#2254128 changes
Resolved issues and error corrections
This update brings Odoo's spreadsheet component up to the latest version and fixes several issues affecting everyday spreadsheet use. Users should see better behavior when selecting validation ranges across sheets, clearer LINEST formula errors, and correctly formatted date chart tooltips.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/5c3234b40 [REL] 17.0.76 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/5c3234b40 [REL] 17.0.76 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/5395a3b62 [FIX] data_validation: selecting range from another sheet [Task: 4948201](https://www.odoo.com/odoo/2328/tasks/4948201) https://github.com/odoo/o-spreadsheet/commit/03fc65a34 [FIX] functions: fix LINEST error massage [Task: 5059375](https://www.odoo.com/odoo/2328/tasks/5059375) https://github.com/odoo/o-spreadsheet/commit/785707a15 [FIX] chart: tooltip has wrong format for date chart [Task: 5126261](https://www.odoo.com/odoo/2328/tasks/5126261) 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: Dhrutik Patel (dhrp) <dhrp@odoo.com> Co-authored-by: Adrien Minne (adrm) <adrm@odoo.com> Co-authored-by: Ronak Mukeshbhai Bharadiya <rmbh@odoo.com> Co-authored-by: Florian Damhaut (flda) <flda@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>
The Website countdown snippet now has a safe default background color for the Boxes layout. This prevents an error when users hover over the color removal option, making page editing smoother and more reliable.
Original PR description
Steps to Reproduce: 1. Add a Countdown snippet. 2. Change the layout to Boxes. 3. Apply a background color to the layout. 4. Hover over the delete button in the color picker. 5. A traceback error occurs. Issue: A traceback error occurs because the does not have a default value assigned. This is necessary for the snippet to preview correctly when no additional color is applied. Fix: Assign a default value to ensure that the hover behavior works properly, even when no color is set. The issue was produced here: https://github.com/odoo/odoo/commit/03c552690b15#diff-a0262b81bb090b8c62afbd342b2a30f054cf353a35f9fc0ceeb0f86b7b9cd645 task-4752497 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix updates an internal leave management test so it no longer depends on hardcoded dates that can change in future-year test runs. It helps keep automated quality checks reliable without changing the employee-facing leave experience.
Original PR description
**Issue:** The test case test_tour_mandatory_days_in_hebrew fails for nightly faketime builds that test 'next year' because of hardcoded dates. **Solution:** Instead of checking for static dates, now we are checking if today is mandatory or not. runbot error:233323
Downpayment invoices for partially paid subscription upsell orders now show the correct invoiced amount instead of zero. This helps customers and sales teams see accurate billing information after partial online payments.
Original PR description
Version- 17.0 ### Issue: - When an upsell order is partially paid (e.g., 10% of the original amount), the generated downpayment invoice incorrectly displayed an invoiced amount of 0. ### Steps to reproduce: - Make an Upsell order of subscription. - Update the condition of Online Payment from 100% to 10% (in this case). - Make the payment of 10% from portal view. - The invoice amount will be shown as $0. ### Fix: - Updated `_get_subscription_qty_to_invoice` to correctly determine the invoiced quantity and amount for downpayment invoices on upsell orders. ### Impact: - The downpayment invoices for upsell orders now correctly reflect the actual invoiced amount.
This fixes a display issue in mass mailings where dynamic placeholders could appear on their own line after an email was sent and became read-only. Sent mailing content now keeps placeholders inline, preserving the intended layout and reducing formatting surprises for users.
Original PR description
In editable fields, the Web Editor currently adds the data-oe-t-inline attribute to items that are identified as needing to be displayed inline However, this attribute is added by the editor and removed on save. As a result, if the previously-editable field is ever set to readonly (for example: a mailing that is sent no longer allows users to edit its body), then the inline property appears to be lost: an inline dynamic attribute suddenly looks like it's on its own line. Steps to reproduce: - Create a mailing - Add a dynamic attribute in the middle of a line - Send the mailing - You will see a carriage return directly before and after the dynamic attribute Fix: The mass_mailing html field now applies the current inlining logic to readonly HTML. task-4852246
The Documents dashboard KPI now counts items in the actual internal Inbox folder rather than relying on an inbox tag. This makes the displayed Inbox count more accurate and avoids test issues caused by deleting demo documents that may be linked elsewhere.
Original PR description
After a discussion about what should be considered the inbox folder on earlier versions, it appears that the `kpi.provider:get_kpi_summary` method should return the count of documents in the folder having the external identifier `documents.documents_internal_folder`, instead of selecting the documents with the inbox tag. As some documents might be referenced by foreign keys in demo data, we also avoid to unlink the documents in the tests to avoid potential errors in the test suites. Runbot-build-error-id: [231787](https://runbot.odoo.com/odoo/runbot.build.error/231787) Task-id: [5062431](https://www.odoo.com/odoo/project.task/5062431)
Creating vendor bills or refunds from Documents now applies the currency set for the selected supplier instead of defaulting to the company currency. This prevents incorrect currencies on vendor documents and reduces manual corrections in Accounting.
Original PR description
**Issue:** When creating a vendor bill or vendor refund through the Documents module after selecting a supplier, the currency defaults to the company's currency instead of the vendor's. However, if the supplier is selected later in the Accounting module, the correct supplier currency is applied. **Steps to reproduce:** - In Documents, upload a bill. - Click on the bill and assign a vendor (whose supplier currency is different from the company's currency). - Click on "Create Vendor Bill". The used currency isn't that of the supplier. opw-4406074
Features or functions removed from Odoo
The website media dialog no longer offers Dailymotion or Youku embedding options because those services are now deprecated or unreliable. This helps prevent users from adding videos that may fail to display, while keeping supported options clearer for content editors.
Original PR description
Specification: Improve `VideoSelector` Component. After this PR: - Dailymotion has deprecated its legacy embed endpoint starting September 23, 2024. Removed support for embedding Dailymotion videos in the media dialog. - Embedding Youku videos via iframe has become unreliable and no longer functions properly in the media dialog. Removed support for Youku embeds to prevent broken video content. - The supported platforms string now correctly lists YouTube, Vimeo, and Dailymotion, Instagram as supported platforms. task-4855038 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr