Daily updates from Odoo
Thursday, October 16, 2025
16 changes · 19.0
Enhancements to existing features
Changes made to POS category names or ordering now update correctly in UrbanPiper when menus are synced again. This keeps online menus aligned with in-store POS setup and reduces manual correction after category changes.
Original PR description
Before this commit: ----------------------------------------- - After syncing the menu, changes in a POS category (e.g., name or sequence) were not reflected in UrbanPiper when the menu was synced again. After this commit: ----------------------------------------- - Category updates (name or sequence) are now synced with UrbanPiper on subsequent menu syncs. Task-5122804 Forward-Port-Of: odoo/enterprise#96270
POS users can now change whether a product is available for food delivery directly from the product information popup. This helps restaurants react faster when items sell out or become available again, without leaving the POS workflow.
Original PR description
Before this commit: ------------------------- There was no way to change the food availability status of a product from the POS terminal. After this commit: ------------------------- Added an option in the POS UI product info popup to toggle the availability of products for configurations that support food delivery handling. Task: 4951476
Click and collect orders can now be placed for products that are out of stock when the business has chosen to keep selling them. This helps retailers avoid blocking eligible pickup sales and better support backorders or replenishment-based sales.
Original PR description
Allow selling with click and collect when a product is out of stock and continue selling. See also: - https://github.com/odoo/documentation/pull/14799
Resolved issues and error corrections
This fixes an issue where reading linked attachment records could trigger inefficient filtering and miss the proper access-handling path. The change makes these reads more reliable and helps avoid performance problems for records with many linked attachments.
Original PR description
Reading `attachment_ids` on a Many2many field uses `_search` on the comodel, but does not necessarily use the `bypass_search_access` flag because we are reading (not searching). On some models, such as attachments, the `_search` method may start filtering all data in memory. To avoid such cases, if the method is overwritten, generate the query on the comodel with bypassing accesses, then join with the model ids, retrieve the records and filter them. closes #226845 closes #226908 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This change fixes how Odoo reads linked records so that related lists behave consistently across different relationship types. It helps prevent users from being blocked incorrectly when viewing records they are allowed to access, while also adjusting activity handling to avoid unintended access bypasses.
Original PR description
Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: Alternative to #226845. Align the behavior of o2m and m2m. Todo: test performance for activities. It seems that having access to a record does not grant access to all linked activities? To check this as well. Closes #226845 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Loyalty points are now recalculated when the point-of-sale receipt screen is refreshed. This prevents customers and staff from seeing outdated or inconsistent loyalty point totals after a refresh.
Original PR description
Before this commit: --------- - Loyalty points are not recalculated when the receipt screen is refreshed. After this commit: ---------- - Ensures that loyalty points are properly recalculated when the receipt screen is refreshed, preventing inconsistencies in displayed points. task-5106892 Forward-Port-Of: odoo/odoo#229516
Point of Sale receipts now show the selected ship-later date correctly, without accidental timezone changes. This prevents customers and staff from seeing the wrong delivery date after validating an order.
Original PR description
PURPOSE: ---------------- - Fix incorrect handling of shipping date in POS . It was treated as a datetime, which led to timezone shifts and wrong dates in receipts. STEPS TO REPRODUCE:…
PURPOSE: ---------------- - Fix incorrect handling of shipping date in POS . It was treated as a datetime, which led to timezone shifts and wrong dates in receipts. STEPS TO REPRODUCE: ------------------- 1. Open point of sale 2. In Configuration → Settings, enable Allow Ship Later for a POS shop. 3. Open a POS session, add a product, proceed to payment, and select Ship Later. 4. Validate the order. ISSUE: -------------------- - The receipt shows the wrong shipping date. CAUSE: --------------------- - shipping_date was serialized using serializeDateTime, forcing a UTC conversion. - Related models only supported datetime type, so date fields were mishandled. FIX: -------------------- - Introduced proper date handling (convertRawToDate, convertDateToRaw). - Updated serialization/deserialization to handle both `date` and `datetime`. - Changed ShippingDate to use serializeDate instead of serializeDateTime. Task-5055738 Forward-Port-Of: odoo/odoo#227693
This change prevents the online shop page from breaking after a website language is added. It improves reliability for multilingual websites by ensuring translation text is handled safely in the shop template.
Original PR description
Currently an error occurs when user tries to load translations to website. **Steps to replicate:** * Install `website_sale` * website > Edit > Theme > Add a Language > Add any language * Go to shop >…
Currently an error occurs when user tries to load translations to website.
**Steps to replicate:**
* Install `website_sale`
* website > Edit > Theme > Add a Language > Add any language
* Go to shop > you should get an error in the terminal.
**Error:**
`Qweb Error:
Error while rendering the template:
SyntaxError: invalid syntax (<>, line 1)
Template: website_sale.products
Reference: website_sale.products`
**Root cause:**
* When the placeholder variable is not set, the string 'placeholder' is passed to the template [1].
* This 'placeholder' value is translated, and a `<span>` tag is added as its value [2]. This result is then passed to [3], which in turn is passed as an expression to [4], causing the error.
**Solution:**
* Define the placeholder inside the `<t>` tag instead of passing it as a parameter to avoid mistranslation.
[1]:
https://github.com/odoo/odoo/blob/97294a2798f5fd20748ad1e0f4a9bd2403fd7d1a/addons/website_sale/views/templates.xml#L727
[2]:
https://drive.google.com/file/d/1gpDa8Ua9Zq8XMHKmL3FbVAtetech_twP/view?usp=sharing
[3]:
https://github.com/odoo/odoo/blob/97294a2798f5fd20748ad1e0f4a9bd2403fd7d1a/odoo/addons/base/models/ir_qweb.py#L2558
[4]:
https://github.com/odoo/odoo/blob/97294a2798f5fd20748ad1e0f4a9bd2403fd7d1a/odoo/addons/base/models/ir_qweb.py#L1550
sentry-6917649923This fixes an inventory issue where barcode deliveries for a different lot could create an unassigned negative stock entry instead of linking it to the correct lot. Businesses get more accurate stock records and avoid later receipt mismatches that leave quantities unbalanced.
Original PR description
Uecase to reproduce: - Create a quant with a product and 10 lot A - Create a delivery order - Open barcode - In barcode, deliver the product with lot C Current behavior: You have 2 quants: - 10 lot A - -1 without lot Expected behavior: - 10 lot A - -1 lot C It happens because the code try to balance negative quant for lot/sn in a stack of quants without lot/sn for the product. However in this case the barcode create a quant without quantity and without lot. In this case the system wants to update it due to an incorrect condition. It's an issue since in later receit with the correct lot. The quant will never be balanced and it will result with - -1 without - 1 lot C Moved the test `test_multi_step_update` since it was in the middle of test mixed reservation and push to a mistake of duplicated tests
This fixes payroll work entries so they are properly updated when employee attendances are created, changed, or deleted. Payroll teams will see attendance durations reflected correctly, reducing duplicate, missing, or incorrect work entries.
Original PR description
Steps to reproduce: - In attendance, create, modify or delete an attendance - In payroll, go to the work entries tab - If creating an attendance, work entries with the previous and current attendance…
Steps to reproduce: - In attendance, create, modify or delete an attendance - In payroll, go to the work entries tab - If creating an attendance, work entries with the previous and current attendance duration will be displayed - If modifiying an attendance, changing the duration would not create a new attendance nor modify the existing one - If deleting an attendance, the work entry would be deleted even if there were other attendances on the same day Reason: - For creation, the method did not check if there was already a work entry linked to this day to archive it. - For modification, nothing was done to regenerate the work entry after editing the duration. - For deletion, the method archived work entries regardless of whether or not there were other attendances in the day. How it was fixed: - For creation, the create method now checks if there is another work entry and archives it when creating the new one - For modification, if the modified attendance has a different duration to its linked work entry, the work entry is regenerated - For deletion, the work entry is only deleted when no attendances are left, and if not, regenerate the work entry to match the new total attendance duration Task ID: 5116353
This update brings the spreadsheet engine to a newer version with multiple fixes for everyday spreadsheet tasks. Users should see more reliable copy-paste, formulas, charts, data validation, mobile editing, and dashboard interactions, along with a performance improvement for spreadsheet calculations.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/0d4315afa [REL] 19.0.6 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/0d4315afa [REL] 19.0.6 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/cd9e8ef80 [FIX] clipboard: paste as value with empty format string [Task: 5156459](https://www.odoo.com/odoo/2328/tasks/5156459) https://github.com/odoo/o-spreadsheet/commit/1e17e5ef1 [FIX] table: create dynamic table on #SPILL! errors [Task: 5102771](https://www.odoo.com/odoo/2328/tasks/5102771) https://github.com/odoo/o-spreadsheet/commit/1b8aefd16 [FIX] data_validation: selecting range from another sheet [Task: 4948201](https://www.odoo.com/odoo/2328/tasks/4948201) https://github.com/odoo/o-spreadsheet/commit/7b8deb442 [FIX] RibbonMenu: hint the scrollable menu [Task: 5106796](https://www.odoo.com/odoo/2328/tasks/5106796) https://github.com/odoo/o-spreadsheet/commit/559da3805 [FIX] RibbonMenu: reset scroll value on menu exploration [Task: 5106796](https://www.odoo.com/odoo/2328/tasks/5106796) https://github.com/odoo/o-spreadsheet/commit/f8ca858c8 [FIX] find & replace: fix arrow buttons sizing [Task: 5154004](https://www.odoo.com/odoo/2328/tasks/5154004) https://github.com/odoo/o-spreadsheet/commit/33783882b [PERF] evaluation: stop the dependencies search early [Task: 4954710](https://www.odoo.com/odoo/2328/tasks/4954710) https://github.com/odoo/o-spreadsheet/commit/dd5b415cd [FIX] composer: show spreaded cell placeholder on mobile composer [Task: 5139519](https://www.odoo.com/odoo/2328/tasks/5139519) https://github.com/odoo/o-spreadsheet/commit/867dad408 [FIX] composer: hide `Fx` icon when composer has a placeholder [Task: 5139519](https://www.odoo.com/odoo/2328/tasks/5139519) https://github.com/odoo/o-spreadsheet/commit/bd3206526 [FIX] functions: fix LINEST error massage [Task: 5059375](https://www.odoo.com/odoo/2328/tasks/5059375) https://github.com/odoo/o-spreadsheet/commit/ca6d1e982 [FIX] chart: wrong position for chart menu in dashboard [Task: 5153929](https://www.odoo.com/odoo/2328/tasks/5153929) https://github.com/odoo/o-spreadsheet/commit/21c70cf74 [FIX] chart: clip show value text to chart area [Task: 5125970](https://www.odoo.com/odoo/2328/tasks/5125970) https://github.com/odoo/o-spreadsheet/commit/99d115b00 [FIX] composer: set cursor on prettified formula [Task: 5095470](https://www.odoo.com/odoo/2328/tasks/5095470) https://github.com/odoo/o-spreadsheet/commit/93593dbe5 [FIX] chart: tooltip has wrong format for date chart [Task: 5126261](https://www.odoo.com/odoo/2328/tasks/5126261) https://github.com/odoo/o-spreadsheet/commit/8ab1ba912 [IMP] carousel: add context menu button [Task: 5081771](https://www.odoo.com/odoo/2328/tasks/5081771) https://github.com/odoo/o-spreadsheet/commit/fb48bcd9b [FIX] xlsx: import data validation rules with formula [Task: 5062253](https://www.odoo.com/odoo/2328/tasks/5062253) https://github.com/odoo/o-spreadsheet/commit/ca2956ff7 [FIX] chart: wrong label format for date chart [Task: 4908471](https://www.odoo.com/odoo/2328/tasks/4908471) https://github.com/odoo/o-spreadsheet/commit/c493bf2bd [FIX] charts: prevent unnecessary treemap animations [Task: 5003595](https://www.odoo.com/odoo/2328/tasks/5003595) Co-authored-by: Anthony Hendrickx (anhe) <anhe@odoo.com> Co-authored-by: Alexis Lacroix (laa) <laa@odoo.com> Co-authored-by: Lucas Lefèvre (lul) <lul@odoo.com> Co-authored-by: Dhrutik Patel (dhrp) <dhrp@odoo.com> Co-authored-by: Adrien Minne (adrm) <adrm@odoo.com> Co-authored-by: Ronak Mukeshbhai Bharadiya <rmbh@odoo.com> Co-authored-by: Florian Damhaut (flda) <flda@odoo.com> Co-authored-by: Rémi Rahir (rar) <rar@odoo.com> Co-authored-by: Pierre Rousseau (pro) <pro@odoo.com> Co-authored-by: Vincent Schippefilt (vsc) <vsc@odoo.com>
This fix keeps analytic accounting fields in sync when the project plan setting is changed. It prevents sales order confirmations from failing for service products that create projects, improving reliability for accounting and sales workflows.
Original PR description
[FIX] analytic: Add support for updating the analytic.project_plan system parameter The dynamic fields created for each analytic plan, besides the project plan do not update when the project plan…
[FIX] analytic: Add support for updating the analytic.project_plan system parameter
The dynamic fields created for each analytic plan, besides the project plan do not update when the project plan system parameter changes.
Steps to reproduce
-----
1. Set the analytic.project_plan system parameter to a value other than 1
2. Enable Analytic Accounting setting under Accounting > Analytic
3. Create a sales order with a service product that creates a project.
4. Confirm sales order and receive a traceback:
ValueError: Invalid field account.analytic.line.x_plan1_id in leaf ('x_plan1_id', 'in', [23])
Cause
-----
A field on account.analytic.line is created for every plan using the id of the plan to make the names unique, like x_plan{id}_id. The plan that has the ID of the analytic.project_plan parameter does not get a dynamic field, it uses account_id. If you change the system parameter for analytic.project_plan, the plan with the corresponding value will now use account_id, and the plan that corresponds to the previous default value will have no corresponding field on account.analytic.line.
Solution
-----
Extend the write method on ir.config_parameter so that when the value of the analytic.project_plan is changed the dynamic fields on account.analytic.line are properly added and removed. This solution always creates a field for the previous value and deletes a field for the new value so that no plan ever has two fields referencing it.
opw-ticket 5069381This fix improves the Malaysian MyInvois submission flow by showing clearer error messages and preventing crashes when invoice lines have no taxes. It also applies more appropriate tax classifications for zero-tax and no-tax cases, helping users submit invoices with fewer interruptions.
Original PR description
### PURPOSE - While clicking on the 'Send To MyInvoice' button, the current Error shows HTML tags. - Improve Malaysian Tax Type computation. - There is a traceback when there is no tax selected on…
### PURPOSE
- While clicking on the 'Send To MyInvoice' button, the current Error shows HTML tags.
- Improve Malaysian Tax Type computation.
- There is a traceback when there is no tax selected on any of the lines of the invoice, and we click on the Send To MyInvoice button.
### SPECIFICATION
- Fixing the Display message shown inside UserError.
- Change the computation of tax,
- If the tax amount is 0 and the tax scope is set, the tax type will be set to `Exempt` (Based on the default tax data provided)
- Fix traceback when submitting to MyInvois occurs when no tax is selected in the invoice.
- Additionally, we handle flow when there is no tax on the product and submit to MyInvois.
- If the case is of a Consolidated Invoice in POS, there will be no UserError to notify the User to set taxes (coz we do that in batch), and by default the tax will be set to 'Not Applicable'.
- If the user tries to send a separate invoice and the tax is not set, then there will be a UserError that notifies the user that they must set tax on the invoice line.
task-5086207This update adds validation for Dutch structured payment references and prevents SEPA QR codes from incorrectly treating free-text payment notes as structured references. This helps reduce payment processing errors for customers using Dutch payment formats.
Original PR description
[SEE THIS PR](https://github.com/odoo/odoo/pull/200922) [IMP] account: Check NL structured reference The aim of this commit is implementing a new function to check the structured reference for the Netherlands. Even if dutch people can use the ISO format, they can still use the NL format. no task id [FIX] account_qr_code_sepa: Don't fill structured communication with unstructured communication This commit ensures that unstructured communication is not mistakenly used as structured communication in the QR code values. To achieve this, we use is_valid_structured_reference, a simple validation approach that checks all available is_valid_structured_reference functions. While this method may lead to occasional false positives, we consider this trade-off acceptable. opw-4575004 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#231373
Social app users can now add images to Twitter/X comments without upload errors because the correct file type is sent. Comment drafts are also preserved when adding emojis or uploading files, reducing accidental loss of typed text.
Original PR description
Issue 1 ======= Steps to reproduce ----------------------- 1. Go to the Social app. 2. Create or Select any twitter post. 3. Add a comment to that post with an image. 4. Press Enter. ---> An error…
Issue 1
=======
Steps to reproduce
-----------------------
1. Go to the Social app.
2. Create or Select any twitter post.
3. Add a comment to that post with an image.
4. Press Enter.
---> An error notification will be shown.
When adding an image in a post comment to Twitter, the image was not uploaded properly because the MIME type was not set, and it defaulted to `application/octet-stream`.
This caused the following error:
```
{"errors": [{"parameters": {"$.media_type": ["'application/octet-stream'"]},
"message": "$.media_type: does not have a value in the enumeration
[video/mp4, video/webm, video/mp2t, video/quicktime, text/srt, text/vtt,
model/gltf-binary, model/vnd.usdz+zip, image/jpeg, image/gif, image/bmp,
image/png, image/webp, image/pjpeg, image/tiff]"}], "title": "Invalid Request",
"detail": "One or more parameters to your request was invalid.",
"type": "https://api.twitter.com/2/problems/invalid-request"}
```
From the above error, it's clear that Twitter only accepts specific MIME types.
This fix ensures the image has the correct MIME type so it can be uploaded without issues.
-------------------------------------------------------------------------------------------------------------------------------
Issue 2
=======
Steps to Reproduce
------------------------------
1. Select any post from social feed.
2. Add text comment or edit existing comment.
3. Upload file or add emoji.
=> The comment text is cleared/reset to its initial value.
Technical
------------------------------
With commit [1] we added `t-att-value` which sets the value of the textarea
on every re-render of the component.
After this commit
------------------------------
The initial value is only set once when component is mounted.
Removed `remove image` button for attachment while posting comments.
[1] https://github.com/odoo/enterprise/commit/ced5e88f433b7b9a8e1429259cd8bb6594b34852
Task-4845385
Forward-Port-Of: odoo/enterprise#91995This update corrects several Point of Sale issues affecting Belgian blackbox integrations. It hides an irrelevant tipping setting for Belgian companies, ensures customer selection is completed before order validation, and prevents orders from being sent twice to the blackbox after printing updates.
Original PR description
- Don't display the setting `pos_set_tip_after_payment` for belgian company.
- Correctly wait for customer to be choosen before validating the order.
- Before this commit, after doing `await this.data.write("pos.order", [order.id], { nb_print: order.nb_print });` the order was marked as dirty. This was causing issue for the next `sync_from_ui` causing this order to be resynced and then send twice to the blackbox.
task-id: 5011427
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr