Daily updates from Odoo
Thursday, March 26, 2026
62 changes · saas-19.1
New functionality added to Odoo
This update introduces new tests to ensure the accurate synchronization of Gelato products between our systems and Odoo, as well as the proper handling of Gelato product sales. These tests provide increased confidence in the reliability and functionality of the Gelato integration, streamlining our operations.
Original PR description
Tests for synchronizing Gelato products with Odoo and buying Gelato products are added. task-4527206 Forward-Port-Of: odoo/odoo#252642 Forward-Port-Of: odoo/odoo#244752
Enhancements to existing features
This update allows users to efficiently add multiple tags to several databases simultaneously. Previously, users had to tag each database individually. This change streamlines the process, saving time and improving database management efficiency.
Original PR description
The aim of this commit is to allow users to mass edit the list of database to add one or several tag on several dbs at once. task-id: 6046088 Forward-Port-Of: odoo/enterprise#112024
This update allows Peruvian Point of Sale (POS) systems to directly print electronic invoices and receipts on thermal printers, aligning with local regulations and business practices. Previously, customers had to download invoices from a portal. This change improves the customer experience by eliminating the need for a separate download.
Original PR description
Before: - In Peru, Point of Sale (POS) systems are allowed to generate E-invoices and E-receipts that comply with SUNAT’s requirements. - In the POS, Odoo prints a ticket that only includes a QR code linking to the customer portal, where the A4 invoice can be downloaded. - However, according to SUNAT and common practice in Peruvian retail environments, the printed POS ticket itself should serve as the legal representation of the electronic document After: - We allow Peruvian POS users to print electronic invoices and receipts directly on thermal printers (58 mm / 80 mm) using the same electronic document flow and data as the accounting module, ensuring full compliance with SUNAT’s representation requirements. Impact: - Improve customer experience by avoiding portal-only invoice download task-5193544 Forward-Port-Of: odoo/enterprise#101876
Resolved issues and error corrections
This update resolves an issue where a field was incorrectly representing the date the W4 form is filed with the employer, rather than the date it's completed. This correction ensures accurate payroll processing for US businesses using the l10n_us_hr_payroll module, aligning with tax regulations.
Original PR description
This field is about when the W4 is filed with the employer, not when it's filled in. opw-5096780 Forward-Port-Of: odoo/enterprise#111679 Forward-Port-Of: odoo/enterprise#111213
This update fixes an issue where expense refusal messages in the system were displayed in the employee's language instead of the user's. It now correctly uses the user's language for these messages, ensuring a better user experience. Additionally, the system now skips OCR processing for expenses created from Stripe payments, preventing data overwrites.
Original PR description
Problem: For expense created from stripe payment, OCR overwrites the data fetched from stripe. Solution: Skip OCR for expense created from stripe payment and put a log note explaining the same. ***…
Problem: For expense created from stripe payment, OCR overwrites the data fetched from stripe. Solution: Skip OCR for expense created from stripe payment and put a log note explaining the same. *** Purpose: One language may have been set on employee, but that employee may be using any other language in his environment, in that case user should see chatter messages in language from his environment. Before this commit: expense refusal message in chatter used employee's language. After this commit: expense refusal message in chatter uses language of user related to employee. *** Problem: Expense Digitalization (OCR) setting is not properly applied. Steps to reproduce:- - Create a new database with demo data and install `hr_expense_extract`. - Switch to `My US Company` and create an employee for that company. - In expense settings set Expense Digitalization (OCR) to Digitize on demand only. - Create an expense for above created employee and attach receipt. - Expense is digitized automatically. Cause: Here https://github.com/odoo/enterprise/blob/d8acbf22fec266ff7d5dcc9499543e6bea3c1325/hr_expense_extract/models/hr_expense.py#L43 `self.env.company` gives that user's default company instead of currently active company in company selector. Solution: Use `company_id` set on expense to determine Expense Digitalization setting. *** task-5712223 Forward-Port-Of: odoo/enterprise#106261
This update fixes a minor issue where many search dialogs within the Web Studio tool lacked clear titles. Now, most of these dialogs display meaningful titles, improving the user experience and making it easier to navigate and understand the available options. This enhancement ensures a more intuitive workflow for users creating and modifying web applications.
Original PR description
Before this commit, a lot of search More dialogs did not have a meaningful title because one parameter was usually not set. After this, most or all the selectCreateDialog have a meaningful title task-5932652 Forward-Port-Of: odoo/enterprise#111948
This update fixes a reporting issue where the KMD INF report incorrectly included partners with turnover below 1,000 EUR. Now, the report accurately filters partners based on a combined total of invoices and credit notes, ensuring more precise financial reporting. The changes improve data integrity and reporting reliability.
Original PR description
The KMD INF report should only include partners whose total turnover for the period reaches 1,000 EUR. Before this PR: - The report did not check this threshold, so partners below €1,000 were still shown. After this PR: - The threshold is now calculated correctly based on specific rules: - The threshold is calculated separately for invoices and credit notes per partner. - If invoices total base amount >= €1,000 OR credit notes total base amount >= €1,000, both invoices and credit notes are included in the report - The same logic applies to bills and refunds in Part B. task-5373606 Forward-Port-Of: odoo/enterprise#111737 Forward-Port-Of: odoo/enterprise#101333
This update corrects a problem where ISO20022 files generated for Swiss bank accounts were being incorrectly formatted, leading to rejection by the bank. The fix ensures the correct 'PAIN 09' version is used, resolving compatibility issues after database migrations. This prevents delays in payment processing.
Original PR description
To reproduce the issue:
- Create a database in 17.0, with a Swiss company, and install account_sepa. Make sure the bank journal uses the Swiss IS020022 PAIN version.
- Migrate this database to 18.0
- Generate an ISO20022 xml file for the Swiss company
==> The file is wrongly formatted, and will be rejected by the bank.
This happens because the sepa_pain_version field of the journal is still set to its old selection value ('pain.001.001.03.ch.02') after migration, which is not supported anymore. The ORM hence returns an empty value when accessing the selection field, and does not enter the proper conditions when generating the file.
An upgrade fix has been made here https://github.com/odoo/upgrade/pull/9771. This commit makes sure already-migrated databases dynamically fix the issue as well.
opw-6060612
Forward-Port-Of: odoo/enterprise#111949This update corrects a minor issue related to how fields are populated when creating new records in Odoo. Specifically, it ensures that the correct model is used during the filling process. This enhancement improves data accuracy and reliability within the system.
Original PR description
See https://github.com/odoo/odoo/pull/199647. Forward-Port-Of: odoo/enterprise#111898 Forward-Port-Of: odoo/enterprise#109725
This update ensures that all attendees of an appointment, including internal users, receive booking notifications regardless of whether the event syncs with Google or Outlook. Previously, notifications were limited, causing organizers and followers to miss important updates. This change improves communication and ensures everyone is informed about appointment details.
Original PR description
In [1] we prevented cancelation emails from being sent when the booking was synced via google or outlook calendar. However this means even followers who would not be notified by the mail provider (not assisting to the meeting) would not be notified. As well as the organizer who is doing to booking/cancelling from the perspective of the mail provider, as the meeting is created from their account. Instead we should keep sending the "appointment booked" template in all cases as it is only followed by internal users to whom it is always relevant. As for cancelation templates, it should stil be sent to internal users. Partners of the meeting however need not be notified and may be unsubscribed if syncing is enabled, as cancellation typically only happens once. task-5152917 [1]: https://github.com/odoo/enterprise/pull/60913 Forward-Port-Of: odoo/enterprise#111856 Forward-Port-Of: odoo/enterprise#96638
This update prevents the entire reports cron job from stopping if an error occurs during a single report export. Previously, a single failure would halt the entire process. Now, the cron will continue to attempt exporting other reports, improving reliability and ensuring timely report generation.
Original PR description
If an error is raised during the export of reports cron execution, the whole cron stops due to the fact that the error is never catched This commit will ensure that even if there is an error with one of the report export, the cron won't top and will try to send to other documents task-5469038 Forward-Port-Of: odoo/enterprise#111732 Forward-Port-Of: odoo/enterprise#105191
This update addresses a security concern by hiding the total due amount from minimal cashiers when viewing partner lists. This prevents cashiers from inadvertently accessing sensitive financial information, enhancing data protection and privacy. The change was implemented as a bug fix.
Original PR description
Before this commit, the total due amount was visible for minimal cashier in the partner list. This could leak sensitive information to the cashier, which is not desirable. opw-6039529 Forward-Port-Of: odoo/enterprise#111103
This update resolves an issue where users couldn't add reactions to messages within the ‘mail.group’ model in Discuss. The fix ensures the ‘add reaction’ button isn't displayed for message types that don't inherit from the standard ‘mail.thread’ model, improving stability and usability.
Original PR description
Steps to reproduce: - Install the mail_group module - Open Discuss - Go to the History tab - Add a reaction on a message that has model mail.group - Throws an error The error occurs because the mail.group model does not implement the `_get_allowed_access_params()` method, which is invoked during the process here. Actually, the "add reaction" button should not be shown on messages whose model does not inherit from mail.thread. This commit fixes the issue by hiding the "add reaction" button on messages with models that don’t inherit from mail.thread, such as `mail.group`. community: https://github.com/odoo/odoo/pull/218615 Task-5098050 Forward-Port-Of: odoo/enterprise#111919 Forward-Port-Of: odoo/enterprise#111271
This update fixes a problem preventing users from successfully connecting to their databases. Previously, connection attempts were blocked due to access rights issues. Now, users are correctly redirected to the database website for login or connection.
Original PR description
The aim of this commit is to allow a db_user to be able to connect to a database in which he should be able to connect. Before this commit: Clicking on connect would stumble upon access rights issues on system.parameter and on `database_api_key_to_use`. After this commit: User are correctly redirected on the db website, either already connected or on the login page. task-id: 6046086 Forward-Port-Of: odoo/enterprise#111965
This update resolves an issue in Odoo's Web Studio where invisible fields would lose their visibility settings when toggling the 'Show Invisible Elements' option. The fix ensures that the intended invisible state is consistently maintained, preventing unexpected field visibility changes. This improves the user experience and accuracy of customizations within Web Studio.
Original PR description
Steps to reproduce ================== - Install contacts,web_studio - Login as admin - Go to contacts - Open any record - Open studio - Click on any field - Add the "Role / Portal" group - Toggle the…
Steps to reproduce ================== - Install contacts,web_studio - Login as admin - Go to contacts - Open any record - Open studio - Click on any field - Add the "Role / Portal" group - Toggle the "Show invisible Elements" checkbox - Click on the same field => The field is marked as invisible - Add an invisible condition => The invisible condition is lost (but still applied on the view) Cause of the issue ================== In studio, when fetching the view, the invisible attribute is set to True when the user does not have access to the field (when he is not part of the groups). The goal is to make the field invisible in studio unless the "Show invisible Elements" is toggled. But this causes the actual value of the invisible attribute to be lost. Note that this also applies to the column_invisible attribute. Solution ======== If an invisible/column_invisible attribute is present on the nodes with missing access, we copy the actual value to the `actual_invisible` attribute. We then use that value in the editor, when present. opw-6026971 Forward-Port-Of: odoo/enterprise#111868 Forward-Port-Of: odoo/enterprise#111299
This update resolves an issue where the HR Work Entry Attendance module could only record a single attendance event. Now, multiple attendance records can be created for a single work entry, providing a more accurate and flexible way to track employee time. This improves the system's ability to capture complete attendance data.
This update fixes a discrepancy in the generation of SEPA payment files. The system was incorrectly displaying an empty field for a critical version number, which has now been corrected to PAIN 09. This ensures accurate and compliant payment file creation.
Original PR description
https://github.com/odoo/enterprise/commit/80f9f966d7db793ae82e65c76514323cb10e34ab tried to fix the issue, but assumed the field would be returned empty by the ORM when the value was inconsistent with the db. It's not true: it returns the database value ; only the UI shows the field as empty. Forward-Port-Of: odoo/enterprise#112141
This update addresses a security vulnerability where automated email systems (like Mail Defender) could unintentionally cancel or reschedule appointments. The system has been updated to replace direct links with a form, preventing these automated systems from triggering actions. This ensures appointment scheduling remains reliable and secure.
Original PR description
…ointments Mail defender services may click URLs in emails to verify their contents. Additionally they may sometimes interact with the page and visit related pages. For this reason URLs sent in emails should not trigger any action directly nor contain any simple link that could trigger an action. The "cancel/reschedule" anchor URL is replaced with a form which bots should not click. We also port the fix done in appointment to the view in appointment as it replaces the original view in this module. task-4555579 Forward-Port-Of: odoo/enterprise#112040 Forward-Port-Of: odoo/enterprise#79831
This update resolves a minor issue where the helpdesk tour occasionally failed due to the tour attempting to click a button before the kanban view was fully loaded. By ensuring the kanban view is fully rendered before the tour attempts to interact with it, this fix improves the overall stability and reliability of the helpdesk tour experience.
Original PR description
This PR fixes a flickering failure in the `helpdesk_tour` ### Problem In the kanban view, the tour occasionally tried to click the "New" (quick create) button before the view's internal structure was fully painted. This caused the tour to click a wrong element. ### Solution Updated the step trigger to include a selector for the kanban group (`.o_kanban_group`). By requiring the presence of the group container, we ensure that: 1. The page content has actually loaded. 2. The specific "New" button within the kanban context is visible and ready. **Runbot ID: 223081** Forward-Port-Of: odoo/enterprise#110333
This update corrects a technical issue where the system incorrectly limited VAT number lengths when integrating with FedEx. The change ensures that VAT numbers, particularly those used in countries like Switzerland with longer formats, are properly transmitted to FedEx, preventing delivery errors. This ensures accurate shipment processing and avoids potential disruptions.
Original PR description
Issue ----- Fedex limits VAT numbers to 18 char long strings. This is contradictory with how they are stored in db for some countries (eg Switzerland, where the format is CHE-123.456.788 VAT -> 19 char long). Steps to reproduce ----- - Setup Fedex - Create a customer - Company (for VAT number) - VAT number: CHE-123.456.788 TVA - Create a delivery and confirm it Cause ----- VAT number is retrieved as is in https://github.com/odoo/enterprise/blob/0220d413988708c662ffca3c7fb38641c3d9870a/delivery_fedex_rest/models/fedex_request.py#L332-L343 ----- Ticket: opw-5926452 Forward-Port-Of: odoo/enterprise#111864 Forward-Port-Of: odoo/enterprise#109999
This update resolves an issue where only administrators could delete work entry types within the payroll module. Now, users with SUPERUSER permissions can also delete these types, streamlining payroll administration. This change improves operational efficiency and reduces reliance on technical support for this task.
Original PR description
Forward-Port-Of: odoo/enterprise#111967
This update corrects a problem in the demo data for the l10n_ch_hr_payroll module, specifically removing an incorrect record and fixing a reference to the insurance line within the insurance group. This ensures the demo data accurately reflects the module's functionality and improves the reliability of testing.
Original PR description
This commit removes an unnecessary record and fix wrong reference to the insurance line of the insurance group in the demo data of the l10n_ch_hr_payroll module. task-6070942 Forward-Port-Of: odoo/enterprise#112121
This update resolves a minor issue in the Belgian payroll module (l10n_be_hr_payroll) that could occasionally lead to incorrect reporting of termination holidays. The fix ensures that the system correctly handles cases where specific property settings are missing, improving the accuracy of payroll reports.
This update fixes a display issue in the external value pop-up, ensuring it uses the correct decimal separator based on the user's language settings. Previously, the pop-up always used a dot, regardless of the user's locale. This change ensures numbers are displayed correctly for all users, improving data clarity and accuracy.
Original PR description
Description of the issue this commit addresses: The external value pop up doesn't take into account the locale to chose which decimal separator to use. --- Desired behavior after this commit is merged: The decimal separator is the one determined by the language of the user rather than always a dot. --- task-6010533 Forward-Port-Of: odoo/enterprise#111997 Forward-Port-Of: odoo/enterprise#109948
This update resolves an issue where attachment updates for invoices were sometimes failing, leading to inconsistencies in the system. By updating attachments within the same transaction as the move data, this change guarantees that both updates are reliably committed, maintaining data integrity. This ensures accurate invoice processing.
Original PR description
Was committing the move fields update, then updating the attachment. This might create an issue were the move update commits successfully, but setting the attachment fails and we end up with an inconsistency. Set attachment in the same transaction as the move update. task-6035727 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#255745 Forward-Port-Of: odoo/odoo#255262
This update fixes an issue where the 'Buy to Resupply' option was automatically re-enabled after being manually disabled. The change ensures that this option remains disabled unless specifically configured, improving order management and reducing potential overstocking. This resolves a previous bug impacting warehouse efficiency.
Original PR description
Steps to produce: --- - Install `purchase_stock` module. - Inventory > Configuration > Settings > Warehouse > enable `Multi-Step Routes`. - Go to Configuration > Warehouse Management > Warehouses. -…
Steps to produce: --- - Install `purchase_stock` module. - Inventory > Configuration > Settings > Warehouse > enable `Multi-Step Routes`. - Go to Configuration > Warehouse Management > Warehouses. - Open `YourCompany` record. - Click on Routes > open `Buy` > enable `Products`. - Return to `YourCompany` and disable `Buy to Resupply`. Issue: --- - After disabling `Buy to Resupply`, the option is automatically re-enabled. Root cause: --- - In [1], `buy_to_resupply` is set to true if either buy route is product selectable OR the current warehouse is included in buy route warehouses. - In the `_inverse_buy_to_resupply` method, unchecking the flag only unlinks the warehouse from the route. However, if `product_selectable` is still enabled, the compute logic will continue to set the field back to true. Solution: --- - `warehouse.buy_to_resupply` is now set to True only when the warehouse ID is present in the buy route’s warehouse_ids. [1] https://github.com/odoo/odoo/blob/aeaace7c70b7ac3db68f188c9c517f1ff849e55d/addons/purchase_stock/models/stock.py#L57 opw-5476302 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#250360
This update fixes a bug that prevented the Google address autocomplete feature from working correctly when certain modules modified address fields. The change adds a new widget to street fields and handles address autocomplete in e-commerce, ensuring accurate and reliable address input for users. It also updates access rights for city data.
Original PR description
_= base,base_address_extended,google_address_autocomplete,website_sale_autocomplete The Google autocomplete feature was breaking when modules such as base_extended_address modified the address form (e.g., replacing street with street_name, street_number, etc.). In this commit: --- - Add the Google autocomplete widget to street-related fields. - Also same thing handled in frontened (e-commerce address autocomplete). - and update 'city_id' from available cities records if matches with google result. - ```update access_rights for RecCity Model - grant read access to public user``` --- task-5382984 opw-5362597 Forward-Port-Of: odoo/odoo#255728 Forward-Port-Of: odoo/odoo#238672
This update resolves an issue where the interactive tour pointer would disappear when navigating between different elements, particularly within modals. The fix ensures the pointer remains visible and functional regardless of the currently active element, improving the user experience. This enhancement guarantees consistent tour guidance for all users.
Original PR description
Before this commit, the pointer disappeared when the active element change before the anchor of the tour pointer. So, it was not visible in modals for example. Now, the check is done when the active element change and when the isVisisble is read. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#252019
Previously, a select dialog opened from a record selector or relational field would display an incorrect title ('Search: undefined'). This fix ensures the dialog title is set to 'Search' when the expected information isn't available, providing a cleaner and more user-friendly experience. This resolves a minor visual issue.
Original PR description
…e title When opening a selectCreateDialog from a record selector or a relational field, when no (or empty) fieldString was passed to form the dialog's title , an ugly `Search: undefined` was set as the title After this commit, if we don't receive the right props, we simply set the title to `Search` part-of-task-5932652 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#255777
This update resolves an issue where Field Service Reports generated for multiple tasks sometimes produced duplicate PDF files. The fix ensures that reports are generated correctly, avoiding the creation of redundant documents. This improves the reliability of report generation for users.
Original PR description
### Issue: When we try to print the field service report on multiple tasks, some with worksheets, then everything is duplicated in the PDF. ### Steps to reproduce: - Install `industry_fsm` and `sale`…
### Issue: When we try to print the field service report on multiple tasks, some with worksheets, then everything is duplicated in the PDF. ### Steps to reproduce: - Install `industry_fsm` and `sale` - Create two tasks with the same customer - Add timesheet, products and save a worksheet on one of them (the goal is to have titles on two different pages) - In list view select both tasks and click Report > Field Service Report - The downloaded PDF has the report twice ### Cause: When printing for several records then `_render_qweb_pdf_prepare_streams()` tries to split the document. If the document has more pages than the number of records [we fetch the "Outlines"](https://github.com/odoo/odoo/blob/55a58571fbfa6a6bb0edacd6f9676382cc23630b/odoo/addons/base/models/ir_actions_report.py#L938-L954). These are the biggest sections in the document. In our case these sections are the `<h2>` tags, as there are no `<h1>`: [the main title](https://github.com/odoo/enterprise/blob/6c4b88a1dfe245a63a424e3f51ff803e51ccde61/industry_fsm/report/worksheet_custom_report_templates.xml#L31-L33), [the Timesheet section title](https://github.com/odoo/enterprise/blob/6c4b88a1dfe245a63a424e3f51ff803e51ccde61/industry_fsm/report/worksheet_custom_report_templates.xml#L39), etc. Then we check the pages where these titles are displayed; if we get the same number of pages as the number of records, we use them to split the report. If not, then we [render the report for each record individually](https://github.com/odoo/odoo/blob/55a58571fbfa6a6bb0edacd6f9676382cc23630b/odoo/addons/base/models/ir_actions_report.py#L974-L976), add them to `collected_streams`. Then add the initial report generated on the recordset and return. These streams are later merged into one, which explains the duplication: - Task 1 report individually generated - Task 2 report individually generated - Report of the recordset containing the two first reports ### Solution: The issue was introduced by [this commit](https://github.com/odoo/odoo/commit/7fc1ebd4466a2d9b4a48dfe86332b5844026c4fc) which implements the individual generation without returning. So the individual documents will always be followed by the recordset document. This commit adds the return directly after the individual reports generation. opw-6032935 Forward-Port-Of: odoo/odoo#255581
This update fixes a 404 error that occurred when users accessed public website content without logging in. The issue stemmed from how the system determined the user's website context, leading to incorrect access control. This change ensures that public website content is correctly displayed to users.
Original PR description
\* = test_website_modules ### Issue: When accessing a record from the website without logging in, a `404` error occurs if a public record rule filters records by website related domain, for example…
\* = test_website_modules
### Issue:
When accessing a record from the website without logging in, a `404`
error occurs if a public record rule filters records by website related
domain, for example `[('website_id', '=', website.id)]`.
### Steps to reproduce:
- Install the 'website_blog' module and create at least one website.
- Enable debug mode.
- Go to Settings > Technical > Database Structure > Models.
- Open the `blog.post` model.
- Go to the 'Record Rules' tab.
- For the record 'Blog Post: public: published only', change the domain
from `[('website_published', '=', True)]` to
`[('website_id', '=', website.id)]`.
- Go to Website > Configuration > Blogs.
- Open a blog (e.g., Travel).
- Select 'My Website' in its 'Website' field.
- Open 'My Website' without logging in.
- Click on the 'Blog' menu and the blog listing will appear correctly.
- Try opening a blog post and a `404` error occurs.
### Reason:
<pre>
┌─────────────────────────────────────────────────────────┐
│ Request Lifecycle │
├─────────────────────────────────────────────────────────┤
│ │
│ User Request (not logged in) │
│ ↓ │
│ ┌──────────────────────────────────────┐ │
│ │ 1. _pre_dispatch │ │
│ │ ↓ │ │
│ │ check_access_rule │ │
│ │ ↓ │ │
│ │ _eval_context (compute domain) │ │
│ │ ↓ │ │
│ │ get_request_website() │ │
│ │ ↓ │ │
│ │ request.website = None │ ← Issue │
│ │ ↓ │ │
│ │ Domain evaluation FAILS │ │
│ │ ↓ │ │
│ │ Access DENIED → 404 Error │ │
│ └──────────────────────────────────────┘ │
│ ↓ │
│ ┌──────────────────────────────────────┐ │
│ │ 2. _frontend_pre_dispatch │ │
│ │ (NEVER REACHED) │ │
│ │ ↓ │ │
│ │ request.website initialized ✓ │ ← Too Late │
│ └──────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────┘
</pre>
Because `request.website` is initialized later in
`_frontend_pre_dispatch`, access rules evaluated earlier in
`_pre_dispatch` cannot rely on website context. As a result, record
rules depending on `website_id` are evaluated before `request.website`
is available, incorrectly denying access to public records.
### Fix:
Avoid totally relying on `get_request_website` during access rule
evaluation. Use the `request.is_frontend` attribute as a fallback, which
is set earlier, to detect frontend requests and ensure correct access
handling.
task-[4758311](https://www.odoo.com/odoo/project/974/tasks/4758311)
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#255708
Forward-Port-Of: odoo/odoo#213143This update resolves an issue where the POS settlement process would fail when encountering certain line types (specifically `line_subsection`) that didn't contain product information. The fix skips these problematic lines, ensuring the settlement process completes correctly and reliably. This prevents errors and improves the overall stability of the POS functionality.
Original PR description
`line_subsection` lines have no product, so calling `addLineToCurrentOrder` on them raised a TypeError trying to read `taxes_id` of undefined. Skip them early, the same way `line_section` is handled. opw-5949585 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#255360
This update resolves an issue where receipts were displaying company information twice. This change was triggered by a previous commit and has been corrected to ensure receipts accurately reflect the correct company details. This improves the user experience and data accuracy for sales transactions.
Original PR description
Before this commit, the receipt was showing the company information twice. It happened after the commit https://github.com/odoo/odoo/commit/dca40d16481ba504d608cc65d82e7821e01c5932. opw-6053013 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#255368
This update fixes a test failure related to email notifications within the Google Calendar and Mail modules. The previous test incorrectly checked for empty timeout emails, leading to false positives. Now, the test focuses on ensuring no emails are sent for any message, regardless of recipient, improving test reliability.
Original PR description
No need to always check the timeout email_to always contains formatted emails. task-5152917 Forward-Port-Of: odoo/odoo#255635 Forward-Port-Of: odoo/odoo#230766
This update fixes an issue where the image quality slider disappeared when using images with shapes. The change ensures the slider functions correctly regardless of whether the image format or shape options are modified, improving the user experience for images with shapes.
Original PR description
Before this commit, the quality option would not work properly for images with a shape applied by default. After changing an option, the DOM would be updated and the slider disappeared because the…
Before this commit, the quality option would not work properly for images with a shape applied by default. After changing an option, the DOM would be updated and the slider disappeared because the image format would not be considered valid anymore.
Steps to reproduce the issue :
- Drop a snippet with an image with a shape (.s_cta_mockup, ...)
- Do one of the following:
- Move the quality slider
- Change an shape option
=> The Quality slider disappeared.
If the user replaces an image with a png, sets the format to "webp" and adds a shape, the dataset would have the following :
- format-mimetype: the value of the format option ("image/webp")
- mimetype-before-conversion: the original format ("image/png")
- mimetype: the mimetype of an image with shape ("image/svg+xml")
We first evaluate "data-format-mimetype", as it indicates the current format of the image (if it was changed by the user). Otherwise, we check "data-mimetype-before-conversion" since the mimetype for an image with shape is always "image/svg+xml" and doesn't correspond to the real image format. Finally, default to getMimetype to avoid issue for images on which nothing no option was changed.
task-5358952
Forward-Port-Of: odoo/odoo#240360This update corrects a technical issue that prevented users from properly closing the online payment popup in the Point of Sale system. Previously, an error occurred when the popup was closed, disrupting the payment process. This fix ensures a smoother and more reliable payment experience for customers.
Original PR description
Before this commit, when the user closed the online payment popup, an error was raised because the currentOrder was not valid and instead order must be used. opw-6034405 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#255292
This update fixes an issue where the expiration date on stock moves wasn't correctly updated when switching between lots. Now, the system accurately reflects the expiration date based on the lot being used, ensuring accurate inventory tracking and preventing potential stock discrepancies. This improves the reliability of our expiration date management feature.
Original PR description
Steps to reproduce: - Enable "Expiration Dates" in Inventory settings - Create a storable product "P1" - Add 10 units with "Lot 1" - Enable expiration dates on product P1 - Add 10 units with "Lot 2"…
Steps to reproduce: - Enable "Expiration Dates" in Inventory settings - Create a storable product "P1" - Add 10 units with "Lot 1" - Enable expiration dates on product P1 - Add 10 units with "Lot 2" and set an expiration date - Create a delivery for 10 units of P1 - Mark as "To Do" - Open the move line -> "Lot 1" is automatically reserved - Change the lot from "Lot 1" to "Lot 2" -> The expiration date is not updated automatically - Save and reopen the move line -> The expiration date is correctly set - Change again to "Lot 1" - Save and reopen the move line -> The expiration date is not reset and incorrectly keeps the value from "Lot 2" Cause: The expiration date was only computed based on `lot_id`, ignoring the `quant_id` used during reservation. Additionally, the value was not reset when switching to a lot without an expiration date. Solution: - Add `quant_id` to the compute dependencies - Compute the expiration date based on `quant_id.lot_id` - Explicitly set an expiration date to today when the use_expiration_date product is set to True and the lot doesn't have an expiration date. Result: The expiration date is now correctly updated and cleared when changing lots on stock move lines. opw-5999294 Forward-Port-Of: odoo/odoo#254610
This update fixes an issue where Italian VAT invoices were sometimes incorrectly processed due to mismatched withholding reasons. The change broadens the import process to allow taxes with the same withholding type to be used, ensuring accurate VAT calculations for Italian businesses. This resolves a previous bug reported in related tasks.
Original PR description
Some invoice come in with a wrong ENASARCO withholding reason. We now broaden the search to allow taxes with the same withholding type to be used during import even if the withholding reason doesn't match. In the test, I change the Enasarco tax to reason Q to check that it gets correctly assigned. Ticket [link](https://www.odoo.com/odoo/project.task/5175587), [link](https://www.odoo.com/odoo/project.task/5933699) opw-5175587 opw-5933699 Forward-Port-Of: odoo/odoo#255725 Forward-Port-Of: odoo/odoo#236251
This update fixes an issue where stock valuations were incorrectly calculated for products without assigned product values. The change ensures all products are considered during valuation replays, resulting in accurate inventory accounting. This improves the reliability of financial reporting.
Original PR description
Usecase to reproduce: - Create two average product A and B - Delele all the product.value for B - Receipt both units at 10$ - Set the price unit of A to 20$ - Receipt both units at 20$ Check the value at date to trigger a replay of valuation Expected behavior: - Product A -> 20 units at 20$ -> 400$ - Product B -> 20 units at 15$ -> 300$ Current behavior: - Correct for A but B is 200$ It happens because when we replay the history, we check for the minimal product.value and we replay valuation from this date (with moves). However in our case, the product B has no product value and thus we replay from A product.value. However it arrives after the first receipt of B and thus we only consider the second receipt for B. This is fixed by ensuring we have a product.value for all products in order to add a date domain on the moves. Forward-Port-Of: odoo/odoo#255787
This update resolves an issue where a partner's identification type (e.g., tax ID) was incorrectly set based on the partner's country. The fix ensures that the ID type remains consistent with the partner's country selection, preventing errors and ensuring accurate reporting for Latin American businesses. This improves data integrity and compliance.
Original PR description
**PROBLEM** PR: https://github.com/odoo/odoo/pull/179078 Removed _onchange_country_id() which was used to set the identification type according to the country of the partner. This PR reintroduce it, so id type and country remains consistent. **STEP TO REPRODUCE** 1. install l10n_ar and l10n_co. 2. create a new partner. 3. set its country to Argentina, and select an argentinian id type. 4. set the country to Colombia and save. You end up with a partner from Colombia, with a id type that is used for Argentinian partners which shouldn't be possible. opw-5801824 Forward-Port-Of: odoo/odoo#248585
This update significantly speeds up the process of creating manufacturing orders when a sale order triggers them, particularly for products with complex Bill of Materials. By caching key data, the system avoids redundant calculations, reducing processing times from minutes to seconds, even with large product configurations. This improves overall system responsiveness and efficiency.
Original PR description
Before this commit, confirming a Sale Order that creates a Manufacturing Order for a product with a large BoM could take several minutes when `purchase_mrp` was installed. The slowdown comes from…
Before this commit, confirming a Sale Order that creates a Manufacturing Order for a product with a large BoM could take several minutes when `purchase_mrp` was installed. The slowdown comes from `mrp.bom.line._get_cost_share()`, which is called for every line during a BoM explosion. When no explicit `cost_share` is set, the method recomputes the list of eligible BoM lines and checks whether any of them has a manual cost share. That computation depends only on the BoM and the product variant, but it is recomputed for every exploded line during `mrp.bom.explode()`. This causes a full BoM scan to be repeated for every single line. This commit introduces a contextual cache, initialized in `mrp.bom.explode()`, to store that metadata. We compute it once and reuse it for all lines of the same (BoM, variant) within the same explosion. ### Benchmark: | BoM lines | Before PR | After PR | | --- | ---: | ---: | | 100 | 3.747s | 1.094s | | 300 | 26.554s | 2.826s | | 600 | 85.378s | 5.299s | | 992 | 229.246s | 9.068s | opw-6017626 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#255686 Forward-Port-Of: odoo/odoo#254868
This update ensures that Point of Sale orders are automatically assigned a default preset when one isn't explicitly provided. Previously, orders created without a preset ID wouldn't use the configured default. This change aligns with how other key settings like price lists and fiscal positions are handled, ensuring consistent and reliable order setup.
Original PR description
When a pos.order was created without a preset_id (e.g. frontend order synced before the async preset dialog resolved, or any other path that omits the field), _complete_values_from_session did not fall back to the config's default_preset_id. Apply it the same way pricelist and fiscal position are defaulted, without overriding an explicitly passed value. opw-5997872 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#251934
This update resolves an issue where batch transfer operations would fail due to a problem with how the system parsed sequence identifiers containing forward slashes. The fix ensures that the system correctly handles sequences with multiple slashes, preventing crashes and allowing users to create batches with a wider range of identifiers. This improves the stability and usability of the batch transfer feature.
Original PR description
next_by_code() can return a sequence with multiple '/' in the prefix (e.g. "BATCH/test/00002" or "batch/test/2026/00002"). Using split('/') causes a ValueError: too many values to unpack.
Use rsplit('/', 1) to always split on the last '/' and correctly extract the sequence prefix and number.
Steps to reproduce the bug:
- Go to settings > technical > sequences & identifiers > sequence:
- batch transfer: - prefix: BATCH/test/
- Create a new batch:
- operation type: delivery orders
- Try to save
Problem:
a traceback is triggered:
```ValueError: too many values to unpack (expected 2)```
opw-6043880
Forward-Port-Of: odoo/odoo#255761This update resolves an issue where the system parameter for email catchall domains wasn't being properly sanitized, leading to incorrect domain matching. The fix ensures that domain lists are correctly processed, preventing misconfiguration and ensuring email notifications are delivered as intended. This improves the reliability of email functionality.
Original PR description
Since its introduction (https://github.com/odoo/odoo/pull/76734), the "mail.catchall.domain.allowed" system parameter is normally sanitized by `_sanitize_allowed_domains` when using `set_param`. But…
Since its introduction (https://github.com/odoo/odoo/pull/76734), the "mail.catchall.domain.allowed" system parameter is normally sanitized by `_sanitize_allowed_domains` when using `set_param`. But the method is not run when the system parameter is created manually, for example through the UI, because the current conditional logic is not triggered for write and create call. This can be an issue if for example the use submits this value: "domain1.com, domain2.com,domain3.com" The comma seperated list will only be split by ',', meaning that the second element is " domain2.com" (space character in front). As such, that domain will not be used as expected, since most flows using that data will end up comparing "domain2.com" vs " domain2.com", and not considering it a match. Before this fix: Create new record in System parameters with key = "mail.catchall.domain.allowed" value = "domain1.com, domain2.com,domain3.com" -> after save, value == "domain1.com, domain2.com,domain3.com" After this fix: -> after save, value == "domain1.com,domain2.com,domain3.com" * fixed 19.1 FW OPW-5505414 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#244279
This update resolves an issue where users couldn't add reactions to messages using the 'mail.group' model in Discuss. The fix hides the reaction button for these message types, ensuring proper functionality and preventing errors. This improves the overall stability of the Discuss feature.
Original PR description
*= im_livechat, portal, test_discuss_full **Steps to reproduce:** • Install the mail_group module • Open Discuss • Go to the History tab • Add a reaction on a message that has model `mail.group` •…
*= im_livechat, portal, test_discuss_full **Steps to reproduce:** • Install the mail_group module • Open Discuss • Go to the History tab • Add a reaction on a message that has model `mail.group` • Throws an error The error occurs because the `mail.group` model does not implement the `_get_allowed_access_params()` method, which is invoked during the process here. Actually, the "add reaction" button should not be shown on messages whose model does not inherit from mail.thread. https://github.com/odoo/odoo/blob/d12c1e07727f9b04cd2be2e7dac1ec3af49cb637/addons/mail/models/mail_message.py#L579 Desired behavior after PR is merged: This PR fixes the issue by hiding the "add reaction" button on messages with models that don’t inherit from mail.thread, such as mail.group. enterprise: https://github.com/odoo/enterprise/pull/111271 Task-5098050 [Reference](https://github.com/user-attachments/assets/aa2c4251-fd1f-4734-a62c-9fc80dd5f587) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#255744 Forward-Port-Of: odoo/odoo#218615
This update fixes an issue where invoices with exchange differences and exchange accounts as write-offs were incorrectly fully reconciled even when the user chose to keep the invoice open for partial payment. The fix ensures that the system accurately reflects the partial payment and correctly books the exchange difference to the designated account, improving financial reporting accuracy.
Original PR description
Currently, if a user selects an exchange difference account as a write-off but then decides to keep the invoice open, the system still fully reconciles the invoice. Steps to reproduce: - Create an…
Currently, if a user selects an exchange difference account as a write-off but then decides to keep the invoice open, the system still fully reconciles the invoice. Steps to reproduce: - Create an invoice in foreign currency - Click 'Register Payment' - Select company currency - Change the amount to a lower one - Select 'Mark as fully paid' - Add the exchange difference loss/gain account as write off account - Select 'Keep open' - Click 'Create payment' Issue: Even though the user selected the option to create a partial payment and keep the invoice open, it is totally reconciled with a difference booked in the selected exchange account. Analysis: This occurs because the use of the exchange account as write off account trigger a specific flow used in localization where a writeoff is not allowed. Once the payment registration process is ongoing, the system does not check that user kept the same choice on how to handle the payment difference. opw-5468052 Forward-Port-Of: odoo/odoo#254479 Forward-Port-Of: odoo/odoo#251965
This update fixes inaccuracies in the tax exemption codes and reasons used for certain taxes within the Odoo Belgium localization. These corrections ensure compliance with Belgian tax regulations and prevent potential issues with tax reporting. The changes were carefully reviewed and validated.
Original PR description
Some taxes had a wrong tax exemption code and tax exemption reason. This commit corrects them. task-4976471 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#253309
A test within the sale_timesheet module was failing due to a missing dependency on the invoicing module. The fix ensures the necessary invoicing module is automatically installed during test execution, allowing the test to run correctly. This prevents disruptions to the testing process.
Original PR description
__ ## Error description When the test runs following a specific configuration, the field `invoicing_switch_threshold` isn't found. However, we have to keep this field in the test because we can't replicate the issue the test checks without it. ## Origin of the issue This field belongs to the `account_accountant` (Invoicing) module. However, `sale_timesheet` doesn't have a dependency on this module: there's only an auto install for `account_accountant` when installing the module from the front-end. Therefore, if we launch the test without the `account_accountant` auto install, it will fail. __ original commit: https://github.com/odoo/odoo/pull/250946/changes/52a9841c754466c2df65c75d13c9ed2ae86a51ce Forward-Port-Of: odoo/odoo#254506 Forward-Port-Of: odoo/odoo#252772
This update resolves an issue where a key function (`get_conf`) was incorrectly imported, causing a minor disruption in the IoT drivers. The import was corrected, and a related call in the main Python file was updated, ensuring proper functionality and stability.
Original PR description
`get_conf` was moved to `system` instead of `helpers`, and a call in `main.py` hasn't been updated in a fw port. This commit fixes it.
This update resolves an issue where pressing the spacebar in certain HTML content could unintentionally create symbols. The fix adjusts how the HTML editor calculates text offsets, ensuring accurate symbol placement and preventing unexpected symbol generation. This improves the overall user experience and stability of the HTML editor.
Original PR description
Problem: Sometimes pressing space in content containing a symbol pattern creates the symbol even when the space is not placed directly before it. Cause: `leftLeafOnlyNotBlockPath` sums the…
Problem: Sometimes pressing space in content containing a symbol pattern creates the symbol even when the space is not placed directly before it. Cause: `leftLeafOnlyNotBlockPath` sums the `spaceOffset` of all non-block leaf nodes, then performs a substring on the whole block containing those leafs. In this case, the file box contains a `span` with `d-flex`, which is considered a block. Therefore, the file box text content length is not included in the `spaceOffset` calculation. However, we later call `substring` on the `textContent` of the `closestBlock`, which includes the file box content. This leads to an incorrect `spaceOffset`, effectively skipping the file box text. This can happen by chance when the `substring` returns the file box text content with `"-->"` immediately after it, making it the last character and triggering symbol creation. Solution: When computing the `substring`, consider only the `textContent` of the leaf nodes traversed while calculating `spaceOffset`. This ensures the offset matches the actual traversed content and prevents accidental symbol generation. Steps to reproduce: - Use the same HTML structure as in the test. - Place the selection as in the test case. - Press space. - Observe that a symbol is incorrectly created. task-6004954 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves a bug where snippets like 'countdown' were incorrectly placed in unexpected areas of the website editor. The fix restores a necessary filter, ensuring snippets are dropped into their intended sections. This improves the user experience and prevents content from being misaligned.
Original PR description
After https://github.com/odoo/odoo/pull/240547 was merged, an issue appeared with the snippets that could also be dropped as inner content. Instead of only having the dropzones for sections, all…
After https://github.com/odoo/odoo/pull/240547 was merged, an issue appeared with the snippets that could also be dropped as inner content. Instead of only having the dropzones for sections, all dropzones were activated, meaning that snippets such as countdown would sometimes be dropped as inner content. Steps to reproduce the issue: - Go to Website - Go to Edit mode - From an empty website, click on the snippet group "Content" - Select the countdown => The countdown was dropped in the footer instead of the main To fix this issue, this commit restores the missing filter (removed when the new builder was added). However, since the drag and drop was updated to only display dropzones of the "active" element, there is no need to filter the dropzones within #website_cookies_bar. Finally, the filter is no longer based on the s_popup snippet, as the drag and drop mechanic was moved outside of the website module. This commit also partially reverts the commit 5cb4f5c, since it made the tour fail with the changes of this PR (s_banner snippets can no longer be dropped inside of the s_table_of_content) The tour testing the Countdown was updated since it did not fail prior to saas-19.2, because it was not precise enough. Related to task-5428387 Forward-Port-Of: odoo/odoo#254724 Forward-Port-Of: odoo/odoo#250613
This update fixes a vulnerability where email security software was incorrectly triggering meeting cancellations by visiting links in emails. We’ve changed the email format to use post requests instead of GET requests, preventing these bots from interfering with meeting scheduling. This ensures meetings are scheduled correctly and reliably.
Original PR description
Mails are sent to users containing an acceptation and cancellation link that accepts GET requests but performs an action on visit Some mail defender software analyzes urls in links by actually visiting the URL. This leads to both actions being triggered without user input. Instead we now send buttons with a neutralizing parameter in the mail. Recipients may then visit the url and click a form button to "accept" or "decline". As these are post requests, the email bots should avoid clicking them. task-4555579 Forward-Port-Of: odoo/odoo#255912 Forward-Port-Of: odoo/odoo#198560
This update fixes an issue where invoices processed through Nemhandel in Denmark were incorrectly using the VAT ID instead of the company partner's EAN/GLN as the EndpointID. This change ensures invoices are properly routed and processed within the Nemhandel system, improving data accuracy and compliance. The fix was triggered by a specific test case demonstrating this incorrect behavior.
Original PR description
**STEP TO REPRODUCE** 1. install l10n_dk_nemhandel, and activate nemhandel. 2. Create a company partner, with a EAN/GLN as the nemhandel id. 3. Create an individual partner linked to the company partner. 4. Create an invoice with this individual partner. 5. Send the invoice with nemhandel. 6. open the xml file, and notice that the EndpointID doesn't use the EAN/GLN of the company partner. (It falls back to the VAT instead). opw-5945440 Forward-Port-Of: odoo/odoo#251783
This update resolves an issue where users in incognito mode couldn't download attachments linked within the HTML editor. The fix ensures the necessary access token is included in the download link URL, allowing attachments to be successfully downloaded regardless of the browsing session. This improves the user experience for all users.
Original PR description
# How to reproduce
- Go to the website in edit mode
- Select some text
- Upload and link an attachment to that text
- Open a new incognito tab
- Try to download the attachment
# The problem
An error 404 is displayed
# Why
The access token of the attachment is not correctly added in the link URL. This is because link_popover.js does not correctly call the upload function from the uploadLocalFile services.
The signature of that function is :
```py
async function upload(
{ resId, resModel },
{ accept = "*/*", multiple = false, accessToken = false } = {}
) {
```
opw-5500362
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#251427This update fixes an issue where analytic distribution wasn't being correctly passed from sales orders to purchase orders. Now, when a sale order is created with analytic distribution enabled, that distribution will automatically be applied to the corresponding purchase order, ensuring accurate cost tracking and reporting. This improves financial visibility and reporting accuracy.
Original PR description
Steps to reproduce: - Enable analytic distribution in Accounting settings - Create a storable product "P1": - Routes: MTO + Buy - Vendor: add any supplier - Create a Sale Order: - Add 1 unit of P1 -…
Steps to reproduce: - Enable analytic distribution in Accounting settings - Create a storable product "P1": - Routes: MTO + Buy - Vendor: add any supplier - Create a Sale Order: - Add 1 unit of P1 - Set any analytic distribution - Confirm the Sale Order Result: A Purchase Order is created, but the analytic distribution is not propagated to the purchase order line. Problem: When the Sale Order is confirmed, `_action_launch_stock_rule()` is triggered. It creates and confirms the corresponding stock move with values from the sale order line. Since the product uses the MTO route, the procurement rule is executed. The rule prepares procurement values from the stock move, but the analytic distribution is not included in these values: https://github.com/odoo/odoo/blob/18.0/addons/stock/models/stock_move.py#L1539 Later, `_run_buy` is triggered. It uses the procurement values coming from the stock move to find an existing purchase order line candidate or to create a new one. Because the analytic distribution is missing from the values, the created (or matched) purchase order line does not contain the analytic distribution: https://github.com/odoo/odoo/blob/621a93b7b723999d943f1c4da78547763498c008/addons/purchase_stock/models/stock_rule.py#L113 Solution: Propagate the analytic distribution from the sale order line through the stock move so it can be included in the procurement values and correctly applied to the purchase order line. opw-5936971 Forward-Port-Of: odoo/odoo#254933 Forward-Port-Of: odoo/odoo#252292
This update fixes a previous restriction that prevented users from editing taxes on reward lines within confirmed sales orders. Previously, confirming an order would recompute taxes, but now edits can be made to these tax lines after the order is confirmed. This improves flexibility for users managing reward orders.
Original PR description
Issue: --- Due to this issue, the tax on reward SOL cannot be edited. Cause: --- This is introduced in #172110 to prevent users from editing taxes on reward lines because confirming the order would recompute the tax. We can make it editable on confirmed SO as the tax wouldn't recomputed on reward lines later. opw-5918435 Forward-Port-Of: odoo/odoo#255644 Forward-Port-Of: odoo/odoo#255102
This update ensures that users are warned before performing a full synchronization of products in the Point of Sale system. The system now checks if the number of products exceeds a configured limit, preventing potential performance issues and data inconsistencies. This improves the reliability of the POS functionality.
Original PR description
When the user selects "Full" in the SyncPopup, the system now checks the total number of PoS-available products against the configured `point_of_sale.limited_product_count` system parameter before proceeding. opw-5484051 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243763
This update resolves an issue where downpayment accounts weren't correctly linked between POS invoices and sales order invoices. The fix ensures that the correct account ID is used when generating invoices, preventing discrepancies in payment tracking. This improves accuracy and simplifies financial reporting.
Original PR description
[Issue] 1) When a POS downpayment is created, it doesn't set the account.move.lines.is_downpayment = true. So, no POS invoice line was being marked as a down payment. 2) When preparing to create the…
[Issue] 1) When a POS downpayment is created, it doesn't set the account.move.lines.is_downpayment = true. So, no POS invoice line was being marked as a down payment. 2) When preparing to create the invoice lines for the sales order, it never checks the original POS Invoice lines for down payments. [Fix] 1) When creating the invoice lines for the down payment through the POS, set the 'is_downpayment' based on if the product is the POS's down payment product. 2) Create _prepare_invoice_lin,e then filter through the POS invoice lines for downpayments and then set them accordingly. Steps to Replicate: 1) User creates a Sales Order for a customer, 2) Transfers it to the POS, and the customer makes a down payment. 3) The user creates an invoice on the Sales order to pay the remainder of the bill 4) The account Id on the account.move.line does not match the original account on the POS invoice for the original account.move.line Video Demo of the issue: https://drive.google.com/file/d/1FszCJRUF-cCgg8otxu1jj1kmdKauwTGL/view?usp=drive_link Video Demo of Solution: https://drive.google.com/file/d/1yrYBdQZFw7YeKxsgsQQx5gHkuGER-7BN/view?usp=drive_link Forward-Port-Of: odoo/odoo#249180
This update streamlines the testing process by pre-generating a key asset bundle used by the bus module. Previously, this bundle was rebuilt repeatedly during tests, causing delays. This change significantly speeds up test execution times, improving overall development efficiency.
Original PR description
This commit sets the `bus.websocket_worker_assets` bundle to be pregenerated while running tests to avoid rebuilding it at runtime (i.e. +900 times with a db "all"). Forward-Port-Of: odoo/odoo#255843
This update resolves an issue where Odoo would crash if a module didn't include a manifest file. The system now handles this gracefully, ensuring a more stable experience. This change improves overall system reliability and prevents unexpected downtime.
Original PR description
This commit avoids a crash when a module doesn't provide a manifest (cf. Industry). Pregenerating lazy loaded bundles is a "best effort" detection and should be resilient so, not a big deal if some aren't properly found. Forward-Port-Of: odoo/odoo#256056
This update resolves a technical problem that prevented accurate product cost calculations when multiple companies were involved. The issue stemmed from incorrectly accessing BOMs across different companies, leading to access errors. This fix ensures correct product costing is calculated regardless of the number of companies a user is working with.
Original PR description
When computing the product cost in `_get_product_cost_with_moves`, iterating over `product.bom_ids` would include BOMs from all companies, causing an `AccessError` when the current user lacked read access to a BOM belonging to another company. opw-6060735 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#255859
This update fixes an issue where the cost of stock lots was incorrectly calculated across multiple companies. Previously, the system stored a single, company-specific cost, leading to inaccurate valuations when using shared products. Now, the cost is dynamically calculated based on each company's context, ensuring accurate accounting for all businesses.
Original PR description
Field avg_cost was set to store=True in 42d3e34, but the compute method _compute_avg_cost() is company-context-dependent (calls _run_fifo which filters by env.company). Storing a single value causes incorrect valuations in multi-company databases with FIFO + lot valuation. In multi-company setups with shared products (company_id=False), the lot's avg_cost would compute in one company's context and store that value globally, causing all other companies to see the wrong cost. Fix: Remove store=True to compute dynamically per company context. Cannot use company_dependent=True as it requires JSONB migration. opw-5446941 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#247278