Daily updates from Odoo
Navigate
Branch
Monday, January 26, 2026
264 changes
7 changes
Resolved issues and error corrections
This update resolves an issue that occurred when upgrading Odoo with the l10n_id module installed. The migration script was incorrectly creating extra tax lines, leading to errors. This fix ensures a smoother and more reliable upgrade process for users with the l10n_id module.
Original PR description
Encountered an issue during upgrade from v16 with existing l10n_id installed on the DB. The script will try to force create the tax and create extra `repartition_line_ids` which is causing multiple "base" line to be added and trigger the `ValidationError`. Upgrade request: [3442445](https://upgrade.odoo.com/odoo/request/3442445) Upgrade task: [5314508]( https://www.odoo.com/odoo/70/tasks/5314508) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237897
This update resolves a technical issue causing errors when creating multiple companies with Sri Lanka settings. The problem stemmed from duplicate tax IDs in the accounting data, which incorrectly linked company records. This fix ensures accurate company setup and avoids data inconsistencies.
Original PR description
**STEP TO REPRODUCE** 1. create a company, and set country to Sri Lanka. 2. create a 2nd company, and do the same. 3. There is a company inconsistencies error. **CAUSE** There is 2 taxes defined in `account.tax-lk.csv` with `.` in their id. This messes up with the function `company_xmlid()`: we end up loading the `account.tax` record of the 1st company when saving the 2nd company. opw-5473952 Forward-Port-Of: odoo/odoo#245244
This update resolves an issue where the Point of Sale 'Settle Due' feature was blocked when ZATCA integration was enabled. The fix prevents the system from incorrectly forcing an invoice, allowing users to properly complete settlement payments without needing to create a new invoice for ZATCA.
Original PR description
## Dependent PR https://github.com/odoo/enterprise/pull/98463 ## Description of the issue/feature this PR addresses: Users are blocked when trying to use the **Settle Due** feature in Point of Sale…
## Dependent PR https://github.com/odoo/enterprise/pull/98463 ## Description of the issue/feature this PR addresses: Users are blocked when trying to use the **Settle Due** feature in Point of Sale if the ZATCA (l10n_sa_edi_pos) integration is enabled. ## Current behavior before PR: When a PoS order is created using a "Pay Later" payment method, an invoice is correctly generated and sent to ZATCA. However, when the user later tries to settle that customer's due balance (using the **Settle Due** option), the l10n_sa_edi_pos module incorrectly forces the Invoice option to be enabled and makes the field read-only. This blocks the user because: - Settlement orders do not contain any lines, so a new invoice cannot be generated. - The original invoice was already sent to ZATCA, and the settlement payment should not be sent as a new e-invoice. Thus, the user cannot proceed with the settlement. ## Desired behavior after PR is merged: After this fix, the **Invoice** checkbox will no longer be forced or marked as read-only during **Settle Due** operations. The field will default to False, aligning with standard Odoo behavior for settlements and allowing the user to complete the payment. task-5144679 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#244654 Forward-Port-Of: odoo/odoo#233769
This update resolves an issue where a Point of Sale order incorrectly remained flagged as a 'settlement' after a user cancelled a payment attempt. By resetting the order flag, this prevents users from bypassing important business rules related to invoicing and reporting. This ensures accurate order processing and compliance.
Original PR description
## Description of the issue/feature this PR addresses: The `is_settling_account` flag on a Point of Sale order is not reset to False if the user cancels a **Settle Due** operation. ## Current…
## Description of the issue/feature this PR addresses: The `is_settling_account` flag on a Point of Sale order is not reset to False if the user cancels a **Settle Due** operation. ## Current behavior before PR: When a user initiates a **Settle Due** payment for a customer, Odoo creates a new order and sets the `is_settling_account` flag to True. If the user proceeds to the payment screen but then navigates back (to the product screen) instead of completing the payment, the flag remains True. This is problematic because the user can then add regular products to this same order and check out. The order is processed as a normal sale, but it is incorrectly flagged as a settlement, which can lead to error on codes depending on this. ## Desired behavior after PR is merged: After this fix, if a user leaves the payment screen during a **Settle Due** operation, the `is_settling_account` flag on the order will be correctly reset to False. task-id - 5144679 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/enterprise#104866 Forward-Port-Of: odoo/enterprise#98463
This update resolves an issue where applying text colors to lists in the HTML editor didn't correctly color the list markers. The fix ensures that text color classes remain on list items, resulting in consistent and accurate color matching for list markers. This improves the overall user experience when formatting lists.
Original PR description
### Steps to reproduce: - Create a list and type some text. - Press Ctrl + A and apply a text color from the toolbar. - Observe that the list marker is not colored. ### Description of the issue/feature this PR addresses: - `getFonts` looked for the closest element with a text color class, and this also matched `<li>` elements. When a `<li>` was selected, its text color class was removed and moved to a new <font> element created inside the `<li>`. - As a result, the color class was removed from the list item itself, which broke list marker coloring. ### Desired behavior after PR is merged: - Text color classes remain on list item, so list markers are colored correctly. task-5454639 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243005
This update fixes a bug that prevented customers with names like "constructor" from being correctly processed in reporting. The change avoids issues with object initialization, ensuring customer names can be used without causing errors. This improves the reliability of customer reporting features.
Original PR description
Steps:
- Have a customer named "constructor" (or any valid json prototype key value)
- Install `sale_management`
- Create a sale order with "constructor"
- Open Reporting -> Customers
- Traceback `Caused by: TypeError: groupedDataPoints[key].push is not a function`
This problem occurs because we use the client name directly in an object, and “constructor” already exists in all objects but is not initialized correctly, which raises a traceback.
One solution is to use `let object = Object.create(null)` instead of `let object = {}`, which prevents inheritance of `Object.prototype` properties.
https://github.com/odoo/odoo/blob/5e74f04ff35ed3efa25be295567be41f42024692/addons/web/static/src/views/graph/graph_model.js#L451-L457
opw-5474691
Forward-Port-Of: odoo/odoo#245369
Forward-Port-Of: odoo/odoo#245206This update resolves a bug where self-order kiosks were printing blank tickets. The fix ensures that preparation printers without categories are not used for printing, aligning with the expected behavior of the self-order system. This prevents unnecessary printing and improves the kiosk experience.
Original PR description
Before this commit: To reproduce (version 17 and >): 1. Install Restaurant 2. In PoS restaurant config allow "Self ordering" in Kiosk mode and enable "Preparation printers" 3. Create a preparation printer with NO categories and set it as a restaurant preparation printer 4. Open the Kiosk 5. Make an order with any product and checkout -> Printer will print a ticket with no product <img width="512" height="415" alt="image" src="https://github.com/user-attachments/assets/31bd08f9-2470-4f72-9e3d-822564b43f70" /> After this commit: No kitchen printer is printed (expected as no category set on the kitchen printer) Forward-Port-Of: odoo/odoo#245353 Forward-Port-Of: odoo/odoo#245193
1 change
Resolved issues and error corrections
This update fixes an issue where the FedEx rate selection process was failing when the requested currency didn't match the account's currency. The fix ensures the correct 'PREFERRED' rate type is always used, preventing errors and ensuring accurate shipping cost calculations. This improves the reliability of our FedEx integration.
Original PR description
Issue ----- Commit 76196c4c5f2ff01354931df6ad615f1b2c4d9a22 introduced logic to select the rate based on the requested currency. This causes problems when the requested currency does not match the…
Issue ----- Commit 76196c4c5f2ff01354931df6ad615f1b2c4d9a22 introduced logic to select the rate based on the requested currency. This causes problems when the requested currency does not match the one set up on the Fedex account, because the 'actualRateType' gets set to payor instead of preferred for the rate's 'rateType', which means `d['rateType'] == rating_result['actualRateType']` is false, so `actual` is empty, leading to an error when doing `actual['totalNetCharge']`. Solution ----- In the request we send, we hardcode `'rateRequestType': ['PREFERRED']` so we can look for a match using 'PREFERRED' as a prefix of `rateType`. The Fedex API lists all possible values of the enum `rateType` https://developer.fedex.com/api/en-us/catalog/ship/v1/docs.html <details> <summary>Enum values as per the API</summary> "enum": [ "INCENTIVE", "NEGOTIATED", "PAYOR_ACCOUNT_PACKAGE", "PAYOR_ACCOUNT_SHIPMENT", "PAYOR_CUSTOM_PACKAGE", "PAYOR_CUSTOM_SHIPMENT", "PAYOR_LIST_PACKAGE", "PAYOR_LIST_SHIPMENT", "PAYOR_RETAIL_PACKAGE", "PAYOR_RETAIL_SHIPMENT", "PREFERRED_ACCOUNT_PACKAGE", "PREFERRED_ACCOUNT_SHIPMENT", "PREFERRED_CUSTOM_PACKAGE", "PREFERRED_CUSTOM_SHIPMENT", "PREFERRED_INCENTIVE", "PREFERRED_LIST_PACKAGE", "PREFERRED_LIST_SHIPMENT", "PREFERRED_NEGOTIATED", "PREFERRED_RETAIL_PACKAGE", "PREFERRED_RETAIL_SHIPMENT", "RATED_ACCOUNT_PACKAGE", "RATED_ACCOUNT_SHIPMENT", "RATED_CUSTOM_PACKAGE", "RATED_CUSTOM_SHIPMENT", "RATED_LIST_PACKAGE", "RATED_LIST_SHIPMENT", "RATED_RETAIL_PACKAGE", "RATED_RETAIL_SHIPMENT", "UNKNOWN" ], </details> There are only 3 possible prefixes: `PAYOR`, `PREFERRED` & `RATED`, so replacing the other 2 by `PREFERRED` should be safe. ----- Ticket: opw-5482949 Forward-Port-Of: odoo/enterprise#105156
7 changes
Resolved issues and error corrections
This update resolves a problem encountered during Odoo 18.3 upgrades when the l10n_id module was already installed. The migration script was incorrectly creating multiple tax records, leading to errors. This fix ensures a smoother and more reliable upgrade process for Odoo users with the l10n_id module.
Original PR description
Encountered an issue during upgrade from v16 with existing l10n_id installed on the DB. The script will try to force create the tax and create extra `repartition_line_ids` which is causing multiple "base" line to be added and trigger the `ValidationError`. Upgrade request: [3442445](https://upgrade.odoo.com/odoo/request/3442445) Upgrade task: [5314508]( https://www.odoo.com/odoo/70/tasks/5314508) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237897
This update fixes an issue where the TPAR report incorrectly calculated gross paid amounts for certain vendors, leading to export failures. The change ensures all relevant payment lines, including those in asset_cash accounts, are included in the report's calculations, guaranteeing accurate GST reporting.
Original PR description
Behavior before: Exporting the TPAR report could fail with an error indicating that the GST amount exceeded the gross paid for certain vendors. Some payment lines were excluded from the SQL query,…
Behavior before: Exporting the TPAR report could fail with an error indicating that the GST amount exceeded the gross paid for certain vendors. Some payment lines were excluded from the SQL query, leading to discrepancies in the report. Behavior after: The SQL query has been updated to include all relevant payment lines, including those in asset_cash accounts. This ensures that the gross paid is calculated correctly, allowing the TPAR report to be exported without errors. Root Cause: The previous query only considered asset_current and liability_current accounts, ignoring asset_cash accounts. This omission caused the gross paid amount to be understated relative to the total GST paid. Steps to Reproduce: 1. Create a vendor bill. 2. Navigate to the Bank Reconciliation page (Accounting → Dashboard → Bank Journal). 3. Create a bank statement line for the bill amount. 4. Validate the statement line with the corresponding invoice line. 5. Generate the TPAR report — the payment amount should now be correctly included. OPW: 5148697 Forward-Port-Of: odoo/enterprise#102700 Forward-Port-Of: odoo/enterprise#99874
This update fixes an issue where the tax code (9) was missing from Datev exports for expense journal entries using 19%I tax. The problem occurred due to how payment amounts were aggregated during the export process. This ensures accurate tax reporting to Datev, aligning with accounting regulations.
Original PR description
Currently, when using 19%I tax in vendor bills, the tax code (9) is shown correctly in the BU-Schlüssel section of the datev export. This however is not the case for expense journal entries. Steps to reproduce: - With DE Company setup - Create an Expense as follows: - Included taxes: 19% I - Paid by: Company - Create report > Submit to Manager > Approve > Post Journal entries - Open General Ledger and export Datev Data Issue: Tax code will be missing from the exported entry. This occurs because, when processing payment move lines, amounts and accounts are aggregated, losing track of the source tax. opw-5388791 Forward-Port-Of: odoo/enterprise#105379 Forward-Port-Of: odoo/enterprise#102548
This update fixes a bug that prevented users from creating customer records with names containing reserved words (like 'constructor'). The change uses a safer object creation method to avoid errors when handling customer names, ensuring data integrity and preventing reporting issues. This resolves a technical issue impacting customer data reporting.
Original PR description
Steps:
- Have a customer named "constructor" (or any valid json prototype key value)
- Install `sale_management`
- Create a sale order with "constructor"
- Open Reporting -> Customers
- Traceback `Caused by: TypeError: groupedDataPoints[key].push is not a function`
This problem occurs because we use the client name directly in an object, and “constructor” already exists in all objects but is not initialized correctly, which raises a traceback.
One solution is to use `let object = Object.create(null)` instead of `let object = {}`, which prevents inheritance of `Object.prototype` properties.
https://github.com/odoo/odoo/blob/5e74f04ff35ed3efa25be295567be41f42024692/addons/web/static/src/views/graph/graph_model.js#L451-L457
opw-5474691
Forward-Port-Of: odoo/odoo#245369
Forward-Port-Of: odoo/odoo#245206This update fixes an issue where the system incorrectly selected FedEx rates, leading to errors when the requested currency didn't match the Fedex account settings. By explicitly setting the rate request type to 'PREFERRED', the system now correctly identifies the appropriate rate, ensuring accurate calculations and preventing errors.
Original PR description
Issue ----- Commit 76196c4c5f2ff01354931df6ad615f1b2c4d9a22 introduced logic to select the rate based on the requested currency. This causes problems when the requested currency does not match the…
Issue ----- Commit 76196c4c5f2ff01354931df6ad615f1b2c4d9a22 introduced logic to select the rate based on the requested currency. This causes problems when the requested currency does not match the one set up on the Fedex account, because the 'actualRateType' gets set to payor instead of preferred for the rate's 'rateType', which means `d['rateType'] == rating_result['actualRateType']` is false, so `actual` is empty, leading to an error when doing `actual['totalNetCharge']`. Solution ----- In the request we send, we hardcode `'rateRequestType': ['PREFERRED']` so we can look for a match using 'PREFERRED' as a prefix of `rateType`. The Fedex API lists all possible values of the enum `rateType` https://developer.fedex.com/api/en-us/catalog/ship/v1/docs.html <details> <summary>Enum values as per the API</summary> "enum": [ "INCENTIVE", "NEGOTIATED", "PAYOR_ACCOUNT_PACKAGE", "PAYOR_ACCOUNT_SHIPMENT", "PAYOR_CUSTOM_PACKAGE", "PAYOR_CUSTOM_SHIPMENT", "PAYOR_LIST_PACKAGE", "PAYOR_LIST_SHIPMENT", "PAYOR_RETAIL_PACKAGE", "PAYOR_RETAIL_SHIPMENT", "PREFERRED_ACCOUNT_PACKAGE", "PREFERRED_ACCOUNT_SHIPMENT", "PREFERRED_CUSTOM_PACKAGE", "PREFERRED_CUSTOM_SHIPMENT", "PREFERRED_INCENTIVE", "PREFERRED_LIST_PACKAGE", "PREFERRED_LIST_SHIPMENT", "PREFERRED_NEGOTIATED", "PREFERRED_RETAIL_PACKAGE", "PREFERRED_RETAIL_SHIPMENT", "RATED_ACCOUNT_PACKAGE", "RATED_ACCOUNT_SHIPMENT", "RATED_CUSTOM_PACKAGE", "RATED_CUSTOM_SHIPMENT", "RATED_LIST_PACKAGE", "RATED_LIST_SHIPMENT", "RATED_RETAIL_PACKAGE", "RATED_RETAIL_SHIPMENT", "UNKNOWN" ], </details> There are only 3 possible prefixes: `PAYOR`, `PREFERRED` & `RATED`, so replacing the other 2 by `PREFERRED` should be safe. ----- Ticket: opw-5482949 Forward-Port-Of: odoo/enterprise#105156
This update ensures that new partners, especially those in EU countries, automatically inherit the correct default pricelist without being incorrectly assigned a specific pricelist. This resolves a previous inconsistency in how pricelists were applied to partners, improving data accuracy and simplifying partner setup.
Original PR description
Versions -------- - 18.0+ Steps ----- 1. Have a way to check the `specific_property_product_pricelist` field; 2. create a pricelist for EU countries; 3. delete all other regional pricelists; 4.…
Versions -------- - 18.0+ Steps ----- 1. Have a way to check the `specific_property_product_pricelist` field; 2. create a pricelist for EU countries; 3. delete all other regional pricelists; 4. create a new partner in a EU country; 5. create a new partner outside a EU country; 6. create a new partner without a country. Issue ----- Inconsistent behavior: - EU partner has no `specific_property_product_pricelist` value set, as it's identical to the default `property_product_pricelist`. - The other partners do have a `specific_property_product_pricelist` value set to the default value, as if a user manually assigned them. Cause ----- In the `_inverse_product_pricelist` method, the `default_for_country` pricelist is an empty recordset if the partner has no `country_id` or none of the pricelists have a country groups with the partner's `country_id` in it. Solution -------- Introduce a `_get_country_pricelist_multi` method that can be used by `_get_partner_pricelist_multi` and `_inverse_product_pricelist` to ensure that they both return the same result for any given country (including none), and use this as the `default_for_country`. > [!Note] > An alternative approach could be to replace the `_inverse_product_pricelist` method with an `onchange` method, as the docstring of the `_get_partner_pricelist_multi` method states: >> First, the pricelist of the specific property (res_id set), this one is created when saving a pricelist on the partner form view. > > This suggests a behavior that more closely resembles the purpose of an `onchange` method, instead of an `inverse`. opw-5385213 Enterprise PR: https://github.com/odoo/enterprise/pull/103116 (only modifies a test) Forward-Port-Of: odoo/odoo#245530 Forward-Port-Of: odoo/odoo#241736
This update corrects a discrepancy in a sales subscription test. The change adjusted how pricelists are ordered, initially causing a specific test to fail. The fix ensures consistent ordering based on ID, resolving the test issue and maintaining correct pricing behavior for subscription customers.
Original PR description
Versions -------- - 18.0+ Issue ----- Commit a840e4250666 changed a `sale_subscription` test as pricelist ordering was changed. Before, it was `sequence asc, id desc`, now it is `sequence asc, id asc`. However, in the updated tests, it expects the first pricelist created with sequence 4 to be before the second pricelist with sequence 2. This was only happening due to default pricelists getting set as the `specific_property_product_pricelist` if the partner has no country assigned to them. Solution -------- As the behavior is now identical for partners with or without a country assigned to them, we can resolved the test setup by giving both pricelists an identical sequence, making the ordering fall back on `id` like a840e4250666 intended. opw-5385213 Related: https://github.com/odoo/odoo/pull/241736 Forward-Port-Of: odoo/enterprise#105356 Forward-Port-Of: odoo/enterprise#103116
5 changes
Resolved issues and error corrections
This update corrects a discrepancy in a sales subscription test. The test previously incorrectly prioritized pricelists based on a default partner setting. The fix ensures consistent pricelist ordering, resolving a minor test issue and maintaining accurate subscription pricing calculations.
Original PR description
Versions -------- - 18.0+ Issue ----- Commit a840e4250666 changed a `sale_subscription` test as pricelist ordering was changed. Before, it was `sequence asc, id desc`, now it is `sequence asc, id asc`. However, in the updated tests, it expects the first pricelist created with sequence 4 to be before the second pricelist with sequence 2. This was only happening due to default pricelists getting set as the `specific_property_product_pricelist` if the partner has no country assigned to them. Solution -------- As the behavior is now identical for partners with or without a country assigned to them, we can resolved the test setup by giving both pricelists an identical sequence, making the ordering fall back on `id` like a840e4250666 intended. opw-5385213 Related: https://github.com/odoo/odoo/pull/241736 Forward-Port-Of: odoo/enterprise#103116
This update fixes an issue where the 19%I tax code (9) was missing from Datev exports for expense journal entries. The problem stemmed from how payment amounts were aggregated during the export process, leading to data loss. This ensures accurate tax reporting in Datev.
Original PR description
Currently, when using 19%I tax in vendor bills, the tax code (9) is shown correctly in the BU-Schlüssel section of the datev export. This however is not the case for expense journal entries. Steps to reproduce: - With DE Company setup - Create an Expense as follows: - Included taxes: 19% I - Paid by: Company - Create report > Submit to Manager > Approve > Post Journal entries - Open General Ledger and export Datev Data Issue: Tax code will be missing from the exported entry. This occurs because, when processing payment move lines, amounts and accounts are aggregated, losing track of the source tax. opw-5388791 Forward-Port-Of: odoo/enterprise#105379 Forward-Port-Of: odoo/enterprise#102548
This update resolves a test failure in Odoo's web_studio module caused by a missing dependency. The fix ensures that tests accurately check for the presence of required modules, preventing false failures when related modules like 'account_edi' are not included in the test setup. This improves test reliability and stability.
Original PR description
`RELATED_MODELS_TO_EXCLUDE` contains `account.edi.document`, which is installed by `account_edi`, which is neither in the `needed_modules` set nor a dependency of any of them. Therefore the test can fail because `account_edi` is not installed even though every module in the set is. Improve the test by checking that the models or fields we're checking for actually belong to the modules we've listed. Also add the missing module in the list. Forward-Port-Of: odoo/enterprise#104879
This update fixes an issue where the FedEx rate selection process was failing when the requested currency didn't match the Fedex account settings. The team has implemented a change to consistently use 'PREFERRED' as the rate type, ensuring accurate rate calculations and preventing errors.
Original PR description
Issue ----- Commit 76196c4c5f2ff01354931df6ad615f1b2c4d9a22 introduced logic to select the rate based on the requested currency. This causes problems when the requested currency does not match the…
Issue ----- Commit 76196c4c5f2ff01354931df6ad615f1b2c4d9a22 introduced logic to select the rate based on the requested currency. This causes problems when the requested currency does not match the one set up on the Fedex account, because the 'actualRateType' gets set to payor instead of preferred for the rate's 'rateType', which means `d['rateType'] == rating_result['actualRateType']` is false, so `actual` is empty, leading to an error when doing `actual['totalNetCharge']`. Solution ----- In the request we send, we hardcode `'rateRequestType': ['PREFERRED']` so we can look for a match using 'PREFERRED' as a prefix of `rateType`. The Fedex API lists all possible values of the enum `rateType` https://developer.fedex.com/api/en-us/catalog/ship/v1/docs.html <details> <summary>Enum values as per the API</summary> "enum": [ "INCENTIVE", "NEGOTIATED", "PAYOR_ACCOUNT_PACKAGE", "PAYOR_ACCOUNT_SHIPMENT", "PAYOR_CUSTOM_PACKAGE", "PAYOR_CUSTOM_SHIPMENT", "PAYOR_LIST_PACKAGE", "PAYOR_LIST_SHIPMENT", "PAYOR_RETAIL_PACKAGE", "PAYOR_RETAIL_SHIPMENT", "PREFERRED_ACCOUNT_PACKAGE", "PREFERRED_ACCOUNT_SHIPMENT", "PREFERRED_CUSTOM_PACKAGE", "PREFERRED_CUSTOM_SHIPMENT", "PREFERRED_INCENTIVE", "PREFERRED_LIST_PACKAGE", "PREFERRED_LIST_SHIPMENT", "PREFERRED_NEGOTIATED", "PREFERRED_RETAIL_PACKAGE", "PREFERRED_RETAIL_SHIPMENT", "RATED_ACCOUNT_PACKAGE", "RATED_ACCOUNT_SHIPMENT", "RATED_CUSTOM_PACKAGE", "RATED_CUSTOM_SHIPMENT", "RATED_LIST_PACKAGE", "RATED_LIST_SHIPMENT", "RATED_RETAIL_PACKAGE", "RATED_RETAIL_SHIPMENT", "UNKNOWN" ], </details> There are only 3 possible prefixes: `PAYOR`, `PREFERRED` & `RATED`, so replacing the other 2 by `PREFERRED` should be safe. ----- Ticket: opw-5482949 Forward-Port-Of: odoo/enterprise#105156
This update resolves a bug where the serial number assigned to products in delivery pickings was incorrectly updated, leading to inaccurate inventory tracking. The fix prevents changes to serial numbers when a delivery is in the 'ready' state, ensuring correct inventory management and reporting. This improves data accuracy for stock levels.
Original PR description
Steps to reproduce: - Create a storable product tracked by serial number (e.g. "P1") - Set the quantity on hand to 2 with serial numbers SN1 and SN2 - Create a delivery order - Add any product with available quantity - Mark the delivery as "To Do" -> The picking is in the `ready` state - Add a new move line with product "P1" and assign serial number SN2 -> Before saving, the quantity is correctlyupdated to 1 - Save the delivery Problem The assigned lot/serial number is unexpectedly replaced with 'SN1'. Fix: Do not update or recompute the serial/lot number when creating a move on pickings that are already in the `ready` state. opw-5385993 Forward-Port-Of: odoo/enterprise#105338
63 changes
New functionality added to Odoo
This update introduces a new Know Your Customer (KYC) process for Belgian users registering through the Peppol network, utilizing the Itsme service. This enhances security and compliance by verifying user identities before full Peppol integration, streamlining the registration process.
Original PR description
Add KYC for Belgian Peppol users through Itsme. task-5478657 Forward-Port-Of: odoo/odoo#239520
This update introduces an AI-powered system to automatically assign emission factors to emissions within the Odoo Enterprise platform. Previously, users had to manually select factors, a time-consuming process. Now, the system uses AI to streamline this task, improving efficiency and accuracy for tracking carbon emissions.
Original PR description
Before this commit, the user has to manually find the best emission factor for each emission to define which could be very long and annoying when we don't know which one to use when we import emission factor from ADEME or IPCC databases, for instance. This commit adds a way to assign the emission factor for each selected emission in the list/kanban view with AI. This new AI action runs in a cron, and an email is sent to the user when the process is finished. We also add a server action that allows the user to quickly create assignation rules from emissions (from list and kanban views). We add an action to remove the database and all its linked emission factors and sources. We add a new menu item for assignation rules, to ease creating and deleting assignation rules more easily. task-4933207
Enhancements to existing features
This update ensures Odoo correctly handles the new 11% and 21% VAT rates introduced in Romania's updated tax laws. By adding necessary tax mappings, the system now accurately reflects these changes, ensuring proper accounting and fiscal position calculations.
Original PR description
The new 11% and 21% taxes introduced with the updated Romanian VAT law were added with this commit https://github.com/odoo/odoo/commit/2026212d0f7ffc217be3c6a2ff2abe5288c18afb , but some tax mappings were missing. This commit completes the setup by adding the required tax mappings, ensuring the new rates work correctly with fiscal positions. task-5480159 Forward-Port-Of: odoo/odoo#245050 Forward-Port-Of: odoo/odoo#243452
This change updates the source of lead mining data within Odoo from Clearbit to Dun & Bradstreet. This aligns with existing data usage for partner autocomplete and ensures we're leveraging a reliable provider for improved lead insights. This update is part of a broader IAP migration.
Original PR description
Before this commit: - Lead mining data was fetched from `clearbit` provider on IAP which is now going to be removed for discovery service After this Commit: - Data will now be fetched from `dun_and_bradstreet` provider on IAP which we are already using for the `partner_autocomplete` IAP PR: https://github.com/odoo/iap-apps/pull/1274 task-4873238 Forward-Port-Of: odoo/odoo#245474 Forward-Port-Of: odoo/odoo#235521
This update enhances the reliability of electronic invoice synchronization by moving tracking of last fetched dates from configuration settings to dedicated fields within the company record in Odoo. This change improves performance and simplifies future maintenance, ensuring invoices are processed correctly.
Original PR description
To store the last fetched date in stable to allow for synchronization, config parameters were used. In master, these are now replaced with dedicated fields on the company model for better performance and easier maintenance. This commit adds dedicated fields on res.company for einvoice and earchive dates. task-5865683 Upgrade PR: https://github.com/odoo/upgrade/pull/9315
This update adjusts the font size of the 'amount due' and 'amount by guest' displays on the payment screen within the Point of Sale module. This enhancement improves readability for staff processing payments, leading to a smoother and more efficient customer checkout experience.
Original PR description
Little improvement of the font size of amount due and amount by guest on the payment screen. task: 5473324 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243733
Resolved issues and error corrections
This update removes unnecessary integer rounding from monthly Italian VAT reports. Previously, rounding was incorrectly applied, causing discrepancies in reporting. This change ensures accurate monthly VAT calculations, aligning with Italian tax regulations.
Original PR description
**Description of the issue/feature this PR addresses**: Integer rounding is only required on annual l10n_it VAT reports. It appears that it was incorrectly added to the monthly report when the two were split in #193662. **Current behavior before PR**: Integer rounding on monthly l10n_it tax reports. **Desired behavior after PR is merged**: No more integer rounding on monthly l10n_it tax reports. [opw-5292310](https://www.odoo.com/odoo/project.task/project.task/5292310) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#244389 Forward-Port-Of: odoo/odoo#243100
This update removes unnecessary integer rounding from the monthly Italian VAT reports. The rounding was mistakenly carried over from annual reports due to a previous split in the codebase. This ensures accurate VAT reporting for Italian businesses.
Original PR description
Integer rounding is only required on annual l10n_it VAT reports. It appears that it was incorrectly added to the monthly report when the two were split in [#193662](https://github.com/odoo/odoo/pull/193662). [opw-5292310](https://www.odoo.com/odoo/project.task/project.task/5292310) Forward-Port-Of: odoo/enterprise#104679 Forward-Port-Of: odoo/enterprise#103852
This update resolves an issue where website tour tests would fail after changing the header template to 'Sidebar'. The fix ensures the website builder remounts correctly before the tour proceeds, preventing the builder from resetting to its initial state and maintaining test stability.
Original PR description
When changing the header template to 'Sidebar', the loading screen disappears but the WebsiteBuilder component remounts asynchronously. If the tour proceeds to the theme tab before the remount completes, the builder resets to the Edit tab (its initial state), breaking the test flow. We wait for the builder to remount, and add `.editor_enable` class to the body of the iframe, so then nothing disrupts the flow. runbot-234504 Forward-Port-Of: odoo/odoo#245271 Forward-Port-Of: odoo/odoo#243518
This update resolves a frustrating issue where the website builder would sometimes freeze while waiting for user input in dialog boxes. The fix introduces a timeout mechanism to prevent these stalls, ensuring a smoother and more reliable experience for users building their websites. This improves the overall usability of the website builder.
Original PR description
Commit 6df83abb35c95ab42e55d9a08cf6c411efa64b3e added a timeout on operations, as an heuristic to detect when an operation is stuck. This timeout may be triggered when the action opens a dialog and wait for user choice. This commit sets `canTimeout = false` on actions that open a dialog and wait for user choice in the `apply` method. Steps to reproduce: - Open website builder - Click on "Theme" tab - Click "Add a language" - Wait a bit - Bug: It show the error message "A technical issue occurred..." task-5867364 Forward-Port-Of: odoo/odoo#245217
This update corrects a bug where multiple calls to a loyalty program processing function could overwrite important coupon information. Previously, when the system processed orders multiple times, crucial details about customer loyalty discounts were lost. This fix ensures that loyalty data is consistently recorded, improving the accuracy of customer rewards.
Original PR description
Before this commit, when syncAllOrders was called more than once, for example when there were a preparation display, the second call to postProcessLoyalty would override the new_coupon_info set by the first call, resulting in the loss of information. The second call to confirm_coupon_programs is not an issue, as it's already handled. opw-5440543 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242087
This update fixes an issue where fiscal data for Chinese credit notes wasn't appearing in the PDF reports. The fix involved ensuring the correct display of a conditional element within the report template, now correctly rendering the required financial information.
Original PR description
The fiscal data is not displayed in the credit note pdf. This is because we're relaying on a div that is conditionnally displayed in the inherited template. opw-5467583 Forward-Port-Of: odoo/enterprise#104924
This update resolves an issue where the invite input field automatically gained focus, disrupting other dialogs like the call permission dialog. Now, the input only focuses when it's active and the user's context is engaged. Additionally, a testing helper was moved to improve test reliability.
Original PR description
**Current behavior before PR:** - The invite input always tried to autofocus, in turn stealing focus from dialogs like the call-permission dialog. **Desired behavior after PR is merged:** - Autofocus only when the input exists and the context is active. - Moved `mockPermissionsPrompt` to `mail_test_helpers`. **Part of task-**[5227387](https://www.odoo.com/odoo/project/1519/tasks/5227387) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#245334 Forward-Port-Of: odoo/odoo#236248
This update improves the product information displayed in the point-of-sale system. It now shows the product's internal 'default_code' alongside its name in the product info popup. This provides additional context and traceability for sales staff and inventory management.
Original PR description
This commit adds the default_code (internal reference) to the display name of the product in the product info popup. opw-5493827 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#244068
This update resolves an issue where Odoo invoices with discounts generated for Nemhandel invoices were failing validation. The fix ensures that discounts are correctly accounted for, allowing these invoices to be properly transmitted to customers. This improves the reliability of invoice processing for Danish customers using Nemhandel.
Original PR description
Before this fix, all the OIOUBL invoices with a discount generated by Odoo would fail the schematron validation, meaning they can't be sent to the customer through Nemhandel. The schematron enforces that the discount is taken into account at the PriceAmount, to keep the rules on lineExtensionAmount working. Also changes the import to understand that it's a discount. opw-5379474 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242315 Forward-Port-Of: odoo/odoo#241614
This update optimizes how Odoo sends notifications, specifically when the system is under heavy load. By using a faster JSON serialization library, ‘orjson’, the system processes notifications more efficiently, reducing delays and improving overall responsiveness. This results in a smoother user experience.
Original PR description
When the gevent server is under high load, the time required to acquire a cursor and fetch notifications increases. This causes notifications to accumulate, leading to larger payloads. Serializing these large payloads using the standard json library becomes a bottleneck. In a gevent environment, this monopolizes the event loop, delaying the processing of other greenlets. This commit introduces optional support for `orjson`. If installed, it is used to significantly speed up JSON encoding, freeing up the event loop. Using `orjson` increases the throughput by ~20% under high load. Forward-Port-Of: odoo/odoo#245307 Forward-Port-Of: odoo/odoo#241601
This update re-enables key test tours within the MRP Workorder module, ensuring proper functionality testing. A dedicated test company was created to isolate these tests from demo data, and a helper method was added for easier setting enablement. This resolves a previous issue preventing these tests from running correctly.
Original PR description
This PR does 2 things: ## Create a test company Add a company dedicated to TestShopFloor's tests so those tests won't be affected by demo data anymore. ## Enable tours Until then, 10 tours related to Shop Floor were skipped after [a refactor of the Shop Floor](https://github.com/odoo/enterprise/pull/80469) design and functionality. This PR re-enables 7 of these 10 tests tour (3 remaining need more work to pass when demo data are installed.) Also it adds a test helper method, `_enable_settings`, to enable wanted setting(s) easily. [task-5365014](https://www.odoo.com/odoo/966/tasks/5365014) Forward-Port-Of: odoo/enterprise#105117 Forward-Port-Of: odoo/enterprise#88338
A recent test for our live chat feature was intermittently failing due to a timing issue. This update increases the test's waiting period, allowing it to reliably process notifications even under heavy load. This ensures the live chat test remains stable and provides consistent results.
Original PR description
The `Only two quick actions are shown` live chat test awaits the first posted message because to avoid conflict with the reaction being added afterwards. To do so, the test uses the `waitForSteps` helper. However, during high load, 200ms might be too short to receive the notification, leading to the test failing. This commit increases the timeout. runbot-237587 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#245421
This update resolves an intermittent error that occurred when printing multiple receipts quickly via USB. The fix prevents multiple threads from accessing the printer simultaneously, ensuring reliable ESC/POS printing and eliminating fallback to CUPS. This improves the overall stability of receipt generation.
Original PR description
When printing many receipts quickly using a USB printer, this error was occasinally occuring: ``` WARNING ? odoo.addons.iot_drivers.iot_handlers.drivers.printer_driver_base: Failed to query ESC/POS…
When printing many receipts quickly using a USB printer, this error was occasinally occuring: ``` WARNING ? odoo.addons.iot_drivers.iot_handlers.drivers.printer_driver_base: Failed to query ESC/POS status ERROR ? root: Could not set configuration: [Errno 16] Resource busy ``` This would cause `python-escpos` to be disabled and fallback to just CUPS printing. The issue was caused by two threads trying to access the printer at the same time, which could happen in two ways: - IoT thread with `python-escpos` and CUPS try to access the printer at the same time. - Two IoT threads with `python-escpos` try to access the printer at the same time (this can happen if two receipt actions are received at the same time). Both of these scenarios should now prevented: - Now, if we are using `python-escpos`, we also use it to print the receipt as well as checking the status. CUPS is never used so there should be no interference from it. - We now have an `escpos_lock` (per printer, not global) that is acquired when accessing the printer via `python-escpos`. This ensures that different threads cannot both try to access the printer at the same time. task-5490942 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#245122 Forward-Port-Of: odoo/odoo#244031
This update corrects a bug in how Odoo calculates product values for AVCO products after a stock valuation adjustment. Previously, adjustments resulted in inflated unit costs and total values. The fix ensures accurate valuation calculations for these products, preventing financial discrepancies.
Original PR description
**Steps to reproduce:** - Create a storable product "P1" - Product category: AVCO - Create a purchase order with 100 units of P1 at $10 - Confirm the PO and validate the receipt - Go to Inventory ->…
**Steps to reproduce:**
- Create a storable product "P1"
- Product category: AVCO
- Create a purchase order with 100 units of P1 at $10
- Confirm the PO and validate the receipt
- Go to Inventory -> Reporting -> Stock
- P1 unit cost is $10 and total value is $1000
- Click on $1000
- Select the first stock move
- Action -> Adjust valuation
- New value: $2000 -> Save
- Go back to Inventory -> Reporting -> Stock
**Problem:**
- The unit cost becomes $2,000 and the total value $200,000
When a valuation adjustment is made on an AVCO product, a `product.value`
record is created with the new total valuation value.
However, `product.value.value` can represent two different things:
- for a standard price update, `value` contains the new unit cost
- for a stock move valuation, `value` contains the total value of the move
When `run_avco` processes a `product.value` coming from a move valuation,
it incorrectly treats the value as a unit price and multiplies it by
the quantity
opw-5460829
Forward-Port-Of: odoo/odoo#244957This update resolves an issue preventing grouping within the planning module's slot templates. The fix ensures that parameters are passed to the underlying method in the correct order, enabling proper data aggregation. This improves the functionality of the planning system.
Original PR description
Before this commit, it was impossible to group by on any field in `planning.slot.template` model, because the parameters given to the parent method of `formatted_read_group` method were not given into the right order. This commit makes sure the order is respected. Forward-Port-Of: odoo/enterprise#105211
This update resolves an issue where the system would crash when users attempted to upload corrupted or encrypted PDF files for quotation document headers and footers. The fix prevents errors related to PDF reading and decryption, ensuring users can now successfully upload valid PDF files without causing the system to fail.
Original PR description
Currently, an error occurs when uploading `encrypted or incomplete` PDF files (missing EOF marker) while creating a quotation document header or footer. **Steps to reproduce:** - Install the…
Currently, an error occurs when uploading `encrypted or incomplete` PDF files (missing EOF marker) while creating a quotation document header or footer. **Steps to reproduce:** - Install the `sale_pdf_quote_builder` module. - Navigate to: Sales > Configuration > Headers/Footers. - Upload encrypted file [1], or incomplete file [2]. **Error:** `PyPDF2.errors.DependencyError: PyCryptodome is required for AES algorithm` `PyPDF2.errors.PdfReadError: EOF marker not found` **Root cause:** At [3], `_get_form_fields_from_pdf` and `_ensure_document_not_encrypted` directly call `pdf.PdfFileReader`, when it fails to read or decrypt the file, Python raises an error. **Fix:** This commit prevents errors when users upload unreadable or encrypted PDF files. [1]: https://drive.google.com/file/d/1moSlwXHkqcV6_7zHBNhLMLi-9Ye_xDGJ/view?usp=sharing [2]: https://drive.google.com/file/d/16O4LLH8dL0RWmbOx4HrcooFUyesWaVi-/view?usp=sharing [3]: https://github.com/odoo/odoo/blob/694f1d0fb03b56dd41a59eb676e56622634cc91b/addons/sale_pdf_quote_builder/utils.py#L11 sentry-6928220164 opw-5227601 Forward-Port-Of: odoo/odoo#245264 Forward-Port-Of: odoo/odoo#230712
A technical error prevented the creation of a key email template when rental orders were present. This fix moved a necessary method to the `sale_renting` module, ensuring template validation works correctly regardless of whether the rental module is installed. This resolves a potential issue with e-commerce order emails.
Original PR description
The mail template `mail_template_sale_cart_recovery` creation fails in some cases if there is a rental order in the database. Indeed, during a template creation, the first record of the corresponding model is used to validate the template validity. In this case, the template is only meant for e-commerce orders and there won't be any e-commerce rental order without `website_sale_renting` but the validation is not aware of functional specificities, leading to a traceback because the method `_get_rental_pricing_description` doesn't exist when only `sale_renting` and `website_sale` are installed. To avoid this error, we move the method to `sale_renting`, even though there is no real life flows where this was breaking (except templates validation ofc). Was fixed first with c3f5dafa23a8b1fd36eaedd83a575b717e5e9377 but moved back into `website_sale_renting` by mistake with fd1d7f91e7e60a20a5401201ff89a7e875faad82 Forward-Port-Of: odoo/enterprise#105318
This update resolves an issue where shared subfolders within the Documents app weren't initially displayed correctly for users accessing them through a link. The fix ensures that subfolders are immediately accessible upon initial loading, eliminating the need for a refresh or multiple clicks to view them. This enhances the user experience for sharing and accessing documents.
Original PR description
**Steps to reproduce:** - Create a portal user - Go to the documents app - Click on the marketing folder - Share the marketing folder through a link (Anyone with a link = viewer + discoverable) -…
**Steps to reproduce:** - Create a portal user - Go to the documents app - Click on the marketing folder - Share the marketing folder through a link (Anyone with a link = viewer + discoverable) - Copy the share link - Login with the portal user in an incognito window - Paste the share link in an incognito browser - Click on "brand 1" folder, result nothing is showing while there should be a folder and a picture - Click on "brand 2" - Click back on "brand 1" and now the folder and picture are visible - If you click on a subfolder of "brand 1" you also get an error **Issue:** Discoverable subfolders accessed using `accessToken` are not available on the first read of a user and this happens for each level of the hierarchy (refresh is needed each time). When using sharing link to display folders with a user, the subfolder document access is created on `/documents/touch/` using `_from_access_token`. But on the js side the call is delayed (with debounce) and occurs after the `web_search_read`. This means that subfolders are only accessible after a refresh or by switching back and forth between folders. Also, even after the folder is displayed, if there are other subfolders in it, going deeper in the hierarchy won't work as well without a refresh due to the `search_panel_select_range` missing the new folder. **Fix:** Not sure on the best way to fix this, the issue will always be related to performance. Current fix checks if a reload is needed by sending a flag in the `/documents/touch/<access_token>` request result when a new document access was created. opw-5156297 Forward-Port-Of: odoo/enterprise#104845 Forward-Port-Of: odoo/enterprise#99820
This update corrects a bug where the price of reward items was incorrectly reset to zero after multiple reward clicks. The fix ensures that the reward line's unit price accurately reflects the product's original sale price, maintaining correct calculations for discounts and totals. This improves the reliability of reward programs.
Original PR description
### Issue: Due to this issue, by clicking twice on `Reward` button on SO, reward line unit price will be reset to zero. #### To reproduce: 1- Create a `Buy X Get Y` program: rule: minimum quantity:…
### Issue: Due to this issue, by clicking twice on `Reward` button on SO, reward line unit price will be reset to zero. #### To reproduce: 1- Create a `Buy X Get Y` program: rule: minimum quantity: 3, product: `Large Desk Wood` reward: 1 `Large Desk Wood` for free 2- Create a SO, and add a line with 3 `Large Desk Wood` 3- Click on `Reward` button. A new line should be automatically created. The unit price should be the product sale price and line `Amount` should be 0. 4- Re-click on reward. The reward line price unit is set to zero. Expected: The reward line price unit should remain as product sale price with a discount of 100 and line.amount of 0. ### Cause and Fix: In `_reset_loyalty`, price_unit is set to zero. The method `compute_amount` depends on `price_unit`, which means setting `price_unit` will make amount to be recomputed: https://github.com/odoo/odoo/blob/4fa9f9b849016f312efcb73f9a76b223e429aec0/addons/sale/models/sale_order_line.py#L843-L844 https://github.com/odoo/odoo/blob/4fa9f9b849016f312efcb73f9a76b223e429aec0/addons/sale/models/sale_order_line.py#L848 https://github.com/odoo/odoo/blob/4fa9f9b849016f312efcb73f9a76b223e429aec0/addons/account/models/account_tax.py#L1613 Which leads to `_compute_price_unit`. In this compute, the unit price will not be recomputed if `technical_price_unit` and `price_unit` differ. https://github.com/odoo/odoo/blob/4fa9f9b849016f312efcb73f9a76b223e429aec0/addons/sale/models/sale_order_line.py#L606-L611 https://github.com/odoo/odoo/blob/4fa9f9b849016f312efcb73f9a76b223e429aec0/addons/sale/models/sale_order_line.py#L588-L595 So IMO if we want to recompute `price_unit`, we need to also reset `technical_price_unit` in `_reset_loyalty`. opw-5467623 Forward-Port-Of: odoo/odoo#244290
This update removes the Sign menu item from Odoo's Discuss channels. Previously, this menu was incorrectly displayed, which was confusing for users. This change ensures Discuss channels function as intended, focusing on mail threads instead of sign requests.
Original PR description
Currently, the Sign menu item is displayed in discuss channels, which is not making sense. This was due to an incomplete check in the isDisplayed method of the SignRequestCogMenu component. To fix this, we enhance the condition to ensure that the menu item is not displayed when the current model is 'discuss.channel'. Discuss channels inherently support mail threads, but should not have the Sign menu item. task-5494751 Forward-Port-Of: odoo/enterprise#105201
This update resolves a bug where changes to the source lot location during barcode delivery weren't being saved correctly. Now, when you update the source location, the system will re-prompt you to confirm the change and display the new location. Additionally, the system now only shows active lot locations for editing, improving efficiency.
Original PR description
This PR fixes the bug of not making the source location persistent when changing it from the form view. To reproduce the bug: 1- Create a product tracked by lot. 2- Create 3 different lot locations…
This PR fixes the bug of not making the source location persistent when changing it from the form view. To reproduce the bug: 1- Create a product tracked by lot. 2- Create 3 different lot locations with each having a quantity of 100. 3- Create an out delivery of 140 and notice 100 are assigned from the first lot and 40 are assigned from the second lot. 4- Set the scanning source location to be mandatory in Barcode for deliveries. 5- Go to Barcode app, navigate to the delivery, you find it mandatory to scan a source location. 6- Scan the source location for the first lot location, choose the product and click on the edit pen icon. 7- Choose another lot location as your source location, let it be the third lot location and confirm. 8- Choose to assign the qty by clicking on the +100 button. = See that the new chosen source location is not persistent. The fix: After this PR, if you follow the steps up to step 7 and after you confirm your new source location, the Barcode makes the lines inactive again and asks you to scan the source location (since it's mandatory) and it also shows the new source location on the line. Another fix this commit addresses is that when you scan a source location, only the lines with this location are active to choose/edit not all the lines. Task-4809491 Forward-Port-Of: odoo/enterprise#97777
This update resolves an issue where the l10n_cl_edi module was incorrectly creating duplicate vendor bills when receiving identical XML invoices via the incoming mail server. The fix prevents duplicate bill creation, ensuring accurate record-keeping and avoiding potential accounting discrepancies. This addresses previous support tickets opw-5362664 and opw-5409700.
Original PR description
Steps to reproduce: - With a CL Company setup - Configure an incoming mail server with DTE server option enabled - In Vendor Bills journal, enable 'Use Documents?' - Receive the same XML twice via the incoming mail server - Check created vendor bills Issue: There will be duplicated bills. Each duplicate will show the message 'E-invoice already exist: nnnnn' However, the system should avoid duplicates from being created. opw-5362664 opw-5409700 Forward-Port-Of: odoo/enterprise#103211
This update corrects a payroll calculation issue related to the import of single canton tax rates for Switzerland (l10n_ch_hr_payroll). Specifically, it adapts the import process to accurately reflect the 2026 tax regulations, ensuring correct payroll calculations for businesses operating in multiple cantons.
Original PR description
Forward-Port-Of: odoo/enterprise#104991 Forward-Port-Of: odoo/enterprise#104333
This update resolves a visual bug where email columns would overflow when using a specific layout configuration. The fix prioritizes using 'md' column variants for desktop layouts, ensuring consistent column alignment and a better email presentation. This improves the overall user experience for email communications.
Original PR description
### [FIX] mail: properly handle col overflow in bootstrap row Problem: The grid conversion logic only finalized a row when iterating through the last column in the input list. If a row reached…
### [FIX] mail: properly handle col overflow in bootstrap row Problem: The grid conversion logic only finalized a row when iterating through the last column in the input list. If a row reached exactly 12 grid spans while more columns remained (e.g., a `col-12` in the middle), the logic did not start a new row. As a result, remaining columns overflowed the current row visually. Cause: In a single row, if a column had a size 12 and was followed by another column of any size, it would crash because the algorithm did not reset the index to the start of the next row. Steps to reproduce: - Add a Marketing block. - Reduce the size of the left card from the left side.<img width="719" height="580" alt="image" src="https://github.com/user-attachments/assets/1e62eaf7-6ab1-4120-b643-62427ce3ec3a" /> - Save. - Traceback. ### [FIX] mail: ensure -md variant of col and offsets are prioritized Prior to this commit, if an element had a mix of `col-x` and `col-md-y` classes, the regexes used in `convert_inline` would not guarantee that they would be used consistently. How to reproduce: - create a new mailing and add the "three columns" snippet - resize from the right the middle column (reduce the size and revert back to the original size) Issue: - when sending the email, the columns are not aligned horizontally in a desktop layout Solution: Prioritize usage of `-md` variants to compute the size of a column/offset, when available (these are the one used by the mass_mailing editor for desktop mode), and use any otherwise. opw-5439481 Co-authored-by: Damien Abeloos <abd@odoo.com> Co-authored-by: Thomas Josse <thjo@odoo.com> Co-authored-by: Walid Sahli <wasa@odoo.com> Forward-Port-Of: odoo/odoo#241851
This update resolves an issue where Odoo could encounter errors due to invalid IDs used when browsing data. The fix adds a filter to ensure all IDs are valid before processing, preventing a potential crash. This improves stability and reliability of Odoo trials.
Original PR description
Since https://github.com/odoo/odoo/pull/227477, using falsy ids ids illegal This commit adds an additional filter to the domain used to browse `ir.model.data` to compute the following fields:…
Since https://github.com/odoo/odoo/pull/227477, using falsy ids ids illegal
This commit adds an additional filter to the domain used to browse `ir.model.data` to compute the following fields: `(menus|views|reports)_by_module` in order to avoid selecting any that would contain a falsy `res_id` and thus cause the above-mentioned assertion to fail.
One way to reproduce this in a new trial:
- Create a new trial with several modules: `account`, `crm`, `project`, `sales`
- Install `web_studio`
- Uninstall `base_automation`
- Traceback
```
File “/home/odoo/src/odoo/saas-19.1/odoo/orm/models.py”, line 5200, in browse
assert all(ids) or all(isinstance(x, NewId) or x for x in ids), “Invalid falsy real id”
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: Invalid falsy real id
```
This is due to an `ir.model.data` containing a falsy res_id in the internal code of `saas_trial` (`installed-17`)
This fix will avoid any additional traceback like this one.
opw-5865316
Forward-Port-Of: odoo/odoo#245469This update resolves a problem where a test tour for tax reports failed when specific localization modules weren't installed. The fix involved adjusting how the tour handles date calculations and ensuring it correctly identifies the appropriate tax report type based on the company's configuration. This ensures the test tour runs reliably across different Odoo environments.
Original PR description
- The tour shouldn't run if a localization with 'Tax Report' for the country is not installed (i.e. l10n_us_account) - Dynamic Javascript dates calculation don't mix well with Python's freeze_time running in the "No future" 2026 preparation build, so I froze the time in the Python test but resorted to hardcode the Javascript dates. - No need to check the position of the column "Column 1". In debug mode for the tour, there will be the "Debug" column where the info about the computations are shown, so it won't be the last. We just need to see that it shows, after all. Runbot error [link](https://runbot.odoo.com/odoo/error/234624) runbot-234624 Forward-Port-Of: odoo/enterprise#101689
This update resolves a bug where loyalty trigger products wouldn't load correctly into the Point of Sale (PoS) when assigned to a different company. The fix ensures that all associated products are now properly displayed, improving the functionality of loyalty programs within the PoS system. This change was made to prevent lost sales and ensure accurate product availability for customers.
Original PR description
Before this commit, if a loyalty trigger product was assigned to another company, non of the products would be loaded in the PoS. opw-5499108 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243993
This update corrects a display issue in the Barcode application where the inventory count badge incorrectly showed requests from one company even when no count existed for another. The fix ensures the badge accurately reflects the current inventory count for the company currently being viewed, improving data accuracy and reporting.
Original PR description
Steps to reproduce: - Create two companies (A and B) - Create a storable product "P1" - Log in with company A - Update the on-hand quantity of P1 in company A only - From Physical Inventory, request an inventory count for P1 - Switch to company B - Open the Barcode application Problem: The inventory count badge in the Barcode main menu displays a request count created for company A, even though no inventory count exists for company B. The badge incorrectly shows "1" instead of "0". opw-[5472031](https://www.odoo.com/web#id=5472031&view_type=form&model=project.task) Forward-Port-Of: odoo/enterprise#104065
This update resolves an issue where currency rounding errors were causing the system to incorrectly remove small cash differences from reports. The fix ensures that even minor discrepancies, resulting from rounding, are accurately reflected, preventing unintended cash adjustments. This improves the reliability of our sales reporting.
Original PR description
Before this commit, when calculating the cash difference in the report, the code did not account for currency rounding. This could lead to situations where a very small cash difference, due to rounding errors, was not recognized as zero, resulting in the unintended removal of cash moves. opw-5489958 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#245251
This update fixes an issue where the 'Pending' button in the manufacturing order system incorrectly stopped productivity records for all employees involved, instead of just the current one. The change ensures that only the employee actively working on the operation is impacted, improving workflow efficiency and preventing unnecessary resource allocation.
Original PR description
Steps to reproduce the bug:
- Create a storable product P1 with the following BoM:
- Create a new operation OP1
- Create a manufacturing order to produce one unit of P1
- Confirm the manufacturing order
- Log in as Mitchel (admin) and start OP1
- Log in as Marc (demo) and also start OP1
- Click on Pending
Problem:
Both “mrp.workcenter.productivity” records are stopped, instead of stopping only the one linked to
The `button_pending` method was stopping productivity records for all employees linked to the work order.
opw-5453752
Forward-Port-Of: odoo/enterprise#105238
Forward-Port-Of: odoo/enterprise#103553This update allows users to modify fields within the 'stock.quant' view through Odoo's Studio interface, even if those fields don't have a unique identifier. Previously, this was restricted, but this change ensures Studio customizations are correctly applied to stock quantities.
Original PR description
In versions prior to 18.3, the “stock.quant” view did not have an “xml_id”, which prevented it from being modified through Studio. However, starting from version 18.3 and specifically since this commit: https://github.com/odoo/enterprise/commit/f4a4d54d45392c2ba46a123d4951f8b4468c5cba it is now possible to modify views through Studio even if they don't have an xml_id. But in the 'stock.quant' view, we perform a check at creation time to ensure that the field is among the allowed fields. Fields coming from Studio or from a customized view should, however, be ignored by this check and allowed. opw-5107591 Forward-Port-Of: odoo/odoo#230126
This update fixes a problem where Stripe payments were failing due to incorrect currency decimal handling. The fix adjusts how amounts are rounded before being sent to Stripe, ensuring accurate payment processing. This resolves a previous payment failure issue and improves the reliability of Stripe transactions.
Original PR description
### Issue: The stripe payments are failing to due setting currency decimals. #### Steps to reproduce: 1- In USD currency form in developer mode, set the rounding factor to `0.001000`, so we have 3…
### Issue: The stripe payments are failing to due setting currency decimals. #### Steps to reproduce: 1- In USD currency form in developer mode, set the rounding factor to `0.001000`, so we have 3 decimal places. 2- From `Decimal Accuracy` set Price Unit to 4 digits. 3- Refresh the page. 4- Create a SO and add a line. Set the price to `200.7647`. 5- Refresh the page again and generate a payment link. 6- Pay through stripe. As you see payments fail. ### Cause: This is due to rounding the amount before sending to stripe: https://github.com/odoo/odoo/blob/824e0c42c62de7f570f106860e7dcbf1f7344c14/addons/payment_stripe/models/payment_transaction.py#L160-L165 We are rounding the amount to the minor currency unit. However, we make a compare between `tx_amount` and the amount paid through stripe: https://github.com/odoo/odoo/blob/824e0c42c62de7f570f106860e7dcbf1f7344c14/addons/payment/models/payment_transaction.py#L726-L732 Which are not equal. We should use minor current unit as `precision_digits` to fix this issue. opw-5496825 Forward-Port-Of: odoo/odoo#245593 Forward-Port-Of: odoo/odoo#245059
This update resolves an issue where the user interface was blocked when the PIN modal appeared, preventing users from completing clock-in processes. The fix ensures the UI remains responsive and usable while the PIN modal is active, improving the overall user experience.
Original PR description
We now unblock the UI when the PIN modal appears, as it was unusable behind the loader telling "clocking in". Forward-Port-Of: odoo/enterprise#105335 Forward-Port-Of: odoo/enterprise#105039
This update fixes a potential issue in the Swiss payroll reporting process. It now only creates a snapshot of the required data if one doesn't already exist, preventing unnecessary data duplication and improving the efficiency of the reporting system. This ensures more accurate and timely payroll reports for our Swiss clients.
Original PR description
Forward-Port-Of: odoo/enterprise#105258 Forward-Port-Of: odoo/enterprise#105135
This update resolves a potential issue where tracking numbers in the POS Self Order module could collide. Due to limitations in adding new fields to the main Odoo version, a simple method was implemented to randomly add a letter prefix (K) to tracking numbers, preventing duplicates and ensuring accurate order tracking.
Original PR description
Since we cannot add fields in stable we use a little trick to avoid collisions in tracking numbers for POS Self Order module. We do a modulo operation on the ID of the PoS config to select a random letter from A-Z and prepend it to the tracking number. Forward-Port-Of: odoo/odoo#245476
This change removes a previous restriction that limited the ability to use certain journal accounts for reconciliation. Previously, accounts used as default debit or credit accounts within journals were automatically prevented from being reconciled. This update provides greater flexibility for users to reconcile accounts as needed, improving the system's usability.
Original PR description
Previously, a constraint prevented accounts from being non-reconcilable if they were used as default debit/credit accounts involved in journals. This behavior is too restrictive. This commit removes the constraint. task-5254202 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#245608 Forward-Port-Of: odoo/odoo#244398
This update fixes an issue where iOS users were unable to save custom star ratings for product reviews. The fix prevents a technical glitch that caused the rating to reset to the default 4-star rating before submission. This ensures a consistent and reliable review experience for all users on iOS devices.
Original PR description
## Versions
18.0+
## Issue
On iOS devices, when submitting a product review with a custom star rating, the selected value would revert to the default (4 stars) before submission.
## Steps to reproduce
*On a laptop*
- Open Editor mode on a product eCommerce page:
- Select any product element (e.g. click on the price);
- Activate customer ratings and save.
*On a physical Apple mobile device (iPhone or iPad) or on an iOS emulator via XCode (only on MacOS)*
- Go to the product's eCommerce page:
- Move down to the "Customer Reviews" section and un-toggle it:
- Write down a review;
- Click on any star rating but 4;
- Send.
## Cause
`mouseleave` event is triggered before the rating is saved and resets the rating to the default 4-star one.
## Solution
Only trigger `mouseleave` event on devices handling them correctly and post the number of visible stars on the form.
opw-5142682
Forward-Port-Of: odoo/odoo#245135
Forward-Port-Of: odoo/odoo#234308This update fixes an issue where DHL labels were consistently delivered in PDF format, regardless of the user's selected format. It also ensures that DHL error messages (like 'Invalid Credentials') are now displayed to the user, providing clearer guidance when delivery issues occur.
Original PR description
This PR contains fixes for 2 issues: 1. Changing the label format in the Delivery Method has no effect, labels are always received in PDF format. 2. Some DHL errors (eg "Invalid Credentials") do not get propagated to the user, they get a "Validation Error" prompt with an empty message body. opw-5423897 Forward-Port-Of: odoo/enterprise#103660
This update resolves an issue preventing dropshipping orders from being processed correctly. Specifically, a user with limited access rights was encountering an error when validating picking for products with 'Average Cost' pricing. The fix adds necessary permissions to ensure these orders can be completed without interruption. Users should now be able to successfully create and fulfill dropship orders.
Original PR description
Steps to Reproduce 1. Create a database in Odoo 19.0 with the stock_account module installed. 2. Enable Dropshipping from Inventory → Settings. 3. Create a product with a category whose Cost Method…
Steps to Reproduce 1. Create a database in Odoo 19.0 with the stock_account module installed. 2. Enable Dropshipping from Inventory → Settings. 3. Create a product with a category whose Cost Method is set to Average Cost (AVCO). 4. Create a user with Inventory / User access rights only (no Inventory Administrator rights). 5. Create a dropship order using the product and validate the picking. ``` You are not allowed to access 'Product Value' (product.value) records. This operation is allowed for the following groups: - Inventory/Administrator Contact your administrator to request access if necessary. ``` Issue:- During picking validation, moves are getting [done](https://github.com/odoo/odoo/blame/5d91798f0f5f712bf5210edd0bf6788f32d0c316/addons/stock/models/stock_picking.py#L1265) if move is is_dropship enable which lead to [update_standard_price]( https://github.com/odoo/odoo/blob/5d91798f0f5f712bf5210edd0bf6788f32d0c316/addons/stock_account/models/stock_move.py#L169) if product cost_method is [avco.](https://github.com/odoo/odoo/blob/5d91798f0f5f712bf5210edd0bf6788f32d0c316/addons/stock_account/models/product.py#L462-L476) So, it call run_avco during that getting [the _get_manual_value]( https://github.com/odoo/odoo/blob/5d91798f0f5f712bf5210edd0bf6788f32d0c316/addons/stock_account/models/stock_move.py#L409) it through access error Fix:- To fix this sudo is added during getting _run_avco opw-5431121 upg-3762999 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242841
This update resolves a bug that occurred when generating German reports. Specifically, a division-by-zero error was triggered when currency exchange differences (where the amount_currency was zero) were processed. The fix ensures that these lines are correctly handled, preventing the error and improving report accuracy.
Original PR description
On move lines with zero `amount_currency` ( ex. currency exchange difference ), `_get_product_base_line_currency_rate` returns 0 currency rate which causes a division by zero error. Ignore the rate for lines with zero `amount_currency` opt-5358954 Forward-Port-Of: odoo/enterprise#105432 Forward-Port-Of: odoo/enterprise#105360
An upgrade issue with the Belarusian localization module (l10n_id) was causing errors during the update process. This fix addresses a problem where the migration script incorrectly created tax records, leading to data inconsistencies. This ensures smoother and more reliable upgrades for Odoo users with the l10n_id module installed.
Original PR description
Encountered an issue during upgrade from v16 with existing l10n_id installed on the DB. The script will try to force create the tax and create extra `repartition_line_ids` which is causing multiple "base" line to be added and trigger the `ValidationError`. Upgrade request: [3442445](https://upgrade.odoo.com/odoo/request/3442445) Upgrade task: [5314508]( https://www.odoo.com/odoo/70/tasks/5314508) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237897
This update fixes a calculation error in the VAT sales reports for Vietnam. The previous formula excluded the base amount for 8% VAT transactions, leading to inaccurate sales reporting. This change ensures the total taxable base is calculated correctly, improving the accuracy of financial reports.
Original PR description
`VAT_SALES` report line aggregates total untaxed amount from its children lines. Previously, the formula for this line was missing `VAT_SALES_8.amount_untaxed`. As a result, the base amount for 8% VAT transactions was excluded from the total sales base calculation. This commit adds the missing tag to the `VAT_SALES` formula to ensure the total taxable base is calculated correctly. task-5836154 Forward-Port-Of: odoo/odoo#244915
This update resolves a technical issue where creating two Sri Lanka companies resulted in an error due to duplicate tax IDs with periods. The fix removes the periods from the tax IDs in the system's configuration, ensuring proper company identification and preventing the error. This improves data accuracy for Sri Lankan businesses using Odoo.
Original PR description
**STEP TO REPRODUCE** 1. create a company, and set country to Sri Lanka. 2. create a 2nd company, and do the same. 3. There is a company inconsistencies error. **CAUSE** There is 2 taxes defined in `account.tax-lk.csv` with `.` in their id. This messes up with the function `company_xmlid()`: we end up loading the `account.tax` record of the 1st company when saving the 2nd company. opw-5473952 Forward-Port-Of: odoo/odoo#245244
A test failure in the payroll system's 13th month calculation was identified and fixed. The issue stemmed from incorrect date calculations within the test environment, specifically related to standard work hour calendars. This change ensures accurate 13th month pay calculations for employees.
Original PR description
[FIX] test_l10n_be_hr_payroll_account: fix the test of 13th month full leave Bug production: It is a runbot error occurred in test_13th_month_full_leave (version: master); 1 - Install and update…
[FIX] test_l10n_be_hr_payroll_account: fix the test of 13th month full leave
Bug production: It is a runbot error occurred in test_13th_month_full_leave (version: master);
1 - Install and update l10n_be_hr_payroll,l10n_be_hr_payroll_account,test_l10n_be_hr_payroll_account,hr_holidays,resource modules in localhost
2 - Execute the test test_13th_month_full_leave and it will fail, also in the same class (Test13thMonth) many other tests were failing.
Bug cause:
1 - In test test_13th_month_full_leave, for all year the sick day timeoff is allocated. (year: 2025), generate work entries for 2025 and expecting payslip amount must be 0 but it is not.
2 - When I looked to _get_paid_amount -> _get_paid_amount_13th_month -> _compute_presence_prorated_fixed_wage: Some days in the year was not counted as sick day and since few days are not counted, the payslip amount is > 0.
3 - By diving deeper: in function _get_calendar_days: date_to = min(date_max, leave.date_to.date()), from this line, I observed that leave.date_to is calculated 1 days before sometimes.
4 - In hr.leave model -> _compute_date_from_to -> hour_from, hour_to = holiday._get_hour_from_to(holiday.request_date_from, holiday.request_date_to) -> In here hour_from and hour_to is (0,0) when the calendar (id = 1) standard 40h/week is used.
5 - Since it returns (0,0) and converted to UTC in the next line, the date_to becomes 1 day before the expected date_to.
6 - After finding that, the standard 40h/week calendar returns (0,0) for work start hour and work end hour, I looked to 'resource.calendar' model.
7 - In function _get_default_attendance_ids, hour_from and hour_to returns 0,0 for typical 40 hours/week calendar which is not true.
8 - This standard calendar with id = 1 is used in other 4 tests in class Test13thMonth and they were failing as well, now all of them are fixed.
Bug solution:
1 - Fixing the hour_from and hour_to of standard 40h/week calendar from (0,0) -> (8, 16).
task - 5853076
Runbot Error
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-prThis update resolves an issue where applying text colors to lists in the HTML editor didn't correctly color the list markers. The fix corrects a logic error that was removing the text color class from the list item itself. Now, text color selections will consistently apply to both the text and the list marker.
Original PR description
### Steps to reproduce: - Create a list and type some text. - Press Ctrl + A and apply a text color from the toolbar. - Observe that the list marker is not colored. ### Description of the issue/feature this PR addresses: - `getFonts` looked for the closest element with a text color class, and this also matched `<li>` elements. When a `<li>` was selected, its text color class was removed and moved to a new <font> element created inside the `<li>`. - As a result, the color class was removed from the list item itself, which broke list marker coloring. ### Desired behavior after PR is merged: - Text color classes remain on list item, so list markers are colored correctly. task-5454639 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243005
A test failure related to the 13th month full leave calculation was identified and resolved. The fix addresses an issue where sick days weren't being correctly counted, leading to incorrect payslip amounts. This ensures accurate 13th month payments for employees.
Original PR description
Bug production: It is a runbot error occurred in test_13th_month_full_leave (version: master); 1 - Install and update…
Bug production: It is a runbot error occurred in test_13th_month_full_leave (version: master); 1 - Install and update l10n_be_hr_payroll,l10n_be_hr_payroll_account,test_l10n_be_hr_payroll_account,hr_holidays,resource modules in localhost 2 - Execute the test test_13th_month_full_leave and it will fail, also in the same class (Test13thMonth) many other tests were failing. Bug cause: 1 - In test test_13th_month_full_leave, for all year the sick day timeoff is allocated. (year: 2025), generate work entries for 2025 and expecting payslip amount must be 0 but it is not. 2 - When I looked to _get_paid_amount -> _get_paid_amount_13th_month -> _compute_presence_prorated_fixed_wage: Some days in the year was not counted as sick day and since few days are not counted, the payslip amount is > 0. 3 - By diving deeper: in function _get_calendar_days: date_to = min(date_max, leave.date_to.date()), from this line, I observed that leave.date_to is calculated 1 days before sometimes. Bug solution: 1 - In _get_calendar_days, leave.date_from and leave.date_to is converted to the employee's timezone from UTC. task - 5853076 Runbot Error
This update resolves an issue where users were blocked from completing settlement payments in Point of Sale when ZATCA integration was active. Previously, the system incorrectly forced an invoice to be created, preventing the payment from being processed. This change removes this forced invoice requirement for settlement orders, allowing users to correctly settle outstanding balances.
Original PR description
## Dependent PR https://github.com/odoo/enterprise/pull/98463 ## Description of the issue/feature this PR addresses: Users are blocked when trying to use the **Settle Due** feature in Point of Sale…
## Dependent PR https://github.com/odoo/enterprise/pull/98463 ## Description of the issue/feature this PR addresses: Users are blocked when trying to use the **Settle Due** feature in Point of Sale if the ZATCA (l10n_sa_edi_pos) integration is enabled. ## Current behavior before PR: When a PoS order is created using a "Pay Later" payment method, an invoice is correctly generated and sent to ZATCA. However, when the user later tries to settle that customer's due balance (using the **Settle Due** option), the l10n_sa_edi_pos module incorrectly forces the Invoice option to be enabled and makes the field read-only. This blocks the user because: - Settlement orders do not contain any lines, so a new invoice cannot be generated. - The original invoice was already sent to ZATCA, and the settlement payment should not be sent as a new e-invoice. Thus, the user cannot proceed with the settlement. ## Desired behavior after PR is merged: After this fix, the **Invoice** checkbox will no longer be forced or marked as read-only during **Settle Due** operations. The field will default to False, aligning with standard Odoo behavior for settlements and allowing the user to complete the payment. task-5144679 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#245163 Forward-Port-Of: odoo/odoo#233769
This update resolves an issue where a Point of Sale order incorrectly remained flagged as a 'settlement' after a user canceled a payment attempt. By resetting the relevant flag, this ensures orders process correctly and avoids potential conflicts with other business integrations. This improves order processing reliability.
Original PR description
## Description of the issue/feature this PR addresses: The `is_settling_account` flag on a Point of Sale order is not reset to False if the user cancels a **Settle Due** operation. ## Current…
## Description of the issue/feature this PR addresses: The `is_settling_account` flag on a Point of Sale order is not reset to False if the user cancels a **Settle Due** operation. ## Current behavior before PR: When a user initiates a **Settle Due** payment for a customer, Odoo creates a new order and sets the `is_settling_account` flag to True. If the user proceeds to the payment screen but then navigates back (to the product screen) instead of completing the payment, the flag remains True. This is problematic because the user can then add regular products to this same order and check out. The order is processed as a normal sale, but it is incorrectly flagged as a settlement, which can lead to error on codes depending on this. ## Desired behavior after PR is merged: After this fix, if a user leaves the payment screen during a **Settle Due** operation, the `is_settling_account` flag on the order will be correctly reset to False. task-id - 5144679 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/enterprise#105129 Forward-Port-Of: odoo/enterprise#98463
This update resolves an issue where combo choices weren't displaying correctly in the self-order and kiosk modes. Previously, users had to reconfigure combo choices after setting a product variant. This change ensures combo choices are displayed correctly and automatically, streamlining the self-order process.
Original PR description
Before the fix, when we set a product variant as combo choice. In self/kiosk, we'll see the product template instead of the product itself. And we need to configure it again. It occured because for all of the products in the kiosk/self, we display the product template. The expected behavior if we set a product variant as combo choice is to have the product variant in the combo directly without having to reconfigure it. The bug occurs only since 19.0 because a fix was already done from 18.3 to 18.4 in this pr : #219908 but the fwport for 19.0 has never been merged. task: 5493798 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#244788 Forward-Port-Of: odoo/odoo#244055
This update resolves an issue that caused a traceback during employee searches within appraisals. The fix removes a restricted field from the search domain, ensuring compatibility with the public employee model and preventing errors. This improves the reliability of the appraisal process.
Original PR description
Steps to reproduce: 1. Log in with demo user 2. Create a new appraisal 3. Search for an employee Issue: A traceback occurs when searching for an employee. Cause: The `registration_number` field is not available on the `hr.employee.public` model for public users. Fix: Remove `registration_number` from the employee search domain and restrict the search to fields available on the public model. task-5864546
This update resolves an issue where using certain reserved words (like 'constructor') as customer names would trigger an error in reporting. The fix prevents the system from incorrectly interpreting these names, ensuring customer data can be accurately displayed in reports. This improves the reliability of customer reporting.
Original PR description
Steps:
- Have a customer named "constructor" (or any valid json prototype key value)
- Install `sale_management`
- Create a sale order with "constructor"
- Open Reporting -> Customers
- Traceback `Caused by: TypeError: groupedDataPoints[key].push is not a function`
This problem occurs because we use the client name directly in an object, and “constructor” already exists in all objects but is not initialized correctly, which raises a traceback.
One solution is to use `let object = Object.create(null)` instead of `let object = {}`, which prevents inheritance of `Object.prototype` properties.
https://github.com/odoo/odoo/blob/5e74f04ff35ed3efa25be295567be41f42024692/addons/web/static/src/views/graph/graph_model.js#L451-L457
opw-5474691
Forward-Port-Of: odoo/odoo#245369
Forward-Port-Of: odoo/odoo#245206This update resolves an issue where invoices sent to Peppol were failing validation due to an incorrect UN/ECE code. The fix removes a specific code ('HD') that was valid under UN/ECE standards but not accepted by Peppol, ensuring invoices now pass validation and can be successfully transmitted.
Original PR description
**Steps to reproduce:** - Use a Belgian company - Create a Belgian contact with "EU Standard (Peppol Bis 3.0)" as eInvoice format - Create an invoice for that customer with a product using "Pack of 6" as unit of measure - Confirm the invoice - Send it to Peppol **Issue:** The validation of the invoice fails with the following error: "[BR-CL-23]-Unit code MUST be coded according to the UN/ECE Recommendation 20 with Rec 21 extension" **Cause:** The UNECE code used for "Pack of 6" UoM is "HD". "HD" is a correct UNECE code for "Half Dozen". However, it is not part of the subset of codes accepted by Peppol. opw-5463212 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#244668
This update resolves an issue where non-administrator users were unable to validate direct debit mandates. The fix restricts access to the `payment.provider` model during validation, aligning with the permissions granted to users who can create new mandates. This ensures all users with the necessary role can complete the validation process.
Original PR description
## Versions saas-18.3+ ## Issue Non admin users get an access error when trying to validate a direct debit mandate. ## Steps to reproduce As admin user: - Navigate to "Users": - Select Marc Demo: -…
## Versions
saas-18.3+
## Issue
Non admin users get an access error when trying to validate a direct debit mandate.
## Steps to reproduce
As admin user:
- Navigate to "Users":
- Select Marc Demo:
- Under "Access Rights", in the "Accounting" section, set his "Accounting" role to "Invoicing & Banks";
As Marc Demo:
- Navigate to "Direct Debit Mandates":
- Create a new mandate for Deco Addict and its first IBAN record;
- Click on the "Validate" button.
## Cause
Issue introduced by the `action_validate_mandate` method override from b63eb2d6b91be28f4837309b5d972cc0b05846e0 Non admin users have no permissions on `payment.provider` while `_read_group` checks read rights on model via https://github.com/odoo/odoo/blob/ac084b1010faf49b63844ecc96284d567e59de2e/odoo/orm/models.py#L1632
## Fix
Allow `payment.provider` access only on mandate validation as only `account.group_validate_bank_account` users can create a new mandate.
opw-5255694
Forward-Port-Of: odoo/enterprise#105428
Forward-Port-Of: odoo/enterprise#103673This update fixes a bug that caused a 'RecursionError' when producing large quantities of serial-tracked products. The issue stemmed from a process of repeatedly updating deadlines within the system, leading to a depth of recursive calls exceeding Python's limits. This change ensures stable production processes for high-volume manufacturing.
Original PR description
**Issue** When producing a large number of serial-tracked products, a RecursionError can occur. **Steps to reproduce** - Create three products tracked by serial number (ensure MTO and Manufacture…
**Issue** When producing a large number of serial-tracked products, a RecursionError can occur. **Steps to reproduce** - Create three products tracked by serial number (ensure MTO and Manufacture routes are enabled). - Create a BoM for product A containing product B. - Create a BoM for product B containing product C. - Create a BoM for product C containing another product. - Create a manufacturing order of 100 units for product A and confirm it. - Produce the 100 units on the child MO of product C (100 backorders are created). - On the main MO (product A), click on "Prepare MO". - Attempt to produce product B. → RecursionError: maximum recursion depth exceeded. **Cause** While setting `move_finished_ids`: https://github.com/odoo/odoo/blob/3056facc07024d02829bf2e27c9ee2f56695c99e/addons/mrp/models/mrp_production.py#L806 the `deadline_date` of the final move is updated: https://github.com/odoo/odoo/blob/3056facc07024d02829bf2e27c9ee2f56695c99e/addons/stock/models/stock_move.py#L742C1-L743C63 This deadline is then propagated to chained moves: https://github.com/odoo/odoo/blob/3056facc07024d02829bf2e27c9ee2f56695c99e/addons/stock/models/stock_move.py#L539C1-L541C55 via: https://github.com/odoo/odoo/blob/3056facc07024d02829bf2e27c9ee2f56695c99e/addons/stock/models/stock_move.py#L559C1-L562C61 This propagation retriggers the `move_finished_ids` setter recursively on other moves. The recursion depth grows with the number of generated moves, eventually exceeding Python's maximum recursion limit. opw-[5265424](https://www.odoo.com/web#id=5265424&view_type=form&model=project.task) Forward-Port-Of: odoo/odoo#239648
This update reorganizes code within the Odoo platform to better align with project standards. Specifically, a previously misplaced override function has been moved to the `portal_rating` module, as the `rating` module doesn't require direct portal integration. This improves maintainability and reduces potential conflicts.
Original PR description
Since #234356, `_get_allowed_message_post_params` method of the `PortalChatter` has been overridden in the `rating` module. As the `rating` has no dependency on the portal, the current change moves this override to the `portal_rating` module.
Features or functions removed from Odoo
This pull request removes a no-longer-used function within the Odoo accounting module. This change improves code cleanliness and reduces potential maintenance overhead. It’s a routine update to ensure the system remains efficient.
Original PR description
This method is no longer used. reference PR: https://github.com/odoo/odoo/pull/244398 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Code cleanup and technical improvements
This update refactors the ECPay invoice widget conversion process within the Odoo website sale module. The changes improve the underlying code structure and make it easier to maintain and update the integration with ECPay. This ensures smoother and more reliable invoice generation for Odoo users.
11 changes
New functionality added to Odoo
This update introduces new tax report templates specifically for Australian businesses using the Business Activity Statement (BAS). These templates streamline the process of reporting BAS obligations, ensuring compliance with Australian tax regulations. This change supports our Australian customers and improves the accuracy of their financial reporting.
Original PR description
Add new BAS tax return types for Australia Task-5870092 CE v19 PR: https://github.com/odoo/odoo/pull/245368
Resolved issues and error corrections
This update resolves an issue that occurred during Odoo upgrades when the l10n_id module was installed. The migration script was incorrectly creating extra tax lines, leading to errors. This fix ensures a smoother upgrade process and prevents data inconsistencies.
Original PR description
Encountered an issue during upgrade from v16 with existing l10n_id installed on the DB. The script will try to force create the tax and create extra `repartition_line_ids` which is causing multiple "base" line to be added and trigger the `ValidationError`. Upgrade request: [3442445](https://upgrade.odoo.com/odoo/request/3442445) Upgrade task: [5314508]( https://www.odoo.com/odoo/70/tasks/5314508) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237897
This update fixes a bug preventing the login date from being correctly recorded for users authenticating via LDAP. Previously, the system didn't track when LDAP users logged in, now the 'Latest Authentication' field in user profiles accurately reflects the login timestamp. This ensures accurate user activity tracking.
Original PR description
## Summary This PR fixes a bug where the `login_date` field is not updated when users authenticate via LDAP. **Fixes:** #244847 ## Problem When a user logs in via LDAP authentication, the…
## Summary
This PR fixes a bug where the `login_date` field is not updated when users authenticate via LDAP.
**Fixes:** #244847
## Problem
When a user logs in via LDAP authentication, the `login_date` (Latest Authentication) field remains empty or keeps its old value. This happens because the `_login` method in `auth_ldap` returns early after successful LDAP authentication, bypassing the standard call to `_update_last_login()` that normally happens in the base `res.users` implementation.
## Technical Analysis
In `addons/auth_ldap/models/res_users.py`, the `_login` method:
1. Catches `AccessDenied` from the base implementation
2. Attempts LDAP authentication
3. On success, immediately returns the auth dictionary
This bypasses `user._update_last_login()` which is called in `odoo/addons/base/models/res_users.py` after credential verification.
## Solution
Modified the LDAP login flow to:
1. Extract `uid` from `_get_or_create_user()`
2. Call `_update_last_login()` on the user before returning
3. Return the auth dictionary with the extracted `uid`
```python
uid = Ldap._get_or_create_user(conf, login, entry)
# Update last_login as it would be done in base _login method
user = self.env['res.users'].browse(uid)
user.with_user(user)._update_last_login()
return {
'uid': uid,
'auth_method': 'ldap',
'mfa': 'default',
}
```
## Testing
Added a test assertion to verify that a `res.users.log` entry is created after LDAP login, which populates the `login_date` field.
## Steps to Verify
1. Install `auth_ldap` module
2. Configure a valid LDAP server
3. Log in with an LDAP user
4. Check Settings > Users & Companies > Users
5. ✅ The "Latest Authentication" field should now show the login timestamp
---
[Gittensor contribution - GlobalStar117]This update resolves an issue where applying text colors to lists in the HTML editor didn't correctly color the list markers. The fix ensures that text color classes remain on list items, resulting in consistent and accurate color matching for list markers. This improves the overall user experience when formatting lists.
Original PR description
### Steps to reproduce: - Create a list and type some text. - Press Ctrl + A and apply a text color from the toolbar. - Observe that the list marker is not colored. ### Description of the issue/feature this PR addresses: - `getFonts` looked for the closest element with a text color class, and this also matched `<li>` elements. When a `<li>` was selected, its text color class was removed and moved to a new <font> element created inside the `<li>`. - As a result, the color class was removed from the list item itself, which broke list marker coloring. ### Desired behavior after PR is merged: - Text color classes remain on list item, so list markers are colored correctly. task-5454639 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243005
This update resolves a visual bug where Marketing blocks with overlapping column sizes would cause layout issues. The fix ensures that tables render correctly, regardless of column sizes within a row, preventing unexpected visual overflows. This improves the overall presentation and usability of Marketing blocks.
Original PR description
This reverts commit https://github.com/odoo/odoo/commit/0ffb96dedc776552564cec28140340ec38dee9d1. The commit was incomplete and while it prevented the crash, the resulting table did not match the…
This reverts commit https://github.com/odoo/odoo/commit/0ffb96dedc776552564cec28140340ec38dee9d1. The commit was incomplete and while it prevented the crash, the resulting table did not match the expected layout. Original issue: Problem: The grid conversion logic only finalized a row when iterating through the last column in the input list. If a row reached exactly 12 grid spans while more columns remained (e.g., a `col-12` in the middle), the logic did not start a new row. As a result, remaining columns overflowed the current row visually. Cause: In a single row, if a column had a size 12 and was followed by another column of any size, it would crash because the algorithm did not reset the index to the start of the next row. Steps to reproduce: - Add a Marketing block. - Reduce the size of the left card from the left side.<img width="719" height="580" alt="image" src="https://github.com/user-attachments/assets/1e62eaf7-6ab1-4120-b643-62427ce3ec3a" /> - Save. - Traceback. Solution: This more thorough fix properly handles all problematic aspects: - filter conflicting `col-x` instructions on a single element to keep only one size - ensure that a gridIndex of 12 does not cause a crash in the algo - properly add all effective `td` in a row in all circumstances (there where cases where the final row could be omitted) opw-5439481 Co-authored-by: Damien Abeloos <abd@odoo.com> Co-authored-by: Thomas Josse <thjo@odoo.com> Co-authored-by: Walid Sahli <wasa@odoo.com>
This update resolves an issue where customer names containing reserved words (like 'constructor') caused errors in reporting. The change uses a safer object creation method to prevent these errors, ensuring customer names can be used without disrupting reporting functionality. This improves data accuracy and reliability.
Original PR description
Steps:
- Have a customer named "constructor" (or any valid json prototype key value)
- Install `sale_management`
- Create a sale order with "constructor"
- Open Reporting -> Customers
- Traceback `Caused by: TypeError: groupedDataPoints[key].push is not a function`
This problem occurs because we use the client name directly in an object, and “constructor” already exists in all objects but is not initialized correctly, which raises a traceback.
One solution is to use `let object = Object.create(null)` instead of `let object = {}`, which prevents inheritance of `Object.prototype` properties.
https://github.com/odoo/odoo/blob/5e74f04ff35ed3efa25be295567be41f42024692/addons/web/static/src/views/graph/graph_model.js#L451-L457
opw-5474691
Forward-Port-Of: odoo/odoo#245369
Forward-Port-Of: odoo/odoo#245206This update fixes an issue where the payment change calculation in the Point of Sale (PoS) system was incorrect, leading to inaccurate negative change values. The fix implements an asymmetric rounding method to ensure changes are calculated correctly, particularly when dealing with cash payments, improving the reliability of financial transactions.
Original PR description
**Steps to reproduce:** - Make a rounding method, put 1.00 as the value and nearest as the method - Make a product without tax, the price should be 16.50 - Go to the PoS, order that product - On the…
**Steps to reproduce:** - Make a rounding method, put 1.00 as the value and nearest as the method - Make a product without tax, the price should be 16.50 - Go to the PoS, order that product - On the payment screen, click Cash, the value is rounded to 17 - Input "20" to change the payment line's value - The change is "-4", which doesn't make sense as the price to pay was 17 **Why the fix:** Before this commit, we used the round function, which is symmetric, meaning that as round(1.23) with a precision of 0.1 and UP method will return 1.3, the same with round(-1.23) will return -1.3, meaning the rounding method will return the same number and just change the sign depending on if the input is positive and negative. This causes inconsitencies, because clicking Cash would set the price to pay to 17, but paying 20 would set the change to -4. With an assymetric rounding we prevent this problem, as it inverts the rounding method if the value is negative. In our case, this means that the change will be rounded DOWN, to -3. opw-5476694
This update fixes a critical issue where payroll sheet computations continued even when errors were detected on payslips. Now, errors will trigger alerts, providing clearer guidance on resolving problems like missing contracts. This ensures accurate payroll processing and prevents incorrect calculations.
Original PR description
Bug: When there is an issue on a payslip with an error level, and we try to compute the sheet, the sheet is computed. Instead of computing, it should raise and the message should specify what errors need to be resolved first. Cause: When computing the sheet, we were calling the self._get_error_message() without using the result, which is a string. Fix: Actually raise a ValidationError and use the result of self._get_error_message() for the error message. Introducing the raise brought other problems because some code supposed to fail was running seamlessly fine. But now, the raise is called and those needed to be solved as well. The issue raised multiple times is the "No contract in the payslip period". Task: 5153497
This update resolves an issue where users couldn't update the quantity of optional products added to their subscriptions through the portal. The fix ensures that the 'is_optional' flag is correctly copied to new order lines during upsells, allowing users to accurately manage their product quantities. This improves the user experience and ensures accurate subscription billing.
Original PR description
Version: - 19.0 Steps to Reproduce: - Enable the Add Products option in the recurring plan. - Create a subscription with the same plan and add optional products. - Confirm the subscription and create invoice for current period. - From the portal, click on Add Quantity to create an upsell order. Before: - Users were not able to update the quantity of products added as optional products from portal. - This happened because the `is_optional` field value was not copied to the new order line created during the upsell. After: - The `is_optional` field value is now copied to the new order line created for upsell and renewal orders. - This allows users to update the quantity of optional products correctly. Impact: - Users can update the quantity of optional products from the portal without issues. task-5427585
This update resolves issues with the Point of Sale tour testing process, ensuring it consistently functions correctly. It includes improvements to the tour's navigation and fixes a generic dialog title, enhancing the user experience. These changes contribute to a more reliable and user-friendly Point of Sale system.
Original PR description
In this commit, we add few steps in the tour to ensure the tour take always the good way. Few python assertions between has been added to know where the unit test fails (easier to debug). We take advantages of this commit to fix few utils: - Dialog.cancel() was too generic. We add at least title to let the possibility to be more precise. - selectPresetTimingSlotHour() has been fixed to wait the good triggers in the DOM before the tour continues. runbot-error-id 237756 runbot-error-id 237762
This update fixes an issue where the FedEx rate calculation was failing when the requested currency didn't match the account's currency. The fix ensures the rate request always uses 'PREFERRED' to match FedEx API requirements, preventing errors and ensuring accurate shipping cost calculations.
Original PR description
Issue ----- Commit 76196c4c5f2ff01354931df6ad615f1b2c4d9a22 introduced logic to select the rate based on the requested currency. This causes problems when the requested currency does not match the…
Issue ----- Commit 76196c4c5f2ff01354931df6ad615f1b2c4d9a22 introduced logic to select the rate based on the requested currency. This causes problems when the requested currency does not match the one set up on the Fedex account, because the 'actualRateType' gets set to payor instead of preferred for the rate's 'rateType', which means `d['rateType'] == rating_result['actualRateType']` is false, so `actual` is empty, leading to an error when doing `actual['totalNetCharge']`. Solution ----- In the request we send, we hardcode `'rateRequestType': ['PREFERRED']` so we can look for a match using 'PREFERRED' as a prefix of `rateType`. The Fedex API lists all possible values of the enum `rateType` https://developer.fedex.com/api/en-us/catalog/ship/v1/docs.html <details> <summary>Enum values as per the API</summary> "enum": [ "INCENTIVE", "NEGOTIATED", "PAYOR_ACCOUNT_PACKAGE", "PAYOR_ACCOUNT_SHIPMENT", "PAYOR_CUSTOM_PACKAGE", "PAYOR_CUSTOM_SHIPMENT", "PAYOR_LIST_PACKAGE", "PAYOR_LIST_SHIPMENT", "PAYOR_RETAIL_PACKAGE", "PAYOR_RETAIL_SHIPMENT", "PREFERRED_ACCOUNT_PACKAGE", "PREFERRED_ACCOUNT_SHIPMENT", "PREFERRED_CUSTOM_PACKAGE", "PREFERRED_CUSTOM_SHIPMENT", "PREFERRED_INCENTIVE", "PREFERRED_LIST_PACKAGE", "PREFERRED_LIST_SHIPMENT", "PREFERRED_NEGOTIATED", "PREFERRED_RETAIL_PACKAGE", "PREFERRED_RETAIL_SHIPMENT", "RATED_ACCOUNT_PACKAGE", "RATED_ACCOUNT_SHIPMENT", "RATED_CUSTOM_PACKAGE", "RATED_CUSTOM_SHIPMENT", "RATED_LIST_PACKAGE", "RATED_LIST_SHIPMENT", "RATED_RETAIL_PACKAGE", "RATED_RETAIL_SHIPMENT", "UNKNOWN" ], </details> There are only 3 possible prefixes: `PAYOR`, `PREFERRED` & `RATED`, so replacing the other 2 by `PREFERRED` should be safe. ----- Ticket: opw-5482949 Forward-Port-Of: odoo/enterprise#105156
5 changes
Enhancements to existing features
This update expands Odoo's language support to include Spanish, recognizing the significant number of Spanish speakers. Enabling Spanish translations improves usability and accessibility for a wider range of users. This enhancement aligns with Odoo's commitment to global business solutions.
Original PR description
The official language is English, but Spanish is spoken by ~41 million. task-5247124
This update expands Odoo Enterprise's language support to include Spanish, recognizing the significant Spanish-speaking population. Enabling Spanish translations improves usability for a wider customer base and aligns with global market needs. This change enhances the overall user experience for Spanish-speaking users.
Original PR description
The official language is English, but Spanish is spoken by ~41 million. task-5247124
Resolved issues and error corrections
This update resolves a problem that occurred during Odoo 18 upgrades when using the l10n_id module. The migration script was incorrectly creating extra tax records, leading to errors. This fix ensures a smoother and more reliable upgrade process for Odoo users with the l10n_id module installed.
Original PR description
Encountered an issue during upgrade from v16 with existing l10n_id installed on the DB. The script will try to force create the tax and create extra `repartition_line_ids` which is causing multiple "base" line to be added and trigger the `ValidationError`. Upgrade request: [3442445](https://upgrade.odoo.com/odoo/request/3442445) Upgrade task: [5314508]( https://www.odoo.com/odoo/70/tasks/5314508) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237897
This update resolves an issue where General Ledger exports were incomplete for some customers due to a NULL value in the 'include_initial_balance' field. The fix ensures that all accounts are included in the batch XLSX export, preventing data omissions. This improves the reliability of financial reporting.
Original PR description
…LSX export We recently added a batch export for the xlsx file for the General Ledger as the basic export was having a memory error. To handle it, we first determine which accounts are present in the report by running a custom query which uses the computed boolean field include_initial_balance. It appears with some customers' tickets that this field is set to NULL in their databases. This value might potentially come from a legacy artifact from an older Odoo version. I have not found a way to reproduce the issue without running a custom query. For customers having this field set to Null, it results in an incomplete export where these accounts are missing. opw-5787298 opw-5797979 Forward-Port-Of: odoo/enterprise#105275
This update fixes an issue where changes made through the HTML editor's 'handleNewRecords' feature weren't consistently reflected in the undo/redo history. By ensuring these changes are recorded in the correct step, the undo/redo functionality now works reliably, providing a smoother editing experience for users.
Original PR description
Before this commit, mutations added by "handleNewRecords" resource may not have been added in the correct step. So the undo/redo didn't work properly. Mutations added by handleNewRecords must be in the same step as the mutations that trigger it. 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
1 change
Resolved issues and error corrections
This update corrects a compatibility issue in the automatic currency rate system. Due to Bulgaria joining the Eurozone, the BNB now provides exchange rates in EUR, not BGN. This change ensures that companies using EUR as their main currency can correctly sync exchange rates without errors.
Original PR description
The `_parse_bnb_data` method assumed that the Bulgarian National Bank (BNB) provides exchange rates against BGN (Bulgarian Lev). However, since Bulgaria joined the Eurozone on January 1, 2026, the…
The `_parse_bnb_data` method assumed that the Bulgarian National Bank (BNB) provides exchange rates against BGN (Bulgarian Lev). However, since Bulgaria joined the Eurozone on January 1, 2026, the BNB now provides rates against EUR. This caused the error "Your main currency (EUR) is not supported by this exchange rate provider" when Bulgarian companies with EUR as their main currency tried to sync exchange rates. refs: We can compare the data here from 31 December using the WayBackMachine: https://web.archive.org/web/20251231193558/https://www.bnb.bg/Statistics/StExternalSector/StExchangeRates/StERForeignCurrencies/index.htm Compared to today: https://www.bnb.bg/Statistics/StExternalSector/StExchangeRates/StERForeignCurrencies/index.htm And see the comparison used to be to BGN but is now for EUR Steps To Reproduce: 1. Create a company for Bulgaria with EUR as the main currency. 2. Go to Accounting Settings -> Automatic Currency Rates. 3. Select "[BG] Bulgaria National Bank" as the service provider. 4. Click the sync button. 5. Error appears: "Your main currency (EUR) is not supported by this exchange rate provider. Please choose another one." The fix updates the base currency from BGN to EUR, matching the current BNB XML format which now provides rates against EUR. Note: Companies with BGN as main currency will now get the same error, which is expected since the BNB no longer provides BGN-based rates. This behavior was discussed and confirmed with the PO. Ticket [link](https://www.odoo.com/odoo/project.task/5483771) opw-5483771