Daily updates from Odoo
Friday, October 24, 2025
47 changes · 19.0
New functionality added to Odoo
Finnish accounting reports can now generate an export file for tax reporting, helping customers submit required tax information to the Finnish administration more easily. The update also improves automated checks so report export files are generated with the correct settings.
Original PR description
The aim of this commit is adding the tax report export file to allow our customers to send their tax reports to their administration. task-5135868 Forward-Port-Of: odoo/enterprise#97867 Forward-Port-Of: odoo/enterprise#96256
Enhancements to existing features
All Finnish tax report lines now have codes, including lines that previously had none. This makes tax report exports more reliable because the export process can consistently identify each report line.
Original PR description
The aim of this commit is adding code for all the tax report lines. Before, some lines didn't have any code set on it, now all these lines have a code. The change is motivated by the tax report export where we use the code as key in the dict given to the export template. task-5135868 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232636 Forward-Port-Of: odoo/odoo#229876
This improves the speed of switching a product category between manual and real-time inventory valuation, especially for categories with very large numbers of product variants. In the reported case, a process that previously timed out after more than 15 minutes completed in about 18 seconds, reducing delays for inventory and accounting operations.
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 Forward-Port-Of: odoo/odoo#231206
Amazon stock synchronization logs now include the related account ID, making it easier for support teams to trace issues to the right customer account. This helps speed up investigation and improves the quality of support diagnostics without changing user workflows.
Original PR description
Based on feedback from the support team, additional information has been added to the stock sync logging messages. This enhancement includes the account ID for better traceability and to help the team understand customer issues more effectively. Forward-Port-Of: odoo/enterprise#97940
Hong Kong payroll declaration forms now include chatter, allowing users to track discussions and activity directly on the forms. This improves collaboration and record visibility for teams handling payroll declarations.
Original PR description
Based on HK feedback, chatter is added on their declaration forms task:5067386
The German tax report has been reworked after the balance column was removed, ensuring the report logic and tests match the new layout. This helps keep German tax reporting accurate and consistent for businesses using Odoo.
Original PR description
After removing the balance column, we need to refactor the code that depends on it task-5046641
The German tax report has been reorganized to better match the official ELSTER VAT filing structure. This makes the report easier to follow for German businesses and helps align Odoo's tax reporting with expected filing categories.
Original PR description
Rework the structure of the German Tax Report according to the very well detailed structure https://sevdesk.de/ratgeber/buchhaltung-finanzen/ustva/formular-elster/ task-5046641 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Resolved issues and error corrections
The China ASBE balance sheet report now classifies liabilities correctly and includes previously omitted report data. This helps ensure financial statements balance as expected and improves confidence in statutory reporting.
Original PR description
Fixes the balance_sheet_balanced test for asbe where the wrong line was set as liability. Also fixes the report itself that was ignoring one line, and missing one account. task-5175789 Forward-Port-Of: odoo/enterprise#97720 Forward-Port-Of: odoo/enterprise#97460
When a job application is refused and a refusal email is sent, the email is now also recorded in the applicant's chatter. This gives recruiters a clearer communication history and helps teams track what was sent to candidates.
Original PR description
To reproduce: ============= refuse an application with `send_email` checked, the email is sent but not logged in the chatter Solution: ========= Add a `message_post` in the `_prepare_send_refusal_mails` method opw-5137342 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#230450
This fix changes the Vietnam localization migration so tax updates are applied more selectively. Businesses keep their customized accounting settings during the update, reducing the risk of unexpected configuration changes.
Original PR description
Problem The previous implementation used try_loading() which would reload the entire chart template, potentially overwriting user-customized configurations settings. Solution Replaced try_loading() with a more targeted approach usin _load_data for account.tax.group and account.tax 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#229476 Forward-Port-Of: odoo/odoo#227918
This fix prevents AI-generated HTML content from showing escaped code instead of the intended formatted content. It ensures users see properly rendered AI output while continuing to rely on existing sanitization safeguards.
Original PR description
Bug === Since odoo/odoo@560fca7e94b232a7e2c9ad452a9772367c34204b , `fixInvalidHTML` escape the content if it's not a markup object. All place have been updated, except when computing an HTML with AI. So we make the object a markup, so it's not escaped by `fixInvalidHTML`. The content is sanitized in `parse_ai_response`. Task-5092600
Spanish point-of-sale receipts now correctly display the company's state name instead of empty brackets. This fixes a receipt presentation issue for Spanish companies using simplified invoices, improving customer-facing document accuracy.
Original PR description
**Steps to reproduce:** - Set a spanish company, set the state - Set the "Simplified Invoice" journal in the settings - Go to PoS and make a purchase - On the receipt, empty brackets are shown where the state should be **Why the fix:** Before this commit, we checked that the company had a state set, and if it had, we displayed *state_id[1]* between brackets. Even if the state_id existed, this is not the correct structure for the state_id, so *state_id[1]* did not exist, and we displayed only the brackets. We now display the correct state name, still between brackets. opw-5098212 Forward-Port-Of: odoo/odoo#232689 Forward-Port-Of: odoo/odoo#230141
Fixes a problem that could stop very large email campaigns from being retried after a mail server outage. Failed emails are now retried in smaller batches, helping larger customers recover campaigns with hundreds of thousands of recipients more reliably.
Original PR description
Steps to reproduce the issue: 1. Have 100s of thousands of recipients on a campaign 2. Disconnect your outgoing server and send 3. Reconnect the mailing server and retry sending. Current behavior before PR: A `MemoryError` is raised due to the large number of emails processed to `unlink()` Desired behavior after PR is merged: Larger-scale clients would be able to resend 100s of thousands of emails if they fail opw-5091567 Forward-Port-Of: odoo/odoo#228446
Subscription orders that use an external tax calculator now keep the externally calculated amounts when showing recurring totals. This prevents recurring totals from being recalculated incorrectly and helps customers see accurate subscription charges.
Original PR description
sale_subscription now uses `account.tax` to recalculate the tax amounts [1], thus bypassing amounts set by external calculators. For externally calculated orders, we override the recurring_total calculation to restore the previous behavior of calculating the amount using `price_subtotal` on the lines. This field will contain the amount returned by the external calculator. [1] https://github.com/odoo/enterprise/commit/70376f94e9f26e631890312edc0857d9ff37dc7b opw-4964610 Forward-Port-Of: odoo/enterprise#94855 Forward-Port-Of: odoo/enterprise#93054
This fix prevents crashes when users quickly drag and drop multiple cards in large grouped Kanban views. It makes the interface handle background refreshes more safely, improving stability for teams working with many records at once.
Original PR description
On a grouped kanban view displaying a lot of records (i.e. with a lot of columns and a lot of records by column), drag and drop several records from the same column quick multiple times. Before this…
On a grouped kanban view displaying a lot of records (i.e. with a lot of columns and a lot of records by column), drag and drop several records from the same column quick multiple times. Before this commit, different crashes could occur. The first category of crashes concern the sortable hook. It called the onDrop callback even if the dragged element was no longer in the DOM (which occurs if there's a re-rendering while the user is dragging). This has been fixed in the hook, and tested. Another crash could arise in kanban (in the model). If the user dropped the card while there was a scheduled/ongoing re-rendering, i.e. at a specific moment where the model isn't synchronized with the DOM, the dropped card was still in the DOM, but it's associated datapoint was no longer referenced in hte model. In that case, we can do nothing but cancel the d&d. Note that this couldn't be tested, as reproducing the exact behavior (typically having a slow rendering due to the number of cards to render) isn't possible in a unit test, where user interactions are done programmatically. Task~5167650 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#232353 Forward-Port-Of: odoo/odoo#231886
The Field Service “To Schedule” view now excludes completed or cancelled tasks. This keeps teams focused on work that still needs scheduling or assignment and avoids confusion from closed tasks appearing in the list.
Original PR description
**steps to reproduce:** Go to field service Go to all tasks > to schedule **issue:** The To Schedule filter was also displaying tasks in cancelled or done state, whereas it should only show open tasks that need to be scheduled or assigned. **cause:** The filter domain did not exclude cancelled/done state, causing closed tasks to appear in the filtered view. **fix:** Updated the filter domain to exclude cancelled/done state, to ensure only open tasks are shown under the To Schedule filter. task-5138590 Forward-Port-Of: odoo/enterprise#96600
This fix makes automated project history checks wait for the expected content before continuing, reducing random failures when test servers are under heavy load. It improves confidence in validation results without changing day-to-day user behavior.
Original PR description
This commit fixes an undeterministic error happening on runbot when the host has a higher load, slowing down the tour's execution. More specifically, the custom `run()` function is called right when the trigger selector is matched, even if its content hasn't finished loading. By changing the selector to a `:contains()` it waits for the actual content to be matched. Note: it also removes a duplicated step related to the html history being loaded. runbot-233338
This fix ensures attachment fields in accounting reports and social post templates use the intended access handling. It helps prevent missing or inaccessible attachments when users work with returns or social media content.
Original PR description
Follow-up of fd4fcb1bd87, we should set `bypass_search_access` on `ir.attachment` many2many fields.
This update fixes how attachment fields are accessed in the POS self-order configuration. It helps ensure related files can be found correctly where needed, reducing the risk of missing images or documents in the self-order flow.
Original PR description
Follow-up of 8e5fde2a462e, we should set `bypass_search_access` on `ir.attachment` many2many fields. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an issue where records using selection properties could be filtered incorrectly because the displayed label was used instead of the stored internal value. Business users should see more reliable results when using filters or automated logic based on these properties.
Original PR description
Bug === The selection properties is not working with `filtered_domain`. The reason is that the label is used instead of the random name (when the getter is used in mail template, we show the label). So we backport the context key added in https://github.com/odoo/odoo/commit/763d83655f1909038b0fdd237529deb87a63f4da and we use it for `filtered_domain`. Task-5188957
HR users can now use the requested signature button on an offer even when the employee has signed more than once. When multiple signature requests exist, the system shows all related requests in a kanban view so the HR responsible can choose the right one without hitting an error or dead end.
Original PR description
Steps to reproduce: - Go to an employee and create an offer - Sign the offer with the employee twice - Log as the HR responsible and use the "Requested signature" smartbutton on the offer This has been fixed by opening a kanban view of all sign requests, if multiple. task-5053624 Forward-Port-Of: odoo/enterprise#94053
SEPA payment files using the Belgian pain.001.001.03 format now include the required end-to-end payment reference correctly. This prevents generated bank files from containing an empty reference field, reducing the risk of bank rejection or reconciliation issues.
Original PR description
The XML of the sepa file in format `pain.001.001.03` in `l10n_be` has a missing `EndToEndId` tag. - Configure the bank to use the `pain.001.001.03` sepa xml format. - Generate a payment using sepa. Create a batch for this payment and validate. - The resulting xml has an empty `EndToEndId` tag. Commit fa08eac141956141bc12c1d5619bd57f487c36e9 removed the end_to_end_id used in the tag. The correct format of the tag is end_to_end_uuid. opw-5150525
This fix stops users from removing the final option in a multiple-checkbox form field. It prevents forms from getting stuck in a broken state where new options can no longer be added, improving reliability for website editors.
Original PR description
Since `html_builder`, the last element of a multiple checkboxes form field can be removed, but it leads to a situation where no element can be added anymore to the field. To avoid this, this commit restores the former behavior which did forbid the removal of the last element. Steps to reproduce: - Drop a form snippet - Add a field - Set the field type to "Multiple checkboxes" - Remove all options => It was possible to remove the last option. task-4367641 Forward-Port-Of: odoo/odoo#230827
This fixes a timing issue in the web test runner where clicking Run too quickly in manual mode could cause a crash before loading was complete. The change makes the runner handle early clicks safely, improving reliability for developers and testers using Odoo's web testing tools.
Original PR description
Before this commit, in manual mode, "Run" could be clicked before the assets finished loading (and so, before the test runner was properly "ready"). This caused a crash because it tried to resolve a promise that did not exist yet. Steps to reproduce: - Go to test URL (manual) - Click "Run" as soon as the button is visible (probably via a script to make sure the click is fast enough) This commit fixes that by adding failsafes around that promise, effecitvely allowing to click "Run" early on. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232789
Point of Sale receipts now keep the same numbering format whether an order is created online or while disconnected. This avoids confusing differences in backend order references and makes reconciliation clearer for store teams.
Original PR description
**Steps to reproduce:** - Go to PoS, make an order and pay for it - Before clicking next order close your connection with the server - Make a purchase like this - Go back online and check the orders…
**Steps to reproduce:** - Go to PoS, make an order and pay for it - Before clicking next order close your connection with the server - Make a purchase like this - Go back online and check the orders in the backend The order made online only has the receipt number, but the order made offline has *Order* in front of it. **Why the fix:** The receipt number on a PoS order should be consistand and should not be changed depending on if the purchase was made online or offline. With this commit, every order will have only it's receipt number without the *Order* in front of it even if it was made offline. It is still possible to see if an order was made online or offline with the **F** variable, which is the first number of the last part of the receipt number. If it is 1, the order was made offline, if it is 0, it was made online. The *refPrefix* parameter from the *getNextOrderRefsLocal* function is not used anymore, so it has been replaced by an empty string in the function call in stable and could be deleted when in master. opw-4965095 Forward-Port-Of: odoo/odoo#232745 Forward-Port-Of: odoo/odoo#224416
Spreadsheet files in Documents now show the expected thumbnail preview on kanban cards instead of an embedded text preview. This makes it easier for users to recognize spreadsheet documents at a glance and avoids a confusing display issue.
Original PR description
## Description Spreadsheets (stored as `application/json`) were matched by the textual preview, so the kanban card showed a text iframe instead of the sheet thumbnail. Now the spreadsheet preview is prioritized so the correct thumbnail displays. Task: [4963284](https://www.odoo.com/odoo/project/2328/tasks/4963284) Forward-Port-Of: odoo/enterprise#96963
Website administrators can no longer delete custom fields that are still used in website forms. This prevents crashes when editing forms and guides users to remove the field from the form before deleting it.
Original PR description
The system crashes when a user tries to edit a website form field and that field has already been deleted from the model. **Steps to produce:-** - Install the `website` module. - Create a `new custom…
The system crashes when a user tries to edit a website form field and that field has already been deleted from the model. **Steps to produce:-** - Install the `website` module. - Create a `new custom field` on a model(for example, a field on the `mail.mail` model). - Website > edit > `add Form` widget to a page, and configure it to use the `mail.mail` model. - Add the newly created custom field to the form and save the page. - Now, `delete` the custom field which is created previously. - Return to the website page > edit > mark the deleted field as required, and attempt to save the changes. **Error:-** `ValueError: Unable to whitelist field(s) [''] for model 'mail.mail'.` **Root cause:-** - At [1], we can see that in the current version, it `only logs an error` using the logger, but in later versions, it `raises a ValueError` instead. **Solution:-** - This fix prevents a field from being deleted if it is actively used in any website form. - It adds a validation check that blocks the deletion and raises an error, forcing the user to remove the field from the form first. [1]: https://github.com/odoo/odoo/blob/d4f424d731fa93ccd232d0def0a7612997345ef7/addons/website/models/website_form.py#L123-L126 **sentry-5689731444** I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232707 Forward-Port-Of: odoo/odoo#219590
This fix makes the Backspace key behave predictably when editing bold or otherwise formatted empty paragraphs in the HTML editor. Users should no longer see empty paragraphs remain stuck or multiple paragraphs disappear unexpectedly, reducing accidental content loss while editing.
Original PR description
Steps to Reproduce Issue 1 - Apply bold on an empty paragraph using **Ctrl+B** and press Enter. - Press Backspace - the paragraph is not removed. Issue 2 - Write some text. Apply bold on that text. -…
Steps to Reproduce Issue 1 - Apply bold on an empty paragraph using **Ctrl+B** and press Enter. - Press Backspace - the paragraph is not removed. Issue 2 - Write some text. Apply bold on that text. - Press Enter multiple times to create 2–3 new paragraphs. - Press Backspace. - A single backspace removes multiple paragraphs at once, and the cursor jumps back to the paragraph with the text. Description of the issue: After a recent commit [1], only a **zws** is inserted inside blocks containing empty inline elements. As a result, when an inline element contains only a **zws**, `adjacentLeafFromPos` returns the **zws** as a leaf node. Since **zws** is not a visible character and there are no visible characters nearby, it is not treated as a valid stop point, and the traversal continues searching for a visible character. - In the first case, no visible character is found, so backspace does nothing and the block remains undeleted. - In the second case, a visible character is eventually found further away, so all blocks between that character and the current selection are removed in a single operation, causing multiple paragraphs to be deleted at once. Solution: The fix ensures that when a block is empty and a block switch occurs, the **zws** is returned immediately instead of continuing the traversal. This prevents backspace from skipping or deleting multiple blocks unexpectedly. task:5071252 [1]: https://github.com/odoo/odoo/pull/220568/commits/1cc0670aa4d8f1552ff6ea0cba304c8c74ffc263
This fixes an issue in Point of Sale where the cash drawer would not open if an unrelated IoT box was unreachable. Cashiers can now use an ePOS printer-connected cash drawer reliably, even when another configured device is offline.
Original PR description
Steps to reproduce: 1. Configure a POS to use an ePOS printer with the cashdrawer enabled. 2. Also configure the POS to use an IoT box with a dummy device, e.g. '[Shop] Scale'. The important thing is that the IoT box is not reachable when the POS opens, so the dummy devices work well for this. 3. Open the POS, make an order and go to payment, then click 'Open cashbox'. Expected behaviour: The cashdrawer opens Actual behaviour: Nothing happens task-5059502 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232852 Forward-Port-Of: odoo/odoo#232797
Fixed an issue where landscape reports printed through a Virtual IoT Box could come out as cropped portrait pages. The printing process now fits PDF pages to the selected paper format, helping documents print in the expected orientation.
Original PR description
When printing a landscape report using a Virtual IoT Box, we end up printing a portrait page cropped. This commit adds the "pdf fit page" argument to ensure the page printed follows the report orientation. opw-5051809 Task: 5149706 Forward-Port-Of: odoo/odoo#232952 Forward-Port-Of: odoo/odoo#232866
The Discuss app sidebar and top bar have been visually adjusted so mailbox items, categories, and thread actions line up more consistently. This makes the messaging interface look cleaner and easier to scan without changing how users work.
Original PR description
- Vertically align categories and mailbox items in discuss sidebar - Vertically align thread actions in topbar with systray items Part of Task-5190261 Before <img width="1867" height="1011" alt="Screenshot 2025-10-24 at 14 00 19" src="https://github.com/user-attachments/assets/fa7ecfe4-d78c-4e8e-bd66-01497cef7884" /> After <img width="1867" height="1011" alt="Screenshot 2025-10-24 at 14 04 52" src="https://github.com/user-attachments/assets/b19e7021-3b88-4254-8313-420d1e7607e7" />
This fix ensures POS payments through Six terminals correctly identify the currently logged-in cashier, even when another user opened the session. It prevents payment startup issues caused by missing user information in shared or multi-tab POS workflows.
Original PR description
This commit fixes an undefined `user_id` on the pos session when trying to start a payment with a Six terminal from another user than the one that started the session. Before this commit: - open a pos session with Mitchell Admin, - check the value of `pos.session.user_id` (it will be `2`), - open another tab and connect as Marc Demo, - check the value of `pos.session.user_id` again: it should be `6`, but instead is `undefined`. After this commit: We use `pos.user.id` instead of `pos.session.user_id.id` to get the user ID. opw-5055977 Forward-Port-Of: odoo/enterprise#98021 Forward-Port-Of: odoo/enterprise#97975
This fixes an internal website test so it uses the right performance expectation when demo data is present. It helps keep automated checks reliable and avoids false failures during validation, with no direct change for end users.
Donation forms now wait until the required currency information is available before processing a submission. This prevents rare crashes or failed submissions on slow connections and shows a loading state to avoid duplicate clicks.
Original PR description
This fixes a very rare race condition in the `test_01_donation` tour... but it is actually surprising it is not more frequent than it is. Steps to reproduce: - Simulate a slow network (e.g. using…
This fixes a very rare race condition in the `test_01_donation` tour... but it is actually surprising it is not more frequent than it is. Steps to reproduce: - Simulate a slow network (e.g. using Chrome DevTools) - Load a page with a donation snippet - Quickly fill in the donation form and click the submit button => You'll sometimes get a crash. Or a more precise one: - Add a 1 minute delay to the `/website/get_current_currency` route - Load a page with a donation snippet - Fill in the donation form and click the submit button once the page is fully loaded. => You'll definitely get a crash. This commit makes that button's handler async-protected, meaning it will now properly wait for what is needed (the currency) before proceeding, but it will also display a loading effect for the duration and prevent double clicking. Once the form is submitted, the loading effect is removed for stability safety. In master it can probably be improved. runbot-220885 Forward-Port-Of: odoo/odoo#232726 Forward-Port-Of: odoo/odoo#232408
A website blog test was updated so it no longer depends on the English name for October. This helps Odoo's automated checks run reliably in different languages, reducing false failures during validation.
Original PR description
Before this commit the blog_tags_with_date tour tried to select the October option by label. In other locales the month label differs and the tour could not find it, so the tour aborted at that step. Steps to reproduce: - Change the website language to one where October has another name. - Run the blog_tags_with_date preview tour. The tour now selects the first month option by index, independent of labels. runbot-233321 Forward-Port-Of: odoo/odoo#232961 Forward-Port-Of: odoo/odoo#232610
This fixes manufacturing order cost overviews so component costs are calculated using the correct unit of measure. Businesses using bills of materials with units like liters and milliliters will now see accurate production costs instead of inflated values.
Original PR description
**Problem:** The overview of a produced MO does not take into account the uom of the component for the valuation **Steps to reproduce:** - Create a storable product (the comp) - set the uom as L and the cost as 40$ per L - set an on hand quantity - Create a storable product (the final product) - Create a bom for this final product using 100 ml of the comp - Create, confirm and produce a MO for the final product - click on the overview smart button **Current behavior:** the real cost is 4000$ (100*40) **Expected behavior:** it should be 4 (0.1 * 40) **Cause of the issue:** https://github.com/odoo/odoo/blob/11cbbb85b1ee2a620d752b79e86fc51a8e3b33e4/addons/stock_account/models/stock_move.py#L191-L198 _get_price_unit() does not take into account the case where the uom of the move is not the uom of the product opw-5102760
The channel invitation screen now makes it clearer that users can invite people by email, reducing confusion when adding external participants. It also corrects the alignment of the email invitation option so the interface looks more polished and consistent.
Original PR description
Before this commit, channel invite by email feature had poor discoverability because we had to type a full email address to have selectable item. This commit changes the placeholder of channel invite…
Before this commit, channel invite by email feature had poor discoverability because we had to type a full email address to have selectable item. This commit changes the placeholder of channel invite to hint for invite by email feature. Also the selectable invite by email item was misaligned, which this commit also fixes. Part of Task-5190261 Before <img width="406" height="613" alt="Screenshot 2025-10-24 at 14 38 05" src="https://github.com/user-attachments/assets/4220af4a-e473-4379-ac9e-80051736e6c0" /> <img width="415" height="613" alt="Screenshot 2025-10-24 at 14 38 12" src="https://github.com/user-attachments/assets/88e013d5-8e0c-4c96-9bde-f15f7b22169c" /> After <img width="411" height="618" alt="Screenshot 2025-10-24 at 14 37 41" src="https://github.com/user-attachments/assets/343db47c-f8db-4c88-9aa2-bcaa8796cdb2" /> <img width="409" height="612" alt="Screenshot 2025-10-24 at 14 37 47" src="https://github.com/user-attachments/assets/d44d2392-a2bc-4812-a0d7-eafdb68096fa" />
Sales commission achievement reports now return the correct grouped results instead of often appearing empty. This helps managers and sales teams review commission achievements reliably when using grouped report views.
Original PR description
Before this commit, grouping achievements would result in empty list most of the time. It happened because offset and limit were switched by mistake in the override. As a result an offset of 80 was applied in the request during group by. Forward-Port-Of: odoo/enterprise#97959
Fixed an issue where invoice previews could fail when a website page included map content, because the system could choose the wrong embedded frame. Invoice previews now reliably select the correct invoice content, reducing errors for accounting users.
Original PR description
Support the possibility of multiple iframes being present on the invoice preview page. Steps to reproduce ----- 1. Add a map block to the nav bar of the website. 2. Go to accounting and find an invoice. 3. Click preview and receive a traceback. Cause ----- The use of querySelector works if there is only one iframe element, but map blocks are also iframe elements so adding one with the website editor can cause the wrong iframe to be selected with querySelector. Solution ----- The iframe element that needs to be selected already has an id, so updating querySelector to getElementById resolves the issue. opw-ticket 5170640 Forward-Port-Of: odoo/odoo#232754
When users transfer a VoIP call, the contact search box is now cleared instead of showing the previous search. This prevents confusion and makes it easier to choose the correct person for the transfer.
Original PR description
**Purpose:** Previously, when a contact was searched and made a call. During a call, clicking "Transfer" showed the old search term. **Specification:** Now, the search box is explicitly emptied when transferring the call by resetting this.softphone.addressBook.searchInputValue. **Task-** 5087938 Forward-Port-Of: odoo/enterprise#95102
Fixed-tax amounts now correctly become negative when applied to invoice lines with negative prices. This prevents tax totals from showing the wrong sign on refunds, credits, or other negative invoice lines, improving accounting accuracy.
Original PR description
Steps to reproduce: 1. Create a fixed tax 2. Create a invoice with a product with negative price Problem: The amount of the tax is positive while the line is negative. opw-5128767 Forward-Port-Of: odoo/odoo#232394 Forward-Port-Of: odoo/odoo#232084
Fixed an accounting issue where fixed taxes could be computed incorrectly when a transaction used a negative price. This helps ensure accounting entries and bank statement-related calculations remain accurate for refunds, reversals, or other negative-value transactions.
Original PR description
opw-5128767 Forward-Port-Of: odoo/enterprise#97980
This update adjusts an internal website module test so it no longer depends on optional demo data. It helps keep automated checks stable across different test environments, reducing false failures during releases.
Original PR description
runbot-162894 Forward-Port-Of: odoo/odoo#232920 Forward-Port-Of: odoo/odoo#213962
In multi-company setups, shared accounts can no longer be deleted when they are still used by journal entries in another company. This prevents accidental loss of accounting references and keeps financial records consistent across companies.
Original PR description
In a multi-company environment, accounts can be shared. A Python constraint prevents deleting an account if it has journal items in the current company. However, this check was missing when an account only contained journal items belonging to other shared companies. This commit fixes the issue by: 1. Updating the `ondelete` attribute of the `account_id` field on `account.move.line` to cascade the restriction at the database level. 2. Updating the existing Python constraint on `account.account` to enforce this logic in stable versions without a module update (this will be removed in the master branch). task-5158966 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232957 Forward-Port-Of: odoo/odoo#232530
Documentation and clarification updates
This pull request records Harold Campo's signed Contributor License Agreement. It is an administrative legal update that allows contributions to be accepted under Odoo's contribution requirements, with no change to product functionality.
Original PR description
Add CLA for Harold Campo Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: 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 adds a signed Contributor License Agreement record for a developer. It helps ensure contributions meet Odoo's legal and licensing requirements before inclusion.
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 Harold Campo's Contributor License Agreement signature. It is an administrative legal update that enables contributions to be accepted under Odoo's contribution policies and does not change product functionality.
Original PR description
Add CLA for Harold Campo Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: 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#232604