Tuesday, March 18, 2025
28 changes · master
Enhancements to existing features
Spreadsheet date filters now offer a simpler, improved date and time picker experience. This makes it quicker and less error-prone for users to choose dates when working with spreadsheet filters.
Original PR description
See community PR task-4613140
GSTR-2B bill matching now uses the IRN number when available, helping identify supplier bills more accurately and reducing incorrect partial matches. When Odoo creates a missing bill from GSTR-2B data, it also saves the IRN number, with checks to keep IRNs unique per company.
Original PR description
This commit adds an `IRN number` in matching parameters/keys. If the bills from `GSTR2B` have an IRN number then we consider the IRN number for finding the bill in the system and matching the bill with the GSTR2B bill. Also, we are removing ref from matching keys for false ref. A false ref can consider any gstr2b bill with only false ref to go through a matching process and match them partially matched. If there is no bill found in the system, but the bill is present on GSTR2B then we are creating the bill, here if the IRN number is available then add it to the new bill created. task-4408351
Sales order-related screens were simplified across several Odoo apps by removing redundant hidden fields, duplicate view customizations, and obsolete filters. This should make the views easier to maintain while preserving the same business behavior for users.
Original PR description
* drop useless invisible fields (rely on ORM fallback, and js field dependencies when possible) * clean and harmonize xpaths definitions. Prefer the use of simplified xpath expressions when possible. * clean attributes overwrite, prefer using the add/remove API. Also remove the useless overwrites defining the same value as the base view. * Clean and harmonize files indentation, remove useless `<data>` nodes. * Remove empty domains from search filters. * merge views when targeting the same parent view (some views were targeting specific groups in the past, but this logic has been deprecated and removed from standard code). * target the shared parent view (between quotes and orders) for shared content, instead of adding the same content in the two inherited views. Related PRs: * odoo/odoo#167023 * odoo/enterprise#63350 * odoo/upgrade#6817
The update aligns Planning tests with a related web change that offers archiving when deletion is blocked. This helps ensure the Planning app continues to behave correctly when users cannot delete records and need an alternative action.
Original PR description
This commit adapts JS tests according to the changes done in the related community PR: https://github.com/odoo/odoo/pull/200414 task-4610830
When document-related modules are installed, existing attachments on supported records will now be turned into the corresponding Documents entries automatically. This helps customers get a complete document library after enabling integrations, without needing manual cleanup or re-uploading files.
Original PR description
WhatsApp event messaging now better supports events with multiple time slots. This helps businesses communicate more accurately with attendees when an event offers several scheduling options.
The report editor now offers a more consistent experience across editing modes. Users can preview reports in the visual editor, print from the preview, and use a read-only preview in XML editing mode, reducing confusion and making report checks easier.
Original PR description
task-3865778
Resolved issues and error corrections
This fix ensures debug settings are handled consistently during automated tests, preventing avoidable test failures. It helps maintain confidence in quality checks for Documents, Dashboards, and Studio without changing end-user functionality.
Original PR description
odoo.debug has to be a string. If an error is thrown in a test with a
patchWithCleanup(odoo, { debug: true/false });
an error of type "env.debug.includes is not a function" is thrown.
Task ID: 4655180Code cleanup and technical improvements
The spreadsheet global filter tests were reorganized and simplified so they run with only the needed components instead of loading the full web client flow. This reduces test runtime and memory use, helping development and validation complete faster without changing end-user features.
Original PR description
…bal filters tests This commit has two main goals: - Reduce memory usage/time of global filters tests - Move global filters tests to their module (from documents_spreadsheet to spreadsheet_edition)…
…bal filters tests This commit has two main goals: - Reduce memory usage/time of global filters tests - Move global filters tests to their module (from documents_spreadsheet to spreadsheet_edition) The tests have been refactored to use the minimum setup possible. Before this commit, tests were using the full setup with a web client, with a pivot view and then a click on "Insert in spreadsheet", then the rendering of the spreadsheet, then the opening of the global filters side panel. And only after that the test can begin. Now, we create a spreadsheet model and we mount only the components that are tests (the global filters side panel and the global filter editor). The tests are now faster and use less memory. | On runbot | Before | After | |------------------------------------------------|--------|-------| | Memory consumption of all JS tests, at the end | 880mb | 715mb | | Time to run this suite | 40s | 9s | Task: 4653513
Miscellaneous changes
Ensure unique line IDs when the same country appears in both sales and purchase sections of the OSS report. Steps to reproduce: - Create a Belgium company - Install OSS Reports - Update OSS Fiscal Position (Refresh tax mapping in settings) - Duplicate an OSS tax (e.g., 20.0% FR VAT) - Change its type to Purchase - Add it to the FR fiscal position - Create an invoice with a tax 20% FR VAT (Sales) - Create a bill with a tax 20% FR VAT (Purchase) - Try to open OSS Sales report in tax re
Original PR description
Ensure unique line IDs when the same country appears in both sales and purchase sections of the OSS report. Steps to reproduce: - Create a Belgium company - Install OSS Reports - Update OSS Fiscal Position (Refresh tax mapping in settings) - Duplicate an OSS tax (e.g., 20.0% FR VAT) - Change its type to Purchase - Add it to the FR fiscal position - Create an invoice with a tax 20% FR VAT (Sales) - Create a bill with a tax 20% FR VAT (Purchase) - Try to open OSS Sales report in tax return - An error occurs due to duplicate line IDs Issue originates from `append_country_and_taxes_lines`, which appends a new line with incorrect markup (using new line markup instead of the last line markup). opw-4629989 Forward-Port-Of: odoo/enterprise#81641
The document App introduces the document mixin that creates automatically a related document when linking an attachment to a record of a model that extends that mixin. But when we enable a bridge…
The document App introduces the document mixin that creates automatically a related document when linking an attachment to a record of a model that extends that mixin. But when we enable a bridge that add this behavior on some models, it is not retroactive. That's what we are implementing here: at install of such bridge module, we launch a cron that create all the document that would have been created if the bridge was installed from the beginning. Note that we don't deal here with the settings that allow the user to enable or disable this behavior as it will become standard with the PR: odoo/odoo#74571. Technical notes: - we avoid to launch the document creation in the post init hook as it could take some times. Instead, we launch the creation in a cron. The cron is defined in the document App and is configured to never be executed (interval 9999 months). In the post init hook, we just configure the next_call so that it is only executed once after the upgrade. To allow some retry in case of concurrent update/errors, we use the progress mechanism of the cron. The limitation is that we only allow a retry if there has been some progression to avoid infinite loop (see code). - the cron doesn't limit the creation of the documents to the bridge that has just been installed. It shouldn't be a problem as if the user delete a document linked to an attachment related to a record, the attachment is also deleted (i.e. won't lead to the creation of an unwanted document if we run the cron again). Task-3486322
…rate The current implementation to handle the rate for multi-currency entries in CAMT creates problems when fetching the source rate from the file: the source rate can be taken from the SrcCcy or the TrgtCcy node, which should be compared with the source currency and target currency respectively. It is not done that way and is too restrictive (when the SrcCcy is found, it is always compared to the target currency, which leads to an incorrect transaction amount). Moreover, when the currenc
Original PR description
…rate The current implementation to handle the rate for multi-currency entries in CAMT creates problems when fetching the source rate from the file: the source rate can be taken from the SrcCcy or the TrgtCcy node, which should be compared with the source currency and target currency respectively. It is not done that way and is too restrictive (when the SrcCcy is found, it is always compared to the target currency, which leads to an incorrect transaction amount). Moreover, when the currency conversion introduces a exchange loss/gain, it is put back on the largest transaction of the entry. opw-4393164 Forward-Port-Of: odoo/enterprise#80622 Forward-Port-Of: odoo/enterprise#76828
**Steps to reproduce** - Install PoS, and select a Mexican company - Create an order O1, and in the payment screen, select "Invoice" and confirm the dialog - Validate the order - Click on "Orders" and set the filter to "Paid" to see order O1 - Click O1, click "Refund", and from the product screen, click "Payment" Observed behavior: White screen with traceback in the console. **Issue** It's happening because in l10n_mx_edi_pos, an invoiced order is supposed to have fields `l10n_mx_edi
Original PR description
**Steps to reproduce** - Install PoS, and select a Mexican company - Create an order O1, and in the payment screen, select "Invoice" and confirm the dialog - Validate the order - Click on "Orders"…
**Steps to reproduce** - Install PoS, and select a Mexican company - Create an order O1, and in the payment screen, select "Invoice" and confirm the dialog - Validate the order - Click on "Orders" and set the filter to "Paid" to see order O1 - Click O1, click "Refund", and from the product screen, click "Payment" Observed behavior: White screen with traceback in the console. **Issue** It's happening because in l10n_mx_edi_pos, an invoiced order is supposed to have fields `l10n_mx_edi_cfdi_to_public` and `l10n_mx_edi_usage` https://github.com/odoo/enterprise/blob/a0a97f2c87f76ae035394a67b09d71ec8f4567e7/l10n_mx_edi_pos/static/src/app/screens/payment_screen/payment_screen.js#L18-L21 And they are being accessed in the `product_screen.xml` https://github.com/odoo/enterprise/blob/0396d4f0ac33640dc042bb97e9e8d4b498e6a128/l10n_mx_edi_pos/static/src/app/screens/payment_screen/payment_screen.xml#L7-L12 That works for the original ordre (aka O1), however, when the refund order is created, we set its `to_invoice` to `true` if the original order is invoiced ([code](https://github.com/odoo/odoo/blob/53e7c0adf093dc950a42989a56b4594f734c17b2/addons/point_of_sale/static/src/app/screens/payment_screen/payment_screen.js#L69-L75)), but we don't set any values to the fields `l10n_mx_edi_cfdi_to_public` and `l10n_mx_edi_usage`, causing the crash in the payment screen. **Fix** If the refund order is invoiced, we set the `l10n_mx_edi_usage` to "G02" which corresponds to 'Returns, discounts or bonuses' (assuming that a refund can be seen as a 'return' here). We also copy the field `l10n_mx_edi_cfdi_to_public` from the original order. opw-4608630 Forward-Port-Of: odoo/enterprise#80664
Direct Debit payment notification email was always sent in english regardless of customer language. **Steps to reproduce:** * Configure SDD creditor identifier in accounting settings * Bank Journal should have valid bank account * Customer record have different language than user's language and have valid IBAN bank account * Create Direct Debit mandate for this customer * Pay an invoice for this customer with SDD payment method * Create batch payment for this payment and validate it. *
Original PR description
Direct Debit payment notification email was always sent in english regardless of customer language. **Steps to reproduce:** * Configure SDD creditor identifier in accounting settings * Bank Journal should have valid bank account * Customer record have different language than user's language and have valid IBAN bank account * Create Direct Debit mandate for this customer * Pay an invoice for this customer with SDD payment method * Create batch payment for this payment and validate it. * The payment notification email should be sent on payment chatter with wrong language. Video: https://drive.google.com/file/d/1jzlALs4SJRtOA5gPBt_xo0m8r7kpZd_m/view opw-4552438 Forward-Port-Of: odoo/enterprise#81490
## Purpose - When paying from the portal a quotation for a subscription starting in the past, or in the future, the deadline is incorrectly set which leads in a duplication of the quantities when creating the invoice. - Removal of the banner indicating the cron will run as not needed anymore Task: 4571168 Forward-Port-Of: odoo/enterprise#81304 Forward-Port-Of: odoo/enterprise#79828
Original PR description
## Purpose - When paying from the portal a quotation for a subscription starting in the past, or in the future, the deadline is incorrectly set which leads in a duplication of the quantities when creating the invoice. - Removal of the banner indicating the cron will run as not needed anymore Task: 4571168 Forward-Port-Of: odoo/enterprise#81304 Forward-Port-Of: odoo/enterprise#79828
Before this commit, the `test_smart_schedule_with_allocated_hours_and_deadlines` test fails when only `project_enterprise` module is installed because the allocated_hours on the tasks are recomputed. However, when timesheet_grid module is installed, the project inside the test has the timesheets feature enabled by default and so the allocated_hours are not recomputed because we suppose the allocated_hours on tasks inside that project can only be altered by the user when the tasks are already cre
Original PR description
Before this commit, the `test_smart_schedule_with_allocated_hours_and_deadlines` test fails when only `project_enterprise` module is installed because the allocated_hours on the tasks are recomputed. However, when timesheet_grid module is installed, the project inside the test has the timesheets feature enabled by default and so the allocated_hours are not recomputed because we suppose the allocated_hours on tasks inside that project can only be altered by the user when the tasks are already created. This commit checks in the test is timesheet_grid module is installed to give the right expected allocated_hours on tasks. runbot-108336 Forward-Port-Of: odoo/enterprise#81387 Forward-Port-Of: odoo/enterprise#79947
For the Reload DIAN Configuration button, a newly added class modifies the `colspan` of the surrounding `<div>`, forcing it to `colspan="1"` and causing the fields to be positioned next to the button incorrectly. **To Reproduce:** 1. Install the Accounting app and the `l10n_co_dian` module. 2. Navigate to Accounting > Configuration > Journals. 3. Open a Sales or Purchase Journal. 4. Observe that some localization fields are missing, misplaced, or unreadable. Community PR: odoo/odoo#201
Original PR description
For the Reload DIAN Configuration button, a newly added class modifies the `colspan` of the surrounding `<div>`, forcing it to `colspan="1"` and causing the fields to be positioned next to the button incorrectly. **To Reproduce:** 1. Install the Accounting app and the `l10n_co_dian` module. 2. Navigate to Accounting > Configuration > Journals. 3. Open a Sales or Purchase Journal. 4. Observe that some localization fields are missing, misplaced, or unreadable. Community PR: odoo/odoo#201227 Ticket [link](https://www.odoo.com/odoo/project/967/tasks/4601714) opw-4601714 Forward-Port-Of: odoo/enterprise#81173
Steps to reproduce: - create two companies - create two analytic account (no company defined) - create for company B an analytic distribution model with one of the analytic account and define company A as parter - With Company A, create an invoice and on the line use the other analytic account and confirm Issue: The distribution model for Company B will not be used and only the account distribution from the original invoice will be defined on the line Cause: In the _get_distribution
Original PR description
Steps to reproduce: - create two companies - create two analytic account (no company defined) - create for company B an analytic distribution model with one of the analytic account and define company A as parter - With Company A, create an invoice and on the line use the other analytic account and confirm Issue: The distribution model for Company B will not be used and only the account distribution from the original invoice will be defined on the line Cause: In the _get_distribution method, the partner is incorrectly set to Company B, leading to this issue. opw-4414850 Forward-Port-Of: odoo/enterprise#80954 Forward-Port-Of: odoo/enterprise#76395
To reproduce the issue: 1) Install l10n_es_reports 2) Configure the taxes WHI 15% and IVA 21% purchase taxes to include analytic (checkbox on the form view) 3) Create an invoice with two lines of 100€, so that - both lines use both IVA21% and WHI 1% taxes - one of those lines defines an anlaytic distribution while the other doesn't 4) Open the generic tax report, and generate the VAT Record Books XLSX export ===> In that file, the amount of withholding is 15€. It should be 30€
Original PR description
To reproduce the issue:
1) Install l10n_es_reports
2) Configure the taxes WHI 15% and IVA 21% purchase taxes to include analytic (checkbox on the form view)
3) Create an invoice with two lines of 100€, so that
- both lines use both IVA21% and WHI 1% taxes
- one of those lines defines an anlaytic distribution while the other doesn't
4) Open the generic tax report, and generate the VAT Record Books XLSX export
===> In that file, the amount of withholding is 15€. It should be 30€.
The same issue can be reproduced for surcharge taxes, in the same way.
This is due to the fact different analytic distributions between base lines will trigger the creation of different tax lines for the same tax (one for each distribution). The code handling the export "saw" both lines, but ovewrote the total instead of summing all the values.
opw-4471253
Forward-Port-Of: odoo/enterprise#81375opw-4592126 Forward-Port-Of: odoo/enterprise#81324
Original PR description
opw-4592126 Forward-Port-Of: odoo/enterprise#81324
Add missing search and tree vues of sale.commission.plan.user Allow to filter achievements by users Display target amount from the plan on commissions. Task: 4633303 Forward-Port-Of: odoo/enterprise#81511 Forward-Port-Of: odoo/enterprise#80978
Original PR description
Add missing search and tree vues of sale.commission.plan.user Allow to filter achievements by users Display target amount from the plan on commissions. Task: 4633303 Forward-Port-Of: odoo/enterprise#81511 Forward-Port-Of: odoo/enterprise#80978
When making a payment using a payment method of type cash with a name different than "CASH" the payment type was not being set correctly in the fiskaly payload. Steps to reproduce: ------------------- * Setup fiskaly for the German POS * Create a payment method of type cash but give it any other name than "CASH" * Make a payment using that payment method * Check the payment type on the fiskaly website dashboard > Observation: The payment type is set to "Non cash" Why the fix: ------
Original PR description
When making a payment using a payment method of type cash with a name different than "CASH" the payment type was not being set correctly in the fiskaly payload. Steps to reproduce: ------------------- * Setup fiskaly for the German POS * Create a payment method of type cash but give it any other name than "CASH" * Make a payment using that payment method * Check the payment type on the fiskaly website dashboard > Observation: The payment type is set to "Non cash" Why the fix: ------------ We should base the payment type on the payment method type and not on the payment method name. opw-4606731 Forward-Port-Of: odoo/enterprise#80995 Forward-Port-Of: odoo/enterprise#80919
It doensn't work to scan a lot in the kanban view of stock.barcode. It's not recognize since the company_id is not required on the lot since 18.0 but the domain was not adapt and expect it. opw-4626206 Forward-Port-Of: odoo/enterprise#81351
Original PR description
It doensn't work to scan a lot in the kanban view of stock.barcode. It's not recognize since the company_id is not required on the lot since 18.0 but the domain was not adapt and expect it. opw-4626206 Forward-Port-Of: odoo/enterprise#81351
- Sign > Templates > Click on any of the kanban record - Reload the view (either reload the browser, or activate the debug, or change to dark mode on the user menu). Before this commit, on reloading the sign template page user was redirected back to kanban view. This occurs because, the client action 'sign.Template' required template_id (found in the context) that was lost when reloading. Now, template_id is put in the query string of the URL, in that way, when reloading, the client ac
Original PR description
- Sign > Templates > Click on any of the kanban record - Reload the view (either reload the browser, or activate the debug, or change to dark mode on the user menu). Before this commit, on reloading the sign template page user was redirected back to kanban view. This occurs because, the client action 'sign.Template' required template_id (found in the context) that was lost when reloading. Now, template_id is put in the query string of the URL, in that way, when reloading, the client action 'sign.Document' will have the needed template_id. Note that, this is also the behavior of the base_import 'ImportAction' action [1]. task-4391729 [1] : https://github.com/odoo/odoo/pull/182744/commits/a6801ce4aa65cd023e2a762ab5c42755a4599c95 Forward-Port-Of: odoo/enterprise#80776 Forward-Port-Of: odoo/enterprise#77400
Steps to reproduce: * Customer record has language different than user's language. * Customer form view -> Accounting Tab -> Invoice follow-ups -> Send * Check sms checkbox * sms template in user's language, it should be in customer's languange. opw-4599660 Forward-Port-Of: odoo/enterprise#81382
Original PR description
Steps to reproduce: * Customer record has language different than user's language. * Customer form view -> Accounting Tab -> Invoice follow-ups -> Send * Check sms checkbox * sms template in user's language, it should be in customer's languange. opw-4599660 Forward-Port-Of: odoo/enterprise#81382
Steps to reproduce the bug: - Enable “Signature” option in inventory settings - Go to barcode → delivery orders > batch: - select any batch: - settings: - Operations > sign: - Sign and validate Problem: A traceback is triggered: “ValueError: Invalid field 'signature' on model 'stock.picking.batch'” Solution: It is not possible to sign a batch picking, so the button should not displayed. opw-4610471 Forward-Port-Of: odoo/enterprise#81051
Original PR description
Steps to reproduce the bug: - Enable “Signature” option in inventory settings - Go to barcode → delivery orders > batch: - select any batch: - settings: - Operations > sign: - Sign and validate Problem: A traceback is triggered: “ValueError: Invalid field 'signature' on model 'stock.picking.batch'” Solution: It is not possible to sign a batch picking, so the button should not displayed. opw-4610471 Forward-Port-Of: odoo/enterprise#81051
it could happen that odoo does not receive DIAN's response because of internet loss while the document is being sent to dian for example. The move form will then display the edi state as being rejected while in reality DIAN has successfully processed the move. If the user where to send the move to DIAN again, they would get an error message saying the move has already been processed. the fix: when the move is sent to DIAN again after getting out of sync, DIAN will send the error explained abo
Original PR description
it could happen that odoo does not receive DIAN's response because of internet loss while the document is being sent to dian for example. The move form will then display the edi state as being rejected while in reality DIAN has successfully processed the move. If the user where to send the move to DIAN again, they would get an error message saying the move has already been processed. the fix: when the move is sent to DIAN again after getting out of sync, DIAN will send the error explained above which contains the identifier of the move. We now save this identifier and use it in the automatic GetStatus call to get odoo and DIAN back in sync. ticket: 4569829 Forward-Port-Of: odoo/enterprise#81350
In this commit, we add a delay to ensure Gantt view will correclty be loaded after clicking on Gantt view button. This allow to fix an indeterministic behavior that can occurs in restaurant_appointment_tour tour. Forward-Port-Of: odoo/enterprise#81562
Original PR description
In this commit, we add a delay to ensure Gantt view will correclty be loaded after clicking on Gantt view button. This allow to fix an indeterministic behavior that can occurs in restaurant_appointment_tour tour. Forward-Port-Of: odoo/enterprise#81562
Specs: When documents are in the trash folder, no actions are required except for the Download button, which remains visible. After this commit: Remove action buttons in the trash folder. Task-4574919 Forward-Port-Of: odoo/enterprise#81206 Forward-Port-Of: odoo/enterprise#79644
Original PR description
Specs: When documents are in the trash folder, no actions are required except for the Download button, which remains visible. After this commit: Remove action buttons in the trash folder. Task-4574919 Forward-Port-Of: odoo/enterprise#81206 Forward-Port-Of: odoo/enterprise#79644