Daily updates from Odoo
Monday, January 19, 2026
18 changes · 17.0
Enhancements to existing features
This update adds support for the recently implemented 11% and 21% VAT rates in Romania. The changes ensure that Odoo correctly calculates and manages these new tax rates within fiscal positions, aligning with updated Romanian VAT regulations.
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
Resolved issues and error corrections
This update ensures Odoo continues to work seamlessly with the latest itsme API version (v2). By updating the API route, the system now correctly processes itsme requests, maintaining reliable identity verification for users. This change is a routine maintenance update.
Original PR description
After this commit, the route of the itsme gets updated from "v1" to "v2" in the `sign_identity_request` call, in order to follow the new api. task-5499804
This update resolves a technical error within the `l10n_ro_saft` module that was preventing accurate reporting for Romanian Standardized Accounting Forms (SAFT). The fix ensures the system correctly handles different unit of measure categories, avoiding a 'singleton error' that impacted report generation. This improves the reliability of SAFT reporting for Romanian businesses.
Original PR description
`saft_template` in `l10n_ro_saft` adds a table that loops over the different Unit of Measures (`uoms`) available. The issue is that if the `uoms` are part of different categories (ie: Length and Weight) we get a singleton error as we're trying to access a non-relational field of a recordset with multiple records. The commit fixes the error by using the already defined variable `uom` OPW-5499918
This update fixes an error in the Swiss VAT reporting module that was incorrectly displaying reverse charge tax amounts as negative. The fix ensures accurate VAT reporting by properly handling negative tax rates used to model reverse charge transactions, preventing incorrect VAT calculations.
Original PR description
**Steps to reproduce:** * Install the **l10n_ch** module for a Swiss company. * Create a vendor bill for a **foreign vendor**. * Apply a reverse charge tax: * **8.1% R C** (figure **383a**), or * **7.7% R C** (figure **382a**). * Confirm the vendor bill. * Go to **Accounting → Reporting → Tax Report**. * Generate the VAT report for the relevant period. **Observed behavior:** * Figure **383a** (8.1% reverse charge) or **382a** (7.7% reverse charge) is reported as **negative**. * This leads to incorrect VAT reporting. **Cause:** * Reverse charge taxes use **negative tax rates** to model the reverse mechanism. * The Swiss tax report formulas for figures **383a** and **382a** applied an additional negative sign. **Fix:** * Override the tax-tag aggregation logic to invert the sign for these figures only for Swiss companies (CH). opw-5257445
This update fixes an error in the SYSCOHADA Profit and Loss report where the gross margin calculation was incorrectly adding instead of subtracting values. The change ensures the report accurately reflects the SYSCOHADA accounting guidelines, as defined in the accompanying documentation. This corrects a discrepancy in reported financial data.
Original PR description
The SYSCOHADA gross margin is defined on page 330 - 331 of the document [Guide-d-application-du-SYSCOHADA.pdf](https://www.ohada.com/uploads/actualite/3504/Guide-d-application-du-SYSCOHADA.pdf). It…
The SYSCOHADA gross margin is defined on page 330 - 331 of the document [Guide-d-application-du-SYSCOHADA.pdf](https://www.ohada.com/uploads/actualite/3504/Guide-d-application-du-SYSCOHADA.pdf). It is TA (701) - RA (601) +/- RB (6031). TA and RA should always be positive and negative, respectively.
In the report "Profit and Loss (SYSCOHADA)", the line RA is negated. XA then subtracts this value from TA, adding the two values instead of subtracting them.
Steps to reproduce:
1. Create a new company on runbot.
2. In Accounting > Configuration > Settings, set their Fiscal Localization to Ginea - SYSCOHADA for Companies.
3. Make a MISC journal entry.
1. Set a credit of 110,000,000 on account 701100 and balance it with 411100.
5. Set a debit of 75,000,000 on account 601100 and balance it with 401100.
6. Set a credit of 5,000,000 on account 603100 and balance it with 411100.
7. Post the entry.
8. Navigate to Accounting > Reports > Profit and Loss.
9. Set the l10n version, Profit and Loss (SYSCOHADA).
10. Set the current date.
11. See XA = 110 million + 75 million + 5 million = 190 million; this does not match the example given on pg 357 of Guide-d-application-du-SYSCOHADA.pdf, where XA = 40 million.
[opw-5482300](https://www.odoo.com/odoo/project.task/project.task/5482300)This update prevents event registrations from automatically confirming when a sales order is confirmed in version 17. Previously, registrations were incorrectly marked as 'open', leading to inaccurate notifications and a less effective attendee editor. Now, registrations remain in 'draft' mode until attendee details are provided, ensuring correct targeting and improved administrative control.
Original PR description
Problem: - In version 17, event records linked to a sales order can be automatically set to ‘open’ immediately after the sale. This makes the wizard editor less useful (the data provided is not used…
Problem: - In version 17, event records linked to a sales order can be automatically set to ‘open’ immediately after the sale. This makes the wizard editor less useful (the data provided is not used for the record that is already confirmed) and notifications go to the sales partner instead of the actual assistant. Current behaviour: - Confirmed orders automatically confirm attendees, reducing the value of the wizard step and sending emails to the wrong recipient. Expected behaviour: - Paid attendee registrations created from Sales should remain in “draft” until attendee details are provided. Solution: - Do not set ‘state=“open”’ for payment records created from a sale involving the data wizard for records. Ensure they remain in “draft”. - Confirm registrations once attendee details are present. Advantages: - Restores the usefulness of the attendee editor: confirmation occurs after data entry, so notifications are directed to the attendee, not just the sales partner. - Meets functional expectations for administrative control and proper recipient targeting. Tests to reproduce the error: - Create quote with payment entry - Confirm SO - Enter attendee details and confirm - Registrations change to ‘open’ and a confirmation email is sent to the order partner and not to the registered attendee. @Tecnativa TT58160 @pedrobaeza please review --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes a potential issue where Microsoft calendar synchronization could fail due to a fixed 3-second timeout for Graph API requests. Now, administrators can adjust a configurable timeout setting to accommodate slower environments or larger calendars, preventing synchronization failures and duplicate event creation. This enhances the reliability of calendar data synchronization.
Original PR description
**Description of the issue/feature this PR addresses:** Microsoft calendar synchronization may fail in environments with slower Microsoft Graph responses or large calendars because Graph API calls…
**Description of the issue/feature this PR addresses:** Microsoft calendar synchronization may fail in environments with slower Microsoft Graph responses or large calendars because Graph API calls triggered after commit use a fixed 3-second timeout. This can lead to repeated synchronization failures even though the operation would succeed with slightly more time. Additionally, when creating events, the Microsoft Graph request may time out after the event is successfully created on Microsoft’s side but before the response containing the event ID is returned. In this case, Odoo does not store the ID of the event and may create the same event again during the next sync, resulting in duplicate events. **Current behavior before PR:** Microsoft Graph requests (insert, update, delete) are executed with a hardcoded 3-second timeout. If the Graph API response takes longer: • the synchronization fails, • and in the case of event creation, Odoo may not receive the Microsoft event ID even though the event was created remotely, which can lead to duplicate events in Odoo. **Desired behavior after PR is merged:** The Microsoft Graph request timeout is configurable via the optional system parameter `microsoft_calendar.graph_timeout`. If the parameter is not set, the behavior remains unchanged (default 3 seconds). Administrators can increase the timeout to allow successful synchronization in slower environments or with large datasets, reducing synchronization failures and avoiding duplicate event creation caused by missing Microsoft IDs. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update prevents errors when creating inter-company invoices by ensuring payment terms are compatible with the receiving company. Previously, payment terms were incorrectly applied, causing invoice posting to fail. Now, only company-specific payment terms are used, streamlining inter-company transactions.
Original PR description
**Steps to reproduce:** * Install `Accounting` and `sales` modules. * Create two companies and enable **Inter-Company Transactions** with **Synchronize invoices/bills** in settings for both…
**Steps to reproduce:** * Install `Accounting` and `sales` modules. * Create two companies and enable **Inter-Company Transactions** with **Synchronize invoices/bills** in settings for both companies. * Create a **payment term** assigned to **Company A**. * Create a **sale order** from Company A to Company B using that payment term. * Confirm the sale order and create the **invoice**. * Post the invoice to trigger the inter-company vendor bill. **Observed behavior:** * The generated **vendor bill** for Company B uses **Company A’s payment term**. * Posting fails because the payment term is incompatible with Company B. **Cause:** * Inter-company document creation reuses payment terms without checking whether they belong to the **target company**. * Payment terms from the source company can be propagated to the destination document. **Fix:** * Ensure only **company-compatible** payment terms are applied when creating inter-company sale orders, purchase orders, and invoices. * Payment terms belonging to a different company are now ignored. **NOTE**: test is not implemented due to technical limitations. Inter-company invoice synchronization relies on UI context propagation that cannot be replicated in unit tests. The payment term validation logic depends on web client context flags that are only set during real UI interactions, not programmatic execution. opw-5392745
This update resolves an issue where the Amazon connector wasn't correctly identifying key delivery modules for major carriers like UPS, FedEx, USPS, and DHL. By mapping these modules, the connector now functions reliably with these carriers, ensuring accurate order processing and fulfillment within the Amazon integration.
Original PR description
Amazon connector did not recognize the _rest delivery modules (ups_rest, fedex_rest, usps_rest, dhl_rest). This maps them to the correct carrier names, consistent with existing mappings.
This update fixes an issue where the unit price and discount on Purchase Order Lines created through the vendor catalog were not correctly calculated. The fix ensures that the vendor's pricelist discount is accurately applied, resulting in correct pricing and subtotal calculations. This improves the accuracy of purchase order pricing.
Original PR description
**Steps to reproduce:** - Install the `purchase_stock` module. - Create a product and configure a Vendor Pricelist for a vendor. Include a discount on the vendor pricelist line. - Create a Purchase…
**Steps to reproduce:** - Install the `purchase_stock` module. - Create a product and configure a Vendor Pricelist for a vendor. Include a discount on the vendor pricelist line. - Create a Purchase Order for the same vendor. - In the Purchase Order, add a Purchase Order Line using the catalog (vendor catalog popup) and add a configured product. **Observed behavior:** - The unit price on the Purchase Order Line becomes vendor `unit price − discount` The `discount` field remains empty, causing incorrect price calculations. --- **Example** --- Product-A - > Vendor Price list - > Vendor - > Test Vendor, Unit price = 100 and discount 10 - Create PO with `Test Vendor` and add a Product to POL via catalog then **Current behavior:** Product - A , qty - >1, unit price -> 90, discount->0% , subtotal ->90 **Expected behavior :** Product-A , qty->1, unit_price->100, discount->10%, subtotal->90 --- **Cause:** - The catalog selection applies the vendor pricelist discount directly to the unit price instead of populating the discount field. **Fix:** - Use the vendor pricelist's price as the `unit_price` and apply vendor pricelist discount to the discount field on the Purchase Order Line. --- `NOTE` - This issue is resolved from version 18.2, In this [Commit](https://github.com/odoo/odoo/pull/227695/commits/6b91f393353bcdaeed076d58dcac3149ed587e77#diff-1281da5f4d0a3daaf162a2e6456469537d1b74b8034437783c9c717307aa8fcd) --- opw-5217345 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where the 'Month 13' column in the Mexican Trial Balance report incorrectly displayed data. The fix removed a redundant 'balance' column and corrected a hardcoded value, ensuring accurate reporting for Mexican companies. This improves the reliability of financial reports.
Original PR description
With l10n_mx company: 1 - Add the balance column to the “Trial Balance” accounting report 2 - Create a journal entry for the date 12/31/2024 for 5000 as a credit on the account 119.01.01 VAT due and balance it with 5000 as a debit on another account 3 - Open the Trial Balance report and click on the “Month 13” filter as well as the year 2024. Notice that the “Month 13” column has some numbers when there should not be a number in that column. Delete the balance column from the “Trial Balance” accounting report and notice that the numbers now appear in their appropriate columns. In the _l10n_mx_set_options_month_13 the way to find the initial value, month 13 and end value columns was hardcoded. opw-5222117
This update fixes an issue where manufacturing orders split into multiple MOs didn't consistently apply the defined removal strategy for components tracked by lots. The fix ensures all components are assigned correctly at once, guaranteeing the removal strategy is applied as intended, leading to more accurate inventory management.
Original PR description
**Problem:** When splitting a MO that has products with components tracked by lots, the new MOs won't follow the removal strategy assigned to said product. The first MO will have the first lot, and…
**Problem:** When splitting a MO that has products with components tracked by lots, the new MOs won't follow the removal strategy assigned to said product. The first MO will have the first lot, and the second MO will have the second lot, even if some products are still available in the first lot. Once every lot has been used once, the removal strategy is applied as intended on the remaining MOs. **Steps to reproduce:** - Make a product, that has a BoM with a component that is tracked by lots - Make two lots for this components - Set the removal strategy for this component to FIFO (or another one) - Make a manufacturing order with quantity high enough to use multiple lots - Confirm the MO and then split it in as much parts as components were used - Look at the lot of the second MO, it is the second lot, even though there are still components available in the first lot **Cause of the issue:** The removal strategy was not taken into account as a whole when splitting the MO. Thus resulting in values that seems kind of random. As the components were assigned one at a time to the backorders, they did not synchronize between themselves before being assigned, which explains why they did not have a correct lot assigned. **Fix:** As the components are assigned one at a time during the MO splitting, it is not an option to try and sort them according to the removal strategy during the assignation. We instead wait for all of the components to be assigned (in a wrong way) then unassign them all just to assign them the right way right afterwards. This is done by calling *_action_assign* which takes the removal strategy into account. This time around, all the components are assigned at them same time, making the removal strategy applicable. opw-4678932
This update fixes a technical issue that caused errors during server shutdowns. Specifically, the server stop process was incorrectly closing database connections before the system was ready, leading to errors. This change ensures a smoother and more reliable shutdown process, preventing these errors from occurring.
Original PR description
When the server stops, pool errors can occur. It's due to the server stop function calling `sql_db.py@close_all()`. If this occurs before the dispatcher loop wakes up, the `__exit__` function of the cursor context manager will raise an error, because the connection has already been popped from the pool. As for interface errors in [1], pool errors should be ignored during server shutodwn. runbot-229800 [1]: https://github.com/odoo/odoo/pull/99849 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
A test was failing in the website sale module due to a sale order not requiring payment. This update forces the sale order to always require a payment, resolving the test failure and ensuring consistent functionality. This ensures the website sale process functions correctly.
Original PR description
version: 17.0+e Why ? --------------- test_payment_provider_visibility_with_portal didn't pass on runbot because the sale order used doesn't reqire payment. The fix --------------- Force the sale order to require a payment. runbot-237786 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes a discrepancy in how holiday allocations are calculated when employees have different working schedules. Previously, the system produced inconsistent hour counts for related allocations. The fix ensures that all child allocations accurately reflect the total hours defined in the parent allocation, improving allocation accuracy and reporting.
Original PR description
### Steps to reproduce: - Create two employees with two different working schedule - Create a multi employee allocation for the created employees with 40 hours - Validate the allocation you created - Notice the number of hours is differenc between the two allocations ### Cause: When validating the multi employee allocation and while creating the children allocations we compute the number_of_hours_display and since we calculate it with number of days * hours per day it will result into two different values for the number of hours as the hours per day is different for each working schedule. ### Fix: To fix this we check if the allocation is an hourly one we change the number of days depending on the number of hours that we already got from the parent allocation. So when computing the number of hours for the children allocations we get the same value opw-5232797
This update resolves an issue where the UBL export incorrectly interpreted VAT information represented with a forward slash ('/'). The change ensures that VAT is properly handled when a partner doesn't have VAT, and the CompanyID field is correctly required in those cases, aligning with PEPPOL standards. This improves the accuracy of electronic invoices.
Original PR description
To signify that you know a partner does not have vat, we advise using '/'. But we should take care of that in the UBL export, to not consider it a real vat Also, in the cases where we don't have the vat, the CompanyID is supposed to be mandatory. https://docs.peppol.eu/poacc/billing/3.0/syntax/ubl-invoice/cac-TaxRepresentativeParty/cac-PartyTaxScheme/ So, remove the whole PartyTaxScheme if vat is not present. Zatca does not override that rule (except enforcing that seller must have vat, which raises a constraint), so we modify the tests for the simplified documents. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an error in the Swiss VAT reporting (figures 382a and 383a) for transactions with foreign vendors using reverse charge. The fix ensures accurate VAT calculations by correctly handling negative tax rates associated with reverse charges, preventing negative report figures.
Original PR description
**Steps to reproduce:** * Install the **l10n_ch** module for a Swiss company. * Create a vendor bill for a **foreign vendor**. * Apply a reverse charge tax: * **8.1% R C** (figure **383a**), or *…
**Steps to reproduce:** * Install the **l10n_ch** module for a Swiss company. * Create a vendor bill for a **foreign vendor**. * Apply a reverse charge tax: * **8.1% R C** (figure **383a**), or * **7.7% R C** (figure **382a**). * Confirm the vendor bill. * Go to **Accounting → Reporting → Tax Report**. * Generate the VAT report for the relevant period. **Observed behavior:** * Figure **383a** (8.1% reverse charge) is reported as **negative**. * Figure **382a** (7.7% reverse charge) is reported as **negative**. * This results in incorrect VAT reporting. **Cause:** * Reverse charge taxes use **negative tax rates** to model the reverse mechanism. * The base amounts were tagged with **positive** signs, leading to negative values in the report. **Fix:** * Invert the base tax tag signs for reverse charge taxes: * **382a**: change base tag from `-382a` to `+382a`. * **383a**: change base tag from `-383a` to `+383a`. * Reverse charge base amounts now appear as **positive** values in the VAT report. opw-5257445
This update resolves an issue that prevented users from correctly selecting a company after it had been unarchived. The problem stemmed from a timing conflict in the system's data processing, which caused incorrect company access permissions. This change ensures a smoother and more reliable unarchiving process.
Original PR description
**Steps to reproduce** - Have at least two active companies - Archive one company - Unarchive the company - Select the just unarchived company in the company selector - `Access Error: Access to unauthorized or invalid companies.` **Cause** There was a timing issue between the cache invalidation and the call to super. After the cache invalidation, if `_get_company_ids` of `res.users` was called before the call to `super` in the `write`, it would not return the just unarchived company. opw-5449925