Daily updates from Odoo
Thursday, October 16, 2025
34 changes · 19.0
New functionality added to Odoo
This adds a new Sri Lanka localization package with core accounting setup and statutory reports, including balance sheet, profit and loss, VAT, and withholding tax reporting. Businesses operating in Sri Lanka can use Odoo with more country-specific accounts, taxes, fiscal positions, and report templates out of the box.
Original PR description
Adds basic reporting module for Sri Lanka, including: - Balance sheet - Profit & loss task-4352802 retargetted from master #93586
Enhancements to existing features
Changes made to POS category names or ordering now update correctly in UrbanPiper when menus are synced again. This keeps online menus aligned with in-store POS setup and reduces manual correction after category changes.
Original PR description
Before this commit: ----------------------------------------- - After syncing the menu, changes in a POS category (e.g., name or sequence) were not reflected in UrbanPiper when the menu was synced again. After this commit: ----------------------------------------- - Category updates (name or sequence) are now synced with UrbanPiper on subsequent menu syncs. Task-5122804 Forward-Port-Of: odoo/enterprise#96270
This update fine-tunes point-of-sale checks around preparation warning dialogs and simplifies how the partner button styling is handled. It helps keep POS workflows and automated validations more reliable without changing day-to-day business processes.
Original PR description
*: pos_restaurant_preparation_display, l10n_de_pos_res_cert, pos_settle_due This commit makes the following improvements: Adjusts the `discardOrderWarningDialog` tour step to check on the Product screen. Refactors the partner button class to use a getter instead of XML inheritance. Task-5116688
POS users can now change whether a product is available for food delivery directly from the product information popup. This helps restaurants react faster when items sell out or become available again, without leaving the POS workflow.
Original PR description
Before this commit: ------------------------- There was no way to change the food availability status of a product from the POS terminal. After this commit: ------------------------- Added an option in the POS UI product info popup to toggle the availability of products for configurations that support food delivery handling. Task: 4951476
Click and collect orders can now be placed for products that are out of stock when the business has chosen to keep selling them. This helps retailers avoid blocking eligible pickup sales and better support backorders or replenishment-based sales.
Original PR description
Allow selling with click and collect when a product is out of stock and continue selling. See also: - https://github.com/odoo/documentation/pull/14799
Resolved issues and error corrections
This fixes 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
This fixes an issue where certain many-to-many field values could fail to load when access bypass rules were configured. The change restores the intended behavior so authorized business workflows can read related records without unnecessary access errors.
Original PR description
Recently, we have changed how Many2many fields are read. Before we used `_apply_ir_rules` to give `read` access to comodels, now we're using `_search` directly. We have `bypass_search_access` to bypass access checks, but it's not handled when we do a `_search` from the `read` method. This commit allows bypassing access checks for the Many2many field, where `bypass_search_access` is True. Ref: https://github.com/odoo/odoo/commit/9a21edd99e7f50a785b8b7720f55654254d5f481 , https://github.com/odoo/odoo/pull/217277 Task-5081728
Failed email notifications for accounting journal aliases now use the company linked to that journal instead of defaulting to the main company. This prevents customers or senders from receiving bounce messages with the wrong company name or contact email in multi-company setups.
Original PR description
A bounce email was introduced in https://github.com/odoo/odoo/pull/168506 , i.e. if an email without an attachment is sent to an incoming email alias for a journal, it will be bounced with an…
A bounce email was introduced in https://github.com/odoo/odoo/pull/168506 , i.e. if an email without an attachment is sent to an incoming email alias for a journal, it will be bounced with an corresponding email template. But as is, the usage of `'company_email': self.env.company.email` and `'company_name': self.env.company.name` will default to the "main" company (id 1 usually), as during the message routing, that will be the default company in `env`. This means, that if you have an journal email alias in company B, the email will still render the information of the main company A. ## Proposed fix: When a journal email alias is created in a standard way, it should have a key:value pair for 'company_id' in the `alias_defaults` field. We change the routing check logic so that it will try to fetch that value, while defaulting to the main company if there is no explicit company `company_id` key. This should ensure that the mail gateway failed email renders preferentially renders the company information of the company the mail alias (and accounting journal) belongs to. OPW-5132806 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#231436
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
This fixes an issue in Odoo Studio where creating a related monetary field on the same model could cause a crash. Users can now complete this field setup normally, improving reliability when customizing forms and models.
Original PR description
In studio, add a related field to a monetary on the current model (ie without dotnames) Before this commit, it crashed. This because of c57c247490f0f58c8746af47ce035c28137faf97 After this commit, the flow works as expected opw-5147572 Forward-Port-Of: odoo/enterprise#97214
Restaurant point-of-sale orders now keep combo meals together when staff move items between courses. This prevents part of a combo from being left behind, reducing order mistakes and improving service flow.
Original PR description
Steps to reproduce: ------------------------- - Install POS restaurant & create order with multiple courses - Add a combo product in one of the course - Select a combo child line and try to transfer course Issue: ------- - Only the selected child line is transferred to the new course instead of the entire combo. Cause: --------- - The system currently transfers only the selected order line without checking whether it belongs to a combo. Fix: ---- - Updated the logic to check if the selected order line is part of a combo. If so, the entire combo (parent and child lines) will now be moved to the new course together. task: 5005141 Forward-Port-Of: odoo/odoo#222423
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 update makes web editor testing more reliable by explicitly setting a border color instead of relying on environment defaults. It helps avoid inconsistent automated build failures, improving confidence in release checks without changing user-facing behavior.
Original PR description
Problem: Runbot build fails due to different resulting `border-color` values. Cause: The default `border-color` can change depending on the environment, leading to non-deterministic behavior. Solution: Specify the `border-color` explicitly to ensure consistent results. runbot-233297 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#231716 Forward-Port-Of: odoo/odoo#231003
This update prevents the editor from creating invalid page structure when users change the style of text inside certain formatted elements. It helps ensure edited website content remains consistent and displays as expected across browsers.
Original PR description
Before this commit we would insert a block inside of a phrasing content if it's displayed as a block. For example, if we tried to modify text inside of a `<small>` that has `display: block` style, it would insert a new block inside of it. Steps to see the issue: - Have an open editor with `<small>Text</small>` content, that has `display: block` style - Select "Text" and change the font style to paragraph => It will be `<small><p>Text</p></small>` which is not valid HTML, and it will be parsed by a browser as `<small></small><p>Text</p>`, which is not the expected behavior. X-original-commit: 4e6df797f152e473d76e6d60ba31da52123cabd3
This fixes payroll work entries so they are properly updated when employee attendances are created, changed, or deleted. Payroll teams will see attendance durations reflected correctly, reducing duplicate, missing, or incorrect work entries.
Original PR description
Steps to reproduce: - In attendance, create, modify or delete an attendance - In payroll, go to the work entries tab - If creating an attendance, work entries with the previous and current attendance…
Steps to reproduce: - In attendance, create, modify or delete an attendance - In payroll, go to the work entries tab - If creating an attendance, work entries with the previous and current attendance duration will be displayed - If modifiying an attendance, changing the duration would not create a new attendance nor modify the existing one - If deleting an attendance, the work entry would be deleted even if there were other attendances on the same day Reason: - For creation, the method did not check if there was already a work entry linked to this day to archive it. - For modification, nothing was done to regenerate the work entry after editing the duration. - For deletion, the method archived work entries regardless of whether or not there were other attendances in the day. How it was fixed: - For creation, the create method now checks if there is another work entry and archives it when creating the new one - For modification, if the modified attendance has a different duration to its linked work entry, the work entry is regenerated - For deletion, the work entry is only deleted when no attendances are left, and if not, regenerate the work entry to match the new total attendance duration Task ID: 5116353
This update brings the spreadsheet engine to a newer version with multiple fixes for everyday spreadsheet tasks. Users should see more reliable copy-paste, formulas, charts, data validation, mobile editing, and dashboard interactions, along with a performance improvement for spreadsheet calculations.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/0d4315afa [REL] 19.0.6 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/0d4315afa [REL] 19.0.6 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/cd9e8ef80 [FIX] clipboard: paste as value with empty format string [Task: 5156459](https://www.odoo.com/odoo/2328/tasks/5156459) https://github.com/odoo/o-spreadsheet/commit/1e17e5ef1 [FIX] table: create dynamic table on #SPILL! errors [Task: 5102771](https://www.odoo.com/odoo/2328/tasks/5102771) https://github.com/odoo/o-spreadsheet/commit/1b8aefd16 [FIX] data_validation: selecting range from another sheet [Task: 4948201](https://www.odoo.com/odoo/2328/tasks/4948201) https://github.com/odoo/o-spreadsheet/commit/7b8deb442 [FIX] RibbonMenu: hint the scrollable menu [Task: 5106796](https://www.odoo.com/odoo/2328/tasks/5106796) https://github.com/odoo/o-spreadsheet/commit/559da3805 [FIX] RibbonMenu: reset scroll value on menu exploration [Task: 5106796](https://www.odoo.com/odoo/2328/tasks/5106796) https://github.com/odoo/o-spreadsheet/commit/f8ca858c8 [FIX] find & replace: fix arrow buttons sizing [Task: 5154004](https://www.odoo.com/odoo/2328/tasks/5154004) https://github.com/odoo/o-spreadsheet/commit/33783882b [PERF] evaluation: stop the dependencies search early [Task: 4954710](https://www.odoo.com/odoo/2328/tasks/4954710) https://github.com/odoo/o-spreadsheet/commit/dd5b415cd [FIX] composer: show spreaded cell placeholder on mobile composer [Task: 5139519](https://www.odoo.com/odoo/2328/tasks/5139519) https://github.com/odoo/o-spreadsheet/commit/867dad408 [FIX] composer: hide `Fx` icon when composer has a placeholder [Task: 5139519](https://www.odoo.com/odoo/2328/tasks/5139519) https://github.com/odoo/o-spreadsheet/commit/bd3206526 [FIX] functions: fix LINEST error massage [Task: 5059375](https://www.odoo.com/odoo/2328/tasks/5059375) https://github.com/odoo/o-spreadsheet/commit/ca6d1e982 [FIX] chart: wrong position for chart menu in dashboard [Task: 5153929](https://www.odoo.com/odoo/2328/tasks/5153929) https://github.com/odoo/o-spreadsheet/commit/21c70cf74 [FIX] chart: clip show value text to chart area [Task: 5125970](https://www.odoo.com/odoo/2328/tasks/5125970) https://github.com/odoo/o-spreadsheet/commit/99d115b00 [FIX] composer: set cursor on prettified formula [Task: 5095470](https://www.odoo.com/odoo/2328/tasks/5095470) https://github.com/odoo/o-spreadsheet/commit/93593dbe5 [FIX] chart: tooltip has wrong format for date chart [Task: 5126261](https://www.odoo.com/odoo/2328/tasks/5126261) https://github.com/odoo/o-spreadsheet/commit/8ab1ba912 [IMP] carousel: add context menu button [Task: 5081771](https://www.odoo.com/odoo/2328/tasks/5081771) https://github.com/odoo/o-spreadsheet/commit/fb48bcd9b [FIX] xlsx: import data validation rules with formula [Task: 5062253](https://www.odoo.com/odoo/2328/tasks/5062253) https://github.com/odoo/o-spreadsheet/commit/ca2956ff7 [FIX] chart: wrong label format for date chart [Task: 4908471](https://www.odoo.com/odoo/2328/tasks/4908471) https://github.com/odoo/o-spreadsheet/commit/c493bf2bd [FIX] charts: prevent unnecessary treemap animations [Task: 5003595](https://www.odoo.com/odoo/2328/tasks/5003595) Co-authored-by: Anthony Hendrickx (anhe) <anhe@odoo.com> Co-authored-by: Alexis Lacroix (laa) <laa@odoo.com> Co-authored-by: Lucas Lefèvre (lul) <lul@odoo.com> Co-authored-by: Dhrutik Patel (dhrp) <dhrp@odoo.com> Co-authored-by: Adrien Minne (adrm) <adrm@odoo.com> Co-authored-by: Ronak Mukeshbhai Bharadiya <rmbh@odoo.com> Co-authored-by: Florian Damhaut (flda) <flda@odoo.com> Co-authored-by: Rémi Rahir (rar) <rar@odoo.com> Co-authored-by: Pierre Rousseau (pro) <pro@odoo.com> Co-authored-by: Vincent Schippefilt (vsc) <vsc@odoo.com>
Project portal users can now navigate back more easily from the shared project Gantt view. This fixes a navigation gap and makes the project sharing experience smoother for external users.
Original PR description
Currently, project portal users cannot easily navigate back from the project portal view.This commit adds a back button in the gantt view of project sharing to improve navigation. Also, the project sharing gantt view is added in this commit- https://github.com/odoo/enterprise/pull/80545/commits/daaea2742a9ee786045ea805941eb3e8374c99d1 task: 5075423
Clicking the AI icon on blog records no longer triggers an error when activity tracking is unavailable. This improves reliability for website blog users by letting the AI panel open normally instead of blocking the workflow.
Original PR description
Currently, an error occurs when the user clicks on the AI icon at the top. Steps to Reproduce: - Install the `website_blog` module. - Go to `Website > Configuration > Blog > Blogs`. - Open any `blog`…
Currently, an error occurs when the user clicks on the AI icon at the top. Steps to Reproduce: - Install the `website_blog` module. - Go to `Website > Configuration > Blog > Blogs`. - Open any `blog` and click the `AI icon` at the top. `AttributeError: 'blog.blog' object has no attribute 'activity_ids'` This error occurs after [this commit]. When the user clicks the AI icon, it attempts to create an AI channel and fetch planned activities if any exist. However, the blog.blog model does not have the activity_ids attribute because it does not inherit from mail.activity.mixin. As a result, the error is raised [1]. This commit ensures that the system only checks for activities if the record has the activity_ids attribute; otherwise, it returns empty data, indicating no activities found. [1]- https://github.com/odoo/enterprise/blob/64fa9e46f6195bd4312130cce33b94a129584523/ai/models/mail_thread.py#L12 [this commit]: https://github.com/odoo/enterprise/commit/7333dc779c75479c708edb7ecd1c0a0d4d2ae619 sentry-6942245851
This fix keeps analytic accounting fields in sync when the project plan setting is changed. It prevents sales order confirmations from failing for service products that create projects, improving reliability for accounting and sales workflows.
Original PR description
[FIX] analytic: Add support for updating the analytic.project_plan system parameter The dynamic fields created for each analytic plan, besides the project plan do not update when the project plan…
[FIX] analytic: Add support for updating the analytic.project_plan system parameter
The dynamic fields created for each analytic plan, besides the project plan do not update when the project plan system parameter changes.
Steps to reproduce
-----
1. Set the analytic.project_plan system parameter to a value other than 1
2. Enable Analytic Accounting setting under Accounting > Analytic
3. Create a sales order with a service product that creates a project.
4. Confirm sales order and receive a traceback:
ValueError: Invalid field account.analytic.line.x_plan1_id in leaf ('x_plan1_id', 'in', [23])
Cause
-----
A field on account.analytic.line is created for every plan using the id of the plan to make the names unique, like x_plan{id}_id. The plan that has the ID of the analytic.project_plan parameter does not get a dynamic field, it uses account_id. If you change the system parameter for analytic.project_plan, the plan with the corresponding value will now use account_id, and the plan that corresponds to the previous default value will have no corresponding field on account.analytic.line.
Solution
-----
Extend the write method on ir.config_parameter so that when the value of the analytic.project_plan is changed the dynamic fields on account.analytic.line are properly added and removed. This solution always creates a field for the previous value and deletes a field for the new value so that no plan ever has two fields referencing it.
opw-ticket 5069381Live Chat no longer offers the option to create a new user directly from the agent selection list. This avoids a confusing failed save caused by missing required information and keeps agent management on the intended user setup flow.
Original PR description
**Steps to reproduce:** Go to 'Live Chat' Open the live chat channel form view by clicking on the hamburger icon Click 'Add a line' to add another agent A popup with live chat users will appear Click 'New' at the bottom to create the new user A simplified form view will open to create a user Fill in all the details and click 'Save & Close' **Current behavior before PR:** A banner appears with the message 'Missing required fields'. This occurs because the 'partner_id' field, which is required, is included in the agent list view but not in the user creation form. As a result, the user creation process cannot be completed. **Desired behavior after PR is merged:** It will no longer be possible to create a new user from the agent list view. task-5172541 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Romanian eTransport exports now use the EU VAT-standard country code for Greece, sending "EL" instead of "GR" where required. This helps avoid validation errors when submitting transport documents and keeps partner and transporter data consistent.
Original PR description
Added a mapping for EU VAT country codes to ensure that the VAT prefix aligns with EU standards (e.g., 'GR' -> 'EL') in EDI exports. ## Description of the issue/feature this PR addresses: This PR…
Added a mapping for EU VAT country codes to ensure that the VAT prefix aligns with EU standards (e.g., 'GR' -> 'EL') in EDI exports. ## Description of the issue/feature this PR addresses: This PR adds country code mapping functionality to ensure compatibility with the format required by the Romanian eTransport system. Specifically, it adds the conversion of the country code "GR" (Greece) to "EL" according to European VAT standards and applies this mapping to relevant fields in transport documents. ## Current behavior before PR: Before this PR, the country code for Greece was sent as "GR" to the eTransport system, which could cause validation errors because in European VAT systems, Greece is identified by the code "EL". Also, there was no consistent mapping for country codes in different parts of the system. ## Desired behavior after PR is merged: After implementing this PR, country codes will be correctly mapped to comply with European VAT standards, especially the conversion of "GR" to "EL" for Greece. This ensures that documents sent through eTransport contain the correct country codes and will pass system validations. The mapping is applied to country codes for both commercial partners and transporters. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#216122 Forward-Port-Of: odoo/odoo#214621
This fix improves the Malaysian MyInvois submission flow by showing clearer error messages and preventing crashes when invoice lines have no taxes. It also applies more appropriate tax classifications for zero-tax and no-tax cases, helping users submit invoices with fewer interruptions.
Original PR description
### PURPOSE - While clicking on the 'Send To MyInvoice' button, the current Error shows HTML tags. - Improve Malaysian Tax Type computation. - There is a traceback when there is no tax selected on…
### PURPOSE
- While clicking on the 'Send To MyInvoice' button, the current Error shows HTML tags.
- Improve Malaysian Tax Type computation.
- There is a traceback when there is no tax selected on any of the lines of the invoice, and we click on the Send To MyInvoice button.
### SPECIFICATION
- Fixing the Display message shown inside UserError.
- Change the computation of tax,
- If the tax amount is 0 and the tax scope is set, the tax type will be set to `Exempt` (Based on the default tax data provided)
- Fix traceback when submitting to MyInvois occurs when no tax is selected in the invoice.
- Additionally, we handle flow when there is no tax on the product and submit to MyInvois.
- If the case is of a Consolidated Invoice in POS, there will be no UserError to notify the User to set taxes (coz we do that in batch), and by default the tax will be set to 'Not Applicable'.
- If the user tries to send a separate invoice and the tax is not set, then there will be a UserError that notifies the user that they must set tax on the invoice line.
task-5086207This update adds validation for Dutch structured payment references and prevents SEPA QR codes from incorrectly treating free-text payment notes as structured references. This helps reduce payment processing errors for customers using Dutch payment formats.
Original PR description
[SEE THIS PR](https://github.com/odoo/odoo/pull/200922) [IMP] account: Check NL structured reference The aim of this commit is implementing a new function to check the structured reference for the Netherlands. Even if dutch people can use the ISO format, they can still use the NL format. no task id [FIX] account_qr_code_sepa: Don't fill structured communication with unstructured communication This commit ensures that unstructured communication is not mistakenly used as structured communication in the QR code values. To achieve this, we use is_valid_structured_reference, a simple validation approach that checks all available is_valid_structured_reference functions. While this method may lead to occasional false positives, we consider this trade-off acceptable. opw-4575004 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#231373
Social app users can now add images to Twitter/X comments without upload errors because the correct file type is sent. Comment drafts are also preserved when adding emojis or uploading files, reducing accidental loss of typed text.
Original PR description
Issue 1 ======= Steps to reproduce ----------------------- 1. Go to the Social app. 2. Create or Select any twitter post. 3. Add a comment to that post with an image. 4. Press Enter. ---> An error…
Issue 1
=======
Steps to reproduce
-----------------------
1. Go to the Social app.
2. Create or Select any twitter post.
3. Add a comment to that post with an image.
4. Press Enter.
---> An error notification will be shown.
When adding an image in a post comment to Twitter, the image was not uploaded properly because the MIME type was not set, and it defaulted to `application/octet-stream`.
This caused the following error:
```
{"errors": [{"parameters": {"$.media_type": ["'application/octet-stream'"]},
"message": "$.media_type: does not have a value in the enumeration
[video/mp4, video/webm, video/mp2t, video/quicktime, text/srt, text/vtt,
model/gltf-binary, model/vnd.usdz+zip, image/jpeg, image/gif, image/bmp,
image/png, image/webp, image/pjpeg, image/tiff]"}], "title": "Invalid Request",
"detail": "One or more parameters to your request was invalid.",
"type": "https://api.twitter.com/2/problems/invalid-request"}
```
From the above error, it's clear that Twitter only accepts specific MIME types.
This fix ensures the image has the correct MIME type so it can be uploaded without issues.
-------------------------------------------------------------------------------------------------------------------------------
Issue 2
=======
Steps to Reproduce
------------------------------
1. Select any post from social feed.
2. Add text comment or edit existing comment.
3. Upload file or add emoji.
=> The comment text is cleared/reset to its initial value.
Technical
------------------------------
With commit [1] we added `t-att-value` which sets the value of the textarea
on every re-render of the component.
After this commit
------------------------------
The initial value is only set once when component is mounted.
Removed `remove image` button for attachment while posting comments.
[1] https://github.com/odoo/enterprise/commit/ced5e88f433b7b9a8e1429259cd8bb6594b34852
Task-4845385
Forward-Port-Of: odoo/enterprise#91995This fixes an internal calculation issue in accounting reports that could use the wrong record context. It helps ensure report values are computed consistently and reduces the risk of incorrect financial reporting behavior.
Original PR description
Forward-Port-Of: odoo/enterprise#97144
Annual Statements now correctly includes localized report variants even when those variants are made up of multiple report sections. This prevents errors during setup or upgrades and helps ensure local financial statement layouts are applied automatically as intended.
Original PR description
The "Annual Statements" report comes with additional code at create() and write() of account.report, so that any new localized variant of the Balance Sheet, Trial Balance or Profit & Loss will automatically replace its root report in the Annual Statements report's sections. The idea behind that is to "magically" replace those generic reports by the right variant when it's created. The problem with that came when you tried adding a variant to one of those reports that was itself a composite report. In such case, you got a traceback stating a composite report's sections could not have sections themselves. We indeed only support one level of hierarchy for composite reports. We solve the issue by adding all the sections of such composite variant to the Annual Statements instead of adding the variant itself. Bug originally reported by Upgrade, here https://github.com/odoo/upgrade/pull/8571 . Forward-Port-Of: odoo/enterprise#97145
This 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-prThe Discuss app header now lines up more cleanly with message avatars and the composer on screens below extra-large size. This removes a cramped visual mismatch near the sidebar, making conversations easier and more comfortable to scan.
Original PR description
Before this commit, The header of the Discuss app had the avatar too close to the sidebar of Discuss app, which looked off and also makes it misaligned with avatars in message list and composer. This comes from a specific style to reduce initial padding below large screen, which was mismatched between discuss header and other items in message list. The intended design was to have enough space between discuss sidebar and message list so that this doesn't feel too crowded and fatiguing to see. This was an issue in the past, but now Discuss app is visually fine even with reduced spacing in large screen. This commit removes all the large-screen specific extra spacing, which fixes the issue as it's easier to match the spacing between all of them. <img width="775" height="908" alt="Screenshot 2025-10-15 at 12 55 06" src="https://github.com/user-attachments/assets/2dedd04d-3949-4586-9325-844313476194" />
Receipts now show the correct original unit price before discounts for Belgian POS Blackbox sales lines. This helps customers and staff see accurate discount information on receipts, reducing confusion at checkout.
Original PR description
Use dedicated method `getUnitDisplayPriceBeforeDiscount()` to display the line old (before discount) unit price on the receipt. task-id: 5011427
Documentation and clarification updates
This pull request adds a contributor license agreement record for arch-fan. It is an administrative legal update that enables their contributions to be accepted under the project's contribution rules, with no functional impact on Odoo users.
Original PR description
Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This pull request records that the contributor arch-fan has signed Odoo's Contributor License Agreement. This is an administrative legal update that enables their contributions to be accepted under the project's contribution rules.
Original PR description
Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr