Tuesday, December 2, 2025
12 changes · saas-18.4
Enhancements to existing features
This update ensures Odoo correctly handles German B2G invoices in the XRechnung format. A mandatory ‘Leitweg-ID’ routing identifier has been added to the invoice XML, directing invoices to the appropriate government entity. This ensures compliance with German regulations and accurate invoice processing.
Original PR description
*= l10n_account_edi_ubl_cii_tests For B2G transactions in Germany, the Leitweg-ID is a mandatory routing identifier to direct the invoice to the correct public entity. Adding this Leitweg-ID for the UBL syntax. task-5194484 Description of the issue/feature this PR addresses: For electronic invoicing in Germany, for B2G transactions, the Leitweg-ID is a mandatory routing identifier to direct the invoice to the correct public entity. We want to add this identifier for the XRechnung format. Current behavior before PR: The Leitweg-ID is not present in the UBL xml format. Desired behavior after PR is merged: The Leitweg-ID is added in the header of the invoice in the cbc:BuyerReference tag. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#236333
This update enhances Odoo's tax calculations to accurately handle taxes based on volume, such as VAT on product quantities. This change was requested during Odoo Exp 2025 to ensure more precise tax calculations for businesses dealing with volume-based pricing. It impacts the account tax python module.
Original PR description
The use case to cover is when you have a volume based tax. Requested during Odoo Exp 2025. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237852 Forward-Port-Of: odoo/odoo#232146
Resolved issues and error corrections
This pull request updates the core spreadsheet component within Odoo. It addresses several bug fixes and improvements related to chart rendering, cell interactions, and overall stability, ensuring a smoother user experience when working with spreadsheets. These changes enhance the functionality and reliability of the spreadsheet feature.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/95b1252fa [REL] 18.4.19 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/95b1252fa [REL] 18.4.19 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/ecb26f8df [FIX] chart: don't crash treemap without visible data [Task: 5365419](https://www.odoo.com/odoo/2328/tasks/5365419) https://github.com/odoo/o-spreadsheet/commit/645e850b7 [FIX] clickable cells: prevent overlap with grid icons [Task: 4930803](https://www.odoo.com/odoo/2328/tasks/4930803) https://github.com/odoo/o-spreadsheet/commit/b5734b6b7 [FIX] pivot: Ensure computed measure range adaptation [Task: 5358213](https://www.odoo.com/odoo/2328/tasks/5358213) https://github.com/odoo/o-spreadsheet/commit/627510033 [FIX] commands: remove duplicate in invalidateEvaluationCommands [Task: 5358213](https://www.odoo.com/odoo/2328/tasks/5358213) https://github.com/odoo/o-spreadsheet/commit/15b6c6bf8 [FIX] Charts: Ensure Chart js extension are loaded on chart creation [Task: 5214007](https://www.odoo.com/odoo/2328/tasks/5214007) https://github.com/odoo/o-spreadsheet/commit/f814b303a [FIX] Demo: Fix wrapper style [Task: 5212448](https://www.odoo.com/odoo/2328/tasks/5212448) https://github.com/odoo/o-spreadsheet/commit/411165cea [FIX] composer: keep edition mode inactive on cursor selection change [Task: 5354541](https://www.odoo.com/odoo/2328/tasks/5354541) https://github.com/odoo/o-spreadsheet/commit/e81dd1632 [FIX] BottomBarSheet: sheet name should update on foreign changes [Task: 5016252](https://www.odoo.com/odoo/2328/tasks/5016252) https://github.com/odoo/o-spreadsheet/commit/de2393215 [FIX] Composer: Fix assistant position [Task: 5155838](https://www.odoo.com/odoo/2328/tasks/5155838) Co-authored-by: Florian Damhaut (flda) <flda@odoo.com> 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: Adrien Minne (adrm) <adrm@odoo.com> Co-authored-by: Ronak Mukeshbhai Bharadiya (rmbh) <rmbh@odoo.com> Co-authored-by: Dhrutik Patel (dhrp) <dhrp@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> Co-authored-by: Marceline Thomas (matho) <matho@odoo.com>
This update enhances the reliability of payment processing for German POS systems by automatically retrying failed transactions (5xx errors) and notifying users if the payment system is unavailable. This prevents payment processing interruptions and ensures tills remain operational, improving the overall user experience. The changes simplify the underlying code for better maintainability.
Original PR description
In this task: --------------- - Moved the status code handling logic at proper place for all transactions API responses. - Removed the mixed usage of async/await and .then() by async/await totally in all transaction calls to simplify flow and improve readability. - For 5xx errors (e.g., 503), retry once as they occur when the server is unreachable. Print "TSS not reachable" if even after retries followed by exponential backoff logic. - Guarantee tills remain operational and not blocked even if the TSS is unreachable. task:5051693 Forward-Port-Of: odoo/enterprise#100911 Forward-Port-Of: odoo/enterprise#93694
This update fixes an issue where error messages weren't being properly handled in the auto-retry system, leading to build failures. The change ensures that traceback errors are also caught and addressed, along with a related OSError issue during websocket handling, improving overall system stability.
Original PR description
The auto-retry is supposed to catch error logs as well as tracebacks. In some cases a traceback is logged as a message, and not as a logger arg, bypassing the replace already in place. This pr simply replaces the traceback string in the message as well. Build error [234619](https://runbot.odoo.com/odoo/runbot.build.error/234619) Also fixes OSError while handling request paused Build error [229906](https://runbot.odoo.com/odoo/runbot.build.error/229906) Forward-Port-Of: odoo/odoo#238133
This update fixes a visual quality issue in the product image thumbnails generated within the website editor. Previously, using WebP format directly in the browser resulted in blurry thumbnails. The fix implements Lanczos resampling for WebP processing, ensuring high-quality thumbnails across browsers.
Original PR description
**Steps to reproduce:** - Install eCommerce app - Go to the shop of the website - Activate the editor - Click on 'New' in the top right - Create new product with image - Image is automatically…
**Steps to reproduce:** - Install eCommerce app - Go to the shop of the website - Activate the editor - Click on 'New' in the top right - Create new product with image - Image is automatically converted to 1920x1920 in webp format - Thumbnails have low quality when computed in JS (visible artifacts such as dotted diagonal lines and aliasing), especially on Firefox **Issue:** For other image formats, the resizing is done in the backend and use a specific downsampling algorithm (Lanczos) with PIL to improve the output quality. But as we are moving to use .webp format as the default, which is processed directly in JS for security reasons (and browser dependent), this algorithm is not applied anymore (which leads to some visual degradation in the thumbnails). WebP format is not supported on the python side due to `Pillow` dependency to `libwebp` which is considered unsafe at the moment. Using higher resolution images and downsizing them using css sometimes fix the issue, but it mainly works on Firefox, which seems to apply a different downsampling with css and with canvas drawing. **Fix:** Implemented Lanczos resampling for the webp format when processed in the browser. related : https://github.com/odoo/odoo/commit/d1292a96a62b18a88a852c69ed7732d16ae0344e Not sure about the licensing needed, as I used this old implementation as a reference: https://github.com/mudcube/Lanczos.js opw-4561958 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where changes to spreadsheet sale inputs were unexpectedly lost due to system updates or user actions. The fix ensures that input values are correctly saved and reflected, providing a more reliable user experience. This improves data accuracy and reduces potential data loss.
Original PR description
Currently, the FieldSync record input suffers from two issues: 1) The input value can be reset by parasitic renders While the user is inputting a value, if they did not confirm it and a global render occurs (other user joining the session, dragging the mouse on the grid), the input value will be reset to the one stored in the plugin, therefore erasing the last change of the user 2) In Chrome-based navigators, users can change the value of the input by using their mouse scrolling wheel. Such action *does not* trigger an `onChange` event; which means that the new value is never directly saved. Both issues are addressed in this commit by keeping an internal state inside the component `FieldSyncSidePanel` and ensure this state is properly reflected in the plugin once we stop editing the input. Task-5123069 Forward-Port-Of: odoo/enterprise#96431
This update resolves an issue preventing portal users with subcontracting access from viewing picking details in manufacturing orders. The fix uses `sudo()` to grant necessary read access to the required models, ensuring accurate data display and functionality for portal users. This improves the user experience for subcontracting workflows.
Original PR description
Issue Before This Commit: ======================= When a subcontractor (portal user) tries to open a picking from the Manufacturing orders section in the portal view, the page appears blank with no…
Issue Before This Commit: ======================= When a subcontractor (portal user) tries to open a picking from the Manufacturing orders section in the portal view, the page appears blank with no data loaded on the frontend, while in the the backend logs show read Access Error is raised on the `product.supplierinfo` and on `product.template.attribute.value` models. Steps to Reproduce: ======================= -Install `MRP` and `Purchase` modules, and enable Subcontracting. -Create a product attribute with values and `variant creation` set to `Never`. -Create a product and Assign the created attribute to the product’s attributes. -Create a portal user and grant portal access. -Create a BOM for the product, set it for subcontracting, and assign the portal user as a subcontractor. -Create a Purchase Order for a subcontracted product linked to that vendor. -Log in to the portal view as the portal user and open Manufacturing Orders. -Try to open the related picking and the page fails to load and appears blank. Cause of the issue: ======================= In this [PR](https://github.com/odoo/odoo/pull/177390), The `_compute_description_picking` method was extended to include vendor product code and product name using the `selected_seller_id` field, and the product attribute values using the `product_no_variant_attribute_value_ids` field. Since `selected_seller_id` points to `product.supplierinfo` model and `product_no_variant_attribute_value_ids` points to `product.template.attribute.value` model, `group_portal` do not have read access to these models causing access errors when the picking description is computed, so the page appears blank while opening the picking. After This Commit: ======================= The `_compute_description_picking` method now uses `sudo()` to safely access `selected_seller_id` and `product_no_variant_attribute_value_ids` fields, allowing portal users to compute stock move descriptions without encountering access errors. This prevents the page from appearing blank when opening picking in the portal without granting direct model access. Task-4958070
This update resolves an issue where clicking 'Details' on completed signed documents resulted in an error. The fix ensures the correct sign request record is accessed, allowing users to now properly view the details of signed documents and maintain a smooth workflow. This improves usability and prevents workflow disruptions.
Original PR description
Version: - saas-18.4 Steps to reproduce: - Open a template that has at least one completed signed request. - Click the Signed Document state button. - See all documents - Click on the detail button Before: - Clicking the Details button on a completed signed document caused a traceback. - This happened because the view was using the record ID from this.props.record.context, which referred to the sign template instead of the sign request, causing incorrect data to be fetched. After: - Use this.props.record.evalContext to retrieve the correct sign request record ID, with this.props.record.context as a fallback. Impact: - Users can now view signed document details without errors, improving workflow continuity and overall usability. task-5253632
This update fixes an issue where Point of Sale (POS) order picking wasn't correctly generating the necessary components when selling kits with variant-specific items. Previously, only one variant's components were included in the picking. Now, the system accurately creates the picking with all required components based on the POS order, ensuring complete fulfillment.
Original PR description
When selling a bom kit that have some components that applies on specific variants only, the picking was not correctly created. It would only take one kit variant into account, even if you sold 2…
When selling a bom kit that have some components that applies on specific variants only, the picking was not correctly created. It would only take one kit variant into account, even if you sold 2 kits with different variants. Steps to reproduce: ------------------- * Create a product P * For product P, create an attribute with type "No variant" and values V1 and V2 * Create a BoM Kit for product P, with 3 components C1 C2 and C3 - C2 applies only for variant V1 - C3 applies only for variant V2 * Create a POS order with 2 lines of product P: - 1 with variant V1 - 1 with variant V2 * Validate the order and check the created picking > Observation: Only C1 and C2 are in the picking, C3 is missing Why the fix: ------------ When creating the picking, the code was grouping the order lines by product only, and not by product variant. Therefore, the 2 lines would be grouped together, and only one of the variant-specific components would be taken into account. opw-5051289 Forward-Port-Of: odoo/odoo#237796 Forward-Port-Of: odoo/odoo#235528
This update resolves a critical error that prevented the generation of payroll export files. The fix corrects a naming mismatch in the code, ensuring accurate retrieval of employee data. A new test suite has been implemented to guarantee the reliability and accuracy of the export process.
Original PR description
The export generation crashed due to a mismatch between field names — the code was referencing employee_ids, while the model actually defines employee_id. Since the Prisma code is now stored on the employee model, the logic was updated to correctly access the employee_id field and retrieve the related Prisma code. Additionally, a comprehensive test suite was added to validate Prisma code behavior, including: - validation of code length for employees, companies, and work entry types, - handling of codes across different companies, - and the complete Prisma export flow (from work entry creation and validation to export file generation). task-5153727 Forward-Port-Of: odoo/enterprise#96743
This update fixes an issue where Colombian e-invoices were failing validation due to incorrect XML formatting for the plastic bags tax (INC Bolsas). The changes add specific logic to generate the correct XML, ensuring compliance with DIAN requirements and allowing invoices with this tax to be successfully submitted.
Original PR description
Before PR: -The plastic bags tax (INC Bolsas) was not handled by a specific flow. -This resulted in incorrect XML generation for Colombian e-invoices, leading to validation errors from the DIAN. After PR: -Dedicated logic flow has been added to correctly handle the INC Bolsas tax. -Generated XML now correctly reports this tax in a separate `TaxTotal` block. -It populates the `BaseUnitMeasure` and `PerUnitAmount` fields with the fixed tax rate per bag. Impact: -Colombian e-invoices that include plastic bags tax are now generated correctly. -Ensures compliance with DIAN's specific requirements for this nominal tax. -Prevents validation errors and allows for successful submission of invoices containing this tax. task-5086926 Forward-Port-Of: odoo/enterprise#95311