Daily updates from Odoo
Navigate
Branch
Thursday, April 9, 2026
241 changes
20 changes
Resolved issues and error corrections
This update fixes an issue where users couldn't manually digitize vendor invoices when the 'Digitize on demand' setting was enabled. The previous version required a bill date, but this change now allows digitization to proceed without a specified date, while still ensuring data consistency through a validation step afterward. This improves the flexibility of the invoice digitization process.
Original PR description
### Issue: When setting Vendor Bills to Digitize on demand, it is no longer possible in 19.0 to trigger digitization manually if the Bill Date is not set A missing required fields error is raised ###…
### Issue: When setting Vendor Bills to Digitize on demand, it is no longer possible in 19.0 to trigger digitization manually if the Bill Date is not set A missing required fields error is raised ### Cause: This PR: https://github.com/odoo/odoo/pull/238911 introduced a required field to prevent an error modal from appearing While this works as intended, it also blocks the `Digitize Document` action, which is supposed to populate the Bill Date automatically ### Fix: A condition similar to the one used for the Digitize Document button is applied to allow triggering digitization without a Bill Date The validation modal is still enforced afterward to ensure data consistency in case of manual edits ### Steps to reproduce: - Install `account` - In Settings, set `Document Digitization` for `Vendor Bills` to `Digitize on demand only` - Create and print an invoice (any data) or use an existing one - Import it into Vendor Bills - Click Digitize Document ### Before the fix: A missing required fields notification is raised, preventing digitization opw-5886012 Forward-Port-Of: odoo/enterprise#112585
This update resolves a stability issue in the expense tracking wizard by switching to a temporary model. Using a `TransientModel` is the correct approach for wizards, ensuring the wizard data is handled efficiently and reliably. This change improves the overall stability of the expense reporting process.
Original PR description
`HrExpenseStripeTestPurchaseWizard` is currently using a normal `Model`, but it's a wizard, so use a `TransientModel`. Forward-Port-Of: odoo/enterprise#113313
This update ensures that negative values in the Mod 390 tax reports for Spain (l10n_es_reports) are accurately marked with the 'N' indicator, as required by Spanish tax regulations. Previously, these values were missing the necessary indicator, leading to potential reporting errors. This fix aligns with official documentation and ensures accurate data submission to the tax authorities.
Original PR description
### Issue: Negative values in the Mod 390 report were not properly marked with the N indicator for several fields ### Cause: The parameter `signed=True` was missing on some fields where negative…
### Issue: Negative values in the Mod 390 report were not properly marked with the N indicator for several fields ### Cause: The parameter `signed=True` was missing on some fields where negative values should include the N indicator in the BOE export ### Note: According to the official specification, negative amounts must be explicitly marked with N Latest documentation: https://sede.agenciatributaria.gob.es/static_files/Sede/Disenyo_registro/DR_300_399/archivos_25/dr390e2025.xlsx ### Steps to reproduce: - Install `l10n_es_reports` with demo data and switch to the ES company - Create a Bill (Price: 100, Taxes: 21% G) - Go to Tax Report and select Tax Report (Mod 390) (ES) for the full year - Open the VAT Deductible tab - The last line (65) should be negative - Export the BOE file using the gear menu - Check the last value of section 4 in the file ### Before the fix: Negative values were not marked with N opw-5482706 Forward-Port-Of: odoo/enterprise#113200 Forward-Port-Of: odoo/enterprise#111262
This update fixes a problem where users weren't receiving clear error messages when the SendCloud delivery service encountered an issue. A helpful hint has been added to the error message, guiding users to resolve the problem and ensuring smoother delivery processes. This improves the user experience and reduces potential delays.
Original PR description
Add hint with error message. ----- Ticket: opw-6072855 Forward-Port-Of: odoo/enterprise#112463
This update fixes an error in the Italian tax returns that was incorrectly including taxes beyond withholding taxes, such as INPS contributions. The fix ensures that the total amount calculated on the tax return accurately reflects only the withholding tax obligations, improving the reliability of Italian tax reporting. This update addresses a previous issue impacting financial accuracy.
Original PR description
### Issue before this commit: Before this commit, validating an Italian withholding tax return could incorrectly include taxes that are not related to withholding. In particular, pension fund taxes…
### Issue before this commit: Before this commit, validating an Italian withholding tax return could incorrectly include taxes that are not related to withholding. In particular, pension fund taxes such as 4% INPS were included in the computed total amount to pay, even though they should not be part of the withholding tax return. As a result, the final amount shown in the return was incorrect. ### Steps to reproduce the issue: 1. Download Accounting and l10n_it and switch to italian company 2. Create an invoice and a bill with a witholding tax (ex. 20% RIT PF) 3. Mark them as paid and reconcile them 4. Open a tax return and validate it 5. See that the total amount calculated includes also other taxes than only witholding taxes ### Cause of the issue: The issue was caused by a missing domain restriction when computing the tax closing entries. The method _get_vat_closing_entry_additional_domain did not properly apply a filter on tax tags for the withholding tax return type l10n_it_reports.it_withh_tax_return_type. Because of this, the query used to compute tax balances included all taxes matching the generic conditions (date, company, posted state, etc.), without restricting them to the relevant withholding tax tags. Consequently, unrelated taxes were included in the computation. ### Reason to introduce the fix: To restore the correctness of the tax return totals. opw-5905355 Forward-Port-Of: odoo/enterprise#112638
This update fixes a minor performance issue with the breadcrumb visibility preview on the website. Previously, the system unnecessarily saved option changes even when simply viewing the preview. This change streamlines the process, ensuring faster preview updates and a smoother user experience.
Original PR description
The option for the visibility option of the breadcrumbs uses a custom save handler (the same as for the header and the footer). To avoid making the rpc to save the options when nothing has been changed, it keeps a flag telling whether there has been any change. This flag was set when changing the visibility option for the breadcrumb even when simply previewing the option. This commit uses the same strategy as for the header and footer's option, and only set the flag if not previewing. task-5149984 Forward-Port-Of: odoo/odoo#250206
This update resolves an issue where expected hours weren't consistently calculated for attendance records, particularly with overtime. The change ensures that expected hours are always accurately updated, preventing discrepancies in reporting and improving the accuracy of time tracking. This fix addresses a bug that caused incorrect hour calculations when overtime was recorded.
Original PR description
The expected_hours field was not always being computed for attendances. self.add_to_compute is used here to ensure that it is always recomputed. 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#256744 Forward-Port-Of: odoo/odoo#251989
This update fixes an issue where invoicing a Point of Sale order multiple times would create unnecessary stock pickings. Previously, clicking 'Invoice' repeatedly resulted in duplicate stock movements, especially when using the 'Anglo-Saxon' accounting method. This change ensures that pickings are only created once, streamlining inventory management and reducing potential errors.
Original PR description
Calling `action_pos_order_invoice` on an already-invoiced POS order (e.g. a backend user clicking "Invoice" more than once) would unconditionally invoke `_create_order_picking`, producing one extra `stock.picking` per click under anglo-saxon + update_stock_at_closing configurations. opw-6092999 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#257509
This update fixes an issue preventing portal users from saving changes to their profile information. The change in how access rights are handled in the system required a manual `sudo` check before saving user data. This ensures users can correctly update their profile details, improving the user experience.
Original PR description
# How to reproduce - Install the eLearning module - Log in as a portal user - Make sure this portal user has more than 0 karma (Use demo Joel Willis or go through a quick Course) - Go to Courses >…
# How to reproduce - Install the eLearning module - Log in as a portal user - Make sure this portal user has more than 0 karma (Use demo Joel Willis or go through a quick Course) - Go to Courses > View your profile (on the right side) > Edit Profile - Edit any value and confirm by clicking on the Update button # The problem The popup is not saved and a warning notification is displayed with : "You are not allowed to modifiy 'User' (res.users) records" # Why In 19.0, there was no access rights problem because the write operation was done in `sudo` due to this code that checked that every edited field was safe : https://github.com/odoo/odoo/blob/4f77b4c8f7a3ee9f85f045eea02a5749affd4b6a/odoo/addons/base/models/res_users.py#L615 This was the case because we preventively filtered only the safe fields in the save controller : https://github.com/odoo/odoo/blob/355643291e2f4bb05185b996adce6e1f403ecbd4/addons/website_profile/controllers/main.py#L153 In 19.1 though, this commit totally changed the way the acces rights for the fields of the user model were handled : https://github.com/odoo/odoo/commit/a816d151ae16afc62d7980cedc492942bc181884 One of the purpose of this improvement was to make sure a `sudo` is not automatically introduced and rather should be done explicitely when it is needed. # Proposed solution We first check that the current user can modifiy the specified user. If that is the case, we write with `sudo` opw-6032339 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#256888
This update resolves an issue where the 'Export XML' button wasn't consistently producing the correct EU Standard (Peppol Bis 3.0) invoice file. Now, users can download invoices in this format when selecting it, ensuring accurate data exchange with trading partners in regions like Croatia.
Original PR description
Issue: Export XML button doesn't produce the same file as the send button. Steps to reproduce: - Company in Spain with Peppol (work with any Peppol country) - Partner in Croatia - Select eInvoice…
Issue: Export XML button doesn't produce the same file as the send button. Steps to reproduce: - Company in Spain with Peppol (work with any Peppol country) - Partner in Croatia - Select eInvoice Type as "EU Standard (Peppol Bis 3.0)" - Create an invoice - Confirm it - Click on the Wheel -> Download Current behavior: - without l10n_hr_edi: only "PDF" and "PDF without Payment" - with l10n_hr_edi: "Export XML" appear, but try to create an "ubl_hr" file Cause: "Export XML" button appear only if: - there is a default ubl option for the partner country - there is an XML attached to the invoice when clicked it exports the corresponding one. Whereas, the 'send' button rely on: 1) the partner defined edi format, 2) the default ubl option for the partner country 3) "ubl_bis3" To be noted: The route to download the XML doesn't keep the context of the active company and fallback to the first allowed company. As invoice_edi_format is company dependent it needs to be exported in the format defined for the company of the invoice. opw-5943500 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#257990 Forward-Port-Of: odoo/odoo#253650
This update corrects an issue where special characters (&) in vendor bill references were causing errors during SEPA payment file generation. The fix replaces '&' with '+' to ensure compliance with SEPA/SIX standards, preventing payment rejection by banks and ensuring accurate export of payment data.
Original PR description
Steps to reproduce: 1. Install modules `account_batch_payment` and `l10n_ch`. 2. Configure SEPA Credit Transfer for a CH company. 3. Create a vendor bill with a reference containing `&` (e.g. "Net &…
Steps to reproduce: 1. Install modules `account_batch_payment` and `l10n_ch`. 2. Configure SEPA Credit Transfer for a CH company. 3. Create a vendor bill with a reference containing `&` (e.g. "Net & Cost"), confirm it and register a payment using SEPA Credit Transfer. 4. Create a batch payment with the SEPA payment and validate it. Issue: The `&` character is exported as `&` in the generated PAIN XML, while according to the SIX specification it should be replaced with `+` Cause: The payment reference is inserted into the PAIN XML file without replacing the '&' character. During XML generation this produces an invalid entity (`&`) which results in an `XMLSyntaxError` and prevents the payment file from being processed. Solution: Replace the `&` character with `+` when sanitizing the payment communication so that the generated value complies with the SEPA/SIX character set and produces valid XML. Reference[Pg: 9]: https://www.europeanpaymentscouncil.eu/sites/default/files/KB/files/EPC217-08%20Draft%20Best%20Practices%20SEPA%20Requirements%20for%20Character%20Set%20v1.1.pdf opw-5941724 Co-authored by @bhra-odoo Forward-Port-Of: odoo/enterprise#110809
This update fixes an issue where invoices for downpayments were incorrectly using a default expense account instead of the designated ACC1 account. The change ensures that downpayment invoice lines now automatically use the correct account, streamlining the accounting process and preventing misallocation of funds. This improves accuracy and simplifies financial reporting.
Original PR description
Steps to reproduce: 1/ install purchase and accountant 2/ create and setup an expense account dedicated to your downpayments (typically code 60-, account type "expense"), ACC1. 3/ setup a service type product named "downpayment" 4/ set the default expense account on that product to be ACC1. 5/ create a PO for any product other than the downpayment (PO1). take note of the partner. 6/ create a bill for the same partner as the one set on PO1. Call it BILL1. 7/ On BILL1, add one invoice line with the "downpayment" product. Set a unit price. 8/ Confirm BILL1 and match it with PO1 via the "bill matching" smart button. Add it as a downpayment. 9/ Back on PO1, receive the products. Create a bill (BILL2). => The account suggested for the downpayment line in BILL2 will use the default expense account instead of ACC1. After this commit, the account suggested will be the one used in BILL1 for the downpayment line. opw-5253877 Forward-Port-Of: odoo/odoo#245518
This update fixes an issue where PEPPOL self-billing invoices weren't correctly including the delivery address and GLN number. The change ensures that the delivery address from the company partner is used in the generated XML, improving data accuracy for PEPPOL transactions. This ensures compliance and accurate invoice delivery.
Original PR description
**PROBLEM** When selfbilling with peppol, we have no way of providing a GLN number, or modifying the delivery address. Even if we create a delivery address partner on the current company partner, it's not taken into account. **STEP TO REPRODUCE** 1. Create a delivery address on the current company, set up a GLN number. 2. Configure the purchase journal to do selfbilling. 3. Create a vendor bill with this journal and send it using peppol. 4. Download the xml, and look for the Delivery tag, and notice it doesn't have the GLN number. **FIX** We search for a delivery address on the current company. If there is one, we use it for the Delivery tag. opw-6014374 Forward-Port-Of: odoo/odoo#257414 Forward-Port-Of: odoo/odoo#252970
This update automatically renews the KSeF token for our Polish users every 6 days. Previously, expired tokens caused disruptions in bill and invoice synchronization. This change ensures seamless and uninterrupted data exchange with the Polish tax authority, avoiding manual intervention.
Original PR description
The KSeF refresh token issued by the Polish Ministry of Finance expires after a week. Once it expires, the automatic fetching of incoming bills and sending of invoices will fail until the user manually re-authenticates in the settings. To ensure uninterrupted synchronization with the KSeF API, this commit adds a new scheduled action that runs every 6 days to automatically renew the tokens. task-6041758 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#256700
This update ensures consistent reporting of tax amounts in the Dutch (nl) version of Odoo. Previously, a negative sign was used to represent tax deductions, aligning with how taxes were configured. This change standardizes the report output for improved clarity and accuracy.
Original PR description
It is be better to change the sign, because it is under supplies and the other report lines in that section also have a negative sign. In other words, anyone who would have configured the tax, would have used the negative tag to configure it right before. Now that the sign on the tags is gone, we need to put it correctly on the report line. opw-5874677 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#255039
This update resolves a potential issue in our Point of Sale tests where refreshing the page prematurely interrupted database transactions. By increasing the timeout for these transactions, we've enhanced the reliability of our test suite and reduced the risk of test failures. This ensures our POS functionality continues to perform consistently.
Original PR description
In some tests, we use refresh which will refresh the page after letting the indexedDB finish its transactions. In some cases, the transactions take more time than expected. In this commit, we increase this timeout to avoid failures that could be caused by not letting the time to the db to finish its transactions. runbot-errors: 240911, 240912 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#253095
This update fixes a display issue where rental products would show an 'out of stock' ribbon even when their quantity was zero. The change ensures that rental products are correctly identified as available for rental, aligning with their time-based stock management. This improves the customer experience for rental orders.
Original PR description
Currently, when a rental product's quantity on hand drops to 0, the out-of-stock ribbon is displayed on the website for that product. Steps to produce: --- - Install the `eCommerce Rental with Stock…
Currently, when a rental product's quantity on hand drops to 0, the out-of-stock ribbon is displayed on the website for that product. Steps to produce: --- - Install the `eCommerce Rental with Stock Management` module. - Create a rental product and set Quantity On Hand to 1. - Under the Sales tab, disable `Sell when Out of Stock`. - Under the Rental Prices tab, add pricing. - Go to `website > ecommerce > products > product ribbons`. - Open `out of stock` ribbon > set assign as `when out of stock`. - Create and Confirm a rental order for that product and validate the pickup. - The product's Quantity On Hand drops to 0. - Opening the product on the website Observation: --- - The product shows the out-of-stock ribbon. Cause: --- - At [1], the or condition evaluates to True because the ribbon is configured as `when out of stock`, `Sell when Out of Stock` is disabled under the Sales tab, and `_is_sold_out` also returns True since the quantity dropped to 0 after the pickup was validated. As all conditions are met, the ribbon is returned and displayed without ever checking whether the product is a rental. Skip the out-of-stock ribbon assignment for rental products, since their stock availability is time-based. [1]: https://github.com/odoo/odoo/blob/12dd03fb678870ddd3f1f8dca66aa3f934aa7985/addons/website_sale_stock/models/product_ribbon.py#L21-L28 opw-6081483 --- Forward-Port-Of: odoo/enterprise#113280 Forward-Port-Of: odoo/enterprise#112660
This update ensures that subtasks created from project templates, particularly those linked to Sales Orders, correctly inherit the sale_line_id from their parent task. Previously, this resulted in issues with timesheet logging. The fix corrects a technical detail in how project templates are copied, guaranteeing accurate data propagation for all task types.
Original PR description
When creating tasks from a project template via a Sales Order, the main task is created with its sale_line_id set correctly, but subtasks from the template do not inherit the sale_line_id from their…
When creating tasks from a project template via a Sales Order, the main task is created with its sale_line_id set correctly, but subtasks from the template do not inherit the sale_line_id from their parent. Steps to reproduce: 1. Create a project template with a parent task and subtasks 2. Create a service product that uses this project template 3. Create and confirm a Sales Order with this product 4. Check the created tasks: main task has sale_line_id, subtasks don't 5. Log hours on a subtask: the timesheet's so_line remains empty Root cause: When copying a project template, the copy_data() method for subtasks was resetting the default dict to only contain 'parent_id': False. This meant that whitelisted fields like sale_line_id from the parent task were not propagated to the subtasks during the copy operation. Solution: When copying from a template (copy_from_template context), preserve whitelisted fields (including sale_line_id) in the default dict before copying subtasks. This allows subtasks to naturally inherit sale_line_id from their parent during creation, so the compute method works correctly. opw-5185519 Forward-Port-Of: odoo/odoo#236342
This update corrects a previous issue where the Amazon fulfillment channel in the sales module was incorrectly displayed as read-only. The change ensures users can now modify this channel setting, allowing for greater flexibility in managing Amazon sales operations. This resolves a reported usability problem.
Original PR description
Commit 67c45d6494f082e2ee83b9a84611e8b8fe8f4fd5 intended to make `amazon_channel` editable by users. However, the field was displayed with the `badge` widget, which is read-only, so it remained uneditable. Use an editable display for `amazon_channel` so the original fix works as intended. Forward-Port-Of: odoo/enterprise#113196 Forward-Port-Of: odoo/enterprise#112866
This update corrects a display issue in Danish balance sheet and profit & loss reports. It simplifies the report format using account sublines and ensures accurate Danish translations for improved accounting accuracy. This resolves a bug where amounts weren't shown when certain report settings were active.
Original PR description
We updated the Danish balance sheet and profit and loss reports to reflect the changes in the Danish chart of accounts and common practice in Danish accounting. We also simplified the reports to use the accounts themselves as sublines instead of having a separate report line for each account. Finally we made sure we use the official Danish translations and updated the English translations as well. task-5929517 Related: https://github.com/odoo/odoo/pull/256541 Forward-Port-Of: odoo/enterprise#113101 Forward-Port-Of: odoo/enterprise#112430
10 changes
Resolved issues and error corrections
This update fixes a display issue where rental products would show an 'out of stock' ribbon even when their quantity was zero. The change ensures that rental products don't incorrectly show this ribbon, aligning with their time-based stock availability. This improves the customer experience for rental orders.
Original PR description
Currently, when a rental product's quantity on hand drops to 0, the out-of-stock ribbon is displayed on the website for that product. Steps to produce: --- - Install the `eCommerce Rental with Stock…
Currently, when a rental product's quantity on hand drops to 0, the out-of-stock ribbon is displayed on the website for that product. Steps to produce: --- - Install the `eCommerce Rental with Stock Management` module. - Create a rental product and set Quantity On Hand to 1. - Under the Sales tab, disable `Sell when Out of Stock`. - Under the Rental Prices tab, add pricing. - Go to `website > ecommerce > products > product ribbons`. - Open `out of stock` ribbon > set assign as `when out of stock`. - Create and Confirm a rental order for that product and validate the pickup. - The product's Quantity On Hand drops to 0. - Opening the product on the website Observation: --- - The product shows the out-of-stock ribbon. Cause: --- - At [1], the or condition evaluates to True because the ribbon is configured as `when out of stock`, `Sell when Out of Stock` is disabled under the Sales tab, and `_is_sold_out` also returns True since the quantity dropped to 0 after the pickup was validated. As all conditions are met, the ribbon is returned and displayed without ever checking whether the product is a rental. Skip the out-of-stock ribbon assignment for rental products, since their stock availability is time-based. [1]: https://github.com/odoo/odoo/blob/12dd03fb678870ddd3f1f8dca66aa3f934aa7985/addons/website_sale_stock/models/product_ribbon.py#L21-L28 opw-6081483 --- Forward-Port-Of: odoo/enterprise#112660
This update fixes an issue preventing users from manually digitizing vendor invoices when the Bill Date is initially missing. A previous change required a Bill Date to trigger digitization, which was inconvenient. Now, users can manually initiate digitization without a Bill Date, while still ensuring data consistency through a validation step afterward.
Original PR description
### Issue: When setting Vendor Bills to Digitize on demand, it is no longer possible in 19.0 to trigger digitization manually if the Bill Date is not set A missing required fields error is raised ###…
### Issue: When setting Vendor Bills to Digitize on demand, it is no longer possible in 19.0 to trigger digitization manually if the Bill Date is not set A missing required fields error is raised ### Cause: This PR: https://github.com/odoo/odoo/pull/238911 introduced a required field to prevent an error modal from appearing While this works as intended, it also blocks the `Digitize Document` action, which is supposed to populate the Bill Date automatically ### Fix: A condition similar to the one used for the Digitize Document button is applied to allow triggering digitization without a Bill Date The validation modal is still enforced afterward to ensure data consistency in case of manual edits ### Steps to reproduce: - Install `account` - In Settings, set `Document Digitization` for `Vendor Bills` to `Digitize on demand only` - Create and print an invoice (any data) or use an existing one - Import it into Vendor Bills - Click Digitize Document ### Before the fix: A missing required fields notification is raised, preventing digitization opw-5886012 Forward-Port-Of: odoo/enterprise#112585
This update corrects a stability issue within the Odoo Enterprise's expense tracking system. By switching to a 'TransientModel' for the wizard, the system is now more reliable and efficient. This change ensures smoother operation for users managing expense reports.
Original PR description
`HrExpenseStripeTestPurchaseWizard` is currently using a normal `Model`, but it's a wizard, so use a `TransientModel`. Forward-Port-Of: odoo/enterprise#113313
This update resolves an issue where negative values in the Mod 390 tax report were not being properly marked with the 'N' indicator, as required by Spanish tax regulations. The fix ensures accurate reporting by adding a necessary parameter to the BOE export, aligning with official documentation for data submission.
Original PR description
### Issue: Negative values in the Mod 390 report were not properly marked with the N indicator for several fields ### Cause: The parameter `signed=True` was missing on some fields where negative…
### Issue: Negative values in the Mod 390 report were not properly marked with the N indicator for several fields ### Cause: The parameter `signed=True` was missing on some fields where negative values should include the N indicator in the BOE export ### Note: According to the official specification, negative amounts must be explicitly marked with N Latest documentation: https://sede.agenciatributaria.gob.es/static_files/Sede/Disenyo_registro/DR_300_399/archivos_25/dr390e2025.xlsx ### Steps to reproduce: - Install `l10n_es_reports` with demo data and switch to the ES company - Create a Bill (Price: 100, Taxes: 21% G) - Go to Tax Report and select Tax Report (Mod 390) (ES) for the full year - Open the VAT Deductible tab - The last line (65) should be negative - Export the BOE file using the gear menu - Check the last value of section 4 in the file ### Before the fix: Negative values were not marked with N opw-5482706 Forward-Port-Of: odoo/enterprise#113200 Forward-Port-Of: odoo/enterprise#111262
This update fixes a problem where users weren't receiving clear error messages when the delivery service failed. A helpful hint has been added to the system, guiding users to resolve the issue and ensuring smoother delivery processes. This change improves user experience and reduces potential delays.
Original PR description
Add hint with error message. ----- Ticket: opw-6072855 Forward-Port-Of: odoo/enterprise#112463
This update fixes an error in the Italian tax returns that was incorrectly including taxes beyond withholding taxes (like INPS). The fix ensures the total amount calculated on the tax return accurately reflects only the withholding tax, improving the reliability of Italian tax reporting. This prevents inaccurate financial reporting.
Original PR description
### Issue before this commit: Before this commit, validating an Italian withholding tax return could incorrectly include taxes that are not related to withholding. In particular, pension fund taxes…
### Issue before this commit: Before this commit, validating an Italian withholding tax return could incorrectly include taxes that are not related to withholding. In particular, pension fund taxes such as 4% INPS were included in the computed total amount to pay, even though they should not be part of the withholding tax return. As a result, the final amount shown in the return was incorrect. ### Steps to reproduce the issue: 1. Download Accounting and l10n_it and switch to italian company 2. Create an invoice and a bill with a witholding tax (ex. 20% RIT PF) 3. Mark them as paid and reconcile them 4. Open a tax return and validate it 5. See that the total amount calculated includes also other taxes than only witholding taxes ### Cause of the issue: The issue was caused by a missing domain restriction when computing the tax closing entries. The method _get_vat_closing_entry_additional_domain did not properly apply a filter on tax tags for the withholding tax return type l10n_it_reports.it_withh_tax_return_type. Because of this, the query used to compute tax balances included all taxes matching the generic conditions (date, company, posted state, etc.), without restricting them to the relevant withholding tax tags. Consequently, unrelated taxes were included in the computation. ### Reason to introduce the fix: To restore the correctness of the tax return totals. opw-5905355 Forward-Port-Of: odoo/enterprise#112638
This update corrects a problem where special characters (specifically '&') in payment references were incorrectly formatted during SEPA XML export. This prevented payments from being processed by banks, ensuring compliance with SEPA regulations and accurate financial reporting. The fix replaces '&' with '+' to meet SEPA/SIX requirements.
Original PR description
Steps to reproduce: 1. Install modules `account_batch_payment` and `l10n_ch`. 2. Configure SEPA Credit Transfer for a CH company. 3. Create a vendor bill with a reference containing `&` (e.g. "Net &…
Steps to reproduce: 1. Install modules `account_batch_payment` and `l10n_ch`. 2. Configure SEPA Credit Transfer for a CH company. 3. Create a vendor bill with a reference containing `&` (e.g. "Net & Cost"), confirm it and register a payment using SEPA Credit Transfer. 4. Create a batch payment with the SEPA payment and validate it. Issue: The `&` character is exported as `&` in the generated PAIN XML, while according to the SIX specification it should be replaced with `+` Cause: The payment reference is inserted into the PAIN XML file without replacing the '&' character. During XML generation this produces an invalid entity (`&`) which results in an `XMLSyntaxError` and prevents the payment file from being processed. Solution: Replace the `&` character with `+` when sanitizing the payment communication so that the generated value complies with the SEPA/SIX character set and produces valid XML. Reference[Pg: 9]: https://www.europeanpaymentscouncil.eu/sites/default/files/KB/files/EPC217-08%20Draft%20Best%20Practices%20SEPA%20Requirements%20for%20Character%20Set%20v1.1.pdf opw-5941724 Co-authored by @bhra-odoo Forward-Port-Of: odoo/enterprise#110809
This update resolves a critical issue where users could cancel documents after all signatures were collected, potentially compromising legal records. Now, the cancel button disappears automatically once signing is complete, and backend cancellations are blocked to ensure document permanence and security. This protects the integrity of agreements and provides a more reliable record.
Original PR description
Before this commit, users could cancel documents after everyone had signed. This weakened legal records and proof of agreement. After this commit, the cancel button disappears once signing is complete. We also blocked backend cancellations to keep finished documents permanent and secure. task-5980337 Forward-Port-Of: odoo/enterprise#112617 Forward-Port-Of: odoo/enterprise#109353
This update corrects a bug that prevented users from editing the Amazon fulfillment channel within the Odoo Enterprise system. The issue was due to a read-only display widget, which has now been replaced with an editable option. This ensures users can accurately manage their Amazon selling operations.
Original PR description
Commit 67c45d6494f082e2ee83b9a84611e8b8fe8f4fd5 intended to make `amazon_channel` editable by users. However, the field was displayed with the `badge` widget, which is read-only, so it remained uneditable. Use an editable display for `amazon_channel` so the original fix works as intended. Forward-Port-Of: odoo/enterprise#113196 Forward-Port-Of: odoo/enterprise#112866
This update corrects a discrepancy in the calculation of employment bonuses for Odoo Enterprise users in Belgium. The change reflects the latest regulations from Partena Professional, ensuring accurate bonus payments up to April 2026. This update maintains compliance with Belgian tax laws and avoids potential financial discrepancies.
Original PR description
https://www.partena-professional.be/fr/le-bonus-lemploi-au-1er-avril-2026?utm_source=sfmc&utm_medium=email&utm_campaign=InfoFlash+Daily+Mail+-+FR&utm_content=article-read-more-cta&utm_term=All%20Subscribers&utm_id=81873&sfmcContactKey=litom@odoo.com Forward-Port-Of: odoo/enterprise#112970
8 changes
Resolved issues and error corrections
This update ensures that negative values in the Mod 390 tax reports for Spain (l10n_es_reports) are accurately marked with the 'N' indicator as required by Spanish tax regulations. Previously, this indicator was missing, leading to potential reporting discrepancies. This fix aligns with official documentation for accurate tax reporting.
Original PR description
### Issue: Negative values in the Mod 390 report were not properly marked with the N indicator for several fields ### Cause: The parameter `signed=True` was missing on some fields where negative…
### Issue: Negative values in the Mod 390 report were not properly marked with the N indicator for several fields ### Cause: The parameter `signed=True` was missing on some fields where negative values should include the N indicator in the BOE export ### Note: According to the official specification, negative amounts must be explicitly marked with N Latest documentation: https://sede.agenciatributaria.gob.es/static_files/Sede/Disenyo_registro/DR_300_399/archivos_25/dr390e2025.xlsx ### Steps to reproduce: - Install `l10n_es_reports` with demo data and switch to the ES company - Create a Bill (Price: 100, Taxes: 21% G) - Go to Tax Report and select Tax Report (Mod 390) (ES) for the full year - Open the VAT Deductible tab - The last line (65) should be negative - Export the BOE file using the gear menu - Check the last value of section 4 in the file ### Before the fix: Negative values were not marked with N opw-5482706 Forward-Port-Of: odoo/enterprise#113200 Forward-Port-Of: odoo/enterprise#111262
This update resolves a problem where EPD bill payments weren't correctly updating their status in the system. The fix ensures that payments are accurately marked as 'paid' after reconciliation, improving the reliability of financial reporting. This was triggered by a specific test scenario involving early payment terms and bank transactions.
Original PR description
Steps to reproduce: - Create an early payment term. - Create a Vendor Bill with EPD and post it. - Register a payment for this bill (no outstanding account set on journal => no move created). - Create a bank transaction fully paying the bill. - Reconcile the transaction with the bill. Issue: Access the payment of the bill. The payment state remains 'in_process' instead of 'paid'. Fix in community: https://github.com/odoo/odoo/pull/256486 opw-5881976 Forward-Port-Of: odoo/enterprise#112398
This update resolves an issue where automatic bank reconciliation would fail when using the liquidity account as an outstanding payment account. The fix prevents the system from attempting to reconcile transactions with this account, avoiding a persistent error message and ensuring data integrity. This improves the reliability of bank statement processing.
Original PR description
# How to reproduce - Create a new Journal - Go to the Configuration of the Journal > Outgoing Payments > Set the Outstanding Payment accounts for the Manual payment Payment Method to the liquidity…
# How to reproduce - Create a new Journal - Go to the Configuration of the Journal > Outgoing Payments > Set the Outstanding Payment accounts for the Manual payment Payment Method to the liquidity account - Go to the Transactions of the Journal - Add a new Transaction for partner X and amount Y - Add a second Transaction also for partner X and amount Y # The issue A popup appears that can never be saved # Cause When we click on "Add & New" or "Add & Close", we run the `validate()` function : https://github.com/odoo/enterprise/blob/9abb50b9b29e01897b4fb90ae228beecbdfcd5af/account_accountant/static/src/components/bank_reconciliation/quick_create/quick_create.xml#L14-L16 Which tries to do a model save, but it fails so it show the Form dialog : https://github.com/odoo/odoo/blob/6e77d840a2876e45544b21a911be05b2f32b8afb/addons/web/static/src/views/kanban/kanban_record_quick_create.js#L159-L163 The save fails because : This commit (https://github.com/odoo/enterprise/commit/e2b3439dcda26f84b9a290c8d5fb819dd3250825) changed the the logic behind auto-reconcilation with an outstanding account. When there is an outstanding account, we try to auto-reconcile the bank statement with that account and succesfully do so : https://github.com/odoo/enterprise/blob/e2b3439dcda26f84b9a290c8d5fb819dd3250825/account_accountant/models/account_bank_statement.py#L381-L385 https://github.com/odoo/enterprise/blob/e2b3439dcda26f84b9a290c8d5fb819dd3250825/account_accountant/models/account_bank_statement.py#L245 But this should not happen when the outstanding account is the liquidity account, because it will end up throwing an error when the amount is matched more than once: https://github.com/odoo/odoo/blob/6e77d840a2876e45544b21a911be05b2f32b8afb/addons/account/models/account_bank_statement_line.py#L727-L737 opw-6063654 Forward-Port-Of: odoo/enterprise#112750
This update fixes a potential issue with the SendCloud delivery module by adding a clearer error message when delivery attempts fail. This ensures users receive more informative feedback, allowing them to quickly understand and resolve delivery problems. The change was driven by a support ticket (OPW-6072855) to enhance the user experience.
Original PR description
Add hint with error message. ----- Ticket: opw-6072855 Forward-Port-Of: odoo/enterprise#112463
This update resolves an issue where shipping notifications were sometimes failing due to missing tracking data from Easypost. The fix ensures that picking validation occurs correctly and the carrier tracking URL is appropriately empty, preventing shipping creation in Easypost without proper tracking information. Easypost support suggested a slight delay between order placement and tracking retrieval as a potential workaround.
Original PR description
Problem: 'tracker' object in response from GET /orders/:id request can sometimes be null. This means that when the mail template 'mail_template_data_delivery_confirmation' is sent, a traceback occurs…
Problem: 'tracker' object in response from GET /orders/:id request can sometimes be null. This means that when the mail template 'mail_template_data_delivery_confirmation' is sent, a traceback occurs with error: TypeError: 'NoneType' object is not subscriptable. As a result the picking is not validated in odoo but a shipping has succesfully been created in the easypost backend. Solution: Prevent traceback form happening, picking gets correctly validated and carrier_tracking_url field is empty. Transcript from Easypost support: << I'm also seeing the tracker showing as null when reviewing the response. I'll go ahead and create a ticket for the engineering team to investigate. I can see that the tracking code is being returned in the request, but the full tracking object is not. Since this appears to be happening on a case-by-case basis, you may want to allow more time between the BUY and the GET requests, as I noticed they are being triggered very close together. I'm not certain if that's related, but it may be worth trying as a troubleshooting step while we have this under review. >> opw-5402415 Forward-Port-Of: odoo/enterprise#111833
This update fixes an issue where Odoo incorrectly consumed stock from the wrong location when scanning serial numbers on manufacturing orders. Previously, the system prioritized a location (Vendors or Stock) based on database ID, leading to inaccurate stock tracking. This change ensures the correct Stock location is always selected, improving inventory accuracy.
Original PR description
Steps to reproduce: - Create a Manufacturing Order with a serial-tracked component. - Open the Shop Floor. - Scan the serial number barcode to register the component. - Observe which location the component was consumed from. Issue: When a product is received from a vendor, Odoo creates two quants for the same serial number — one at Partners/Vendors location and one at WH/Stock location. Because get_quant_from_barcode searched for a matching serial number with no location filter, it returned whichever quant had the lowest database ID — which was always the Partners/Vendors or Production quant created first — instead of the correct WH/Stock quant. Solution: Prevent selecting a quant from an incorrect location when multiple quants exist for the same serial number, as this can lead to consuming stock from the wrong location. opw-5974474 Forward-Port-Of: odoo/enterprise#112691
This update fixes a problem where closing an Odoo session was blocked when generating the DSFinV-K export for orders lacking a user ID. The change ensures that session closure can proceed smoothly, regardless of the presence of this user ID, improving reliability and preventing disruptions.
Original PR description
Before this commit, closing a session was blocked if an order was missing the user_id field during DSFinV-K export generation. opw-6067382 Forward-Port-Of: odoo/enterprise#112119
This update corrects a problem where '&' characters in vendor bill references were incorrectly exported as '&' in SEPA payment files. This prevented successful processing of payments by banks, ensuring compliance with SEPA regulations and avoiding payment failures. The fix replaces '&' with '+' during XML generation.
Original PR description
Steps to reproduce: 1. Install modules `account_batch_payment` and `l10n_ch`. 2. Configure SEPA Credit Transfer for a CH company. 3. Create a vendor bill with a reference containing `&` (e.g. "Net &…
Steps to reproduce: 1. Install modules `account_batch_payment` and `l10n_ch`. 2. Configure SEPA Credit Transfer for a CH company. 3. Create a vendor bill with a reference containing `&` (e.g. "Net & Cost"), confirm it and register a payment using SEPA Credit Transfer. 4. Create a batch payment with the SEPA payment and validate it. Issue: The `&` character is exported as `&` in the generated PAIN XML, while according to the SIX specification it should be replaced with `+` Cause: The payment reference is inserted into the PAIN XML file without replacing the '&' character. During XML generation this produces an invalid entity (`&`) which results in an `XMLSyntaxError` and prevents the payment file from being processed. Solution: Replace the `&` character with `+` when sanitizing the payment communication so that the generated value complies with the SEPA/SIX character set and produces valid XML. Reference[Pg: 9]: https://www.europeanpaymentscouncil.eu/sites/default/files/KB/files/EPC217-08%20Draft%20Best%20Practices%20SEPA%20Requirements%20for%20Character%20Set%20v1.1.pdf opw-5941724 Co-authored by @bhra-odoo Forward-Port-Of: odoo/enterprise#110809
18 changes
Resolved issues and error corrections
This update fixes an issue where sending letters with more than 8 pages would result in a generic error. The change provides a more specific error message to users, helping them quickly identify and resolve the problem when sending larger letters via snailmail. This improves the user experience and reduces support requests.
Original PR description
When a user attempted to send a letter with snailmail that had more than 8 pages, sending would fail, and a generic error message is logged on the letter. This commit makes the error message generated in that flow more specific to help users better understand the root cause of sending failure. task-5883011 Forward-Port-Of: odoo/odoo#257867
This update corrects a technical issue preventing Nilvera electronic invoices from importing correctly into Odoo. The method name in the Nilvera module was outdated, causing it to be ignored. By renaming the method to match the parent class, the import process is now functioning as intended.
Original PR description
# Description of the issue/feature this PR addresses The parent class `account.edi.xml.ubl_20` renamed `_import_fill_invoice_form` to `_import_fill_invoice`. The override in `l10n_tr_nilvera_einvoice` was not updated to match, causing the override to be silently ignored. # Current behavior before PR The `_import_fill_invoice_form` override in `l10n_tr_nilvera_einvoice` is never called because the parent method no longer exists under that name. # Desired behavior after PR is merged The override is renamed to `_import_fill_invoice` to match the parent class, restoring correct behaviour for Nilvera invoice imports. task-id: None --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#258097
This update resolves an issue where duplicate checks were being generated during tax return creation, preventing users from generating returns. The fix ensures that only one check is performed for each return type, streamlining the accounting process and avoiding error messages.
Original PR description
Steps to reproduce:
- Go to Accounting → Configuration → Accounting → Return Types.
- Open the standard Annual Closing: Corporate Tax return type.
- Select Generic Tax Report as a report in the Report field.
- Navigate to Accounting → Accounting → Closing → Tax Returns.
- Generate the tax return for the selected period.
Issue:
- Duplicate checks with code check_draft_entries are created for the same return, raising:
'You can only have a unique check code for each return.'
This happens because:
- `_check_suite_common_vat_report` adds a Draft entries check.
- `_check_suite_annual_closing` also adds a similar check (No draft entries) with the same code.
- Both run together, causing duplication.
Solution:
- Added `check_codes_to_ignore.add('check_draft_entries')`
in _check_suite_common_vat_report to ensure the check is not generated twice.
opw-6066030This update resolves a technical issue that prevented the requirements-check script from correctly parsing package version numbers, specifically those with letters like 'post1'. This fix ensures accurate dependency checks, improving the stability and reliability of the Odoo system.
Original PR description
This commit fixes a crash in the parse_version() function where it doesn't support non-integer castable version parts (i.e. 5.4.2.post1). Forward-Port-Of: odoo/odoo#257946
This update resolves an issue where attendance records were incorrectly flagged as 'already checked-in' due to a timezone calculation error. The fix ensures accurate attendance tracking by correctly applying employee timezones during the absence detection process, preventing these erroneous alerts.
Original PR description
### Steps to reproduce: - Have a database in timezone America/Asuncion for example - Create an employee - Create an attendance for the day before yesterday from 13h to 19h - Run the absence detection cron - An error will be raised saying the user is already checked-in on that day ### Cause: When trying to create an absence attendance we localized yesterday's midnight into UTC and then apply the employee timezone. Which cause a one-day shift when having a timezone behind UTC as at that point we try to create an attendance on the day before yesterday not yesterday ### Fix: We use the timezone of the employee to localize midnight then get this time in UTC. opw-5930309 Forward-Port-Of: odoo/odoo#257932
This update resolves an issue where negative values in the Mod 390 tax report for Spain were not being properly marked with the 'N' indicator, as required by Spanish tax regulations. The fix adds a necessary parameter to ensure accurate reporting, aligning with official documentation and improving compliance.
Original PR description
### Issue: Negative values in the Mod 390 report were not properly marked with the N indicator for several fields ### Cause: The parameter `signed=True` was missing on some fields where negative…
### Issue: Negative values in the Mod 390 report were not properly marked with the N indicator for several fields ### Cause: The parameter `signed=True` was missing on some fields where negative values should include the N indicator in the BOE export ### Note: According to the official specification, negative amounts must be explicitly marked with N Latest documentation: https://sede.agenciatributaria.gob.es/static_files/Sede/Disenyo_registro/DR_300_399/archivos_25/dr390e2025.xlsx ### Steps to reproduce: - Install `l10n_es_reports` with demo data and switch to the ES company - Create a Bill (Price: 100, Taxes: 21% G) - Go to Tax Report and select Tax Report (Mod 390) (ES) for the full year - Open the VAT Deductible tab - The last line (65) should be negative - Export the BOE file using the gear menu - Check the last value of section 4 in the file ### Before the fix: Negative values were not marked with N opw-5482706 Forward-Port-Of: odoo/enterprise#113200 Forward-Port-Of: odoo/enterprise#111262
This update fixes a problem where users weren't receiving clear error messages when the delivery service failed. A helpful hint has been added to the delivery process, guiding users to resolve the issue and ensuring smoother delivery operations. This change improves the user experience and reduces potential delays.
Original PR description
Add hint with error message. ----- Ticket: opw-6072855 Forward-Port-Of: odoo/enterprise#112463
This update resolves issues where URLs were incorrectly converted to links and where backticks were included in pasted URLs. The changes ensure that URLs are handled accurately, preventing unwanted link transformations and preserving pasted URL formatting, improving the note-taking experience.
Original PR description
[FIX] html_editor: undo link autoconvert before space insertion When adding a space after an URL, the URL text is converted to an URL. When pressing undo, first the space is undone, then the link is…
[FIX] html_editor: undo link autoconvert before space insertion When adding a space after an URL, the URL text is converted to an URL. When pressing undo, first the space is undone, then the link is undone. This is wrong because if the user did not want a link, after undoing the link, inserting a new space will again convert to a link. This commit splits `handleAutomaticLinkInsertion` into two parts: determining if a link must be created, and actually inserting the link. This makes it possible to execute code within the condition before and after the insertion. To fix the similar behavior for enter and shift-enter, another before input handler is also added in order to let the default before input be executed before creating the link. Steps to reproduce: - Go to a "To do" note - Type "odoo.com" - Press space/enter/shift-enter - Undo a single time => The insertion was undone instead of the link transform. task-5936310 [FIX] html_editor: not include surrounding backtick in pasted URL When pasting an URL surrounded by backticks, the ending backtick is included inside the link's HREF. This commit fixes the regex for URL to also exclude backticks (like it did with `"` and `'`). Steps to reproduce: - Copy the following text in the clipboard: ``` `odoo.com` ``` - Go to a "To do" note - Paste => The link's URL was ``` odoo.com` ``` task-5936310 Forward-Port-Of: odoo/odoo#257647 Forward-Port-Of: odoo/odoo#248619
This update addresses a technical issue where delivery confirmations were failing due to missing tracking data. The fix ensures that picking validation occurs correctly and prevents shipping creation in Easypost when tracking information is unavailable. Easypost support suggested a slight delay between order placement and tracking retrieval as a potential workaround.
Original PR description
Problem: 'tracker' object in response from GET /orders/:id request can sometimes be null. This means that when the mail template 'mail_template_data_delivery_confirmation' is sent, a traceback occurs…
Problem: 'tracker' object in response from GET /orders/:id request can sometimes be null. This means that when the mail template 'mail_template_data_delivery_confirmation' is sent, a traceback occurs with error: TypeError: 'NoneType' object is not subscriptable. As a result the picking is not validated in odoo but a shipping has succesfully been created in the easypost backend. Solution: Prevent traceback form happening, picking gets correctly validated and carrier_tracking_url field is empty. Transcript from Easypost support: << I'm also seeing the tracker showing as null when reviewing the response. I'll go ahead and create a ticket for the engineering team to investigate. I can see that the tracking code is being returned in the request, but the full tracking object is not. Since this appears to be happening on a case-by-case basis, you may want to allow more time between the BUY and the GET requests, as I noticed they are being triggered very close together. I'm not certain if that's related, but it may be worth trying as a troubleshooting step while we have this under review. >> opw-5402415 Forward-Port-Of: odoo/enterprise#111833
This update resolves an issue where closing a session was blocked when generating the DSFinV-K export if the order's user information was missing. The change ensures that a fallback user ID is used, allowing sessions to be closed correctly. This improves session management stability.
Original PR description
Before this commit, closing a session was blocked if an order was missing the user_id field during DSFinV-K export generation. opw-6067382 Forward-Port-Of: odoo/enterprise#112119
This update fixes a potential issue where invoicing a Point of Sale order multiple times could create unnecessary stock pickings. Previously, clicking 'Invoice' repeatedly would generate extra stock movements, especially with our 'Anglo-Saxon' accounting settings. This change ensures that pickings are only created once, streamlining inventory management.
Original PR description
Calling `action_pos_order_invoice` on an already-invoiced POS order (e.g. a backend user clicking "Invoice" more than once) would unconditionally invoke `_create_order_picking`, producing one extra `stock.picking` per click under anglo-saxon + update_stock_at_closing configurations. opw-6092999 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#257509
This update resolves a memory issue that caused server crashes when calculating cumulated balances for large accounting records. The fix optimizes the query process to only retrieve necessary data, significantly reducing memory usage and improving performance. This enhancement ensures smoother operation for systems handling extensive transaction data.
Original PR description
The _compute_cumulated_balance() method performs a query over every existing move lines to get a dict associating the record id with the cumulated sum at this point. When there is a lot of move…
The _compute_cumulated_balance() method performs a query over every existing move lines to get a dict associating the record id with the cumulated sum at this point. When there is a lot of move lines, the result returned by fetchall() hits the memory limit and the server crashes. We propose to encapsulate the original query to only return the result for the account move lines present in self. Benchmarks --------------- The following benchmarks were generated with a customization of the account.move.line list view to display the cumulated_balance field. Memory usage during the self.env.cr.execute and the dictionary population: | Operation | Before the fix | After the fix | |---------------|----------------|---------------| | populate dict | 1.5 GB | 17.1 MB | | execute query | 430 MB | 8.3 MB | 100 000 lines were displayed at the same time to get a significant size. So the number of records in self is more than 7 000 000 without the fix and 100 000 with the fix. Time spent in the _compute_cumulated_balance method: | No of AML | Before the fix | After the fix | |-----------|----------------|---------------| | 7 000 000 | 10.4 s | 6.8 s | opw-6053720 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#256658 Forward-Port-Of: odoo/odoo#255780
This update corrects a technical issue preventing SEPA payments from being correctly exported to XML files. The fix replaces problematic '&' characters in payment references with '+' to ensure compliance with SEPA/SIX standards and avoid rejection by banks. This ensures smooth processing of international payments.
Original PR description
Steps to reproduce: 1. Install modules `account_batch_payment` and `l10n_ch`. 2. Configure SEPA Credit Transfer for a CH company. 3. Create a vendor bill with a reference containing `&` (e.g. "Net &…
Steps to reproduce: 1. Install modules `account_batch_payment` and `l10n_ch`. 2. Configure SEPA Credit Transfer for a CH company. 3. Create a vendor bill with a reference containing `&` (e.g. "Net & Cost"), confirm it and register a payment using SEPA Credit Transfer. 4. Create a batch payment with the SEPA payment and validate it. Issue: The `&` character is exported as `&` in the generated PAIN XML, while according to the SIX specification it should be replaced with `+` Cause: The payment reference is inserted into the PAIN XML file without replacing the '&' character. During XML generation this produces an invalid entity (`&`) which results in an `XMLSyntaxError` and prevents the payment file from being processed. Solution: Replace the `&` character with `+` when sanitizing the payment communication so that the generated value complies with the SEPA/SIX character set and produces valid XML. Reference[Pg: 9]: https://www.europeanpaymentscouncil.eu/sites/default/files/KB/files/EPC217-08%20Draft%20Best%20Practices%20SEPA%20Requirements%20for%20Character%20Set%20v1.1.pdf opw-5941724 Co-authored by @bhra-odoo Forward-Port-Of: odoo/enterprise#110809
This update resolves an issue where empty attachments in PEPPOL invoices could cause import failures. The fix automatically uses default journal and move type information if an attachment is missing, ensuring invoices are created and any errors are logged. The underlying cause of the empty attachments is still being investigated.
Original PR description
Empty attachments could crash parsing during import, this commit falls back on default journal and move type in case of error, allowing the invoice to be created and the issue logged properly. Root cause of empty XML remains unclear, likely a 3rd party error. opw-6060739 opw-6018364 Forward-Port-Of: odoo/odoo#256011
This update fixes an issue where the formatting toolbar would unexpectedly open when working with inline code. Now, formatting commands are correctly applied only to the text surrounding inline code, and pasted HTML is properly converted to plain text within inline code blocks. This ensures a smoother and more reliable editing experience.
Original PR description
### Purpose of this commit: - Prevent the powerbox and toolbar from opening when the selection is fully inside inline code. When the selection spans inline code and regular text, keep the toolbar visible but ensure formatting commands are applied only to the non-inline-code content. - Ensure that pasted external and editor HTML is converted to plain text when inserted inside inline code. task-5502939 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#258039 Forward-Port-Of: odoo/odoo#250911
This update fixes an issue where invoices for downpayments weren't using the intended expense account (ACC1). The change ensures that the correct account is automatically suggested when creating invoices for downpayment products, streamlining the accounting process and preventing errors. This improves accuracy in financial reporting.
Original PR description
Steps to reproduce: 1/ install purchase and accountant 2/ create and setup an expense account dedicated to your downpayments (typically code 60-, account type "expense"), ACC1. 3/ setup a service type product named "downpayment" 4/ set the default expense account on that product to be ACC1. 5/ create a PO for any product other than the downpayment (PO1). take note of the partner. 6/ create a bill for the same partner as the one set on PO1. Call it BILL1. 7/ On BILL1, add one invoice line with the "downpayment" product. Set a unit price. 8/ Confirm BILL1 and match it with PO1 via the "bill matching" smart button. Add it as a downpayment. 9/ Back on PO1, receive the products. Create a bill (BILL2). => The account suggested for the downpayment line in BILL2 will use the default expense account instead of ACC1. After this commit, the account suggested will be the one used in BILL1 for the downpayment line. opw-5253877 Forward-Port-Of: odoo/odoo#245518
This update ensures seamless invoice processing for our Polish customers by automatically renewing the KSeF (tax) tokens. Previously, expired tokens caused disruptions in bill retrieval and invoice sending, requiring manual user intervention. Now, a scheduled task refreshes the tokens every 6 days, maintaining uninterrupted synchronization with the Polish tax authority.
Original PR description
The KSeF refresh token issued by the Polish Ministry of Finance expires after a week. Once it expires, the automatic fetching of incoming bills and sending of invoices will fail until the user manually re-authenticates in the settings. To ensure uninterrupted synchronization with the KSeF API, this commit adds a new scheduled action that runs every 6 days to automatically renew the tokens. task-6041758 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#256700
Features or functions removed from Odoo
This pull request removes a mistakenly added translation file for the website_twitter module. The translation was previously introduced in a different pull request and has now been corrected. This ensures the website's internationalization is accurate and consistent.
Original PR description
Wrongly added in https://github.com/odoo/odoo/pull/172269. Module was deleted in https://github.com/odoo/odoo/pull/172755. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#257859
3 changes
Resolved issues and error corrections
This update fixes a reporting issue where negative values in the Mod 390 tax report for Spain were not correctly marked with the 'N' indicator, as required by Spanish tax regulations. Adding the necessary parameter ensures accurate BOE file exports, aligning with official documentation and improving compliance.
Original PR description
### Issue: Negative values in the Mod 390 report were not properly marked with the N indicator for several fields ### Cause: The parameter `signed=True` was missing on some fields where negative…
### Issue: Negative values in the Mod 390 report were not properly marked with the N indicator for several fields ### Cause: The parameter `signed=True` was missing on some fields where negative values should include the N indicator in the BOE export ### Note: According to the official specification, negative amounts must be explicitly marked with N Latest documentation: https://sede.agenciatributaria.gob.es/static_files/Sede/Disenyo_registro/DR_300_399/archivos_25/dr390e2025.xlsx ### Steps to reproduce: - Install `l10n_es_reports` with demo data and switch to the ES company - Create a Bill (Price: 100, Taxes: 21% G) - Go to Tax Report and select Tax Report (Mod 390) (ES) for the full year - Open the VAT Deductible tab - The last line (65) should be negative - Export the BOE file using the gear menu - Check the last value of section 4 in the file ### Before the fix: Negative values were not marked with N opw-5482706 Forward-Port-Of: odoo/enterprise#113200 Forward-Port-Of: odoo/enterprise#111262
This update fixes a problem where users weren't receiving clear error messages when the SendCloud delivery service failed. A helpful hint has been added to the system, guiding users to resolve delivery issues more effectively. This improves the overall user experience and reduces potential delays.
Original PR description
Add hint with error message. ----- Ticket: opw-6072855 Forward-Port-Of: odoo/enterprise#112463
This update fixes an issue where credit notes were incorrectly showing positive amounts in tax reports. The fix now accurately reflects credit notes by reversing the sign based on whether the move is a refund. This ensures accurate tax reporting for Thai businesses using the l10n_th module.
Original PR description
# How to reproduce - Install the l10n_th module - Use the demo TH company - Ensure you have the demo invoices and credit notes associated to that company - Go to the Tax Report - Select Tax Report…
# How to reproduce - Install the l10n_th module - Use the demo TH company - Ensure you have the demo invoices and credit notes associated to that company - Go to the Tax Report - Select Tax Report (TH) - Click on "Sales Tax Report (xlsx)" # The problem The Credit Notes' Total Amount, Total Excl and Vat Amount are positives. They should be negative instead. The same issue appear for "Purchase Tax Report (xlsx)". This issue also concerns Credit Notes created manually in the Journal Entries # Why The logic for the sign of the value fields in the reports is the following : ```py sign = move.reversed_entry_id.payment_state == 'partial' and -1 or 1 ``` This is unreliable because a Credit Note will not always have a reversed_entry_id associated or if it has one, it's payment_state may change A refactor of theses reports has been made for versions 19.0+ but it seems too big to backport (https://github.com/odoo/enterprise/pull/75645/changes) Instead, we just check if the current move's type is a refund. If yes, we reverse the sign. opw-6006720 Forward-Port-Of: odoo/enterprise#113372 Forward-Port-Of: odoo/enterprise#110816
19 changes
Enhancements to existing features
This update adds a warning message in the gift card wizard to prevent users from creating gift cards with expiration dates in the past. This ensures data accuracy and prevents potential issues with gift card redemption. It's a simple improvement to the gift card generation process.
Original PR description
Display a warning in the gift card wizard when the selected valid_until date is in the past, prompting the user to select a valid date. task-5075177
This update enhances the user experience for managing documents by adding convenient actions within the search panel and kanban views. Specifically, users can now easily search within folders and create new subfolders directly from the search panel, streamlining document organization.
Original PR description
Purpose: Improving the UX of the side panel and kanban cards adding contextual actions, enabling users to: * apply the folder-specific actions on all search panel folders and not only the currently explored one * create children folders from search panel * Add a convenient way to search inside a folder without handling custom domains for non-technical users * kanban: Increase UX convenience, as in file explorers and competitor products * operations: clean search panel and list layout Task-5949566
This commit reverts recent changes related to M3, restoring the previous template structure with necessary adaptations. This ensures consistent formatting and functionality across key modules, improving the user experience and stability. The change addresses a technical update to align with a previous style.
Original PR description
This commit reverts the changes made for M3 to the arch, and bring back the previous template with some adaptation when needed. task-6054024 Co-authored-by: Romeo Fragomeli <rfr@odoo.com> Co-authored-by: Adrien Dieudonné <adr@odoo.com>
This update improves the user experience of appointment scheduling by addressing several UI inconsistencies and enhancing functionality. Specifically, it adds capacity information to the calendar view, corrects a validation error related to appointment duration, and simplifies underlying code for better performance. This results in a more intuitive and reliable scheduling process.
Original PR description
Main changes ------------ - Throw a validation error on changing duration above slots length - Add the total capacity in the calendar popover to match gantt - Some rewording, new placeholder and reordering Regarding range computing, as some values are pretty much obsolete now that the context has a low impact in comparison to the local storage both in gantt and calendar, simplify the context. A deeper cleaning will be done in another task. Also change a search domain to correctly include staff users meetings. Remove the gantt helper and associated files. Its use is already covered by the new button or the share on the list view. It also goes in front of the gantt view and lessen its usability. Task-5877926
This update focuses on optimizing database queries within several Odoo modules to enhance performance. Specifically, it addresses issues related to cached record rules, leading to faster response times and a smoother user experience. This change primarily impacts performance improvements across various Odoo modules.
Original PR description
For cached record rules. https://github.com/odoo/odoo/pull/221598
This update adjusts the form view for combined work entry types following a recent merge of work entry and time off types. The changes ensure both functionalities work seamlessly after the integration, streamlining the process for managing employee work entries.
Original PR description
After the merge of work entry type and time off type in https://www.odoo.com/odoo/project/1251/tasks/5407736, the form view needed some fixes and tweaks. Fields were moved around the sections of the form view, and some redundant fields were removed/altered to have both old functionalities working. task-5942695
This update clarifies the input fields used when calculating termination fees in payslips. The original 'days,' 'weeks,' and 'months' fields have been renamed to 'Notice Duration: Number of days/months/years' for better user understanding. This change improves the accuracy and transparency of the termination fee calculation process.
Original PR description
[IMP] l10n_be: renaming salary rules in termination fees When termination fee is selected in payslip creation, there were property inputs named as days, weeks, months I renamed them to "Notice Duration: Number of days/months/years" task - 6106963
Resolved issues and error corrections
This update resolves an issue where the breadcrumb navigation in the Barcode app was displaying incorrect or blank entries when moving between related records. Now, the breadcrumb correctly shows the originating document name, making it easier for users to understand their location within the system and improving usability.
Original PR description
*: stock_barcode_mrp, stock_barcode_picking_batch ## Issue Before This PR: When navigating from the Barcode client action (e.g. picking, inventory, etc.) to related form views (such as lot, product,…
*: stock_barcode_mrp, stock_barcode_picking_batch
## Issue Before This PR:
When navigating from the Barcode client action
(e.g. picking, inventory, etc.) to related form views
(such as lot, product, or company), the breadcrumb
would sometimes display an unnamed entry instead
of the originating document name.
This caused confusion for users, as they could not
easily identify which document they were coming from
when navigating to related records from the Barcode interface.
## Steps to Reproduce:
- Install the Barcode module.
- Open the Barcode app and navigate to:
- Delivery Orders.
- Manufacturing Orders
- Batch Pickings
- Inventory Count
- From any of these open a record
(e.g. picking, MO, batch, inventory line)
- Click on document name or edit button on the line.
- Click on an external link (e.g. product, lot, company).
- Observe that the breadcrumb shows an unnamed entry.
## Cause of the Issue:
- When switching views inside the Barcode client action,
the FormController calls `setDisplayName(this.displayName())`.
In some cases, this returns an empty string, overwriting the
previously set breadcrumb name.
- In several form views, the `display_name` field was not present,
preventing the controller from retrieving a proper name.
## With This PR:
The Barcode views now display the correct document names in the
breadcrumb when navigating to external links, allowing users to easily
identify the originating document when opening related records from
the Barcode app.
TaskID: 4978997
Forward-Port-Of: odoo/enterprise#112988
Forward-Port-Of: odoo/enterprise#99165This update adjusts the VAT number used in the 'L10nThaiTaxReportTest' test case to align with recent changes in how companies and individuals are created within Odoo. This ensures accurate reporting and tax calculations for Thai businesses.
Original PR description
in this commit:- - We're changing partner's vat in 'L10nThaiTaxReportTest' and adopting new vat as per new way of creating company and individual. as `branch name` is depend upon 'is_company'. - see https://github.com/odoo/odoo/commit/f6e431c813787958897526a4d6570124048b428a task-6002111 Forward-Port-Of: odoo/enterprise#113236 Forward-Port-Of: odoo/enterprise#112434
This update fixes an issue where chart links weren't directing users to the correct view type (e.g., a list view for a list datasource). Previously, links defaulted to the standard action view, leading to an inconsistent user experience. This change ensures chart links now accurately navigate to the appropriate view for each datasource type.
Original PR description
Currently, if the user clicks on a datasource link (inside a chart) they will be directed to the default view of the action realted to the datasource model but it will not go to the corresponding type of view (e.g. a list datasource should direct to a list view). Task-5957004 Forward-Port-Of: odoo/enterprise#113211 Forward-Port-Of: odoo/enterprise#108158
This update resolves an issue where manual digitization of vendor invoices was blocked if the bill date wasn't initially set. The change allows users to trigger digitization without a bill date, while still ensuring data consistency through a validation step afterward. This improves the flexibility of the invoice digitization process.
Original PR description
### Issue: When setting Vendor Bills to Digitize on demand, it is no longer possible in 19.0 to trigger digitization manually if the Bill Date is not set A missing required fields error is raised ###…
### Issue: When setting Vendor Bills to Digitize on demand, it is no longer possible in 19.0 to trigger digitization manually if the Bill Date is not set A missing required fields error is raised ### Cause: This PR: https://github.com/odoo/odoo/pull/238911 introduced a required field to prevent an error modal from appearing While this works as intended, it also blocks the `Digitize Document` action, which is supposed to populate the Bill Date automatically ### Fix: A condition similar to the one used for the Digitize Document button is applied to allow triggering digitization without a Bill Date The validation modal is still enforced afterward to ensure data consistency in case of manual edits ### Steps to reproduce: - Install `account` - In Settings, set `Document Digitization` for `Vendor Bills` to `Digitize on demand only` - Create and print an invoice (any data) or use an existing one - Import it into Vendor Bills - Click Digitize Document ### Before the fix: A missing required fields notification is raised, preventing digitization opw-5886012 Forward-Port-Of: odoo/enterprise#112585
This update fixes a minor issue in the knowledge history tour by adding a new step, ensuring a more complete and accurate user experience. This enhancement improves the onboarding process for new users and provides a clearer demonstration of the knowledge base features.
Original PR description
Fix tour by adding a new step.
This update fixes an issue where negative values in the Mod 390 tax report for Spain were not correctly marked with the 'N' indicator, as required by Spanish tax regulations. Adding the necessary parameter ensures accurate reporting to the Agencia Tributaria, complying with official documentation and export specifications. This ensures data integrity for tax filings.
Original PR description
### Issue: Negative values in the Mod 390 report were not properly marked with the N indicator for several fields ### Cause: The parameter `signed=True` was missing on some fields where negative…
### Issue: Negative values in the Mod 390 report were not properly marked with the N indicator for several fields ### Cause: The parameter `signed=True` was missing on some fields where negative values should include the N indicator in the BOE export ### Note: According to the official specification, negative amounts must be explicitly marked with N Latest documentation: https://sede.agenciatributaria.gob.es/static_files/Sede/Disenyo_registro/DR_300_399/archivos_25/dr390e2025.xlsx ### Steps to reproduce: - Install `l10n_es_reports` with demo data and switch to the ES company - Create a Bill (Price: 100, Taxes: 21% G) - Go to Tax Report and select Tax Report (Mod 390) (ES) for the full year - Open the VAT Deductible tab - The last line (65) should be negative - Export the BOE file using the gear menu - Check the last value of section 4 in the file ### Before the fix: Negative values were not marked with N opw-5482706 Forward-Port-Of: odoo/enterprise#113200 Forward-Port-Of: odoo/enterprise#111262
This update fixes an error in the Italian tax return calculations. Previously, incorrect taxes (like INPS) were included, leading to inaccurate totals. The fix ensures that only the correct withholding tax amounts are reflected in the return, improving data accuracy for Italian businesses.
Original PR description
### Issue before this commit: Before this commit, validating an Italian withholding tax return could incorrectly include taxes that are not related to withholding. In particular, pension fund taxes…
### Issue before this commit: Before this commit, validating an Italian withholding tax return could incorrectly include taxes that are not related to withholding. In particular, pension fund taxes such as 4% INPS were included in the computed total amount to pay, even though they should not be part of the withholding tax return. As a result, the final amount shown in the return was incorrect. ### Steps to reproduce the issue: 1. Download Accounting and l10n_it and switch to italian company 2. Create an invoice and a bill with a witholding tax (ex. 20% RIT PF) 3. Mark them as paid and reconcile them 4. Open a tax return and validate it 5. See that the total amount calculated includes also other taxes than only witholding taxes ### Cause of the issue: The issue was caused by a missing domain restriction when computing the tax closing entries. The method _get_vat_closing_entry_additional_domain did not properly apply a filter on tax tags for the withholding tax return type l10n_it_reports.it_withh_tax_return_type. Because of this, the query used to compute tax balances included all taxes matching the generic conditions (date, company, posted state, etc.), without restricting them to the relevant withholding tax tags. Consequently, unrelated taxes were included in the computation. ### Reason to introduce the fix: To restore the correctness of the tax return totals. opw-5905355 Forward-Port-Of: odoo/enterprise#112638
This update corrects a stability issue within the Odoo Enterprise expense reporting module. By switching to a 'TransientModel' for the wizard, the system is now more reliable and efficient. This change ensures smoother operation of the expense tracking process.
Original PR description
`HrExpenseStripeTestPurchaseWizard` is currently using a normal `Model`, but it's a wizard, so use a `TransientModel`. Forward-Port-Of: odoo/enterprise#113313
This update corrects a problem where the '&' character in vendor bill references was incorrectly exported as '&' in SEPA payment files. This prevented successful payment processing by banks. The fix replaces '&' with '+' to ensure compliance with SEPA/SIX standards and proper XML generation.
Original PR description
Steps to reproduce: 1. Install modules `account_batch_payment` and `l10n_ch`. 2. Configure SEPA Credit Transfer for a CH company. 3. Create a vendor bill with a reference containing `&` (e.g. "Net &…
Steps to reproduce: 1. Install modules `account_batch_payment` and `l10n_ch`. 2. Configure SEPA Credit Transfer for a CH company. 3. Create a vendor bill with a reference containing `&` (e.g. "Net & Cost"), confirm it and register a payment using SEPA Credit Transfer. 4. Create a batch payment with the SEPA payment and validate it. Issue: The `&` character is exported as `&` in the generated PAIN XML, while according to the SIX specification it should be replaced with `+` Cause: The payment reference is inserted into the PAIN XML file without replacing the '&' character. During XML generation this produces an invalid entity (`&`) which results in an `XMLSyntaxError` and prevents the payment file from being processed. Solution: Replace the `&` character with `+` when sanitizing the payment communication so that the generated value complies with the SEPA/SIX character set and produces valid XML. Reference[Pg: 9]: https://www.europeanpaymentscouncil.eu/sites/default/files/KB/files/EPC217-08%20Draft%20Best%20Practices%20SEPA%20Requirements%20for%20Character%20Set%20v1.1.pdf opw-5941724 Co-authored by @bhra-odoo Forward-Port-Of: odoo/enterprise#110809
This update ensures the demo data for the Turkish payroll module correctly references the state IDs. Previously, demo data used outdated state information, leading to potential errors. This change improves the accuracy and reliability of the demo environment for Turkish payroll setup.
Original PR description
Previously, all the turkish states were defined in the base module, but were moved to l10n_tr. This comit makes sure that demo data uses the correct state ids task-5945331
A technical issue preventing users from accessing the timesheet assistant was fixed. This involved correcting a duplicate key error in the configuration file, ensuring a smoother user experience when taking suggestions for timesheets. The change improves stability and usability of the timesheet feature.
Original PR description
In PR: https://github.com/odoo/enterprise/pull/108360/changes `aw_local_config.js` was replaced by `frequency_viewer_local_config.js` but in the Forward from saas-19.1 to saas-19.2, both files were maintained https://github.com/odoo/enterprise/commit/3ced9cf68affd973c570e92627361cd0db8eb518 Forward-Port-Of: odoo/enterprise#112639
Features or functions removed from Odoo
This update removes an unnecessary step when sharing helpdesk tickets through the forum. Previously, sharing a ticket automatically created a new message. This change streamlines the process and improves the user experience. It's a minor update that enhances the forum's functionality.
Original PR description
Purpose ======= Remove the `message_post` on the forum post when sharing a ticket in forum, because it no longer inherits from `mail.thread`. Task-3586524
13 changes
New functionality added to Odoo
This pull request includes updates to the localization files (i18n) for the 'account_3way_match' module. These changes involve translating the module's text into multiple languages, including Arabic, Azerbaijani, Bulgarian, Catalan, Czech, Danish, German, Greek, Spanish, Estonian, Farsi, Finnish, French, Hebrew, and more. This ensures the module is accessible and usable for a wider range of users and regions.
Enhancements to existing features
This update streamlines payment status updates by hiding the refresh button when payments are finalized. Previously, the button triggered unnecessary calls to OdooFin, impacting performance. Now, the button is only visible for payments that are actively being processed.
Original PR description
… batches The refresh button was always shown, which could cause unnecessary calls to OdooFin if the payment is finalised (accepted, rejected or canceled). With this change, the button is shown only for payments in progress (pending or unsigned). task-6103900
This pull request addresses several localization and technical improvements across Odoo modules. It includes adjustments to AFIP compliance for Argentinian financial reports, fixes a German address issue for Amazon, and resolves a bug related to employee skill copying in appraisals. The changes ensure data accuracy and improve user experience.
Resolved issues and error corrections
This update resolves an issue where closing an Odoo session was prevented if the order's user information was incomplete during a specific export process (DSFinV-K). The change ensures that a fallback user ID is used, allowing sessions to be closed correctly and preventing disruptions to business operations. This improves session management reliability.
Original PR description
Before this commit, closing a session was blocked if an order was missing the user_id field during DSFinV-K export generation. opw-6067382 Forward-Port-Of: odoo/enterprise#112119
This update resolves a problem where payments related to EPD (early payment discount) bills weren't correctly updating their status. The fix ensures payments are accurately marked as 'paid' after reconciliation, improving the accuracy of financial reporting. This prevents discrepancies in payment tracking.
Original PR description
Steps to reproduce: - Create an early payment term. - Create a Vendor Bill with EPD and post it. - Register a payment for this bill (no outstanding account set on journal => no move created). - Create a bank transaction fully paying the bill. - Reconcile the transaction with the bill. Issue: Access the payment of the bill. The payment state remains 'in_process' instead of 'paid'. Fix in community: https://github.com/odoo/odoo/pull/256486 opw-5881976 Forward-Port-Of: odoo/enterprise#112398
This update resolves an issue where negative values in the Mod 390 tax report were not being properly marked with the 'N' indicator, as required by Spanish tax regulations. The fix adds a necessary parameter to ensure accurate reporting, aligning with official documentation and improving compliance.
Original PR description
### Issue: Negative values in the Mod 390 report were not properly marked with the N indicator for several fields ### Cause: The parameter `signed=True` was missing on some fields where negative…
### Issue: Negative values in the Mod 390 report were not properly marked with the N indicator for several fields ### Cause: The parameter `signed=True` was missing on some fields where negative values should include the N indicator in the BOE export ### Note: According to the official specification, negative amounts must be explicitly marked with N Latest documentation: https://sede.agenciatributaria.gob.es/static_files/Sede/Disenyo_registro/DR_300_399/archivos_25/dr390e2025.xlsx ### Steps to reproduce: - Install `l10n_es_reports` with demo data and switch to the ES company - Create a Bill (Price: 100, Taxes: 21% G) - Go to Tax Report and select Tax Report (Mod 390) (ES) for the full year - Open the VAT Deductible tab - The last line (65) should be negative - Export the BOE file using the gear menu - Check the last value of section 4 in the file ### Before the fix: Negative values were not marked with N opw-5482706 Forward-Port-Of: odoo/enterprise#113200 Forward-Port-Of: odoo/enterprise#111262
This update fixes a problem where unclear error messages were displayed when the SendCloud delivery service encountered issues. The change adds a helpful hint message to guide users in resolving these problems, improving the overall user experience. This ensures smoother delivery processes and reduces potential delays.
Original PR description
Add hint with error message. ----- Ticket: opw-6072855 Forward-Port-Of: odoo/enterprise#112463
This update resolves a bug that caused PDF attachments to be incorrectly re-parented during the Send & Print process, leading to data inconsistencies. The fix prevents the creation of a document when a PDF attachment lacks a defined model, ensuring proper attachment management and preventing data loss.
Original PR description
Steps to reproduce: - Set a journal with documents folder sync (by default with demo data) - Create and post a customer invoice - Add an image or pdf attachment via a log note (it becomes…
Steps to reproduce: - Set a journal with documents folder sync (by default with demo data) - Create and post a customer invoice - Add an image or pdf attachment via a log note (it becomes message_main_attachment_id and creates a documents.document with res_model=False) - Click Send & Print Issue: KeyError: `proforma_pdf_attachment` Cause: During Send & Print, _link_invoice_documents creates the invoice pdf attachment (res_model='account.move', res_field='invoice_pdf_report_file') and sets it as invoice.message_main_attachment_id. During the acoun_move write, in `documents_account`, it searches for an existing document matching the previous `message_main_attachment_id` (`initial_attachment`) and sets `document.attachment_id` to the invoice pdf. https://github.com/odoo/enterprise/blob/6bdcc357b195faa0aad8c05eac23aa0a762dd76b/documents_account/models/account_move.py#L41-L54 This triggers the versioning logic which resets the parent of the attachment when its `res_model` and `res_id` differs from the document. Because the document has res_model=False, the condition always matches and the pdf is re-parented to `documents.document`, deleting res_field's binding to account.move. After invalidate_recordset https://github.com/odoo/odoo/blob/95666545fcd934bf4084f680e692633783ae5603/addons/account/models/account_move_send.py#L477 invoice_pdf_report_id recomputes to an empty recordset. https://github.com/odoo/odoo/blob/7b384a6ec13c372b44e2a58134c61d54de152395/addons/account/models/account_move.py#L2205 _get_invoice_extra_attachments returns empty, Eventually, we try to access move_data['proforma_pdf_attachment'] which was never set (fallback for otehrscenario) https://github.com/odoo/odoo/blob/95666545fcd934bf4084f680e692633783ae5603/addons/account/models/account_move_send.py#L856 -> KeyError. Solution: We prevent the creation of a document if no res_model is set. And extra guard-rail is kept: Skip re-parenting in DocumentsDocument.write() when the incoming attachment has res_field set. Attachments linked via a Binary field are owned by their model and must never be moved to documents.document regardless of the document's own res_model. opw-5930888
This update addresses an issue where delivery confirmations were failing due to missing tracking information from Easypost. The fix ensures that picking validation occurs correctly and prevents shipping creation in Easypost when tracking data is unavailable. Easypost support suggested a slight delay between order placement and tracking retrieval as a potential workaround.
Original PR description
Problem: 'tracker' object in response from GET /orders/:id request can sometimes be null. This means that when the mail template 'mail_template_data_delivery_confirmation' is sent, a traceback occurs…
Problem: 'tracker' object in response from GET /orders/:id request can sometimes be null. This means that when the mail template 'mail_template_data_delivery_confirmation' is sent, a traceback occurs with error: TypeError: 'NoneType' object is not subscriptable. As a result the picking is not validated in odoo but a shipping has succesfully been created in the easypost backend. Solution: Prevent traceback form happening, picking gets correctly validated and carrier_tracking_url field is empty. Transcript from Easypost support: << I'm also seeing the tracker showing as null when reviewing the response. I'll go ahead and create a ticket for the engineering team to investigate. I can see that the tracking code is being returned in the request, but the full tracking object is not. Since this appears to be happening on a case-by-case basis, you may want to allow more time between the BUY and the GET requests, as I noticed they are being triggered very close together. I'm not certain if that's related, but it may be worth trying as a troubleshooting step while we have this under review. >> opw-5402415 Forward-Port-Of: odoo/enterprise#111833
This update corrects a problem where the '&' character in vendor bill references was incorrectly exported as '&' in SEPA payment files. This prevented successful processing of payments by banks, ensuring compliance with SEPA regulations and accurate financial reporting. The fix replaces '&' with '+' to adhere to the required character set.
Original PR description
Steps to reproduce: 1. Install modules `account_batch_payment` and `l10n_ch`. 2. Configure SEPA Credit Transfer for a CH company. 3. Create a vendor bill with a reference containing `&` (e.g. "Net &…
Steps to reproduce: 1. Install modules `account_batch_payment` and `l10n_ch`. 2. Configure SEPA Credit Transfer for a CH company. 3. Create a vendor bill with a reference containing `&` (e.g. "Net & Cost"), confirm it and register a payment using SEPA Credit Transfer. 4. Create a batch payment with the SEPA payment and validate it. Issue: The `&` character is exported as `&` in the generated PAIN XML, while according to the SIX specification it should be replaced with `+` Cause: The payment reference is inserted into the PAIN XML file without replacing the '&' character. During XML generation this produces an invalid entity (`&`) which results in an `XMLSyntaxError` and prevents the payment file from being processed. Solution: Replace the `&` character with `+` when sanitizing the payment communication so that the generated value complies with the SEPA/SIX character set and produces valid XML. Reference[Pg: 9]: https://www.europeanpaymentscouncil.eu/sites/default/files/KB/files/EPC217-08%20Draft%20Best%20Practices%20SEPA%20Requirements%20for%20Character%20Set%20v1.1.pdf opw-5941724 Co-authored by @bhra-odoo Forward-Port-Of: odoo/enterprise#110809
This update fixes an issue where Odoo incorrectly consumed stock from the wrong location when scanning serial numbers on manufacturing orders. The fix ensures the correct warehouse location is used, preventing errors in stock tracking and improving order fulfillment accuracy. This resolves a potential problem with inventory management.
Original PR description
Steps to reproduce: - Create a Manufacturing Order with a serial-tracked component. - Open the Shop Floor. - Scan the serial number barcode to register the component. - Observe which location the component was consumed from. Issue: When a product is received from a vendor, Odoo creates two quants for the same serial number — one at Partners/Vendors location and one at WH/Stock location. Because get_quant_from_barcode searched for a matching serial number with no location filter, it returned whichever quant had the lowest database ID — which was always the Partners/Vendors or Production quant created first — instead of the correct WH/Stock quant. Solution: Prevent selecting a quant from an incorrect location when multiple quants exist for the same serial number, as this can lead to consuming stock from the wrong location. opw-5974474 Forward-Port-Of: odoo/enterprise#112691
This fix resolves an issue where the bank reconciliation process would fail when using the liquidity account as an outstanding payment account. The update prevents automatic reconciliation in this scenario, ensuring data integrity and preventing a persistent error message. This improves the reliability of bank statement matching.
Original PR description
# How to reproduce - Create a new Journal - Go to the Configuration of the Journal > Outgoing Payments > Set the Outstanding Payment accounts for the Manual payment Payment Method to the liquidity…
# How to reproduce - Create a new Journal - Go to the Configuration of the Journal > Outgoing Payments > Set the Outstanding Payment accounts for the Manual payment Payment Method to the liquidity account - Go to the Transactions of the Journal - Add a new Transaction for partner X and amount Y - Add a second Transaction also for partner X and amount Y # The issue A popup appears that can never be saved # Cause When we click on "Add & New" or "Add & Close", we run the `validate()` function : https://github.com/odoo/enterprise/blob/9abb50b9b29e01897b4fb90ae228beecbdfcd5af/account_accountant/static/src/components/bank_reconciliation/quick_create/quick_create.xml#L14-L16 Which tries to do a model save, but it fails so it show the Form dialog : https://github.com/odoo/odoo/blob/6e77d840a2876e45544b21a911be05b2f32b8afb/addons/web/static/src/views/kanban/kanban_record_quick_create.js#L159-L163 The save fails because : This commit (https://github.com/odoo/enterprise/commit/e2b3439dcda26f84b9a290c8d5fb819dd3250825) changed the the logic behind auto-reconcilation with an outstanding account. When there is an outstanding account, we try to auto-reconcile the bank statement with that account and succesfully do so : https://github.com/odoo/enterprise/blob/e2b3439dcda26f84b9a290c8d5fb819dd3250825/account_accountant/models/account_bank_statement.py#L381-L385 https://github.com/odoo/enterprise/blob/e2b3439dcda26f84b9a290c8d5fb819dd3250825/account_accountant/models/account_bank_statement.py#L245 But this should not happen when the outstanding account is the liquidity account, because it will end up throwing an error when the amount is matched more than once: https://github.com/odoo/odoo/blob/6e77d840a2876e45544b21a911be05b2f32b8afb/addons/account/models/account_bank_statement_line.py#L727-L737 opw-6063654 Forward-Port-Of: odoo/enterprise#112750
This update corrects a previous issue where the Amazon fulfillment channel in the sales module was incorrectly displayed as read-only. The change ensures users can now modify this setting, streamlining the process for managing Amazon sales operations. This improves flexibility and control over fulfillment options.
Original PR description
Commit 67c45d6494f082e2ee83b9a84611e8b8fe8f4fd5 intended to make `amazon_channel` editable by users. However, the field was displayed with the `badge` widget, which is read-only, so it remained uneditable. Use an editable display for `amazon_channel` so the original fix works as intended. Forward-Port-Of: odoo/enterprise#113196 Forward-Port-Of: odoo/enterprise#112866
5 changes
Resolved issues and error corrections
This update resolves an issue preventing video embedding within Knowledge articles. The change explicitly allows the `/video` command for the KnowledgeHtmlField, ensuring videos can be seamlessly integrated. This improves the functionality of Knowledge for users.
Original PR description
Problem: The `KnowledgeHtmlField` is sanitized, which prevents the `/video` command from being available, even though video insertion is expected to work in Knowledge. Solution: Explicitly enable the `/video` command for `KnowledgeHtmlField` despite the field being sanitized. opw-6035026
This update resolves an issue where shipment validation was failing due to missing tracking data from Easypost. The fix ensures that picking is correctly validated and the carrier tracking URL is appropriately empty, preventing unnecessary shipping creation in the Easypost backend. Easypost support suggested a delay between purchase and tracking requests as a potential workaround.
Original PR description
Problem: 'tracker' object in response from GET /orders/:id request can sometimes be null. This means that when the mail template 'mail_template_data_delivery_confirmation' is sent, a traceback occurs…
Problem: 'tracker' object in response from GET /orders/:id request can sometimes be null. This means that when the mail template 'mail_template_data_delivery_confirmation' is sent, a traceback occurs with error: TypeError: 'NoneType' object is not subscriptable. As a result the picking is not validated in odoo but a shipping has succesfully been created in the easypost backend. Solution: Prevent traceback form happening, picking gets correctly validated and carrier_tracking_url field is empty. Transcript from Easypost support: << I'm also seeing the tracker showing as null when reviewing the response. I'll go ahead and create a ticket for the engineering team to investigate. I can see that the tracking code is being returned in the request, but the full tracking object is not. Since this appears to be happening on a case-by-case basis, you may want to allow more time between the BUY and the GET requests, as I noticed they are being triggered very close together. I'm not certain if that's related, but it may be worth trying as a troubleshooting step while we have this under review. >> opw-5402415 Forward-Port-Of: odoo/enterprise#111833
This update corrects an issue where special characters (&) in payment references were causing errors during SEPA XML export. The fix replaces '&' with '+' to ensure compliance with SEPA/SIX standards, preventing payment rejection by banks and guaranteeing accurate financial reporting.
Original PR description
Steps to reproduce: 1. Install modules `account_batch_payment` and `l10n_ch`. 2. Configure SEPA Credit Transfer for a CH company. 3. Create a vendor bill with a reference containing `&` (e.g. "Net &…
Steps to reproduce: 1. Install modules `account_batch_payment` and `l10n_ch`. 2. Configure SEPA Credit Transfer for a CH company. 3. Create a vendor bill with a reference containing `&` (e.g. "Net & Cost"), confirm it and register a payment using SEPA Credit Transfer. 4. Create a batch payment with the SEPA payment and validate it. Issue: The `&` character is exported as `&` in the generated PAIN XML, while according to the SIX specification it should be replaced with `+` Cause: The payment reference is inserted into the PAIN XML file without replacing the '&' character. During XML generation this produces an invalid entity (`&`) which results in an `XMLSyntaxError` and prevents the payment file from being processed. Solution: Replace the `&` character with `+` when sanitizing the payment communication so that the generated value complies with the SEPA/SIX character set and produces valid XML. Reference[Pg: 9]: https://www.europeanpaymentscouncil.eu/sites/default/files/KB/files/EPC217-08%20Draft%20Best%20Practices%20SEPA%20Requirements%20for%20Character%20Set%20v1.1.pdf opw-5941724 Co-authored by @bhra-odoo Forward-Port-Of: odoo/enterprise#110809
This update fixes an issue where credit notes were incorrectly displayed with positive values in Thailand's tax reports. The fix now accurately reflects credit note amounts by checking if the related transaction is a refund. This ensures accurate tax reporting for Thai businesses using the l10n_th module.
Original PR description
# How to reproduce - Install the l10n_th module - Use the demo TH company - Ensure you have the demo invoices and credit notes associated to that company - Go to the Tax Report - Select Tax Report…
# How to reproduce - Install the l10n_th module - Use the demo TH company - Ensure you have the demo invoices and credit notes associated to that company - Go to the Tax Report - Select Tax Report (TH) - Click on "Sales Tax Report (xlsx)" # The problem The Credit Notes' Total Amount, Total Excl and Vat Amount are positives. They should be negative instead. The same issue appear for "Purchase Tax Report (xlsx)". This issue also concerns Credit Notes created manually in the Journal Entries # Why The logic for the sign of the value fields in the reports is the following : ```py sign = move.reversed_entry_id.payment_state == 'partial' and -1 or 1 ``` This is unreliable because a Credit Note will not always have a reversed_entry_id associated or if it has one, it's payment_state may change A refactor of theses reports has been made for versions 19.0+ but it seems too big to backport (https://github.com/odoo/enterprise/pull/75645/changes) Instead, we just check if the current move's type is a refund. If yes, we reverse the sign. opw-6006720 Forward-Port-Of: odoo/enterprise#110816
This update corrects a display issue where the product count in the stat button on Sale Order Lines created from tasks would incorrectly show '0 products' until the task was saved. Now, the count accurately reflects the products associated with the task, improving the user experience when creating sales orders.
Original PR description
Previously, when creating a Sale Order Line on the fly from a task, the product count in the stat button showed '0 products' until the task was saved. Now, the counter no longer drops to 0 when the record is not saved. task-4276677 Forward-Port-Of: odoo/enterprise#95100
4 changes
Resolved issues and error corrections
This update fixes an issue where credit notes were incorrectly displayed with positive amounts in Thai tax reports. The fix automatically reverses the sign of the amount if the transaction is a refund, ensuring accurate reporting of credit note values. This ensures compliance with Thai tax regulations.
Original PR description
# How to reproduce - Install the l10n_th module - Use the demo TH company - Ensure you have the demo invoices and credit notes associated to that company - Go to the Tax Report - Select Tax Report…
# How to reproduce - Install the l10n_th module - Use the demo TH company - Ensure you have the demo invoices and credit notes associated to that company - Go to the Tax Report - Select Tax Report (TH) - Click on "Sales Tax Report (xlsx)" # The problem The Credit Notes' Total Amount, Total Excl and Vat Amount are positives. They should be negative instead. The same issue appear for "Purchase Tax Report (xlsx)". This issue also concerns Credit Notes created manually in the Journal Entries # Why The logic for the sign of the value fields in the reports is the following : ```py sign = move.reversed_entry_id.payment_state == 'partial' and -1 or 1 ``` This is unreliable because a Credit Note will not always have a reversed_entry_id associated or if it has one, it's payment_state may change A refactor of theses reports has been made for versions 19.0+ but it seems too big to backport (https://github.com/odoo/enterprise/pull/75645/changes) Instead, we just check if the current move's type is a refund. If yes, we reverse the sign. opw-6006720
This update corrects a bug where negative discounts were incorrectly shown in Field Service reports. The fix ensures that negative discount values are properly handled during report generation, preventing inaccurate reporting and improving data clarity. This resolves an issue impacting sales reporting accuracy.
Original PR description
Steps to produce: --- - Install the `Field Service` module. - Enable discounts and Worksheets from settings. - Navigate to `Field Service > Open task > Add product`. - Open related sale order and `apply negative discount`. - Return to the task > print the `Field Service Report`. Issue: --- - Negative discount is printed in the report. Root cause: --- - The report generation logic does not check for negative discounts. As a result, negative discount values are being rendered as-is in the generated PDF. Solution: --- - Added a condition to handle negative discounts during report generation. Before: --- <img width="774" height="107" alt="image" src="https://github.com/user-attachments/assets/bb4bf646-1462-4f19-b977-3450f9a5f100" /> After: --- <img width="755" height="110" alt="image" src="https://github.com/user-attachments/assets/1bd2a68d-1fb8-4b5a-97ff-7ef7098d222c" /> community PR: https://github.com/odoo/odoo/pull/255735 opw-6061568
This update fixes a labeling error in the Dutch Profit & Loss report. The 'Cost of Goods Sold' and 'Cost of Sales' labels were reversed, misrepresenting the accounting definitions. This change ensures the report accurately reflects Dutch accounting standards and provides correct financial reporting.
Original PR description
**Steps to reproduce:** 1. Install l10n_nl_report. 2. Go to Accounting → Configuration → Accounting Reports. 3. Open Profit and loss report (tags). 4. Click on Cost of Goods Sold or Cost of Sales and…
**Steps to reproduce:** 1. Install l10n_nl_report. 2. Go to Accounting → Configuration → Accounting Reports. 3. Open Profit and loss report (tags). 4. Click on Cost of Goods Sold or Cost of Sales and check the related codes. **Issue:** In the Dutch Profit and Loss report, the names "Cost of Goods Sold" and "Cost of Sales" are swapped. Currently: - Cost of Goods Sold is linked to code: NL_SALE - Cost of Sales is linked to code: NL_COGS According to Dutch accounting standards: - Cost of goods sold should represent direct costs ([mapping to NL_COGS / 7xxx](https://github.com/odoo/odoo/blob/master/addons/l10n_nl/data/template/account.account-nl.csv#L288-L317)). - Cost of sales should represent indirect selling costs ([mapping to NL_SALE/45xx](https://github.com/odoo/odoo/blob/master/addons/l10n_nl/data/template/account.account-nl.csv#L249-L260)) **Cause:** The names were incorrectly applied, leading to reversed definitions between Cost of Goods Sold and Cost of Sales. See: https://www.investopedia.com/terms/c/cogs.asp **Solution:** Swap the definitions so that: - Cost of Goods Sold is correctly linked to NL_COGS - Cost of Sales is correctly linked to NL_SALE Related community PR : https://github.com/odoo/odoo/pull/245185 **opw-5407885**
This update fixes an issue where translated strings in the Odoo Enterprise module didn't consistently reflect changes made to group names. By adding specific identifiers, the system now correctly exports and translates these overridden group names, ensuring accurate translations across the platform. This improves the consistency of our software's language.
Original PR description
The `account_accountant` module overrides the English name of several `res.groups` records owned by `account`. Without `account_accountant`-scoped XMLIDs for those records, the overridden names are never exported into this module's POT file. At runtime, `account`'s translations are loaded instead, which no longer match the overridden English source strings. We fix this by registering additional XMLIDs under `account_accountant` so the overridden names get translated independently.