Thursday, June 12, 2025
27 changes · master
Enhancements to existing features
The Belgian reports app now remembers the last corporate tax rate chosen for ISOC advance payment returns. This saves users from reselecting the same rate in future payment wizards, whether the payment is made immediately or scheduled for later.
Original PR description
Save the last corporate tax rate selected for the advance payment return type(ISOC prepayment), whether it's paid now or later, and apply it to subsequent advance payment return wizards task-4791142
Helpdesk teams can now assign a responsible person directly from the ticket kanban view, even when no one is currently assigned. This saves time by avoiding the need to open each ticket just to set an assignee.
Original PR description
Before this commit, the user cannot assign someone in the ticket in the kanban view as we can in the kanban view of project and task for instance. This commit displays the user_id field in the kanban view of ticket even if the no user is assigned. By doing that, the user can assign someone in the ticket without having to open the form view or another view. task-4793688
The asset form now clearly states that the declining factor rate is calculated per year. This helps users interpret the depreciation setting correctly and reduces confusion when configuring assets.
Original PR description
This commit adds text 'per year' to declining factor rate field in the form views. Label was added explicitly to avoid confusion. task-4852994
The task priority marker has been repositioned in the kanban view for timesheet-related project tasks. This small layout improvement helps users spot and manage priority work more naturally while reviewing tasks.
Original PR description
task-4801143
The AI module now delays loading PDF processing components until they are actually needed. This reduces startup overhead, helping the system become available faster without changing user-facing features.
Original PR description
Lazy loaded as in attachment_indexation to speed to starting time. odoo/odoo#212387
Resolved issues and error corrections
A failing automated tour test in Documents Spreadsheet was simplified after a spreadsheet library update exposed unnecessary steps. This helps keep validation reliable without changing the user-facing spreadsheet experience.
Original PR description
The multipage tour started failing after an update of the lib o-spreadsheet. While no significant change seems to explain the failing, it turns out that the tour makes LOTS of useless steps and the actual feature tested doesn't even require to load a spreadsheet. This revision simplifies the tour as much as possible. Fixes runbot error 226565
This fixes an internal test for the point-of-sale IoT scale integration so it matches the latest scale checksum behavior. It helps keep automated checks reliable and reduces the risk of future scale-related regressions reaching users.
Original PR description
See community PR odoo/odoo#213999 for the details of the change. This commit simply fixes the scale checksum test to reflect the new code. task-4866092
A spreadsheet test was adjusted to stay compatible with an updated pivot table parameter. This helps keep spreadsheet filtering behavior reliable after related changes in the spreadsheet engine.
Features or functions removed from Odoo
SEPA direct debit invoices no longer store a direct mandate link because that information already exists on payments. This keeps mandate data cleaner while preserving invoice tracking through related payments.
Original PR description
The sdd_mandate_id field on account.move was incorrectly set and conceptually unnecessary, as a mandate should not be directly linked to an invoice. This link was only used for the "Invoices Paid" smart button on the mandate view. Since account.payment already holds the sdd_mandate_id and invoices have access to related payments, this field is redundant and has been removed. task-4531618
Miscellaneous changes
Before this commit: === - After accepting an order or marking it as "Food Ready," no order was selected by default. After this commit: === - After accepting an order or marking it as "Food Ready," the respective order is automatically selected by default. task-4442911 Forward-Port-Of: odoo/enterprise#87317 Forward-Port-Of: odoo/enterprise#76356
Original PR description
Before this commit: === - After accepting an order or marking it as "Food Ready," no order was selected by default. After this commit: === - After accepting an order or marking it as "Food Ready," the respective order is automatically selected by default. task-4442911 Forward-Port-Of: odoo/enterprise#87317 Forward-Port-Of: odoo/enterprise#76356
This commit will fix three different bugs: - When selecting multiple invoice in the select create dialog view and that the amount of the selected invoice was bigger than the open_balance. a partial was created directly which shouldn't be the case - When matching multiple invoice and then adding one more after, the open balance was wrongly computed since we were using the amount residual to calculate it and since the invoice is reconciled the amount residual was 0. Due to this commit: ht
Original PR description
This commit will fix three different bugs: - When selecting multiple invoice in the select create dialog view and that the amount of the selected invoice was bigger than the open_balance. a partial was created directly which shouldn't be the case - When matching multiple invoice and then adding one more after, the open balance was wrongly computed since we were using the amount residual to calculate it and since the invoice is reconciled the amount residual was 0. Due to this commit: https://github.com/odoo/enterprise/commit/8bc9b75dd9a44ee87eb3b222cbec82a9697d8e6c - When having a statement line of a 100, adding 2 lines 75 and 25, when adding the last one, the residual is 0 and so the amount was display twice because sourceBalanceBiggerThanLineBalance was returning true. no task id Forward-Port-Of: odoo/enterprise#86876
Before this patch, adding `l10n_mx_edi_cfdi_supplier_rfc` (or any other field filled by `_fill_from_cfdi_values`) to a tree/form view showed the field empty. Root cause ---------- `_fill_from_cfdi_values()` decoded the CFDI using `attachment.raw` with `bin_size=True` still in the context, so the ORM returned the placeholder `b'59.00 bytes'`. As a result, `_decode_cfdi_attachment()` got an empty payload and returned `{}`. Fix --- Reload the attachment without the `bin_size` flag 
Forward-Port-Of: odoo/enterprise#85400
Forward-Port-Of: odoo/enterprise#85333Fix wrong variable rename in `Interaction` refactoring of odoo/enterprise@fba0ad8a693e4d8a9089fa0c1e680beb0ee19a23 opw-4861452 Forward-Port-Of: odoo/enterprise#87330
Original PR description
Fix wrong variable rename in `Interaction` refactoring of odoo/enterprise@fba0ad8a693e4d8a9089fa0c1e680beb0ee19a23 opw-4861452 Forward-Port-Of: odoo/enterprise#87330
List of changes: - Review checks button -> Review - When we click on the Review Button and all checks are already green, we show a toaster telling that auu checks were successful and forward the state. - The Bank matching check open the kanban by default now - Removed Reminder and Journal from the opening wizard - Renamed Advance Tax Payment to Advance Payment, same for french - If the deadline is due, we show it in red - The todo filter, filter returns with a date_to that is less than to
Original PR description
List of changes: - Review checks button -> Review - When we click on the Review Button and all checks are already green, we show a toaster telling that auu checks were successful and forward the…
List of changes: - Review checks button -> Review - When we click on the Review Button and all checks are already green, we show a toaster telling that auu checks were successful and forward the state. - The Bank matching check open the kanban by default now - Removed Reminder and Journal from the opening wizard - Renamed Advance Tax Payment to Advance Payment, same for french - If the deadline is due, we show it in red - The todo filter, filter returns with a date_to that is less than today. - Rename the wizard title ISOC Prepaymentr -> Advance Payment - Add a mark as completed button for advance payment returns - If the amount to pay is zero, directly forward the state to paid after submission - Same as above, if the amount is negative (to recover), we directly finalize the payment - Removed the auto redirect on the checks view when al checks are green - Added a Reset button for VAT return in paid state - Limit count on checks: search for maximum 21 records, show 20+ if there is more - Changed default journal sequence prefix TRTRN -> TAX - Renamed BE EC Sales list report name in french 'Relevé à la TVA des opérations intracommunautaires' -> 'Relevé Intracommunautaire' - Fixed tax return view action. Before it was a client action resulting in a lost of the path. The fix is using a server action and manually setting the path. - Auto Generation of the EC sales list return and Intrastat return by the cron. Before they were created upon submission of the vat export modal. - Fix Lock Date reset for return type with reports without a country - Do not auto forward when resolving checks, we wait until the refresh of the tax return view. - Fix a bug showing double Submit button for the Annual closing Note: We added back buttons on the report for exportation of the Intrastat report and EC sales list report as they are generated automatically. We cannot ensure all periods are covered as it does only generate a return for the previous period. Since then EC sales (or Intrastat) return for older periods might have not been generated and there is currently no way to create them manually. This will be fixed un 18.4 task-4781427 Forward-Port-Of: odoo/enterprise#85509
…Inter-Company sync ### Steps to reproduce: - With Company B in the settings Enable Inter-Company Transactions > Synchronize Sales and Purchase Order - Sales > Configurations > Sales Teams, Archive all sales team - With COMP A create a sales team with a set company_id: COMP A - With COMP A create and confirm a PO with COMP B as customer #### > Invalid operation: while generating the SO, the sales team belongs to COMP A and the SO to COMP B. ### Cause of the issue: The `team_i
Original PR description
…Inter-Company sync ### Steps to reproduce: - With Company B in the settings Enable Inter-Company Transactions > Synchronize Sales and Purchase Order - Sales > Configurations > Sales Teams, Archive…
…Inter-Company sync ### Steps to reproduce: - With Company B in the settings Enable Inter-Company Transactions > Synchronize Sales and Purchase Order - Sales > Configurations > Sales Teams, Archive all sales team - With COMP A create a sales team with a set company_id: COMP A - With COMP A create and confirm a PO with COMP B as customer #### > Invalid operation: while generating the SO, the sales team belongs to COMP A and the SO to COMP B. ### Cause of the issue: The `team_id` field of the `sale.order` model is a stored pre-computed and company checked field. As such, when the SO is created and even if no sales team is provided to the create vals: https://github.com/odoo/enterprise/blob/c61ce5a8e46e706bfb2025d4c9c79a39598e8827/sale_purchase_inter_company_rules/models/purchase_order.py#L70 a default sales team will be computed and set on the SO based on the "allowed_company_ids" (including both COMP A and COMP B): https://github.com/odoo/odoo/blob/1fa8678a33ab35195005d1b65b5eecb1d089fe56/addons/sale/models/sale_order.py#L453-L460 https://github.com/odoo/odoo/blob/1fa8678a33ab35195005d1b65b5eecb1d089fe56/addons/sales_team/models/crm_team.py#L81-L88 While the domain checks that the sales team is either not tight to a company or belong to comp B, since no such teams were found, we fallback the invalid sales team of COMP A. The invalid operation is then raised during the `_check_company` of the created record. opw-4627851 Forward-Port-Of: odoo/enterprise#86528 Forward-Port-Of: odoo/enterprise#83487
We updated the way of contacting the blackbox to allow using the websocket as a fallback for the longpolling. This is a temporary fix that is solved by the use of the `iot_http` service in saas-18.4. Community PR: odoo/odoo#212052 Task: 4824066 Forward-Port-Of: odoo/enterprise#86598
Original PR description
We updated the way of contacting the blackbox to allow using the websocket as a fallback for the longpolling. This is a temporary fix that is solved by the use of the `iot_http` service in saas-18.4. Community PR: odoo/odoo#212052 Task: 4824066 Forward-Port-Of: odoo/enterprise#86598
Previously, the `referral_state` was not reset when reprocessing an applicant, which could lead to inconsistencies in the referral tracking. This commit ensures that the `referral_state` is explicitly set to `'progress'` when the applicant is reset, maintaining proper state management in the referral process. opw-4523156 Forward-Port-Of: odoo/enterprise#87064 Forward-Port-Of: odoo/enterprise#79767
Original PR description
Previously, the `referral_state` was not reset when reprocessing an applicant, which could lead to inconsistencies in the referral tracking. This commit ensures that the `referral_state` is explicitly set to `'progress'` when the applicant is reset, maintaining proper state management in the referral process. opw-4523156 Forward-Port-Of: odoo/enterprise#87064 Forward-Port-Of: odoo/enterprise#79767
The tour is adapted to follow new naming convention introduced in the community PR. Task [4745662](https://www.odoo.com/odoo/project/966/tasks/4745662) odoo/odoo#207217 Forward-Port-Of: odoo/enterprise#84420
Original PR description
The tour is adapted to follow new naming convention introduced in the community PR. Task [4745662](https://www.odoo.com/odoo/project/966/tasks/4745662) odoo/odoo#207217 Forward-Port-Of: odoo/enterprise#84420
**Issue** In version 18.0, the Customer Statement smart button only appears if the customer has an invoice, unlike in 17.0 where it also appeared if the customer simply had a balance in their ledger **Steps to Reproduce** 1. Install the Accounting module 2. Go to Accounting > Accounting > Journal Entries 3. Create a new Journal Entry 4. Set one line to account 121000 (Accounts Receivable), assign partner "Administrator", and debit $100 5. Set the other line to account 101401 (Bank), and
Original PR description
**Issue** In version 18.0, the Customer Statement smart button only appears if the customer has an invoice, unlike in 17.0 where it also appeared if the customer simply had a balance in their ledger…
**Issue** In version 18.0, the Customer Statement smart button only appears if the customer has an invoice, unlike in 17.0 where it also appeared if the customer simply had a balance in their ledger **Steps to Reproduce** 1. Install the Accounting module 2. Go to Accounting > Accounting > Journal Entries 3. Create a new Journal Entry 4. Set one line to account 121000 (Accounts Receivable), assign partner "Administrator", and debit $100 5. Set the other line to account 101401 (Bank), and credit $100 6. Post the journal entry 7. Navigate to Accounting > Customers > Customers 8. Open the "Administrator" customer record 9. Notice that the Customer Statement smart button is not displayed **Root Cause** The visibility of the smart button is incorrectly tied to the presence of posted invoices (account.move), instead of the existence of any outstanding balance on the customer account **Fix** Adjust the visibility logic to show the Customer Statement button if the customer has any ledger balance, even without invoices. This restores the behavior present in 17.0 Opw-4787174 Forward-Port-Of: odoo/enterprise#87134 Forward-Port-Of: odoo/enterprise#86446
During this commit: https://github.com/odoo/enterprise/commit/0931f83a37a66fbc523fa40cc97f1cc52443bd2f we removed the domain on cancel entries to add tags on the statement itself and a filter. But when doing the refactor of the bank rec widget, we decided to remove the tags for now but didn't put back the domain. This commit will add it back no task id Forward-Port-Of: odoo/enterprise#87413
Original PR description
During this commit: https://github.com/odoo/enterprise/commit/0931f83a37a66fbc523fa40cc97f1cc52443bd2f we removed the domain on cancel entries to add tags on the statement itself and a filter. But when doing the refactor of the bank rec widget, we decided to remove the tags for now but didn't put back the domain. This commit will add it back no task id Forward-Port-Of: odoo/enterprise#87413
Before this commit a traceback was occurring when opening an app using palette and then immediately passing a value in palette search input. After this commit the traceback will not occur anymore. task-4735048 Forward-Port-Of: odoo/enterprise#87359 Forward-Port-Of: odoo/enterprise#86066
Original PR description
Before this commit a traceback was occurring when opening an app using palette and then immediately passing a value in palette search input. After this commit the traceback will not occur anymore. task-4735048 Forward-Port-Of: odoo/enterprise#87359 Forward-Port-Of: odoo/enterprise#86066
Currently, if there is an error while generation print reports the use of the IoT will return the generic error `Failed to send to printer' which does not lead to understand there is a hidden issue to begin with. Steps to reproduce: ------------------- 1. Set up the iot and like the product labels report to a zebra printer 2. Modify the view of the product labels (`label_product_product_view`) to ensure there is an error during rendering (mistype a field name) 3. Go to a product and print
Original PR description
Currently, if there is an error while generation print reports the use of the IoT will return the generic error `Failed to send to printer' which does not lead to understand there is a hidden issue…
Currently, if there is an error while generation print reports the use of the IoT will return the generic error `Failed to send to printer' which does not lead to understand there is a hidden issue to begin with. Steps to reproduce: ------------------- 1. Set up the iot and like the product labels report to a zebra printer 2. Modify the view of the product labels (`label_product_product_view`) to ensure there is an error during rendering (mistype a field name) 3. Go to a product and print labels > Observation: Notification: Failed to send to printer Why the fix: ------------ In the example given an error occurs when trying to render the label here: https://github.com/odoo/enterprise/blob/968bf16c65a67791efd5fb94f5c95eaf09a47107/iot/static/src/iot_report_action.js#L50-L57 Technically the error makes it so that we fall into this catch block https://github.com/odoo/enterprise/blob/968bf16c65a67791efd5fb94f5c95eaf09a47107/iot/static/src/iot_report_action.js#L81-L88 We will now make a distinction between the RPC error and generic iot related error. If any error occur while making the RPC call we will now show the traceback. This should help anyone debugging. opw-4571350 Forward-Port-Of: odoo/enterprise#84589
**Before this commit:** - Submitting a GSTR-1 return to the GST portal with an empty `hsn` dictionary caused a schema validation error from the portal: {"error_msg": "Error in Json structure validation.", "error_cd": "RET191106"} - This occurred because the generated JSON included the `hsn` key with an empty dictionary, which is invalid as per government schema requirements. - The portal expects the `hsn` field to be absent if no data is available, or to contain valid nested keys an
Original PR description
**Before this commit:** - Submitting a GSTR-1 return to the GST portal with an empty `hsn` dictionary caused a schema validation error from the portal: {"error_msg": "Error in Json structure…
**Before this commit:**
- Submitting a GSTR-1 return to the GST portal with an empty `hsn` dictionary
caused a schema validation error from the portal:
{"error_msg": "Error in Json structure validation.", "error_cd": "RET191106"}
- This occurred because the generated JSON included the `hsn` key with an
empty dictionary, which is invalid as per government schema requirements.
- The portal expects the `hsn` field to be absent if no data is available, or to
contain valid nested keys and values.
**After this commit:**
- A `ValidationError` is raised when attempting to send a GSTR-1 return with no
HSN data, preventing the generation and submission of an invalid JSON payload.
- This ensures that the `hsn` field is only added to the payload when it contains
at least one section with data.
- Helps avoid unnecessary submission failures and improves user feedback at the
point of action.
task - 4807628
Forward-Port-Of: odoo/enterprise#87326
Forward-Port-Of: odoo/enterprise#86655In VoIP, the keypad state wasn't updated after the user hangs up with the other party. So, when making a new call, the keypad appears again with its last state in the previous call. This commit fixes this by resetting the keypad state everytime the user makes a call. Task-4848365 Forward-Port-Of: odoo/enterprise#86977
Original PR description
In VoIP, the keypad state wasn't updated after the user hangs up with the other party. So, when making a new call, the keypad appears again with its last state in the previous call. This commit fixes this by resetting the keypad state everytime the user makes a call. Task-4848365 Forward-Port-Of: odoo/enterprise#86977
*l10n_es_real_estates,l10n_es_reports,l10n_es_reports_2024 Related to https://github.com/odoo/odoo/pull/210804 Forward-Port-Of: odoo/enterprise#87048 Forward-Port-Of: odoo/enterprise#85966
Original PR description
*l10n_es_real_estates,l10n_es_reports,l10n_es_reports_2024 Related to https://github.com/odoo/odoo/pull/210804 Forward-Port-Of: odoo/enterprise#87048 Forward-Port-Of: odoo/enterprise#85966
In the related community commit, we added a constraint that requires the Tax Receivable and Tax Payable accounts on tax groups to be a Receivable or Payable account, be reconcilable and set to Non Trade. In this commit we adapt the current tests that use accounts on tax groups to have their accounts comply to the new constraint. [task-3763030](https://www.odoo.com/odoo/project.task/3763030) Related to https://github.com/odoo/odoo/pull/201249 Forward-Port-Of: odoo/enterprise#87034 Forwa
Original PR description
In the related community commit, we added a constraint that requires the Tax Receivable and Tax Payable accounts on tax groups to be a Receivable or Payable account, be reconcilable and set to Non Trade. In this commit we adapt the current tests that use accounts on tax groups to have their accounts comply to the new constraint. [task-3763030](https://www.odoo.com/odoo/project.task/3763030) Related to https://github.com/odoo/odoo/pull/201249 Forward-Port-Of: odoo/enterprise#87034 Forward-Port-Of: odoo/enterprise#85693
Before this commit, if the communication compay was not set on a sign_request, the lang value would be falsy. As a result posix_to_ldml(lang.date_format, locale=locale) would crash. Forward-Port-Of: odoo/enterprise#87405
Original PR description
Before this commit, if the communication compay was not set on a sign_request, the lang value would be falsy. As a result posix_to_ldml(lang.date_format, locale=locale) would crash. Forward-Port-Of: odoo/enterprise#87405