Thursday, October 16, 2025
21 changes · saas-18.4
Enhancements to existing features
Changes made to POS category names or display order are now sent to UrbanPiper when menus are synced again. This helps restaurants keep their online menus consistent without manual updates in UrbanPiper.
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
Italian electronic invoices are now sent one at a time instead of in large batches. This reduces timeout errors when many invoices are submitted together and helps prevent scheduled processing from getting stuck.
Original PR description
Some clients reported that when they send a full batch size=20 invoices at once, they get a timeout response and the cron job get's stuck. Processing invoices one by one instead of a full batch. IAP-apps PR: https://github.com/odoo/iap-apps/pull/1230 Task [link](https://www.odoo.com/odoo/project.task/5045529) task-5045529 Forward-Port-Of: odoo/odoo#231742 Forward-Port-Of: odoo/odoo#230146
The IoT client no longer waits for each message to the IoT Box to finish sending before continuing. This helps keep workflows more responsive when devices are communicating in the background.
Original PR description
In order to avoid blocking code execution when sending websocket messages to the IoT Box from the client, we stopped waiting for the `send_message` call to complete.
The Documents folder action menu now opens right away instead of waiting for all actions to load. Users also get quicker feedback when enabling embedded actions, with fewer repeated server updates during rapid changes.
Original PR description
The cogwheel which holds the folder actions was slow to open because it loads the actions at startup. To speedup it up, we backport the fix odoo/enterprise#90124 that allows the cogwheel to be open while loading the actions (instead of waiting that the actions are loaded). We also add a spinner while it is being loaded. When selecting action to embed for the folder, it was slow as well. To solve the problem, we toggle the action immediately (not waiting the answer of the server) and roll it back in case of failure. Finally, to limit the number of calls to the server, we only reload the search model if there are no pending toggle of action. So if you activate for example 5 actions in a row and the connection is slow enough, the search model will only be reloaded once instead of 5 times (when the 5 actions are toggled). Task-4828503 Forward-Port-Of: odoo/enterprise#94141
Resolved issues and error corrections
Point of Sale receipts now keep ship-later dates as calendar dates instead of converting them through time zones. This prevents customers and staff from seeing an incorrect shipping date on receipts, improving order accuracy and reducing confusion.
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
Gift Card and E-Wallet products now remain visible in the Point of Sale screen even when the store is limited to specific product categories. This ensures cashiers can always sell these products without needing extra category setup.
Original PR description
Before this commit: =================== If the PoS configuration is restricted to specific categories, but the Gift Card and E-Wallet products do not have any category assigned, these products will not be visible in the PoS UI. After this commit: ==================== Gift Card and E-Wallet products are now always visible in the PoS UI, regardless of whether a PoS category is assigned or not. Purpose: ============ Gift Card and E-Wallet products should always be available for sale in the PoS. This ensures they can be sold physically from the PoS UI without requiring category assignment. Task-5103770 Forward-Port-Of: odoo/odoo#231626 Forward-Port-Of: odoo/odoo#228395
This fix updates how Odoo checks and marks old device session logs so large databases can be processed in smaller batches. It helps avoid long-running database updates that could slow down or block normal system activity during maintenance.
Original PR description
The commit: https://github.com/odoo/odoo/commit/6fb676a4e3566c781ddd57480a200cddc88d99ae adds the model `res.device.log` which will hold a lot of data. In order to use this data efficiently, we decide to process data with the boolean field `revoked` equal to `True` (via the indexes). This boolean field indicates whether the session that generated the log is still present on the disk. The commit: https://github.com/odoo/odoo/commit/e4c9d1794f2d4873755a8692f4861ba043fac943 adds an automatic verification mechanism to change this value if necessary. Between the time the model was created and the time the verification mechanism was implemented, the table may have become too large. This will result in a very long write within a transaction. The purpose of this commit is to introduce a method for performing the batch writing. Forward-Port-Of: odoo/odoo#225736
The product configurator now uses space better on mobile screens when optional products include custom text fields. This keeps key controls, including the cart button, visible and easier for shoppers to use.
Original PR description
Versions -------- - 18.0+ Steps ----- 1. Create a product attribute with a single custom value; 2. add the attribute to a product A; 3. set product A as an optional product of product B; 4. go to product B's product page in mobile view; 5. click on the cart button. Issue ----- The custom text field takes up way too much real estate. Cause ----- The template isn't fully adapted for mobile view. Solution -------- Change `d-flex` to `d-lg-flex` on the `ptal` element, making the attribute name & input online display in-line on large screens. Additionally, change some bootstrap classes to also have the cart button button displayed within the screen. opw-5114495 Forward-Port-Of: odoo/odoo#231744 Forward-Port-Of: odoo/odoo#230743
This fixes an issue where Mexican electronic invoice XML attachments could be saved with the wrong file type for users with limited access rights. As a result, related accounting documents are generated reliably when document centralization is enabled.
Original PR description
When creating an XML attachment as a user without Write access on the ir.ui.view model, the Mimetype will be set to plain/text. In particular, this causes issues when Accounting centralization is enabled in Documents, as the corresponding Document will only be generated if the Mimetype is application/xml. Creating the XML as Superuser avoids this issue. Similar to https://github.com/odoo/odoo/pull/124507 opw-5057038 Forward-Port-Of: odoo/enterprise#97258 Forward-Port-Of: odoo/enterprise#95197
This update adds validation for Dutch structured payment references and prevents free-text payment notes from being incorrectly treated as structured references in SEPA QR codes. This helps reduce payment processing errors for Dutch customers and improves the reliability of QR-code-based payments.
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
Users can now add image attachments to Twitter comments from the Social app without upload errors. Comment text is also preserved when adding files or emojis, preventing accidental loss of typed content.
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#91995Spanish electronic invoices now preserve product unit price precision and use the invoice’s existing tax totals when global tax rounding is enabled. This helps prevent mismatches between invoices and generated e-Factura XML files, reducing validation issues and accounting discrepancies.
Original PR description
This PR is the opportunity to fix two mistakes in the XML generation of the e-Factura : 1. It is possible for a product to have more decimals than the currency, but the facturae always rounded…
This PR is the opportunity to fix two mistakes in the XML generation of the e-Factura : 1. It is possible for a product to have more decimals than the currency, but the facturae always rounded according to the currency. This would sometimes lead to both rounding errors and incomplete or incorrect values on the generated XML. This commit rounds product prices according to the unit price decimal while leaving the other computed field untouched as to not disturb the correct computation elsewhere. 2. When the tax rounding was set to round_globally, the TotalTaxOutput in the XML might differ from the actual tax_amount from the invoice because of rounding errors occurring during uncessary re-computation while building the XML. While stable is not the place to change all functions related, we can isolate computed tax output and tax withheld values and transmit them without any intermediary. As this file was changed in 18.0 another PR was needed from 17.0: https://github.com/odoo/odoo/pull/209623 (unit price decimals) and https://github.com/odoo/odoo/pull/229017 (tax rounding issue, detected after 209623 was closed) task-4650439 Forward-Port-Of: odoo/odoo#231424 Forward-Port-Of: odoo/odoo#229236
This fixes an issue where adding certain localized financial report variants to Annual Statements could fail. Annual Statements now include the appropriate underlying sections, preventing errors and keeping localized financial reporting setup smooth.
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 refreshes the spreadsheet component with multiple fixes that improve everyday reliability, including clipboard pasting, data validation, charts, mobile editing, and table creation. Users should see fewer visual glitches and more accurate behavior when working with spreadsheets and dashboards.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/bc55c401f [REL] 18.4.14 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/bc55c401f [REL] 18.4.14 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/cd0f0dc61 [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/740d5d9fc [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/03c9ad344 [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/5a7901b82 [FIX] find & replace: fix arrow buttons sizing [Task: 5154004](https://www.odoo.com/odoo/2328/tasks/5154004) https://github.com/odoo/o-spreadsheet/commit/de3bc021c [FIX] RibbonMenu: hint the scrollable menu [Task: 5106796](https://www.odoo.com/odoo/2328/tasks/5106796) https://github.com/odoo/o-spreadsheet/commit/208407c39 [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/d3343952e [PERF] evaluation: stop the dependencies search early [Task: 4954710](https://www.odoo.com/odoo/2328/tasks/4954710) https://github.com/odoo/o-spreadsheet/commit/8eaa1f176 [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/156e38779 [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/22c856306 [FIX] functions: fix LINEST error massage [Task: 5059375](https://www.odoo.com/odoo/2328/tasks/5059375) https://github.com/odoo/o-spreadsheet/commit/4d5c304ea [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/2e2ef1e20 [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/c0cf1b1d7 [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/6686dc5eb [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/30d6626b9 [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/a96e9bcd7 [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>
The project task calendar no longer crashes for customers using the Community edition without Enterprise project planning features. It now only relies on Enterprise-only scheduling information when that Enterprise module is actually installed.
Original PR description
Before this commit, when the user with just Odoo community version tries to go to tasks calendar of a project, he will get a traceback saying `planning_date_begin` field does not exist in `project.task` model. The reason is because that field only exist when `project_enterprise` module is installed. This commit makes sure we only use that field when project_enterprise is installed. Closes #228178
Electronic payments registered from an invoice now correctly keep their connection to that invoice. This improves payment traceability and helps users see the full payment history from the invoice record.
Original PR description
Steps to reproduce: - Create an invoice through Accounting app - Post the invoice - Register the payment using the "Register Payment" wizard with an electronic payment method. Description of the…
Steps to reproduce: - Create an invoice through Accounting app - Post the invoice - Register the payment using the "Register Payment" wizard with an electronic payment method. Description of the issue/feature this PR addresses: **The payment transaction was not being linked to the invoice for electronic payments.** To resolve this, I passed the current invoice IDs as context through action_register_payment in the account.move.line model. Then, I retrieved this context value in _prepare_payment_transaction_vals of the account.payment model to set the invoice_ids Many2many field. Current behavior before PR: The payment transaction is not linked to the invoice for electronic payments. Desired behavior after PR is merged: The payment transaction will be correctly linked to the invoice for electronic payments. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#208520 Forward-Port-Of: odoo/odoo#197091
Users can now create their first timesheet even when they do not have access to the company’s internal project. The system avoids selecting a restricted project by default, preventing an error and allowing timesheet entry to continue.
Original PR description
To reproduce: ============= - make the internal project of the company for invited internal users only - with internal user that doesn't have access to the internal project, and no previous timesheet created, try to create a timesheet - you get a traceback Problem: ======== when not having a previous timesheet, in the default value we set project_id based on the internal project of the company. But if the user doesn't have access to this project, it raises an access error. Solution: ========= check if the user has access to the internal project of the company, if not, use `False` as default value. opw-5119839 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#229818
Fixed an issue where certain Argentine vendor bills generated only one of the two required AFIP text files. This ensures Type C invoices and invoices without taxes produce complete VAT report exports for compliance.
Original PR description
…afip code '0' **Description of the issue/feature this PR addresses:** This PR addresses an issue identified in the generation of .txt files for invoices that utilize AFIP tax code '0' **Current behavior before PR:** The system is only generating one of the two .txt files required by AFIP for specific invoice types. Affected Cases: - Invoices of type 'C'. - Invoices that have no taxes. **Desired behavior after PR is merged:** Two .txt files should be generated for all invoice types, as per AFIP requirements. [HERE](https://app.screencastify.com/watch/2mtioGVxEOwW0rAHJS2v) is a video replicating the issue: 1. In localization Argentina, create a vendor bill type 'C' 2. In 'Tax Return' report, filter by date and 'Tax Type: Purchase' 3. Download .ZIP file and see only one .txt Forward-Port-Of: odoo/enterprise#96052
This change reverts a prior update that made some tax return periods depend on a company's fiscal year. The revert prevents incorrect date offsets for VAT returns that should follow a standard reference date instead, helping ensure reports are generated for the right periods.
Original PR description
This reverts commit 2c36fcb1965f9ebc26d3a03ac05efe22efaa2f70.
This is causing error in offsets for vat returns which are now based on fiscal year instead of the defasult fields.Date.from_string('2025-01-01').
Some return can be based on that fiscal year but not every returns.Fixed an issue where using the keyboard to navigate search suggestions in the Helpdesk knowledge base could trigger an error page. This keeps customer self-service search usable and prevents interruptions when visitors browse help articles.
Original PR description
Steps to Reproduce: 1. Navigate to '/helpdesk/customer-care-1/knowledgebase'. 2. Enter any text in the search bar to trigger suggestions. 3. Press the down arrow key twice. 4. A traceback error occurs, indicating an Odoo Client Error. Before this commit, we had a crash when a user types something in a searchbar in the website helpdesk and do keydowns: "Cannot read properties of undefined (reading 'nextElementSibling')" To fix this, we need to add the 'data-bs-toggle' attribute to let BS find it to set '_element' (which must be the previous sibling of the dropdown-menu). This data attribute was probably not set before because in this case the BS dropdown is not used on a button or a link as documented; we use it as an autocomplete functionnality. task-4752497 Forward-Port-Of: odoo/enterprise#97149 Forward-Port-Of: odoo/enterprise#90228
This fix ensures that when an IoT device action fails, the system reports the error instead of incorrectly showing the device as connected. This helps users and support teams see the real issue immediately rather than assuming the action succeeded.
Original PR description
Before this commit, if an error occurred during the execution of an action, it was catch in the _do_action method. To signal that an error occured, we put "error" in the status of the response. However, before this commit, the status was overriden with a "connected" value right after being set to "error", which led to the frontend thinking everything was fine. This is now solved by only setting one status. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr