Daily updates from Odoo
Navigate
Branch
Saturday, July 26, 2025
30 changes
1 change
Resolved issues and error corrections
Fixes an issue where tax reports could show incorrect net amounts when invoices used the same tax with different analytic distributions. This helps ensure grouped tax reports reflect the full taxable base, improving reliability for accounting and reporting.
Original PR description
### Issue: When having two lines on an invoice with the same tax and different analytic distribution, the base value is doubled on the tax report. ### Steps to reproduce: - Create a new tax on sales…
### Issue: When having two lines on an invoice with the same tax and different analytic distribution, the base value is doubled on the tax report. ### Steps to reproduce: - Create a new tax on sales (eg 10%) - Make sure the option "Analytic Accounting" is ticked in the settings - Create an invoice with a line, add the tax on it and change the analytic distribution - Do the same for another invoice with another analytic distribution - Confirm the invoices - Go to the tax report - Select the report "Group By: Account > Tax" - On the report the "Net" amount is only the one of the first invoice, the tax amount is correct ### Cause: The bug appeared after this [commit](https://github.com/odoo-dev/enterprise/commit/9a7142ef57503efad9538e571d2e35c4aaa59531) which fixed another issue with analytics. Now several lines with the same tax can be returned by the query if they have different analytics. This was used to avoid having the base amount doubled on the invoice when several lines from the same move had with different analytics: there is a line for each analytic but they all have the same base, in the end the base amounts was doubled for each different analytic. Now the query returns multiple lines but as they all have the same key the base amounts are not added together. This fixes the previous issue when several lines from the same move but with different analytics were added but it creates another issue when different invoices have the same tax and different analytic because these lines also have the same key. This result in only the base amount of the first invoice to be taken into account. ### Solution: The previous fix was incorrect. The correct fix is to not join the lines when there are two tax lines. To do this the [condition](https://github.com/odoo/odoo/blob/cf8d38205c09a2724f41907fa07c5f23ff2d46a3/addons/account/models/account_move_line_tax_details.py#L153) in the query needs to be the same as the [condition](https://github.com/odoo/odoo/blob/cf8d38205c09a2724f41907fa07c5f23ff2d46a3/addons/account/models/account_move_line.py#L984) that will duplicate the lines in python. The check on `use_in_tax_closing` was missing so we add it. opw-4766421 Forward-Port-Of: odoo/odoo#220662 Forward-Port-Of: odoo/odoo#220394
24 changes
New functionality added to Odoo
Users can now bring survey results directly into Odoo spreadsheets using a new survey spreadsheet feature. This makes it easier for teams to analyze feedback, share insights, and build reports without exporting data to external tools.
Original PR description
This commits adds a new module `documents_spreadsheet_survey` that implements the `ODOO.SURVEY` function in the spreadsheet. This function allow to display survey results in a spreadsheet. Task: [3600662](https://www.odoo.com/web#id=3600662&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form)
Enhancements to existing features
The enterprise mobile pivot view tests were updated to match recent control panel button responsiveness changes. This helps ensure the mobile interface remains reliable as button behavior is improved across the product.
Original PR description
This commit adapts PivotView's test for the changes made in related commit in community. task-4277543
Odoo Studio's report editor now makes it easier to select and reuse dynamic report fields by preserving their underlying expressions when copied and pasted. Formatting controls are also disabled where they could create conflicting report rules, helping users avoid unexpected layout issues.
Original PR description
This commit improves a few things in the report editor: - A node that is a t-field/t-out/t-esc is fully selected on click - that kind of node can now be copied/pasted, the expression and the human readable expression will be kept. - When selecting t-att-[class|style] nodes, the toolbar disables the formatting options. This is because in QWeb python, the t-att- overrides completely the static attribute definition and because it is too cumbersome to merge a string (style, class) with an expression. task-4914489
Task dependency links in the Gantt planning view are now easier to see when users hover over them. This helps project teams quickly understand which tasks are connected and plan work with less confusion.
Original PR description
This commit's purpose is to highlight the dependencies in the gantt view. When the user hover a link, the link and the linked tasks are now displayed more clearly. task-4613169
The checkout process for Chilean and Mexican eCommerce customers now skips an unnecessary confirmation page. This reduces extra clicks and helps shoppers move more directly from checkout to payment.
Original PR description
Description of the issue/feature this PR addresses: Streamlines the eCommerce checkout by removing the /shop/confirm_order route. Current behavior before PR: The checkout flow includes a redundant confirmation step (/shop/confirm_order), adding unnecessary complexity and extra user interaction. Desired behavior after PR is merged: Checkout proceeds directly from /shop/checkout to /shop/payment.. SEE ALSO: - Community PR:https://github.com/odoo/odoo/pull/204977 - Upgrade PR: https://github.com/odoo/upgrade/pull/7699 Affected version - master Task-4676202
Odoo now relies on a more reliable file type detection library on supported systems, reducing mistakes when identifying uploaded spreadsheet files. This helps prevent valid Excel imports from being confused with compressed files and fixes a corrupted sample import file used by accounting import tests.
Original PR description
The python3-magic is a undeclared POSIX-only dependency used in odoo.tools.mimetypes to determine the mimetype of a file given its content. It uses magic(5) as backend, which is not available on Windows. When the library is missing, it fallbacks on our own (very bad) pure-python magic implementation, which fail to distinguate .xlsx and .zip files apart may the file be larger than 1kB. Community: https://github.com/odoo/odoo/pull/219284
The label for the option that folds Helpdesk stages has been updated to reflect that it applies beyond the Kanban view. This makes the setting clearer for users managing ticket stages and reduces confusion.
Original PR description
Before this commit, the fold label said `Folded in Kanban` but it actually also folds the stage in the list view of tickets. This commit updates the label of fold field accordingly. task-4845411
Field Service wording is updated from "worker" to "technician" across related screens, reports, and sales reporting areas. This makes the language clearer and better aligned with how service teams describe the people assigned to on-site jobs.
Original PR description
task-4801707
Resolved issues and error corrections
This update adds missing labels to automated tests so they are run and measured correctly under the newer testing system. It helps maintain confidence in Helpdesk and subscription payment quality without changing customer-facing behavior.
Original PR description
With the new test-tags features that allows to add additional test tags at runtime, the tests that starts a tour or that are using a query_count and that are not detected as such must be tagged respectively `is_tour` or `is_query_count`. Forward-Port-Of: odoo/enterprise#90690 Forward-Port-Of: odoo/enterprise#89934
This update fixes how fixed-amount Cuota taxes are reported on Mexican electronic invoices, ensuring the tax rate, base quantity, and amount match official requirements. It reduces the risk of incorrect tax documents and also tidies related tests to make future validation easier.
Original PR description
**[FIX] l10n_mx_edi: Fix wrong management of Cuota taxes** Cuota taxes are wrongly reported. For example, a GAZ cuota tax expressed as 4.6555 per quantity has to be reported as TasaOCuota=4.6555 Base=quantity Importe=TasaOCuota * Base Currently, it's reported as: TasaOCuota=abs(tax_amount_currency/base_amount_currency) Base=base_amount_currency Importe is recomputed as TasaOCuota * Base instead of tax_amount_currency task-id: 4761658 **[IMP] l10n_mx_edi: Make test suite a bit less messy** Having a single test testing all taxes combination, testing 100% discount on it + IEPS breakdown and global invoice makes the whole thing difficult to debug. Also, it forces the generation of files that are not always relevant. Forward-Port-Of: odoo/enterprise#89801 Forward-Port-Of: odoo/enterprise#88357
Self-service orders now reach the preparation display only after payment succeeds when an online or terminal payment method is configured. This prevents staff from preparing unpaid orders, while still allowing mobile self-orders without online payment setup to be prepared as before.
Original PR description
pos_self_order*: pos_online_payment_self_order_preparation_display, pos_self_order_preparation_display Ensure self-orders are sent to the preparation display only after a successful payment, when a…
pos_self_order*: pos_online_payment_self_order_preparation_display, pos_self_order_preparation_display Ensure self-orders are sent to the preparation display only after a successful payment, when a valid payment method is configured. **Issue 1: Orders sent for preparation before successful payment** **Steps:** - Configure the kiosk with an online or terminal payment method. - Open the kiosk, add products, and proceed to payment. **Issue:** - Preparation orders were being sent even if the payment was not completed. **Fix:** - Restrict preparation flow to only orders with a successful payment when a valid payment method is configured. --- **Issue 2: Orders not sent for preparation in mobile mode without the online method** - Allow unpaid orders to be sent for preparation only in mobile mode when no online payment method is configured. Task-4845410 Related: https://github.com/odoo/odoo/pull/213493 Forward-Port-Of: odoo/enterprise#90923 Forward-Port-Of: odoo/enterprise#87173
Text shown in parts of Documents and Studio was moved into standard translation-ready files. This helps ensure users can see these interface labels in their selected language instead of untranslated text.
Original PR description
Inline XML templates aren't translated. This commit redefines inline XML templates containing human-readable strings as full-fledged XML files so that they can be translated. Community: https://github.com/odoo/odoo/pull/219894
Customers who receive a shared helpdesk ticket or a message about one are now automatically added as followers. This ensures they can view the ticket in the portal without extra manual steps, reducing access issues and follow-up work for support teams.
Original PR description
Before this commit, when a ticket was shared through the share wizard or when a message was sent to a customer via the chatter, the recipients were not added as followers of the ticket. As a result, they couldn't see the ticket in the portal. This commit ensures: - Recipients are now added as followers of the ticket when it is shared with them through the wizard. - A message to a customer in the chatter also adds them as a follower of the ticket. task-4781259 Forward-Port-Of: odoo/enterprise#90947 Forward-Port-Of: odoo/enterprise#86169
Membership benefits now apply correctly when a parent company or contact purchases or loses membership. Parent memberships are passed to child contacts, while child purchases stay with that child, preventing incorrect pricing or commission benefits from being retained.
Original PR description
Corrects the behaviour of the member level assignment in membership when childs partners are concerned. A partner buying a membership should forward the membership level and Pricelist to its children. A child buying a membership should get that membership without forwarding it to its parent. When removed, children should not keep the membership if the parent lose it. TASK-4801759 Forward-Port-Of: odoo/enterprise#86776
Colombian electronic invoices now send invoice type codes in the two-character format required by DIAN. This prevents rejections caused by incorrectly formatted EDI types and helps businesses submit invoices more reliably.
Original PR description
The DIAN endpoint only accepts Electronic Invoice types with a length of 2 characters. This fix adds zero-padding to the problematic edi types. task: 4882683 Forward-Port-Of: odoo/enterprise#89925
Users with Planning access but without Employee permissions can now open and view planning roles without encountering an access error. This ensures planning-only users can use the role configuration area as expected while keeping employee access restrictions in place.
Original PR description
Trying to display the roles in the planning app is not possible if the user doesn't have hr_rights even with full planning rights. ** Step to reproduce ** - Connect to Odoo with an user that only have acces right for "Planning" (no employees). - Open Planning app - Configuration>Roles - It will trigger an Access Error (If it didn't trigger add a user to Ressources) ** Cause of the issue ** The acces for the default_role_id is limited to hr.group_hr_user: https://github.com/odoo/enterprise/blob/a7122011a0b0cdd111eccf59c917c6b8e2c25137/planning/models/resource_resource.py#L27 But is used in _compute_display_name: https://github.com/odoo/enterprise/blob/a7122011a0b0cdd111eccf59c917c6b8e2c25137/planning/models/resource_resource.py#L73 ** Fix ** Retrieve the information about the role with sudo opw-4908979 Forward-Port-Of: odoo/enterprise#90243
Tax reports now calculate net amounts correctly when invoices use the same tax with different analytic distributions. This prevents undercounted or duplicated taxable bases in grouped tax reports, improving accuracy for accounting and tax review.
Original PR description
### Issue: When having two lines on an invoice with the same tax and different analytic distribution, the base value is doubled on the tax report. ### Steps to reproduce: - Create a new tax on sales…
### Issue: When having two lines on an invoice with the same tax and different analytic distribution, the base value is doubled on the tax report. ### Steps to reproduce: - Create a new tax on sales (eg 10%) - Make sure the option "Analytic Accounting" is ticked in the settings - Create an invoice with a line, add the tax on it and change the analytic distribution - Do the same for another invoice with another analytic distribution - Confirm the invoices - Go to the tax report - Select the report "Group By: Account > Tax" - On the report the "Net" amount is only the one of the first invoice, the tax amount is correct ### Cause: The bug appeared after this [commit](https://github.com/odoo-dev/enterprise/commit/9a7142ef57503efad9538e571d2e35c4aaa59531) which fixed another issue with analytics. Now several lines with the same tax can be returned by the query if they have different analytics. This was used to avoid having the base amount doubled on the invoice when several lines from the same move had with different analytics: there is a line for each analytic but they all have the same base, in the end the base amounts was doubled for each different analytic. Now the query returns multiple lines but as they all have the same key the base amounts are not added together. This fixes the previous issue when several lines from the same move but with different analytics were added but it creates another issue when different invoices have the same tax and different analytics. Because these lines also have the same key. This result in only the base amount of the first invoice to be taken into account. ### Solution: The previous fix was incorrect. The correct fix is to not join the lines when there are two tax lines. To do this the [condition](https://github.com/odoo/odoo/blob/cf8d38205c09a2724f41907fa07c5f23ff2d46a3/addons/account/models/account_move_line_tax_details.py#L153) in the query needs to be the same as the [condition](https://github.com/odoo/odoo/blob/cf8d38205c09a2724f41907fa07c5f23ff2d46a3/addons/account/models/account_move_line.py#L984) that will duplicate the lines in python. The check on `use_in_tax_closing` was missing so we add it. opw-4766421 Forward-Port-Of: odoo/enterprise#91065 Forward-Port-Of: odoo/enterprise#90936
Printed Swiss payslips now show rates in a cleaner format without unnecessary trailing zeroes after the decimal separator. This makes payroll documents easier to read and more professional for employees and HR teams.
Original PR description
…d payslip In this PR we improve the rate display, which could include a lot of 0's after the coma. Forward-Port-Of: odoo/enterprise#90892
This fix makes automated checks for embedded calendar events in Knowledge more reliable when resizing events. It prevents intermittent failures caused by the resize control disappearing between actions, helping maintain stability without changing user-facing functionality.
Original PR description
This commit fixes an indeterministic error in the knowledge_calendar_command_tour when a calendar view is embedded and an event is resized. The resize handler is only visible when hovering the event, which is required to actually be able to resize it. This commit merges both the "make resizer visible" step and the "resize the item" step into a single one as those actions should be done in one go, instead of separate steps (cf. the hovering state is kind of reset in-between the steps). Note: this matches the behavior of the CalendarView's unit tests helpers (`resizeEventToTime()`). runbot-error-163015 Forward-Port-Of: odoo/enterprise#91012
Features or functions removed from Odoo
Unused WhatsApp channel code was removed because the related workflow is no longer used. This keeps the WhatsApp module cleaner and updates tests to match the current channel member flow, with no expected impact on day-to-day users.
Original PR description
Since odoo/enterprise#69648 the usage of the `openWhatsAppChannel()` has been removed. Consequently this method and `whatsapp_channel_join_and_pin` method are now dead code. This change removes the dead code and adapts the related test to reflect the actual `adding member` flow for channels. Related to: odoo/odoo#220560
Code cleanup and technical improvements
The helpdesk forum feature was reorganized to use Odoo’s newer interaction approach for creating tickets from forum pages. This is an internal modernization that should preserve the user experience while making the feature easier to maintain going forward.
The appointment sales confirmation page was updated behind the scenes to use a newer interaction structure. This keeps the feature easier to maintain without changing the customer-facing booking or sales experience.
The Documents app test suite was updated to use newer shared testing helpers and remove obsolete setup code. This is an internal maintenance change that helps keep future development reliable without changing user-facing behavior.
Original PR description
These tests needed minor tweaks to use the new helpers. Follow-up of bd01f1e3. Task-3861500
The web_studio report editor was updated to stay compatible with recent changes in the shared history tracking component. This helps preserve reliable editing behavior after the underlying platform change, with no expected change to the user workflow.
Original PR description
Following changes in the History plugin, the processed mutation records for "childList" mutations now contain `addedTrees` and `removedTrees` properties instead of `addedNodes` and `removedNodes`. This commit updates the code to use these new properties. task-4678910 Community PR: https://github.com/odoo/odoo/pull/214631
5 changes
Resolved issues and error corrections
Invoice rounding differences are now spread across invoice lines instead of being applied to a single line. This helps generated UBL/Peppol invoices stay within validation limits and reduces the risk of rejected electronic invoices.
Original PR description
Before this commit, the behaviour of `_round_base_lines_tax_details` was to assign all the base line delta to the largest base line. However, when generating the UBL, the delta would then get included in the LineExtensionAmount, but BIS3 rule PEPPOL-EN16931-R120 enforces that the LineExtensionAmount must be at most 2 cents away from `(quantity * net price) + sum(charges) - sum(allowances)`. Effectively this means that we can put at most 2 cents base delta on each invoice line. After this commit, `_round_base_lines_tax_details` redistributes the base delta evenly over all the base lines. task-none
This fix prevents the same point-of-sale order from being sent to preparation printers by multiple devices. It checks whether an order was already sent and synchronizes the order after printing, reducing duplicate tickets and kitchen confusion.
Original PR description
Before this change, when a device sent an order in preparation via the ticket printer, this could result in the same order being printed by multiple devices, as the order was not synchronized after it was sent. The error is a bit tricky, because if the user had installed a preparation screen, the order was sent to the preparation screen via syncAllOrders. In this case, the order was correctly synchronized and the other devices were informed of the changes. This commit adds two things. - We check the server before sending the order to preparation to make sure it has not already been sent. - Even when the user does not have a preparation display, the order will be synchronized after being sent to a printer.
This fix prevents the same point-of-sale order from being sent to preparation printers by multiple devices. It checks whether an order was already sent and keeps devices synchronized after printing, reducing duplicate tickets and operational confusion in restaurants or stores.
Original PR description
*: pos_urban_piper_enhancements Before this change, when a device sent an order in preparation via the ticket printer, this could result in the same order being printed by multiple devices, as the order was not synchronized after it was sent. The error is a bit tricky, because if the user had installed a preparation screen, the order was sent to the preparation screen via syncAllOrders. In this case, the order was correctly synchronized and the other devices were informed of the changes. This commit adds two things. - We check the server before sending the order to preparation to make sure it has not already been sent. - Even when the user does not have a preparation display, the order will be synchronized after being sent to a printer.
Printed Swiss payslips now show rates in a cleaner format without unnecessary trailing zeros. This makes payslip information easier for employees and payroll teams to read while avoiding confusing number formatting.
Original PR description
…d payslip In this PR we improve the rate display, which could include a lot of 0's after the coma. Forward-Port-Of: odoo/enterprise#90892
Users with timesheet access can now start and stop timers on tasks they are allowed to access, even when the parent project is private. This prevents access errors and lets field service teams record time normally on assigned work.
Original PR description
Before this commit, when the project is private and the user can only access to some tasks inside that project, he can create timesheets but cannot stop timer in one of those tasks when `industry_fsm` module is installed. This commit makes sure the user can start/stop a timer on task for which he has access to even if the project is private and he does not have access to it. Steps to reproduce the issue: ---------------------------- 0. install industry_fsm module 1. Create a project A with "followers" as privacy visibility 2. Create a task A and assign it to a project user with lowest timesheet access right. 3. log in as that user 4. Start a timer on Task A 5. Stop the timer and confirm the wizard Expected Behavior: ----------------- The timesheet should be created without any issue Current Behavior: ---------------- An Access error is raised because the user has no access to the project. task-4680412 Forward-Port-Of: odoo/enterprise#84807