Daily updates from Odoo
Tuesday, March 4, 2025
15 changes · 18.0
Enhancements to existing features
Invoices now automatically use the salesperson assigned to the customer when one is set, rather than defaulting to the person creating the invoice. This helps keep sales ownership consistent from customer records through invoicing and improves reporting accuracy.
Original PR description
For `sale.order`, the salesperson (`user_id`) on the order is set to the partner's salesperson (`user_id` on `res.partner`) if set. Currently, `account.move` sets the salesperson (`invoice_user_id`) to the user creating the invoice. With this commit, `invoice_user_id` is set to the partner's salesperson if exists. task-4374265
Bill details fetched from Indian e-invoices are now handled more reliably, including portal attachment limits, reverse charge taxes, and taxes missing from the local setup. Temporary portal errors are also retried automatically, reducing manual follow-up and improving accounting completeness.
Original PR description
This PR introduces the following improvements: - **Attachment Name Update**: Restricts the attachment name to 45 characters to comply with e-invoice portal limitations. - **Handling Missing Taxes**: Includes journal items for taxes not found in the system to ensure proper accounting. - **Enhanced Tax Matching**: Updates the tax-finding mechanism to include RCM taxes when the bill transaction's `RegRev` parameter is marked as `Y`, in addition to regular taxes. - **Error handling**: Handle `EINV30109` error code to schedule a retry cron after 10 minutes and log a message.
Point of Sale now supports configurable limits for how many products and customers are loaded. This helps businesses tune POS performance and data availability based on their store size and operational needs.
Original PR description
- Introduced `ir.config_parameter` settings for product and customer limits in POS. - Refactored partner loading to use configurable customer limit. community PR: https://github.com/odoo/odoo/pull/199923 task-id: 4610131
Accounting report XLSX exports now include a separate currency code column next to foreign-currency amounts. This makes exported reports clearer and helps users identify the currency behind each amount after symbols are lost in spreadsheets.
Original PR description
Issue: When we export a report to xlsx containing some amounts in foreign currency, those amounts are exported as values in the file, and loose any kind of currency symbols. It then becomes impossible to know what currency they were expressed in. Solution: When a column has an expression label with the 'currency' word inside, adds a new column right next to it, with the currency 3 letters code as value. This is done in the accounting reports framework and so is used on all reports using a custom engine. task-4011008
Resolved issues and error corrections
Portal users can now download all attachments from a message as a zip file even when an editor is present on the page. This prevents the page from showing an internal blob link instead of starting the download, reducing confusion and keeping the current page intact.
Original PR description
When downloading all message attachments as a zip file in portal chatter, if there is an editor iframe on the page, instead of downloading the file, there is a blob url opened on the page. This happens because the web editor handles clicks and tries to open the URL in the current main window, which results in displaying the blob URL to users instead of ownloading it. Opening the attachment in a new window prevents interfering with the current page url and keeps the iframe managed by the web editor intact. task-4545106
This fixes a Point of Sale issue where staff could not cancel an online payment line after refreshing the payment screen. It prevents an error popup and lets cashiers recover smoothly from an interrupted or unpaid online payment flow.
Original PR description
Description of the issue/feature this PR addresses: Steps to reproduce - Create and open POS, set it up with online payment (Demo) - Enter the payment (online payment), don't pay and refresh the page - After refresh, go to payment screen again - You'll get the error in my attachment  Current behavior before PR: - After selecting online payment, refresh the page, then you cannot cancel the payment line and error pop up appear Desired behavior after PR is merged: - Can cancel the payment line after refresh opw-4608951 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an error in Point of Sale customer search when the SMS gateway is not installed. The search now only uses SMS-related phone matching when the relevant SMS integration is available, so staff can reliably find customers from the POS screen.
Original PR description
Steps to reproduce the bug: - Install POS, then uninstall the sms gateway - Open a shop and then click on customers button - write anything in the input field then click on `Search More` Problem:…
Steps to reproduce the bug: - Install POS, then uninstall the sms gateway - Open a shop and then click on customers button - write anything in the input field then click on `Search More` Problem: Error is raised in the request because the `partner_list.js` screen is passing the field `phone_mobile_search` in the search_fields. The `phone_mobile_search` field is only introduced to the res.partner model in the a PhoneMixin and the inheritence is only applied in the `sms gateway module` so the field will only be available if the `sms gateway is installed`. Possible Approaches: - [Stable] added a function in the partner_list.js that tells if the PhoneMixin is applied and it returns false in the pos, and overriden the same function in the pos_sms bridge module that implies that both pos and sms are installed and it returns true there meaning the mixin is applied. - [Non Stable] add the inheritence of the mixin in the pos module, but that will require module upgrade - [Non Stable] add a whole direct dependency between the pos and the sms gateway opw-4455381 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 fixes an issue where selecting a customer after closing and reopening the online payment QR code popup did not update the POS order correctly. Orders paid through online payment will now stay synchronized with the selected customer, helping ensure accurate sales records and customer history.
Original PR description
Description of the issue/feature this PR addresses: Currently, when an order is generated in the POS system and the payment method is set to pos_online_payment, after displaying the popup with the QR…
Description of the issue/feature this PR addresses: Currently, when an order is generated in the POS system and the payment method is set to pos_online_payment, after displaying the popup with the QR code, if the popup is closed, and then a customer (partner_id) is selected, reopening the popup does not update the customer information on the order. This means that the customer (partner_id) is not synchronized correctly on the backend of Odoo, leading to the order not reflecting the updated customer selection. Current behavior before PR: When the popup with the QR code is closed, and a customer is selected afterward, the partner_id (customer) is not updated on the order. The order does not reflect the latest customer selection on the backend. Desired behavior after PR is merged: When the customer (partner_id) is selected after the popup is closed and reopened, the order will be updated with the correct customer information. The system will ensure that the partner_id is synchronized in real-time with the backend, so the customer is correctly assigned to the order. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an issue where some invoice lines could be missing from the Italian electronic invoicing XML when an invoice included a negative line. The generated file now preserves the original invoice lines, reducing the risk of incomplete submissions to the tax agency.
Original PR description
Currently, when a negative line is added and dispatched with `_dispatch_negative_lines`, null candidates lines are excluded from the base line to include in the XML. This leads to issues where the invoice no longer contains all its original lines.
Steps to reproduce:
- Create an invoice with several positive lines and one negative line
- (e.g., 5 lines at $100 and one at -$200)
- Click “Send” and select “Send to Tax Agency”
- Check the XML result, you’ll notice only 3 lines are present instead of 5
This fix restores the behavior seen in Odoo version 17.4, where null candidates lines from `_dispatch_negative_lines` are still included in the final XML generation.
opw-4604377Users loading additional records in a Kanban column will no longer be unexpectedly moved down to the Load more button. This preserves their place in the view and makes browsing long Kanban columns smoother and less disruptive.
Original PR description
This commit fixes an issue where clicking "Load more" in the first column of the Kanban view caused the page to scroll to the button, making users lose their previous position. This appears to be related to the browser's behavior of scrolling to a focused element if it still exists after DOM mutations. However, it remains unclear why this only affects the first column and not the others. As a temporary workaround, a t-key is added to the "Load more" button to ensure it is removed and replaced each time it is clicked. This issue was partially addressed in https://github.com/odoo/odoo/pull/115706, but that fix is no longer relevant with this commit.
Sales orders that create projects or tasks now assign tasks and analytic accounts consistently, including when multiple orders are confirmed together. This prevents duplicate or mismatched project links and keeps project profitability tracking aligned with the intended sales order setup.
Original PR description
This PR aims to solve multiple issues related to analytics and project generation in sales orders. 1. Let's assume an SO with the following: - Add an SOL with product that generates a project (or a…
This PR aims to solve multiple issues related to analytics and project generation in sales orders. 1. Let's assume an SO with the following: - Add an SOL with product that generates a project (or a project & a task) - Add an SOL with product that generates a task in no particular project - Confirm the SO with those products OR start from a confirmed SO, and add those products to it (add them all, and then save the SO) In that case, the second product should generate a task in the project generated by the first product (unless a project was selected on the SO). After this commit, if the SO generates multiple projects and no project was selected on the SO, we generate the task in the generated project with the lowest (sequence, id). 2. Let's assume an SO with the following: - Create two SOs having both a service product which creates a project (or a project & a task) - Confirm both SOs at the same time Issue: Both SOs have the same project, while two projects have been generated (one per SO) Solution: Each SO should have the project it has generated. In other terms, we should make it work when confirming multiple SOs in batch. 3. Let's assume an SO with the following: - Add an SOL with product that generates a project (or a project & a task) not based on a project template - Add an SOL with product that generates a project (or a project & a task) based on a project template - Confirm the SO Issue: Two projects were generated, each one having a different analytic account (but with the same name). It's not consistent with the previous behavior (from 17.4). Solution: Create one analytic account that all generated projects will share. 4. Let's assume an SO with the following: - Set the project of the SO to a project having an account_id - Add an SOL with product that generates a project (or a project & a task) - Confirm the SO Issue: The account of the generated project is not the account of the project on the SO. Again, it's not consistent with the previous behavior (from 17.4). Solution: Do not create a new analytic account for the generated project but instead take the one from the project on the SO if it is defined. task-4244890 version-18.0
This fixes an issue where import previews could fail in debug mode when files included certain related record ID columns. The change makes field information more complete and accurate, helping Odoo suggest the right import mappings and preventing interruptions during setup or troubleshooting.
Original PR description
In debug mode, import previews were failing with a "'model_name'" KeyError when column headers included one2many/id fields. This occurred because the 'model_name' is missing from the field definition dictionary returned by `get_fields_tree` for '.id' in debug mode in case of one2many. Since the introduction of https://github.com/odoo/odoo/pull/174366, 'model_name' should be always included in these field definitions. Additionally, this commit corrects the 'model_name' for relational ID fields. Previously, these fields incorrectly targeted the current model instead of the comodel. This fix prevents `_get_mapping_suggestion` from targeting the wrong model during its fallback mechanism, which relies on 'model_name'.
Public visitors can now react to messages in website chatter without errors, and copied message links open correctly instead of showing an unauthorized page. This improves the review and discussion experience for public users on website course pages.
Original PR description
Before this commit, as a public user in website chatter: - Trying to add a reaction would result in a traceback. - The link created from the "Copy Link" action would lead to an unauthorized page. Steps to reproduce: - Install website module and add course page - As public user open a course - Go to reviews - Add a reaction to any message -> traceback - Copy link to any message - Open said link -> unauthorized page This commit fixes the issues by adding a "can_react" field in the portal store init. task-4551910
Payroll batch generation now selects employees based on active contracts during the batch period, allowing the right payslips to be created when employees have relevant contracts. This improves payroll processing accuracy and updates related tests across payroll and localization modules.
Original PR description
* = hr_payroll{,_account}, l10n_{be,in}_hr_payroll
Problem
----------
- An employee can not have multiple payslip in a batch
Objective
----------
- Base the employees selection on active contracts running in the batch period
- Update tests to follow the good behaviour
Solution
----------
- Link payslip employee wizard with a batch one time with the context
task-4483393Fixed an issue in Knowledge where sending clipboard content as a message could place the text after the user’s email signature. The composer now keeps the clipboard text before the signature, reducing manual editing and helping messages look correct when sent.
Original PR description
Recent updates introduced automatic inclusion of the user's signature to the mail composer (see: odoo/odoo#184695). When the user clicks on the "Send as Message" button of a clipboard block in…
Recent updates introduced automatic inclusion of the user's signature to the mail composer (see: odoo/odoo#184695). When the user clicks on the "Send as Message" button of a clipboard block in Knowledge, the macro system will do a few steps to (1) restore the previous view, (2) open the full mail composer and (3) insert the clipboard text at the end of it. As the signature is added when opening the full mail composer, the clipboard text is inserted after the user's signature which is inconvenient as users must manually adjust the message to position the signature at the end of the message. To avoid this problem, we'll replace the full mail composer content with the concatenation of the clipboard text and the user's signature. This guarantee that the two elements will appear in the desired order. Steps to reproduce: 1. Open the CRM lead view 2. Press `Ctrl` + `k` to open the command palette 3. In the command palette, select any article 4. In the article you chose, insert a clipboard block with the /clipboard command 5. Click on the "Send As Message" button of the clipboard => The macro restores the CRM lead view, opens the full mail composer and paste the clipboard content after the user's signature. TO BE: The macro should replace the message of the full composer with the clipboard content and the user's signature should be placed after the clipboard content. Task-4428445