Daily updates from Odoo
Saturday, April 4, 2026
16 changes · master
Resolved issues and error corrections
This update resolves a bug in the account reports testing environment. The fix addresses inconsistencies in data handling and ensures report lines correctly display invoice references. This improves the reliability of test results and the accuracy of account reporting.
Original PR description
Now that context is not hacked, some flush and write are done a bit differently. Fix tests. account_reports: probably due to a missing flush or data computation tests were a bit hacked to account for invalid data. This is now fixed, report line correctly contains the invoice reference.
This update prevents the system from incorrectly syncing ‘e-Cobranza’ documents (collection notes) as vendor bills in the Uruguayan localization. This change aligns with how we handle other related documents like ‘e-Remito’ and ‘e-Resguardos’, ensuring data consistency and accuracy for vendor billing.
Original PR description
This pull request improves the synchronization process of vendor bills within the Uruguayan localization (`l10n_uy_edi`). Currently, the system might fetch documents that are not technically bills during synchronization. With this change, the system will explicitly avoid synchronizing `e-Cobranza` (Collection notes or Receipts) documents as vendor bills. Reasoning: `e-Cobranza` documents function conceptually more like payment receipts rather than actual vendor bills. Pulling them into the system as bills creates inconsistencies. This update aligns the handling of `e-Cobranza` with the existing behavior for `e-Remito` (Delivery Guides) and `e-Resguardos` (Withholdings), which are also appropriately excluded from bill synchronization. **Related Tasks** LATAM Task: 1367 ADHOC Task: 58906 Forward-Port-Of: odoo/enterprise#100549
This update resolves an issue where the 'Edit Properties' button was unexpectedly appearing in the project dashboard. The fix prevents the button from showing up when it's not relevant, streamlining the user experience for project management. This ensures users only see options that apply to their current project setup.
Original PR description
Steps to produce: --- - Install `Databases` modules. - Go to project > Switch to list view and open project. - Click on the gear icon > Click `Edit Properties.` Observation: --- - Clicking `Edit…
Steps to produce: --- - Install `Databases` modules. - Go to project > Switch to list view and open project. - Click on the gear icon > Click `Edit Properties.` Observation: --- - Clicking `Edit Properties` does nothing. Root cause: --- - The `Edit Properties` action appears whenever a properties field is present in the view. - Currently, in `project.project` the field `database_kpi_properties` is added from database module (See [1]). - Here at [2], the field is added in `edit_project` view. - However, the field is only visible when `database_hosting` is set, and its value is different from `other`. Solution: --- - Patched `FormController.getStaticActionMenuItems()` and added a condition to make the `addPropertyFieldValue` menu item unavailable when the current model is `project.project`. [1]: https://github.com/odoo/enterprise/blob/84022deef3414096fcaf61f8d45c08393431e0ab/databases/models/project_project.py#L36 [2]: https://github.com/odoo/enterprise/blob/84022deef3414096fcaf61f8d45c08393431e0ab/databases/views/databases_project_views.xml#L158 Note: --- - Also found that, clicking `Edit Properties` from a page other than the KPI page does nothing. We could either show a guiding `dialog box` or limit the visibility of `Edit Properties` to the KPI page only. opw-5933007 --- Forward-Port-Of: odoo/enterprise#108056
This update fixes an error preventing Intervat from properly verifying our connections. The issue stemmed from outdated JWK keys being archived on IAP, which caused authentication failures. The fix involves ensuring Intervat can access the most current JWK keys, restoring seamless communication with Intervat.
Original PR description
When we open a connection in intervat, we initialize a JWK on IAP side,
then we use the private key linked with this JWK to sign our requests.
The problem is on IAP, we have a cron who archive JWK older than a week.
As the archived JWK are hidden in our JWKS endpoint, Intervat is no
longer capable of verifying our signatures, leading to this error:
`{"error_description":"JWT is not valid" "error":"invalid_client"}`.
To fix this, we might need to call IAP first to unarchive the JWK first.
no-task
Forward-Port-Of: odoo/enterprise#112719This update addresses an issue where incorrect DTE (Digital Tax Document) XML files were causing the system to generate invoices even when they were invalid. The fix reintroduces a check to discard these files, preventing the creation of unnecessary invoices and ensuring data accuracy. This improves the reliability of the purchase order process.
Original PR description
A supplier DTE xml should be discard when being fetched by a DTE incoming server if it has the wrong document type, meaning no account move should be created from it. Steps: - Have purchase journal using documents - Setup an incoming mail server, with DTE option enable, with email address X - Send an email to X with a supplier DTE xml of type 52 (TipoDTE element) - Fetch mails from the incoming server -> a bill has been generated and filled, it shouldn't Cause: The check on document type has been removed with the refactor 42744fcecdbd36ea0101070c68299227a9f204a6 Fix: Reintroduce the check in `_process_incoming_supplier_document` before creating any record opw-5978959 Forward-Port-Of: odoo/enterprise#112877
This update fixes an issue where amounts with thousand separators (like 1,334.00) were incorrectly interpreted, leading to potential errors in reconciliation reports. The change introduces a new function to intelligently parse these amounts, ensuring accurate calculations and reporting. This improves the reliability of financial data.
Original PR description
When extracting amounts using a regex with a single capturing group, values containing thousand separators such as 1.334,00 or 1,334.00 were not correctly converted to floats. This could lead to…
When extracting amounts using a regex with a single capturing group, values containing thousand separators such as 1.334,00 or 1,334.00 were not correctly converted to floats. This could lead to incorrect amounts being interpreted in reconciliation models.
Added a new function `split_amount_str`in utils which will give
integer and decimal part for different number formats.
This is a heuristic approach, meaning it aims to provide the best
possible result for valid inputs. Invalid or ambiguous formats are
not guaranteed to be parsed correctly and may result in ('0', '0').
For the two capturing groups case, the first group is treated as the
integer part and the second as the decimal part, allowing users to
Explicitly split amounts like 9065 into 90.65 by using two groups
in their regex.
Examples:
EU format: 1.334,15 → 1334.15
US format: 1,334.15 → 1334.15
Implicit decimals: uid 01870912 0000009065 → 90.65 (using two groups)
Additional tests were added to ensure amounts with thousand separators
are correctly parsed.
Task [link](https://www.odoo.com/odoo/project/967/tasks/6026748)
task-6026748
Forward-Port-Of: odoo/enterprise#110410This fix resolves a crash that occurred in the Point of Sale system when scanning GS1-formatted barcodes for products with multiple variants. The system was incorrectly trying to look up lot numbers as product barcodes, causing the application to fail. The fix ensures the correct product information is passed through the barcode scanning process, allowing customers to successfully scan and add configurable products to their orders.
Original PR description
**Steps to reproduce:** * Install `point_of_sale` module. * Go to Settings: * Enable Lots & Serial Numbers. * Enable Variants. * Set Barcode Nomenclature to Default GS1 Nomenclature. * Create a…
**Steps to reproduce:**
* Install `point_of_sale` module.
* Go to Settings:
* Enable Lots & Serial Numbers.
* Enable Variants.
* Set Barcode Nomenclature to Default GS1 Nomenclature.
* Create a product:
* Enable Track Inventory set to By Lots.
* Under Attributes & Variants:
* Add an attribute with two values and save.
* Generate product variants:
* Open one variant and set barcode to 5123648695416.
* Update inventory:
* Go to the main product (template).
* Update On Hand Quantity:
* Update On Hand Quantity with a lot/serial number:
010512364869541610784512.
* Select the variant with the defined barcode.
* Under Point of Sale tab:
* Set a POS Category.
* Open a POS session and scan:
010512364869541610784512.
**Observed behavior:**
* Scanning the GS1 barcode in POS raises a traceback:
*TypeError: Cannot read properties of undefined (reading
'product_template_attribute_value_ids')*.
**Cause:**
[Scans GS1 barcode: 010512364869541610784512]
│
├─ ProductScreen._barcodeGS1Action(parsed_results)
│ • product = await _getProductByBarcode(productBarcode) ✅ found
│ • calls `addLineToCurrentOrder(vals, { code: lotBarcode })`
│ ⚠️ only `lotBarcode` passed, `productBarcode` discarded
│
├─ PosStore.addLineToCurrentOrder() → addLineToOrder()
│ • product has variants → isConfigurable() = true
│
├─ PosStore.handleConfigurableProduct()
│ • calls openConfigurator(productTemplate, { ...opts })
│ opts = { code: lotBarcode }
│
└─ PosStore.openConfigurator()
• opts.code = lotBarcode → truthy → enters if(opts.code) branch
• getBy("barcode", opts.code.base_code)
• getBy("barcode", "784512") ← "784512" is a LOT number, not a product barcode!
→ returns undefined ❌
• product packaging lookup also fails → undefined ❌
• product = undefined
│
└─ attributeLinesValues.map(values =>
values.filter(value =>
product.product_template_attribute_value_ids.includes(value)
^^^^^^^ undefined → 💥 TypeError
**Fix:**
* Pass the product from `handleConfigurableProduct` to the configurator.
* If no product is found using `opts.code`, use the passed product
instead.
---
opw-6031909
Forward-Port-Of: odoo/odoo#257227
Forward-Port-Of: odoo/odoo#254572This fix resolves a problem where copying and pasting text in the website builder was incorrectly creating paragraph elements inside buttons and other inline-only containers. The fix allows the editor to properly handle inline elements at the root level when the container shouldn't contain block-level elements like paragraphs or divs.
Original PR description
Since [website builder refactor], the editor wraps inline elements at the root of an editable boundary. This is causing issues in website builder when the root element is not supposed to contain `p`…
Since [website builder refactor], the editor wraps inline elements at the root of an editable boundary. This is causing issues in website builder when the root element is not supposed to contain `p` or `div` elements (added to wrap the inline elements). This behavior can be configured globally with `allowInlineAtRoot`. And since 6bc5946796a364634cb5eb217e61a5b882a1b6b2, it can be configured per-element with a "predicate" resource. This commit adds a predicate to allow inline at root of editable when the root is (according to its tag) not supposed to contain `p` or `div` elements. Steps to reproduce: - Open website builder on a product page - Select text in "Add to cart" button - Copy - Paste - Bug: a `p` element is created (on master) - Open website builder - Select "Company" below footer - Copy - Paste - Bug: a `p` element is created [website builder refactor]: 9fe45e2b7ddbbfd0445ffe25a859e67a316d02b2 task-5868460 Forward-Port-Of: odoo/odoo#257512 Forward-Port-Of: odoo/odoo#247231
This fix resolves a problem where POS orders created in Jordan before installing the EDI module could not be submitted to JoFotara due to missing unique identifiers. The system now automatically generates these identifiers when needed, ensuring all orders can be successfully submitted regardless of when they were created.
Original PR description
Currently, POS orders in Jordan do not have a UUID if they were created before installing the module. This causes submission failures to JoFotara. Steps to reproduce: - Create a POS order in Jordan without the module l10n_jo_edi_pos installed - Install l10n_jo_edi_pos - Try to submit the order to JoFotara, it fails due to missing UUID with the error "Invoice UUID is required" This fix force a computation of the order UUID when we add the header node, to ensure that this will not cause submission failures to JoFotara. opw-6041688 Forward-Port-Of: odoo/odoo#255996
This fix resolves an issue where projects created from CRM leads using templates were assigned to the wrong company. Previously, the system would incorrectly use the template's company instead of the lead's company, causing data mismatches. Now the company is properly preserved when creating projects from leads.
Original PR description
When creating a project from a CRM lead using a template, the `default_company_id` set by `_get_project_create_from_lead_context` is ignored because `company_id` is not in the template default…
When creating a project from a CRM lead using a template, the `default_company_id` set by `_get_project_create_from_lead_context` is ignored because `company_id` is not in the template default context whitelist. This causes the new project to inherit the template's company instead of the lead's company, resulting in a company mismatch with the partner and a UserError. https://github.com/odoo/odoo/blob/2b89db4af2265e5cec8feb11853364e293de203e/addons/crm_sale_project/models/crm_lead.py#L37-L45 https://github.com/odoo/odoo/blob/2b89db4af2265e5cec8feb11853364e293de203e/addons/project/models/project_project.py#L1413-L1419 Steps To Reproduce: 1. Go to CRM, create or open a lead. 2. Clear the contact field and save. 3. Click the gear icon → Create Project. 4. Select any project template (not empty) and submit. Ticket [link](https://www.odoo.com/odoo/project.task/5933253) opw-5933253 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#250087
This fix ensures that when users send multiple Request for Quotations (RFQs) using the bulk "Send by mail" action, the RFQ status is automatically updated to "Sent" - just like it does when sending from the individual form view. Previously, RFQs would remain marked as draft even after being emailed, causing confusion and requiring users to manually resend them to update the status.
Original PR description
Issue Before This Commit: ======================= When RFQs are sent using the `Send by mail` action from the list view, their state remains draft instead of being updated to sent, so users see them…
Issue Before This Commit: ======================= When RFQs are sent using the `Send by mail` action from the list view, their state remains draft instead of being updated to sent, so users see them as not sent even though they were already emailed and have to send them again using the `Send RFQ` button from the form view to mark rfq as sent, which is inconsistent with the form view behavior and confusing for users. Steps to Reproduce: ======================= - Install the `Purchase` app. - Go to Purchase and select multiple RFQs in the list view. - Click `Send by mail` from the actions menu. - Select the RFQ email template and send the email. - Observe that the RFQs remain in state RFQ instead of being set to RFQ Sent, unlike when using the `Send RFQ` button in the form view. Cause of the issue: ======================= The `Send by mail` action in the list view does not apply the same state update logic as the `Send RFQ` button from the form view, where the RFQ state is updated when the email is posted on the purchase order. As a result, when emails are sent from the list view (mass mailing flow), the RFQ state is not updated After This Commit: ======================= When emails are sent using Send by mail, purchase orders in state draft are updated to sent in `_message_mail_after_hook` after the email is sent. This keeps the list view flow consistent with the form view behavior and prevents users from having to resend RFQs just to update the state. TaskID-5443248 Forward-Port-Of: odoo/odoo#243050
This update fixes three critical errors in Polish e-invoice (FA3) generation that were causing incorrect tax codes, currency misstatements, and exchange rate calculations. The fixes ensure that 5% taxes are properly coded, invoice amounts are shown in the correct currency, and currency conversion rates are calculated correctly for multi-currency invoices sent through the KSeF system.
Original PR description
**PROBLEM** 1. 5% ta have the wrong code `zw` (tax exempted), it should be `5` (small typo in code). 2. P_15 should be stated in the invoice currency, and not always in PLN (company currency). 3. KursWalutyZ is not right, it's the PLN->XXX rate (meaning we need to do PLN amount * PLN->XXX rate to get XXX amount, where XXX is the invoice currency) but it should be the XXX->PLN rate. **STEP TO REPRODUCE** 1. install l10n_pl_edi 2. Install the test certificate to send e-invoice (more info about how to do that in the chatter of the bug ticket). 3. Create an invoice with a line with a 5% tax, and in another currency than PLN with a custom currency rate. 4. Send the e-invoice using KSeF. 5. Open the xml attached in the chatter, and notice it has the problems listed above. Ticket [link](https://www.odoo.com/odoo/project.task/6075221) opw-6075221 Forward-Port-Of: odoo/odoo#256906
This fix resolves an error that occurred when users submitted the Create a Task form with an email address that doesn't correspond to an existing contact. The system was trying to add an outdated email field that no longer exists in the task system, causing the submission to fail. The fix prevents this invalid field from being added, allowing the form to submit successfully.
Original PR description
Currently, an error occurs when a user submits the Create a Task form. **Steps to Reproduce:** - Install the `website_project` module. - Go to `website` > `Click on Edit` > `Drag and drop` form. -…
Currently, an error occurs when a user submits the Create a Task form. **Steps to Reproduce:** - Install the `website_project` module. - Go to `website` > `Click on Edit` > `Drag and drop` form. - Click on the form and, set the action to `Create a Task`, then save. - Fill in the required data in the form. - In the `Email Address` field, enter an email that does not correspond to any existing partner. - `Submit` the form, and the `error appears in the logs`. `ValueError: Invalid field 'email_cc' in 'project.task'` With this [recent commit], the email_cc field has been removed from project.task, along with the mail.thread.cc inheritance, because threads are now able to find CC recipients. so, when user submits the form with an email address that does not correspond to any existing partner, the system adds email_cc to the record [1], and when it attempts to create the record [2], it raises an error. This commit ensures that email_cc is no longer added to the record. [recent commit]: https://github.com/odoo/odoo/commit/3c26c0553754a75d9440097ad473be3cc8bcb320#diff-93ba226020add6481cfeab916e69980a59163e2925a5c2c9a3bc0aaceb484cdf [1]- https://github.com/odoo/odoo/blob/21aa7e7eca0bf78978e0667cee43129985833166/addons/website_project/controllers/main.py#L61 [2]: https://github.com/odoo/odoo/blob/21aa7e7eca0bf78978e0667cee43129985833166/addons/project/models/project_task.py#L1167 sentry-7374084515 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#256964
This update improves the reliability of automated tests across multiple Odoo modules by restoring email tracking features that were previously disabled. The changes help catch real-world issues with access controls and data tracking that were being masked by overly simplified test conditions. Additionally, a bug in the sales module tests was fixed where a record object was incorrectly used instead of its ID.
This fix resolves an issue where multi-line product descriptions were appearing in reverse order when displayed in the shopping cart. The problem was caused by a previous change that attempted to prioritize rental dates and variant information, but inadvertently reversed all description text. The fix removes the reversal logic to ensure product descriptions display correctly, though variant details and rental dates may no longer always appear first.
Original PR description
Issue: --- Due to this issue, the description following lines are inversed. Steps to reproduce: --- 1- In product page in backend, add a multiline "Short Description" to a product. 2- Navigate to website and add the product to the cart. 3- Open the cart. Outcome: The description after lines are shown inversed. Cause: --- This is introduced by https://github.com/odoo/odoo/pull/223433. It was done to ensure some information such as rental date and variant description are shown at the beginning. However, it didn't consider that the product description itself might have multilines. Fix: --- There is no clean way to reliably extract structured information from the computed name. To avoid reversing the product description lines, we no longer reverse the description. As a limitation, variant descriptions and rental dates may no longer always appear first. opw-5976614 Forward-Port-Of: odoo/odoo#252259
This fix corrects how Odoo calculates taxes on invoices that use price-included tax mode but have zero price-excluded taxes. Previously, the system would incorrectly switch to excluded tax mode in this scenario. Now it properly handles mixed tax configurations without unnecessary mode switching, ensuring accurate tax calculations on invoices.
Original PR description
…xes_data Suppose an invoice with price-included taxes but with a zero price excluded one. We don't want to fallback on the excluded mode just for that. opw-6060486 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#257495