Daily updates from Odoo
Tuesday, June 9, 2026
36 changes · saas-19.2
Resolved issues and error corrections
This update resolves an issue where the Profitability report's Cost of Goods Sold dashboard didn't display data when multiple invoices were associated with a project. The fix ensures the report accurately reflects all related journal entries, regardless of the number of invoices generated.
Original PR description
Steps to reproduce: ------------------- 1. Install `sale_project_stock` and Accounting. 2. Create a storable product with **Real-time valuation** and configure the COGS account in the product…
Steps to reproduce: ------------------- 1. Install `sale_project_stock` and Accounting. 2. Create a storable product with **Real-time valuation** and configure the COGS account in the product category expense account. (Ensure you have enabled automatic & analytic accounting from accounting>config.) 3. Create a project with a specific analytic account and ensure the project is billable. 4. Create a sale order with the created product and set the same analytic account in the analytic distribution. 5. Confirm the order, deliver the product, generate the invoice, and post it. 6. Open the project and go to the *Profitability* report. 7. Click on the **Cost of Goods Sold** dashboard item. 8. Repeat steps 4–7 with multiple invoices. Issue: ------ When there is only one invoice, clicking the COGS dashboard item correctly displays the related move lines. However, when there are multiple invoices, the action opens with empty results. Cause: ------ `_get_action_for_profitability_section` sets `res_id` only when a single record exists. When multiple records are present, `res_id` becomes `False`, which causes the action to open without results. https://github.com/odoo/odoo/blob/8f79d407724f40ba8e48f1747b2e87311b7fb49e/addons/project_account/models/project_project.py#L78-L83 Solution: --------- When `res_id` is not set, search `account.move` records using the domain to retrieve the relevant move IDs, then apply a proper domain to display all related COGS journal items. opw-5949261 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#267097 Forward-Port-Of: odoo/odoo#253639
This update fixes an issue where sale order prices weren't accurately displayed in invoicing. The system was previously using product prices instead of the specific price set for each sale order line. This change ensures that users always see the correct price when viewing sale order details, improving invoicing accuracy and reporting.
Original PR description
Steps to reproduce: - - Create a Sale Order with two sale order lines for the same product. - Set different prices on each SOL (e.g. 20 and 40). - Open the related project and go to the Invoicing tab. - Search for the Sale Order Lines. Issue: - Displayed price uses the product price instead of the SOL price. Cause: - The display name formatting used `product_id.lst_price`. Solution: - Use `price_unit` from the sale order line to show the correct price. task-5966799 Forward-Port-Of: odoo/odoo#250554
This update resolves a bug that prevented users from generating planning reports when grouping by departments instead of resources. The fix ensures that the system correctly identifies a resource when grouping by other methods, preventing an error and allowing reports to be printed successfully.
Original PR description
## Steps to Reproduce: 1. Install the Planning module. 2. Planning > Group by "Department". 4. Click Actions > Print. ## Error: `AttributeError - 'bool' object has no attribute 'id'` ## Cause: When the planning is grouped by other than `resource_ids`, `resource` is set to False. Later, then accessing the ID leads to an error. ## Fix: When the planning is not grouped by resource, use the first resource assigned to the slot instead of False. sentry-7536432202
This update optimizes Odoo's styling process, specifically reducing the time it takes to recalculate styles in large tables like the Accounting Balances Sheets. By removing unnecessary selectors, the system now responds faster to window resizing, scrolling, and sorting, leading to a smoother user experience.
Original PR description
Adapt selector to remove the :has value since it not needed to have the effect applied. This reduces work during the "Recalculate Style" phase (for example when hovering rows in large tables such as the Accounting > Balances Sheets). It lowers recalculation time during window resizes, heavy scrolling, and table sorting by preventing broad selector matches and limiting style checks to elements with the specific class. This commit is a follow up of https://github.com/odoo-dev/enterprise/commit/8aa63b3c726d825e68430bb0a64a54c1b58d6af7 Note: We also fixes the scss button variable not correctly overided Forward-Port-Of: odoo/enterprise#119521
This update fixes an issue where invoices from certain Peppol suppliers (using a specific XML format) weren't being correctly imported. The fix automatically identifies the supplier's VAT information, creating the necessary partner records and linking bank accounts, ensuring invoices are processed accurately. This prevents import failures and data inconsistencies.
Original PR description
Some Peppol emitters carry the supplier VAT in cac:PartyIdentification/cbc:ID instead of the BIS3-standard cac:PartyTaxScheme/cbc:CompanyID. The import then extracted no VAT, the partner auto-creation not available (needs name+vat) and invoice.partner_id stayed empty. As a side effect, when the XML also carried a PayeeFinancialAccount, the bank account creation crashed with a NOT NULL violation on partner_id. Fall back on cac:PartyIdentification/cbc:ID when cbc:CompanyID is empty, so the partner is found (or auto-created) and the bank account is properly linked. Steps to reproduce: - Create a XML with the supplier VAT only in cac:PartyIdentification/cbc:ID and a cac:PayeeFinancialAccount/cbc:ID. - Upload on a purchase journal: import fails, the bill stays empty with an error in chatter. - With the fix: partner auto-created, bill filled, bank linked. opw-6148974 Forward-Port-Of: odoo/odoo#268316 Forward-Port-Of: odoo/odoo#261933
This update addresses a slow file preview issue when handling large files. Previously, users experienced a blank screen while a large file downloaded and rendered, leading to a frustrating experience. Now, a loading indicator provides feedback while the preview is being prepared, significantly improving user satisfaction.
Original PR description
When previewing a big file, the download might take long and the rendering might take even more time. The UI is blocked until the iframe is ready, but there is no feedback for the user. This commit adds some loading feedback until the iframe is rendered. Steps to reproduce: - Go to a Knowledge article - Upload a file with `/file` - Add a huge JSON file (~30MB) - Save - Click on the file icon => The preview opened but took ages to be displayed without giving any feedback to the user task-6014223 Forward-Port-Of: odoo/odoo#264136
This update prevents managers from overriding the card details when approving card expenses. Previously, setting a manager on a card expense would be cleared upon approval, causing confusion. Now, card expenses are read-only for managers, streamlining the expense approval process and ensuring accurate control via the card itself.
Original PR description
**Issue** If a manager was manually set on a card expense after it was created, it would be cleared when the expense was approved. **Change** Make the field readonly for card expenses, the idea is that the manager shouldn't need to approve card expenses since they are able to control them via the card itself. opw-6045587 Forward-Port-Of: odoo/enterprise#112593
This update ensures that work orders can only be assigned to employees specifically authorized for the relevant workcenter. Previously, all employees were selectable, regardless of workcenter permissions. This change improves efficiency and accuracy by limiting assignments to qualified personnel.
Original PR description
Add domain on `employee_assigned_ids` to restrict selectable employees based on the workcenter configuration. If `all_employees_allowed` is True, no filter is applied. Otherwise, only employees listed in `allowed_employees` are selectable. opw-6208602 Forward-Port-Of: odoo/enterprise#117876
This update corrects a bug that prevented signature requirement features from working correctly for shipments between US locations. The fix adjusts the API request to accurately reflect whether a delivery is at the shipment or package level, aligning with UPS API specifications. This ensures signature requirements are properly applied for US deliveries.
Original PR description
Issue ----- Enabling signature requirement blocks US -> US deliveries. Steps to reproduce ----- - Setup UPS - enable signature requirement - Set current company to US - Create a US Customer - Create…
Issue ----- Enabling signature requirement blocks US -> US deliveries. Steps to reproduce ----- - Setup UPS - enable signature requirement - Set current company to US - Create a US Customer - Create a product with some weight - Create a SO for the product - Add UPS delivery and try to get a rate > Error: "The requested accessory option is unavailable between the selected locations." Cause ----- Depending on the type of transfer, signature is requested at shipment or package level (see the "Delivery Confirmation Origin-Destination Pairs" category of the following link) https://developer.ups.com/api/reference/shipping/appendix1?loc=en_US US50 -> US50 & Canada -> Canada is package level Everything else is shipment level By default we use 'ShipmentServiceOptions_DeliveryConfirmation' for which 'DCISType' = 1 is the correct value. https://github.com/UPS-API/api-documentation/blob/b4064887ebcd9cd98085bc4cce088677c664473f/Shipping.yaml#L8902-L8911 For package level, we should use 'PackageServiceOptions_DeliveryConfirmation' for which 'DCISType' = 2 would be the expected value https://github.com/UPS-API/api-documentation/blob/b4064887ebcd9cd98085bc4cce088677c664473f/Shipping.yaml#L10410-L10421 ----- Ticket: opw-6173624 Forward-Port-Of: odoo/enterprise#117564
This update resolves a minor issue where the displayed name for the Sendcloud website delivery module had a typo ("Sendcould"). The underlying functionality remains unchanged as all other references use the correct spelling. This ensures accurate module identification and a consistent user experience.
Original PR description
The displayed name contained a typo ("Sendcould" instead of "Sendcloud") All other references already use the correct spelling, so no further changes were necessary.
opw-6239003
Forward-Port-Of: odoo/enterprise#118416
Forward-Port-Of: odoo/enterprise#118223This update fixes an issue where the field service report was displaying incorrect information. The report now accurately shows the Planning Shift name and start date, which were automatically populated when a shift is created. This change ensures the report provides the correct details for service interventions.
Original PR description
…port title - Removed the 't-if' condition containing 'doc.name', as 'doc.name' now refers to the Planning Shift name following the changes introduced in v19.2. - The report now displays 'start_datetime', which is automatically populated when a Planning Shift is created. - As a result, the 't-if' condition is no longer necessary. - This change aligns with the new behavior introduced in v19.2 and effectively replaces the Task name that was previously displayed before the report was migrated from 'project.task' to 'planning.slot'. Task-ID: 6284967
This update fixes a persistent memory leak within the Odoo test suite. The issue stemmed from an unintended override of the test environment, leading to unnecessary resource consumption. The solution ensures proper cleanup after tests, preventing future memory problems.
Original PR description
Since [1], there was a memory leak in the test suite due to the path of `rpc._rpc`. This override was leaking the env and all services in every module sets created by hoot. In stable, we simply hook on the `after` callback to cleanup the patch, thus removing the reference to the env and services. In master, with owl3, the strategy will be to put the patch in a Plugin, which has a cleanup function that is executed automatically when the App is destroyed, i.e. after each test. [1] odoo/odoo#248852 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 update introduces support for Belgian voluntary overtime within Odoo's payroll system, DMFA reporting, and 281.10 tax reporting. It includes new work entry types and thresholds to accurately track and report overtime hours, ensuring compliance with Belgian regulations.
Original PR description
Add support for Belgian voluntary overtime in payroll, DMFA, and 281.10 reporting. * Introduce dedicated work entry types for: * Voluntary overtime exempt from ONSS/precompte (DMFA service code 81) * Voluntary overtime subject to ONSS/precompte at 150% and 200% rates (DMFA service code 1, remuneration code 1) * Add salary rules and categories for voluntary overtime remuneration. * Enforce yearly thresholds through payroll parameters: * 240h for voluntary overtime exempt from ONSS * 120h for voluntary overtime subject to ONSS * Exclude voluntary overtime from employment bonus calculations and paid amount computation where required. * Include voluntary overtime remuneration in payroll calculations and DMFA declarations. * Add dedicated 281.10 reporting support for voluntary overtime exempt from ONSS using the reserved tax form fields. * Fix DMFA service hour computation and add payroll/DMFA test coverage. TaskID: 6275791
This update introduces support for Belgian voluntary overtime within Odoo's payroll system. It allows businesses to accurately track and report overtime hours, including those exempt from social security contributions and those subject to standard rates. This ensures compliance with Belgian regulations and provides better management of employee compensation.
Original PR description
Add support for Belgian voluntary overtime in payroll, DMFA, and 281.10 reporting. * Introduce dedicated work entry types for: * Voluntary overtime exempt from ONSS/precompte (DMFA service code 81) * Voluntary overtime subject to ONSS/precompte at 150% and 200% rates (DMFA service code 1, remuneration code 1) * Add salary rules and categories for voluntary overtime remuneration. * Enforce yearly thresholds through payroll parameters: * 240h for voluntary overtime exempt from ONSS * 120h for voluntary overtime subject to ONSS * Exclude voluntary overtime from employment bonus calculations and paid amount computation where required. * Include voluntary overtime remuneration in payroll calculations and DMFA declarations. * Add dedicated 281.10 reporting support for voluntary overtime exempt from ONSS using the reserved tax form fields. * Fix DMFA service hour computation and add payroll/DMFA test coverage. TaskID: 6275791
This update fixes a reporting issue by now logging a specific message when new business partners are created through the Google or Microsoft Calendar sync. Previously, all new partners received a generic message. This change provides clearer tracking of partners originating from calendar integrations, aiding in data analysis and troubleshooting.
Original PR description
Before we were logging the new created partners default message. Now we log custom message indicating that this partner was created from Calendar sync. task-6177363 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 Forward-Port-Of: odoo/odoo#264392
The Odoo Builder was experiencing performance issues due to excessive resource requests when the shape selector panel loaded. This fix delays the panel's content rendering until it's needed, preventing the UI from freezing and improving responsiveness. This change ensures a smoother user experience for builders.
Original PR description
The shape selector panel was eagerly compiling and rendering its slot content on builder startup, triggering 200+ concurrent SVG thumbnail requests before the user had opened the panel or selected an image. With browsers limiting parallel connections per domain, this flooded the request queue and caused the main UI to freeze for several seconds. Slot content is now deferred behind a `contentRendered` flag that is set the first time the panel is opened, so no compilation or network activity happens until the user actually needs it. task-5973702 Forward-Port-Of: odoo/odoo#253041
This update fixes an issue where vendor bills imported from Poland's KSeF system were not correctly accounting for discounts applied to individual items. The update now properly parses the 'P_10' XML node, ensuring accurate bill data is imported and processed. This improves the reliability of financial reporting for businesses using the l10n_pl_edi module.
Original PR description
When fetching vendor bills from KSeF, the XML node "P_10" is used to indicate a discount per unit on a line. This node is currently being ignored when parsing the file. Official documentation: https://ksef.podatki.gov.pl/media/gn2kt4gl/broszura-informacyjna-struktury-logicznej-e-faktury-fa-1-wersja-anglojezyczna.pdf opw-6235460 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#268551 Forward-Port-Of: odoo/odoo#267235
This update resolves a problem in the account module's testing process. The tests were failing due to leftover account transactions that weren't being properly cleaned up. By canceling payments before removing these transactions, the tests now run correctly and provide accurate results.
Original PR description
The KPI provider test setup could leave some account moves behind when running with all modules and demo data installed. These leftover moves were then detected by subsequent test steps, causing incorrect numbers and test failures. This commit ensures the targeted moves are removed to provide an empty test environment. Payments need to be canceled first; otherwise unlinking the moves raises a ValidationError. [runbot-939456](https://runbot.odoo.com/odoo/error/939456) Forward-Port-Of: odoo/odoo#268151
This update allows Odoo to correctly validate Turkish VAT invoices issued to non-taxpayers or overseas customers, following Turkish regulations. Previously, invoices using standard placeholder VAT numbers were incorrectly rejected. This change ensures accurate VAT processing for Turkish businesses while maintaining existing validation rules.
Original PR description
- Turkish regulations allow the usage of special placeholder identifiers for invoices issued to non-taxpayer end consumers and overseas customers, where providing a real TCKN/VKN is not mandatory. - Although Odoo already referenced these identifiers in the VAT format help message (`11111111111` for TCKN and `2222222222` for VKN), they were still rejected by the Turkish VAT validation logic because they do not pass the standard `stdnum` checks. - This commit extends the Turkish VAT validation to explicitly allow these GİB-approved placeholder identifiers while preserving the existing standard VAT validation behavior and Nilvera test environment exceptions. taskID-6237629 Forward-Port-Of: odoo/odoo#268225
This update fixes a technical issue where the ‘Configuration’ menu item within the Contracts module was being incorrectly positioned due to a low sequence value. This caused conflicts with other modules and disrupted the standard Odoo menu hierarchy. Adjusting the sequence ensures the Contracts menu remains in its intended last position, maintaining a consistent and predictable user experience.
Original PR description
## Description of the issue/feature this PR addresses The “Configuration” menu item defined by the *Contracts* module uses a very low sequence value, causing menu ordering conflicts when other…
## Description of the issue/feature this PR addresses The “Configuration” menu item defined by the *Contracts* module uses a very low sequence value, causing menu ordering conflicts when other modules (e.g. [OCA](https://github.com/OCA/partner-contact/pull/2202/files)) add menu items in the same section. This affects not only external modules but also internal ones that add menu items under *Contacts*. ## Current behavior before PR When other modules add new menu items to *Contacts*, the *Configuration* menu moves out of its intended last position, breaking Odoo’s default menu hierarchy. <img width="467" height="148" alt="Behavior before PR:" src="https://github.com/user-attachments/assets/4cb6e3bb-00c0-4636-87de-c51b572dc42c" /> ## Desired behavior after PR is merged The sequence of the *Configuration* menu item is adjusted so that it always remains last, aligning with Odoo’s default menu hierarchy and avoiding friction between modules. <img width="467" height="148" alt="Behavior after PR is merged" src="https://github.com/user-attachments/assets/314c2556-5f2b-403d-af8d-ab550bff41a9" /> --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#234909
This update fixes a calculation error related to year and week numbers, particularly at the end of a year when weeks span across two years. Previously, the system incorrectly reset the year, leading to inaccurate reporting. This change ensures year and week numbers align correctly, improving data consistency and reporting accuracy.
Original PR description
### Description of the issue/feature this PR addresses: getLocalYearAndWeek is used to get the year and week number for a given date. When a week overlaps 2 years, the week number is taken based on…
### Description of the issue/feature this PR addresses: getLocalYearAndWeek is used to get the year and week number for a given date. When a week overlaps 2 years, the week number is taken based on the year where the week has most days. So if a week has 5 days in year Y and 2 in Y+1. The week is taken counting from Y (probably week 53). If a week has 3 days in Y and 4 in Y+1, then the week number is reset to 1. The year, however did not follow the same logic, and was taken as the year of the last day of the ISO week. ### Current behavior before PR: At the end of 2026, this will cause problems because the week number will run as: * 2026, week 52 (all days in 2026, OK) * 2027, week 53 (most days in 2026, last day in 2027, Not OK) * 2027, week 1 (all days in 2027, OK) ### Desired behavior after PR is merged: This commit aims to solve this issue by following the same logic for week number and year, so that the end of 2026 will go as: * 2026, week 52 (no changes) * 2026, week 53 (year is not incremented if week number is not reset) * 2027, week 1 (no changes, but year is incremented when week number is reset) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#267871 Forward-Port-Of: odoo/odoo#267656
This update resolves an issue where Knowledge articles weren't appearing in the 'Additional Notes' field of Manufacturing Orders. The fix modifies a core Odoo setting to allow the 'note' field, used for these additional notes, to be treated as an editable HTML field, enabling seamless integration with the Knowledge clipboard feature.
Original PR description
Version: --------- - saas-19.2+ Steps to reproduce: ------------------- - Install `mrp` and `knowledge` - Open Knowledge and create an article - Add a clipboard block and write some text - Go to…
Version:
---------
- saas-19.2+
Steps to reproduce:
-------------------
- Install `mrp` and `knowledge`
- Open Knowledge and create an article
- Add a clipboard block and write some text
- Go to Manufacturing → Operations → Manufacturing Orders
- Create a new Manufacturing Order
- Open the `Miscellaneous` tab
- In the `Additional Notes` field, click the Knowledge icon(Top right corner)
- Search and open the created article
Issue:
------
The Knowledge article does not display the
`Use As Additional Notes` action.
Cause:
------
The Knowledge clipboard integration detects compatible editable HTML fields
from the active form view through `form_controller_patch.js`.
The detection first checks whether the field:
- is part of `KNOWLEDGE_RECORDED_FIELD_NAMES`,
- is an HTML field,
- and is writable.
```
The `note` field already satisfies the first condition: const KNOWLEDGE_RECORDED_FIELD_NAMES = [
'note',
'memo',
'description',
];
```
However, the detection logic also filters out readonly fields:
```py
fields[name].type === "html" &&
!fields[name].readonly
```
In `mrp.production`, the `note` field is computed `Html` field:
```py
note = fields.Html(
string="Additional Notes",
compute='_compute_note',
store=True,
)
```
Since computed fields are readonly by default unless explicitly marked
otherwise, Odoo exposes the field as readonly at the model level.
Even though the form view contains readonly Flase:
https://github.com/odoo/odoo/blob/9b9c72cc2c2ec0f7f5a74b39a11044b5f21f5d2e/addons/mrp/views/mrp_production_views.xml#L583
the Knowledge detection relies on the model field definition rather than
the view attribute. As a result, the `note` field is filtered out and
the clipboard action is never proposed.
Fix:
-----
Mark the computed `note` field as writable by setting
`readonly=False` in the model definition.
This allows the Knowledge clipboard detection to recognize the field as
a valid editable HTML target and restores the
`Use As Additional Notes` action in Manufacturing Orders.
---
opw-6209675
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update resolves a frustrating issue where carousels would automatically cycle while users were editing website pages. The fix prevents this cycling in edit mode, ensuring a smoother and more stable editing experience. This improvement simplifies the editing process and reduces user frustration.
Original PR description
Commit [3ba3e45] paused carousels upon focus, and resumed it upon focusout. However, that behavior should be disabled in edit mode, as cycling is disabled (moving through the slides is only done manually). Otherwise, the carousel cycles and, after each slide, takes the focus, which makes editing the page a nightmare. [3ba3e45]: https://github.com/odoo/odoo/commit/3ba3e45b2ab995412e1a7ced2c46b9294dc353b8 task-6264462 Forward-Port-Of: odoo/odoo#268628 Forward-Port-Of: odoo/odoo#268046
This update fixes a bug that allowed users to validate internal transfer barcodes without scanning the destination location. Previously, deleting a line would cause validation to succeed incorrectly. The fix ensures that validation is blocked until the destination location has been scanned, improving data accuracy and preventing incorrect transfer approvals.
Original PR description
Currently, when a user deletes a line and validates internal movement in the barcode system, the system allows validation even though specifying the destination location after each scan is required.…
Currently, when a user deletes a line and validates internal movement in the barcode system, the system allows validation even though specifying the destination location after each scan is required. ## Steps to produce: - Install the Inventory module - Go to Settings and enable Storage Locations. - Inventory > Configuration > Operation Types > Internal Transfers > Barcode App - Configure the Destination Location to require scanning after each product. - Create an Internal Transfer for Pedal Bin, demand 1. - Mark the transfer as To Do and open it in the Barcode app. - Add quantity using +1, then scan the barcode for the Pedal Bin(Barcode: 6016478556493). - Delete the newly added line and attempt to Validate. ## Observed Behavior: The system should prevent transfer validation when the destination location has not been scanned and display a notification to the user, similar to the behavior before user deleted the newly added line. ## Root cause: This issue occurs because when the delete button is pressed, the deleteLine function [1] removes the line, but the deleted line becomes the selected line due to [2] being triggered before the UI updates. As a result, the selected line is now undefined. Since the selected line is undefined, it fails to meet the condition at [3] during validation. This prevents notifications from being triggered and allows the transfer to be validated before the destination location has been scanned. [1]: https://github.com/odoo/enterprise/blob/3476d15bf8e75eb6530658dd623861b60963ab40/stock_barcode/static/src/models/barcode_model.js#L826-L836 [2] : https://github.com/odoo/enterprise/blob/327d4478128f33fb2e0c477533bd4983178abf17/stock_barcode/static/src/components/line.js#L129-L133 [3]: https://github.com/odoo/enterprise/blob/6ff158ca3a6d2d2b3d285a7f8317622844811688/stock_barcode/static/src/models/barcode_picking_model.js#L945-L948 ## Solution: We can prevent users from validating if any line has an unscanned destination location when destination-location scanning is mandatory after scanning each product. To enforce this behavior, we can track whether a line has been modified and whether a destination location has been scanned and applied to that line. This allows us to identify which lines still require destination location scanning before validation can proceed. However, line state information is currently discarded and recreated on every save. As a result, information about lines that were updated and already had their destination location scanned is lost. This may incorrectly require users to rescan the destination location, even though it was previously scanned. To address this, we preserve the destination-scanned and modified state by carrying it forward from existing lines to their corresponding newly created versions using a loop. This ensures that destination location scan status is retained and users are not asked to rescan unnecessarily. opw-6069614 Forward-Port-Of: odoo/enterprise#119499 Forward-Port-Of: odoo/enterprise#113618
This update resolves an issue where reverse charge GST calculations in the Singapore localization were incorrect due to inactive child tax settings. By activating the 'TXRC-TS' and 'TXRC-ESS' child taxes, the system now accurately calculates and reports GST, ensuring correct reporting in the Singapore GST returns. This improves the accuracy of financial reporting for Singapore-based businesses.
Original PR description
#### Description of the issue/feature this PR addresses: In the Singapore localization (l10n_sg), reverse charge is modelled as a group tax pairing a -9% SRRC child with a +9% TXRC child, so the GST…
#### Description of the issue/feature this PR addresses: In the Singapore localization (l10n_sg), reverse charge is modelled as a group tax pairing a -9% SRRC child with a +9% TXRC child, so the GST on a bill nets to zero while both legs are still reported in their respective GST return boxes. The child taxes "9% TXRC-TS" and "9% TXRC-ESS" shipped inactive, while their siblings "9% TXRC-N33" and "9% TXRC-RE" shipped active. Because children_tax_ids is a many2many onto account.tax (which has an active field), inactive children are filtered out of the group, so the groups "Reverse Charge - SRRC + TXRC-TS" and "Reverse Charge - SRRC + TXRC-ESS" only kept the -9% SRRC leg and computed a wrong GST amount, while leaving the +9% leg out of the GST return. #### Current behavior before PR: A vendor bill of S$10,000 taxed with "Reverse Charge - SRRC + TXRC-ESS" (or "+ TXRC-TS") shows 9% GST = -S$900.00 and a total of S$9,100.00 instead of net S$0.00 / S$10,000.00. The +9% TXRC leg never reaches Box 5 / Box 7 of the GST return. The sibling groups "+ TXRC-N33" and "+ TXRC-RE" are unaffected because their children are active. The only workaround is to manually activate the two child taxes. #### Desired behavior after PR is merged: The "9% TXRC-TS" and "9% TXRC-ESS" child taxes are active by default, so the group taxes aggregate both legs: a S$10,000 bill shows 9% GST = S$0.00 with a total of S$10,000.00, and both reverse charge legs land in their GST return boxes. New SG databases get this from the tax template; existing SG databases get the two taxes reactivated by a migration on upgrade. opw-6199248 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#267670
This update resolves an issue causing crashes in the website editor when rendering a large number of custom website snippets. The fix ensures a clean template cache is used during compilation, preventing errors related to outdated template data. This improves the overall stability and reliability of the website editor for users.
Original PR description
Steps to reproduce: - Ensure you're not in dev mode(`--dev xml` disabled) - Create ≈200 custom website snippets - Go into website edit mode - Traceback appears Because of the high number of snippets,…
Steps to reproduce: - Ensure you're not in dev mode(`--dev xml` disabled) - Create ≈200 custom website snippets - Go into website edit mode - Traceback appears Because of the high number of snippets, rendering the snippets templates exceeds the 1024-entry template cache limit. Earlier compiled templates are evicted from the LRU cache and may need to be processed a second time during the same render. The second compilation reuses the etree stored in the transaction preload cache. As this etree was already consumed by the first compilation, the resulting output can contain empty snippet wrappers and crash the website editor. This commit always copies preloaded etrees before compilation so the transaction cache retains a clean tree that can safely be processed again after an eviction. A fix was already done for the same error in [1], where it was only done for dev mode. opw-6230580 opw-6270833 opw-6276599 [1]: https://github.com/odoo/odoo/commit/f04a5cfee1a5c43824b04dec89712414b79e6cff Forward-Port-Of: odoo/odoo#268550
A recent issue prevented the correct generation of PDF reports when fillable forms were completely empty. This update fixes a technical error that caused a crash when attempting to create a PDF with no data, ensuring reports are always generated correctly. This improves the reliability of our PDF output.
Original PR description
Version: 19.0 Issue: - Uploading a fillable PDF with no filled-in values caused an error. Cause: - When all form fields are empty, nothing is drawn on the ReportLab overlay canvas, producing a 0-page PDF. - Calling getPage(0) on an empty page list raised an IndexError. Fix: - Skip the page merge when the overlay has no pages to avoid the IndexError on empty fillable forms. Forward-Port-Of: odoo/enterprise#119677
This update fixes an issue where credit limit warnings were incorrectly triggered when customers received bank payments. The system now accurately calculates outstanding balances by including bank payments, ensuring warnings only appear when limits are genuinely exceeded. This improves financial reporting and prevents unnecessary alerts for customers.
Original PR description
Before this fix: The credit limit warning calculation only considered credit notes but ignored outstanding bank payments when computing the partner's effective outstanding balance. For example, if a…
Before this fix: The credit limit warning calculation only considered credit notes but ignored outstanding bank payments when computing the partner's effective outstanding balance. For example, if a customer had a credit limit of 1,000 and an invoice of 2,000 was created, then a bank payment of 1,500 was received, the warning would still incorrectly appear showing the customer exceeded their limit (2,000 > 1,000), even though the actual outstanding amount was only 500. After this fix: The credit limit warning now properly includes outstanding bank payments in the calculation. Two cases are handled: - Bank payments received but not yet matched to any invoice, these are identified by their open suspense account entry and deducted from the partner's outstanding exposure. - Bank payments already matched to the invoice, the reconciled amount is read from the invoice's receivable line and deducted accordingly. So with this fix, after a 1,500 bank payment, the system correctly recognises the outstanding amount as 500 and does not show a warning since it is within the 1,000 credit limit. task-5427613 Forward-Port-Of: odoo/enterprise#119785 Forward-Port-Of: odoo/enterprise#118957
This update corrects a bug in the account reports module that caused the growth comparison percentage to fluctuate when users switched the order of reporting periods. The fix ensures the calculation remains consistent regardless of the period order, providing more reliable financial reporting. This improves the accuracy of growth analysis.
Original PR description
The feature had originally been implemnted at a time where the period_order couldn't be modified, and always corresponded to what we call 'descending' now. Because of that, we assumed the column at index 0 was always the most recent period ; which caused the growth comparison percentage to change when switching period order. Forward-Port-Of: odoo/enterprise#119280 Forward-Port-Of: odoo/enterprise#118835
This update resolves an issue where users were locked out of the documents list view after attempting to edit a row and clicking away without saving. The fix ensures the view correctly exits edit mode, allowing users to continue working without interruption. This improves user experience and prevents data loss.
Original PR description
Problem: When a user selects a row, attempts to edit a cell, and then clicks away without saving, the view becomes unusable. The selected row remains highlighted, and the system prevents the selection of other lines. The user is locked out until they click the "Save" or "Discard" buttons. Cause: The UI becomes stuck in edit mode. The `onGlobalClick` event handler within `documents_list_renderer` was missing the method call to exit edit mode. Solution: Updated `onGlobalClick` to correctly trigger the method to leave edit mode. task-6059836 Forward-Port-Of: odoo/enterprise#119594 Forward-Port-Of: odoo/enterprise#113000
This update corrects a bug where changes to the UrbanPiper provider state on the Ticket Screen weren't reflected correctly. The fix ensures that order filters update dynamically when the provider state is changed, preventing outdated information and improving the accuracy of order reviews. This improves the reliability of the UrbanPiper integration.
Original PR description
Steps to Reproduce ------------------------- - Install Point of Sale and configure UrbanPiper. - Open a POS session and select a provider state from the notification popup to review orders. - While on the Ticket Screen, select a different provider state to review other orders. Issue ------- - Orders are not updated according to the newly selected state. - Previously applied filters remain unchanged. Cause -------- - Since the user is already on the Ticket Screen, changing only the provider state does not trigger a re-render. - The page was already rendered with the old filters. Fix ---- - The Ticket Screen is first switched away and then re-rendered. - This forces the screen to reload with the updated state and filters. Task: 6079663 Forward-Port-Of: odoo/enterprise#119735 Forward-Port-Of: odoo/enterprise#104546
This update resolves an issue impacting payroll calculations for employees in Belgium using the 'eco' cheque system. The fix ensures accurate processing of these payments, addressing a previous error that caused incorrect amounts to be generated. This update improves the reliability of payroll processing for our Belgian customers.
This update resolves a problem with the calculation of Belgian eco vouchers (eco cheques) within the Odoo Enterprise system. The fix ensures accurate processing of these payments, addressing a previous error that could have resulted in incorrect financial reporting. This improves the reliability of payroll processing for businesses using the Belgian localization.
This update addresses a change in how Chrome 148 displays Sundays when using the th_TH locale. The code has been adjusted to accommodate the browser's updated Intl API, ensuring consistent and accurate date formatting for Thai users. This resolves a minor visual discrepancy.
Original PR description
Chrome 148 changed the display format for Sundays in the th_TH locale. This commit modifies the test to expect either the full or abbreviated day name, depending on what the browser Intl API actually returns. Forward-Port-Of: odoo/enterprise#119708
This update resolves a test failure caused by incorrectly formatted data being passed to the system. Specifically, raw PDF content was mistakenly treated as base64, leading to an error. This fix ensures that data is correctly encoded, improving test reliability.
Original PR description
This commit fixes an error when running the `test_employee_job_change` test on Python 3.14, which is stricter about base64 validation. Ultimately, the root issue was that raw PDF content was being passed when a base64 representation was actually expected (which is obviously invalid base64). runbot-938173 Forward-Port-Of: odoo/enterprise#119786 Forward-Port-Of: odoo/enterprise#118523
This update optimizes how Odoo identifies default suppliers for purchase orders, significantly speeding up the process. The change eliminates a performance bottleneck that caused delays in order processing, resulting in faster order fulfillment. The improvement was achieved by streamlining the supplier selection logic.
Original PR description
Currently, computing effective_vendor_id and supplier_id_placeholder presents N+1 query issues. Since every call to _get_default_rule() eventually triggers a _read_group() in _search_rule_for_warehouses(). However we can get rid of this entirely, since the subsequent call to _get_matching_supplier() with an empty values dict depends entirely on the product and not the rule. Benchmark web_search_read by effective_vendor_id on 12,000 orderpoints | |Query Count|Exec Time| |------|-----------|---------| |Before|15,519 |17.46s | |After |722 |3.21s | opw-6186351 Forward-Port-Of: odoo/odoo#268315