Daily updates from Odoo
Wednesday, December 10, 2025
217 changes
4 changes
Resolved issues and error corrections
This update corrects a reporting issue in the VAT Simple tax export. It now filters the report to include only standard VAT taxes, as defined by the `l10n_ar_vat_afip_code` field. This ensures more accurate financial reporting for Argentinian VAT compliance.
Original PR description
The VAT Simple tax export should only report tax amounts from taxes that are standard VAT taxes, not all taxes. This is represented in l10n_ar via the `l10n_ar_vat_afip_code` field on the tax group. opw-5385508 Forward-Port-Of: odoo/enterprise#101414
This update corrects a display issue on the Odoo portal where users were seeing outdated document counts. Now, the portal only shows documents that are currently available for a user to sign, ensuring a more accurate and user-friendly experience. This improves clarity and prevents confusion for users managing sequential signing workflows.
Original PR description
Version: - 18.0 Steps to reproduce: - Install sign - Upload document. - Add multiple signers - Set a sequential signing order Issue: - When documents require sequential signing, portal users see a banner saying there’s a new document to sign, even if it’s not yet their turn. Solution: - Update the counter to show only the documents that the user can currently sign. Impact: - Portal users now only see documents when it’s their turn to sign. Task-5226240 Forward-Port-Of: odoo/enterprise#98671
This update fixes a technical error that prevented shipping rate calculations when a customer partner lacked address information (country, state, and city). The change ensures the system handles missing data gracefully, preventing errors and allowing users to accurately calculate shipping costs for all partners.
Original PR description
Currently, an error is raised when trying to fetch the shipping rate if the partner does not have the required geolocation fields (country, state, and city). **Steps to Reproduce:** 1. Install and…
Currently, an error is raised when trying to fetch the shipping rate if the partner does not have the required geolocation fields (country, state, and city). **Steps to Reproduce:** 1. Install and configure the **Envia Shipping** module. 2. Create a partner without an address (only name + phone). 3. Create quotation for that partner with a deliverable product (e.g; Conference Chair). 4. Click "**Add Shipping**", choose _Envia Shipping_ Method, and then click "**Get Rate**". **Error:** `TypeError - quote_from_bytes() expected bytes` **Cause:** At [1], the system tries to compute Envia shipping rates based on the partner’s country, state, and city. If any of these fields are not set, an error is raised. **Fix:** This commit adds a check for the required fields (country, state, and city). If any are missing, `_geolocate_zip` returns False, leading to a proper validation error instead of a traceback. - [2] [1] - https://github.com/odoo/enterprise/blob/f1a02626a1fbe76add104832e151c647307f3ae7/delivery_envia/models/envia_request.py#L591-L593 [2] - https://github.com/odoo/enterprise/blob/f1a02626a1fbe76add104832e151c647307f3ae7/delivery_envia/models/envia_request.py#L617-L624 sentry-7063870478 Forward-Port-Of: odoo/enterprise#100734
This update fixes an issue in the Hong Kong payroll module by changing the default account used for NET salary payments. The change ensures payslips can be generated correctly and avoids payment problems. A new 'Salaries & Wages Payable' account has been implemented for broader compatibility.
Original PR description
Fixes the default account for NET salary rules in the Hong Kong payroll, which is using the wrong account type and causes issues when trying to pay payslips. It is replaced by a new Salaries & Wages Payable account, and we also set it for the structures other than 'Monthly Pay' task-5042786 Forward-Port-Of: odoo/enterprise#100835
8 changes
New functionality added to Odoo
This update adds demo tax data and sample invoices for the Arabic localization (l10n_ar) in Odoo. This allows internal teams and reviewers to quickly test and verify that the legal tax reporting requirements are correctly implemented without needing to set up complex tax configurations. It streamlines the testing process for this important feature.
Original PR description
**Purpose of the PR** This PR introduces demo data to facilitate testing of the legal requirement implemented in v16 and forward-ported to all supported versions. **What it does** - Provides demo taxes (e.g., national, other categories). - Adds demo invoices combining different taxes. **Why** The demo data allows users and reviewers to quickly verify that the correct legal legend is displayed without having to manually configure taxes and create invoices. References: Adhoc task 53768 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr CLA PR: https://github.com/odoo/odoo/pull/226715 Forward-Port-Of: odoo/odoo#237932 Forward-Port-Of: odoo/odoo#226938
Resolved issues and error corrections
This update resolves a crash that occurred when downgrading from the latest Odoo version (19.1) to 19.0 while using chat hub data. The fix ensures compatibility between the different data formats used in each version, preventing the system from failing when attempting to load chat windows. This improves stability and reliability for users performing version updates.
Original PR description
Before this commit, when downgrading from 19.1 to 19.0 with chat hub data from 19.1, i.e. chat windows or bubbles that are open, loading web client would crash with following error: ``` KeyError:…
Before this commit, when downgrading from 19.1 to 19.0 with chat hub data from 19.1, i.e. chat windows or bubbles that are open, loading web client would crash with following error: ``` KeyError: 'thread_model' ``` This happens because of mismatch of format of chat hub data in 19.0 and 19.1: - 19.0 identifies channels with model "discuss.channel" and id - 19.1 identifies channels with just id When downgrading from 19.1 to 19.0, it attempts to getOrFetch a thread to server by providing channel id but without passing a model. The getOrFetch of 19.0 looks at thread level, so it cannot guess providing just id means a channel, therefore it crashes due to missing model to provide. This commit fixes the issue by dropping the chathub local storage data if the format of chathub data in local storage is invalid, i.e. the identifying data of opened / closed should necessarily have id and model. If no model is provided like with downgrade from 19.1 to 19.0, then it drops local storage and assumes no chat window or bubbles is open. Task-5223650
This update resolves an issue where the Point of Sale system for Mexican companies was incorrectly flagging the 'Invoice to Public' setting as an error when a customer lacked a country or zip code. The fix adds the necessary field to the ORM, allowing users to correctly set invoices to public without triggering the error. This ensures proper invoice generation for Mexican businesses using the POS.
Original PR description
In the POS of a Mexican company, when requesting an invoice, the user is asked to set the invoice to public or not. If the customer does not have a recognized ZIP code or country, setting the invoice…
In the POS of a Mexican company, when requesting an invoice, the user is asked to set the invoice to public or not. If the customer does not have a recognized ZIP code or country, setting the invoice to public **should not** raise an error, but it does. This is because the `l10n_mx_edi_cfdi_to_public` field is not correctly updated in the ORM, which leads to the UserError below being triggered, as `l10n_mx_edi_cfdi_to_public` is always set to `False` if it's not updated by its `_compute` method.
https://github.com/odoo/enterprise/blob/dd89c2c72039c9910cc0a303bca332f4103c08f6/l10n_mx_edi/models/account_move_send.py#L54-L55
The said field is not properly updated because it is a compute field.
Such fields are not transferred to the ORM because of the two following
conditions from the POS: [[1](https://github.com/odoo/odoo/blob/5c2280d089f248dff67df980bee1ce6a4156f2c9/addons/point_of_sale/static/src/app/models/related_models.js#L205-L206), [2](https://github.com/odoo/odoo/blob/5c2280d089f248dff67df980bee1ce6a4156f2c9/addons/point_of_sale/static/src/app/models/related_models.js#L895-L896)]
To minimize behavioral changes, the required field (`l10n_mx_edi_cfdi_to_public`) is simply added at the end of the serialization process.
Once this field is correctly shared with the ORM, the UserError is not longer raised when the *Invoice to Public* field is set to "Yes" in the POS.
Steps to reproduce the initial error:
1. Install the following app and module:
- Point of Sale (`point_of_sale`)
- Mexican Localization for the Point of Sale (`l10n_mx_edi_pos`)
2. Set the company to a Mexican one (e.g., *ESCUELA KEMPER URGATE*)
3. Open the POS app
4. Open a register
5. Select a product and click *Add*
6. Click *Payment*
7. Set the Customer to a new customer with only a name (no Country/ZIP Code)
- Click "Cash" to set the Remaining to 0
8. Toggle the *Invoice* button, set the *Invoice to Public* to *"Yes"* and click *Ok*
9. Click *Validate*.
10. An error *"Invalid Operation, CFDI not set to Public"* appears.
opw-5171035
Forward-Port-Of: odoo/enterprise#101275
Forward-Port-Of: odoo/enterprise#99871This update resolves an issue where the bank statement import wizard wouldn't correctly identify the 'Cumulative Balance' field, preventing it from being offered for setup. The fix ensures the wizard accurately matches the balance, allowing users to properly import and manage their bank statements. This improves the accuracy of financial data import.
Original PR description
When importing a bank statements xlsx in a bank journal, the wizard would not match the "Cumulative Balance", not even proposing it for manual setup. Steps to reproduce: - Go to the accounting…
When importing a bank statements xlsx in a bank journal, the wizard would not match the "Cumulative Balance", not even proposing it for manual setup. Steps to reproduce: - Go to the accounting dashboard - On a bank journal tile, in the right corner menu "New > Import File" - Upload a file (there is one attached to the ticket) - Cumulative Balance is not matched This commit adds module.init() that is skipped in the "onWillStart" override (it's present in the parent onWillStart). This has for consequence that the "bank_stmt_import" key is now present in the context when get_fields_tree() from Base_ImportImport is called, allowing the addition of missing field. See https://github.com/odoo/enterprise/blob/19.0/account_bank_statement_import_csv/wizard/account_bank_statement_import_csv.py#L18 This commit also adds a check to only add debit & credit in the added field list if they are not actual field on the bst line model (see: https://github.com/odoo/enterprise/commit/af863c5a53d0ab50fe67cb9ea910391d4a1979dd) This commit also checks that those fields are only added when the model is account bank statement line (only useful in this case). opw-5222326
This update resolves a problem where invoices generated in Arabic were sometimes printed incorrectly, with missing logos or repeated headers. The fix reduces the number of invoices processed at once, allowing the printing software to render them properly. This ensures consistent and accurate invoice printing for all customers.
Original PR description
Repro steps: 1. Create a customer whose language is Arabic 2. Create 16 or more invoices for that customer 3. Send these invoices together all at once Issue: PDFs generated for the invoices are strange, some have missing logo in the header, while others have the header repeated multiple times on the page. Root cause: wkhtmltopdf does not have enough time to render all these PDFs at once, so it fails to render them properly leading to these half-rendered PDFs. Solution: This commit solves this issue by reducing the number of invoices that the cron processes at once from 20 to only 10 (the default of the function _cron_account_move_send). This would ensure that wkhtmltopdf has enough time to process and render a batch of invoices at once. opw-4997495 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#236810
This update resolves a technical issue where validation errors in the Point of Sale (POS) system weren't being properly communicated. The fix ensures that errors detected during validation are correctly passed along, preventing the system from incorrectly proceeding with payment processing. This improves the reliability of the POS system and ensures accurate financial reporting.
Original PR description
This PR is related to https://github.com/odoo/enterprise/pull/101365. In the above PR, a l10n test fails because an error is not correctly propagated by the method overriding `finalizeValidation`. In fact, the method `OrderPaymentValidation.shouldHideValidationBehindFeedbackScreen` requires the return value of `finalizeValidation` to determine whether an error occurred or not. https://github.com/odoo/odoo/blob/9e04aadb83d482d05fc2fa66fa3c3bebb6ac1528/addons/point_of_sale/static/src/app/utils/order_payment_validation.js#L96-L99 In the methods overriding `finalizeValidation`, if the return value is not propagated, the potential error is lost and the `shouldHideValidationBehindFeedbackScreen` will attempt to move onto the next screen anyway. (related to) opw-5171035
This update improves the way the AI assistant provides information by automatically adding clickable links to the sources used for each response. Previously, the AI didn't clearly indicate where its information came from. Now, users can easily access the original documents referenced within the AI's answers, enhancing trust and transparency. This also ensures the AI respects user access permissions for these sources.
Original PR description
## Summary: This PR introduces `_get_llm_response_with_sources` to correctly parse the LLM's output format, which includes inline `[SOURCE]` for any claim it mentions, containing attachment IDs of the sources used. The method is responsible for: - Processing the raw LLM message and adding clickable sources numbers for the sources used for the answer. - Fetching the associated `ir.attachment` records based on the IDs and linking their sources' urls to the response. task-id-5153916
This update resolves an issue where AvaTax processes would fail if orders lacked at least one line item. This prevented tax calculations and related workflows. The fix ensures that AvaTax only attempts to retrieve tax information for orders with valid line items, improving data accuracy and preventing disruptions.
Original PR description
Calling Avatax without lines results in an error and blocks flows: ``` Odoo could not fetch the taxes related to MXXX - SOXXX/XXX. Please check the status of `Sales Order XXX` in the AvaTax portal.…
Calling Avatax without lines results in an error and blocks flows: ``` Odoo could not fetch the taxes related to MXXX - SOXXX/XXX. Please check the status of `Sales Order XXX` in the AvaTax portal. Transactions must have at least one line. ``` There are various cases this can happen: 1/ if `industry_fsm_stock` is installed, empty orders are confirmed [1], 2/ if you put the `end_date` of a subscription before the `next_invoice_date`, then none of the lines are considered invoiceable [2] and you get the error when viewing the subscription in the portal This commit filters out orders without lines. It's also possible to filter this on the level of the models by doing it in `_get_and_set_external_taxes_on_eligible_records()`. However, this means doing it separately for each model, and requires every implementer do it manually. [1] https://github.com/odoo/enterprise/blob/703e7fd413e93a8287da98286aa93b9699ae3e96/industry_fsm_stock/models/project_task.py#L159 [2] https://github.com/odoo/enterprise/blob/c7bf4367a9bf6757a36a9f34a872a6e35a19a3a5/sale_subscription/models/sale_order_line.py#L475 opw-5214609 opw-5247727 opw-5311132 opw-5385960 Forward-Port-Of: odoo/enterprise#101643
3 changes
Resolved issues and error corrections
This update removes a restriction on displayed stock quantities in the Odoo Enterprise system. Previously, quantities were limited to sublocations within an operation, but this has been removed to provide users with a more complete view of their stock levels. This change ensures accurate stock tracking and reporting.
Original PR description
In order to fix an issue with stock move line's quants not correctly recomputed, the PR odoo/enterprise#95906 backported a part of 18.2 PR odoo/enterprise#55917. The issue is, this PR also backported unwanted changes, like the restriction of displayed quants. Starting with the 18.2, the displayed quants are restricted to the current operation's sublocations because in this version, clicking on a quant updates the move line's fields. This feature doesn't exist prior to the 18.2 and so, the restriction is not needed. This commit removes this part of the field's compute so users have better visibility of where are their quants. [opw-5357557](https://www.odoo.com/odoo/project.task/5357557)
This update corrects a bug where repeatedly validating a stock transfer in the Barcode app could create duplicate stock entries, particularly when using unreserved products. The fix prevents multiple validation attempts, ensuring accurate stock tracking and avoiding data inconsistencies. This improves the reliability of transfer processing.
Original PR description
**Problem:** When processing a picking in Barcode, it's possible to press the validate button or scan the validate barcode multiple times before the transfer validates or raises an error. This is…
**Problem:**
When processing a picking in Barcode, it's possible to press the validate button or scan the validate barcode multiple times before the transfer validates or raises an error. This is especially a problem when unreserved products are added to a transfer, since each additional validate call will duplicate those products (and their lot/SNs).
**Steps to Reproduce:**
- In the Barcode app, create a new internal transfer
- Scan a product, then scan the destination location 'WH/Stock/Shelf 1' ('2601892' is the barcode)
- Click the "Validate" button (or scan 'O-BTN.validate') multiple times as quickly as possible
- See that the "The transfer has been validated" toast appears (and possibly warnings about validating a done transfer) -> On the transfer, see that there are duplicated stock.move and stock.move.line
**Fix:**
Prevents the 'validate' method from executing as usual by checking if a previous call is still executing (tracked by 'isValidate').
opw-4948696
Forward-Port-Of: odoo/enterprise#95329This update fixes a potential issue where changes to parser rules couldn't be saved after the parser was initially set up. This change ensures that parser rules are consistently applied, preventing unexpected behavior and improving the stability of Odoo's data processing. It's a routine maintenance update to enhance data integrity.
Original PR description
The parser rules cannot be modified once the parser has been instantiated. task-5091744 Forward-Port-Of: odoo/odoo#239046
2 changes
Resolved issues and error corrections
This update resolves an issue where Odoo's logging system incorrectly handled log messages containing complex data, specifically mappings. The fix reorganizes the logging process to correctly format these messages, ensuring more reliable and consistent logging output. This improves overall system stability and reduces the risk of logging-related errors.
Original PR description
When `lower_logging` encounters a `LogRecord.args: Mapping`, it fucks up and strips out all the values keeping only the mapping keys (as a tuple), which then breaks when trying to format it in `LogRecord.msg`. Fix the issue by moving the entire message munging into, appropriately, the formatter: `getMessage` will do the `str.__mod__` call at which point we don't need to deal with the args at all, then `formatMessage` generates the full message line (not including the stack traces from `exc_info` and `stack_info`, those are added in the second half of `Formatter.format`). https://runbot.odoo.com/odoo/error/234669 Forward-Port-Of: odoo/odoo#239410
This update fixes an issue where service invoices were incorrectly generating customs valuation data in the Complemento de Comercio Exterior. The change ensures service lines adhere to SAT guidelines, setting `ValorUnitarioAduana` and `ValorDolares` to zero, preventing potential invoice rejections. This improves compliance with Mexican customs regulations.
Original PR description
When generating the Complemento de Comercio Exterior for invoices that include products of type "service", the system incorrectly fills the `ValorUnitarioAduana` and `ValorDolares` fields for such lines. According to the official SAT guidelines and the c_ClaveUnidadAduana catalog, when the Aduana unit code is "99" (which corresponds to "Servicios (no objeto de comercio exterior)"), the following rules apply: - `ValorUnitarioAduana` must be 0. - `ValorDolares` must be 0. This change ensures that service lines are correctly excluded from customs valuation in the Complemento de Comercio Exterior XML, preventing potential rejection of CFDIs due to invalid information. References: - [SAT Guía de llenado Complemento Comercio Exterior](http://omawww.sat.gob.mx/tramitesyservicios/Paginas/documentos/Guia_complemento_Comercio_Exterior.pdf)