Daily updates from Odoo
Thursday, April 23, 2026
38 changes · saas-19.2
Resolved issues and error corrections
This update corrects a leftover report setting in several localized tax reports so they can open properly after migration. It prevents an invalid cross-report reference from breaking the report for users in Spain, Italy, Luxembourg, and Uganda.
Original PR description
- This aggregation expression used to have 'cross_report' as subformula. Though, it was useless (since the aggregation only uses term from the same report), and the subformula was removed from the…
- This aggregation expression used to have 'cross_report' as subformula. Though, it was useless (since the aggregation only uses term from the same report), and the subformula was removed from the data file without explicitly resetting it to False. This became a problem in 18.3, because the cross_report syntax changes. Because of that, a migrated report failed to open, since it still was using the old syntax on that expression. We fix that by explicitly emptying the subformula. see https://github.com/odoo/odoo/pull/193106 ```python3 Opération invalide Dans le rapport "Section I (LU)", à la ligne "472 - Autres Ventes / Recettes", avec le libellé "balance", Le format de l'expression de rapport croisé est invalide. Format attendu : cross_report(<report_id>|<xml_id>) Exemple : cross_report(my_module.my_report) ou cross_report(123) ``` opw-6103170 upg-4166654(lu) upg-4163103(it) upg-4175631(ug) upg-4177165(es) 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#258826
This update prevents an error that could appear when changing salary adjustment details in payroll. It ensures the form handles missing start dates safely, so users no longer hit a traceback during on-change updates.
Original PR description
This task guard against falsy date_start in _compute_estimated_end to avoid adding a relativedelta to False, fixing a traceback appearing during onchange. task-6139538 Forward-Port-Of: odoo/enterprise#114332
This change stops combo products from being selected directly in the mobile sales order line form. It prevents incomplete lines with a zero price and missing related items, helping ensure orders are created correctly.
Original PR description
Combo products bypasses the configurator in mobile view, resulting in a 0-price line with no child lines. Exclude them via domain on the field. opw-5999935 Forward-Port-Of: odoo/odoo#260056 Forward-Port-Of: odoo/odoo#256790
Project chatter will no longer automatically post tracking messages when a linked Sales Order changes status. This reduces unnecessary notifications and keeps project activity logs cleaner and easier to follow.
Original PR description
Before this commit: - The chatter on the Project record tracked and logged changes to the linked Sales Order's status. After this commit: - Explicitly set `tracking=False` on the related `sale_order_state` field in `project.project`, `project.task` models. - Status updates to linked SOs will no longer automatically post tracking messages in chatter. task-6079809 Forward-Port-Of: odoo/odoo#258549
Helpdesk tickets will no longer automatically log chatter messages when a linked Sales Order changes status. This reduces unnecessary noise in ticket discussions and makes the conversation history easier to follow.
Original PR description
Before this commit: - The chatter on Helpdesk Tickets tracked and logged changes to the linked Sales Order's status. After this commit: - Explicitly set `tracking=False` on the related `sale_order_state` field in `helpdesk.ticket`. - Status updates to linked SOs will no longer automatically post tracking messages in chatter. task-6079809 Forward-Port-Of: odoo/enterprise#114078
Fixed an issue where text containing percentage signs could be displayed incorrectly as double percent signs on the website. This ensures customer-facing content renders exactly as entered when no template placeholders are used.
Original PR description
`_compile_format` unconditionally escaped `%` to `%%` to protect against Python's `%`-formatting, but only appended the `% (values,)` formatting operation when `#{...}` placeholders were present. With no placeholders, the escape was never undone and `%%` leaked into the rendered output.
This went unnoticed until the introduction of paramteric t-call: https://github.com/odoo/odoo/commit/eb6e88a25050
And since we use `.translate` and `.f` directly in existing views this became apparent
Example:
```xml
<t t-call="website.s_wd_testimonial"
_testimonial_quote.translate="...by 400%."/>
```
will be rendered as `...by 400%%.` on the page.
To prevent this, we can simply check for the absence of values and simply return the repr as is if there isn't any.
Forward-Port-Of: odoo/odoo#260434This update removes the “17” tax tag from several French service tax rates where it was incorrectly applied. It helps ensure tax reporting remains accurate by keeping this tag only on goods-related taxes.
Original PR description
**Issue:** In French localization, a tax tag (i.e. "17") was wrongly added on several taxes for service by a fix: https://github.com/odoo/odoo/commit/f9237cfbb6a9ffbd0a392e4e77e097d5963a5fc3 This tax tag should only be applied on taxes for goods, not service. **Solution:** Remove the tax tag from the following taxes: - 20% EU S - 8.5% EU S - 10% EU S - 5.5% EU S - 2.1% EU S opw-5871998 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#260617
This update fixes an intermittent issue in the website menu automation test. It ensures the page is fully ready before entering edit mode, which makes the test more stable and reduces false failures.
Original PR description
This commit fixes a non-deterministic problem of the tour by ensuring the iframe is ready before opening an edit mode. runbot-240987 Forward-Port-Of: odoo/odoo#260309
This change prevents emails from being sent when payroll payslips are only being tested or previewed. It helps avoid confusing employees and reduces the risk of sending unintended messages before a payslip is officially issued.
Original PR description
In this commit, we prevented email sending during test print payslips. task-6147651
This update prevents an error that could appear when users open unassigned opportunities from a sales team. It also ensures the team filter is applied correctly so the unassigned leads list loads as expected.
Original PR description
Currently, an error occurs when user tries to open unassigned opportunities assigned to a team. Steps to replicate: - Install `crm` with demo. - Open `CRM > Sales > Teams` and click `Sales` team. -…
Currently, an error occurs when user tries to open unassigned opportunities assigned to a team.
Steps to replicate:
- Install `crm` with demo.
- Open `CRM > Sales > Teams` and click `Sales` team.
- Remove the `salesperson` from any lead, then return to `Teams` via breadcrumbs.
- On the kanban card for Sales, click “Unassigned Leads”.
Error:
```
File '/home/odoo/src/odoo/saas-19.2/addons/crm/models/crm_team.py', line 728, in action_open_unassigned_opportunities
context = self.env['crm.lead']._evaluate_context_from_action(action)
File '/home/odoo/src/odoo/saas-19.2/addons/crm/models/crm_lead.py', line 727, in _evaluate_context_from_action
return literal_eval(context_str)
File '/home/odoo/src/odoo/saas-19.2/odoo/_monkeypatches/ast.py', line 28, in literal_eval
return orig_literal_eval(expr)
File 'ast.py', line 66, in literal_eval
node_or_string = parse(node_or_string.lstrip(' \t'), mode='eval')
File 'ast.py', line 52, in parse
return compile(source, filename, mode, flags,
IndentationError: unexpected indent (<unknown>, line 8)
```
Cause:
- Error occurs after a recent [PR].
- As we called `literal_eval()` on the context string that we passed on to the `act_window` [1], it tries to parse the string using python like rules, the context is received as this:
```
"{\n 'search_default_team_id': [False],
\n'default_team_id': False,
\n'default_type': 'opportunity',
\n'default_user_id': 2,
\n'show_lead_gen_button': True
}\n "
^^^^^^^
```
- The extra whitespace/indentation (coming from the `act_window` context definition) makes the string invalid for strict parsing, causing `literal_eval()` to fail.
- Additionally, in the above given context string the `search_default_team_id` and `default_team_id`are both `False` because we called `_evaluate_context_from_action()` method on an empty recordset and when we try to [substitute] `active_id` with `self.id`(which is False because we dont have any record) we get another JS Error that is caused by not receiving any results for the search default on team.
Solution:
- Using `strip()` function removed the extra whitespaces.
- Passed the `team_id` through context (as we cant add new parameters to a function in stable) and assigned it in place of `active_id`.
[1]: https://github.com/odoo/odoo/blob/746ea418da2af2a6d36daea4dc544bdf3bc28495/addons/crm/views/crm_team_views.xml#L41-L48
[PR]: https://github.com/odoo/odoo/pull/240202/changes#diff-595d3dbbabdc4f766a380a320c1c1a43b143385bc7487c7275e80f76a9fbabc2R724
[substitute]: https://github.com/odoo/odoo/blob/e00dd21880c3c4e5c22d65567c700e02541f7259/addons/crm/models/crm_lead.py#L726
sentry-7404817458
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update improves the attendance dropdown by making the layout cleaner and more consistent, and it keeps the menu open or closes it more intelligently depending on the action. It also fixes how billable and non-billable timesheets are filtered, so the results better match the billing setup in place.
Original PR description
# [FIX] hr_attendance: alignment This commits revamps the attendance systray by aligning items and removing horizontal lines between attendance entries. # [FIX] hr_attendance: allow not to close systray based on condition This commits allows components inheriting from the attendance menu to conditionally close the systray. By default, the dropdown will be closed on check-in and check-out to preserve the original behaviour. See odoo/enterprise#113189 task-6088779
This update fixes several timesheet-related usability issues across attendance, helpdesk, and sales timesheet tools. It makes the timesheet panel open more smoothly after check-in, pre-fills relevant project or ticket details when available, and corrects display issues so the assistant and billable options appear as expected.
Original PR description
*: timesheet_grid,timesheet_grid_hr_attendance,helpdesk_timesheet # [FIX] timesheet_grid_hr_attendance: open timesheet systray on check-in Before this commit, the user had to re-open the systray in…
*: timesheet_grid,timesheet_grid_hr_attendance,helpdesk_timesheet # [FIX] timesheet_grid_hr_attendance: open timesheet systray on check-in Before this commit, the user had to re-open the systray in order to open the timesheet systray. Now, it is directly showed to the user upon check-in, without having the systray being closed automatically. # [FIX] web_enterprise: required project is not underlined bolder when hovered In this commit, we ensure that the border under the project in the timesheet inline form is bolder when hovered. # [FIX] timesheet_grid,helpdesk_timesheet: prefill timesheets in systray In this commit, we enable timesheets in the systray to be prefilled with project, tasks, and helpdesk tickets if the user opens the systray from any of these views, provided that the fields were empty. Further, say a project is already set, then any opened task from that project will also be populated upon opening the systray under the condition that both projects match. The same reasoning applies to helpdek tickets. # [FIX] sale_timesheet_enterprise: conditionnal class on timesheet timer After closing the systray, the 'billable' radio button ended up on a new line because the class on the timer was not correctly removed. With this commit, the button will remain on the same line as the timer, even after closing and re-opening the systray. # [FIX] sale_timesheet_enterprise: hide assistant button This commit adds conditions to display the button opening the timesheet assistant. Prior to this, the button was displayed even if the setting is not active on the user. See odoo/odoo#257930 task-6088779
Calendar meeting reminders now reach the meeting organizer as expected, including internal admin users. This fixes a case where organizers could miss in-app reminder notifications even though attendees received them.
Original PR description
Steps to reproduce: --------------------------------- 1. Install Calendar module with demo 2. For both Users: User > Preferences > Notifications > In Odoo 3. Log in through Admin > Calendar > New…
Steps to reproduce:
---------------------------------
1. Install Calendar module with demo
2. For both Users: User > Preferences > Notifications > In Odoo
3. Log in through Admin > Calendar > New meeting
4. Set a start time in the near future
5. Add Marc Demo as an attendee
6. Under Options > Reminders, add a reminder that triggers shortly before the meeting (e.g., 15 minutes)
7. Save the meeting
8. Log in as Marc Demo in another browser window
9. Wait until the reminder time is reached
Observation:
---------------------------------
The reminder notification is displayed for Marc Demo. The Administrator (Mitchell Admin) does not receive any notification.
Issue:
---------------------------------
In `_notify_next_alarm`, the domain
`('group_ids', 'in', self.env.ref('base.group_user').ids)`
was used to filter internal users. However, the admin user does not have
`base.group_user` directly in their `group_ids`, it is only present in `group_ids.all_implied_ids` (inherited through group hierarchy). This caused the admin user to be excluded from the user search, so no bus alarm notification was sent to them.
Solution:
---------------------------------
The `share` field on `res.users` correctly identifies internal users (`share=False`) vs portal/public users (`share=True`) by checking the full group hierarchy, including implied groups. This ensures the admin (and all internal users) receive alarm notifications while still excluding portal and public users.
https://github.com/odoo/odoo/blob/b261223c8e15c412a06a0d938d217bdf0ab9f9ff/odoo/addons/base/models/res_users.py#L459-L464
opw-6010337
Forward-Port-Of: odoo/odoo#255263Manually closed subscriptions will no longer reopen automatically when a payment is approved or an invoice is paid. This avoids unexpected reactivation and helps sales teams keep the intended subscription status.
Original PR description
Before this commit, when a subscription was closed manually by the salesperson, it could be reopened when a transaction was approved or an invoice paid. It could cause issue. In this case, we should not reopen automatically. task-5900481 Forward-Port-Of: odoo/enterprise#113026 Forward-Port-Of: odoo/enterprise#106487
This change lets Odoo start even when no addons folder exists yet in a new, empty project repository. It removes an unnecessary validation error so teams can set up and begin creating modules without being blocked at launch.
Original PR description
Initialize a new empty git repository where you are going to vide-code some new Odoo modules. Because the repository is empty (no addon yet) the CLI fails with an "option --addons-path: the path <path> is not a valid addons directory". This makes vide-coder sad, and bigrams want vide-coders to be happy, so drop the sanity-check and also accept empty addons. Forward-Port-Of: odoo/odoo#259007 Forward-Port-Of: odoo/odoo#256913
Point of Sale now correctly finds products when a GS1 barcode includes a leading zero in its GTIN-14 format. This prevents valid items from being missed at scan time and helps cashiers continue checkout without manual workarounds.
Original PR description
When scanning a GS1 barcode whose GTIN-14 has a leading zero (e.g. a product stored with EAN-13 "5400000002649" is encoded as GTIN-14 "05400000002649"), the product lookup in _getProductByBarcode failed because the exact string did not match the stored barcode. opw-6117948 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#259199
This update makes the Point of Sale work more reliably on iPhone and Safari when the app is sent to the background and later resumed. It helps prevent database connection failures that could otherwise interrupt the POS experience or require a refresh.
Original PR description
On iOS/Safari, the WebKit IDB server process can be killed by the OS (e.g. due to memory pressure when the app is backgrounded), resulting in an UnknownError: "Connection to Indexed Database server lost". Additionally, returning from background can leave the connection in an InvalidStateError "closing" state while this.db remains non-null. opw-5121896 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#259697 Forward-Port-Of: odoo/odoo#253943
This update brings back the vertical spacing in the dropdown list used for menu selections. It improves readability and usability by making the options easier to scan without affecting the behavior of grouped items.
Original PR description
Recent structural changes added `p-0` to the menu class, removing the vertical padding from the dropdown. Rather than padding the scroll container directly (which would conflict with sticky group headers), apply `margin-top/bottom` on the first/last children of `.o_select_menu-choices` so the spacing scrolls naturally without creating a gap items could bleed through when a group header is stuck. task-6095912 Forward-Port-Of: odoo/odoo#258929
Vendor bills imported from XML now correctly keep the pension fund tax linked, even when the VAT rate is 0.00. This prevents missing tax assignments and helps ensure imported bills are recorded accurately and compliantly.
Original PR description
### Issue before this commit: When importing vendor bills from XML files containing a pension fund (e.g., type TC08), the pension fund tax was not correctly applied to the invoice lines. As a result,…
### Issue before this commit: When importing vendor bills from XML files containing a pension fund (e.g., type TC08), the pension fund tax was not correctly applied to the invoice lines. As a result, the imported bills were missing the expected tax association. ### Steps to reproduce the issue: 1. Download Accounting and l10n_it 2. Set the pension fund type as TC08 (or another one is also fine) in the Advanced Tab of 4% F.Pens. tax 3. Try to upload an XML for vendor bills with a TC08 tax 4. The tax is not associated ### Cause of the issue: The issue was caused by the handling of the VAT rate (AliquotaIVA) when its value was 0.00. The code incorrectly treated this value as falsy, preventing the correct identification and assignment of the pension fund tax during the import process. ### Reason to introduce the fix: The fix ensures that a VAT rate of 0.00 is correctly interpreted as a valid value rather than being ignored. This allows the system to properly detect and apply the pension fund tax during XML import, ensuring accurate tax assignment and compliance with expected accounting behavior. opw-6093352 Forward-Port-Of: odoo/odoo#258341
This update fixes an issue where the ‘Scan the QR code to pay’ message on kiosk online payment pages was consistently displayed in English, regardless of the selected language in the Odoo system. Now, the QR code instructions will automatically translate to the user’s preferred language, improving the customer experience for international kiosk payments. This ensures consistent and accurate instructions for all users.
Original PR description
Currently if you use an online payment with the kiosk, the payment page with the QR code is not translated. Steps to reproduce: ------------------- * Create an online payment method with demo * Install any language, you don't need to switch * Open kiosk configurations * Set the online pm in the available payment methods * Set the language istalled as the default language * Make an order, go to payment page > "Scan the QR code to pay" is written in english no matter the language opw-6074194 Forward-Port-Of: odoo/odoo#259895
This update resolves a critical issue causing crashes and slow performance when generating the VAT Books Excel report for large invoices. By optimizing memory usage and query execution, the report now runs efficiently even with extensive data, significantly improving user experience and system stability.
Original PR description
Related Ticket: https://www.odoo.com/odoo/project/49/tasks/6037414 ### Description of the issue/feature this PR addresses: Generating the "VAT Books" Excel report causes severe performance…
Related Ticket: https://www.odoo.com/odoo/project/49/tasks/6037414 ### Description of the issue/feature this PR addresses: Generating the "VAT Books" Excel report causes severe performance bottlenecks and MemoryError crashes on databases with a massive volume of invoice lines. This PR introduces strict memory management and query optimizations to prevent server crashes and drastically speed up the XLSX export process. ### Current behavior before PR: When exporting the VAT Books report for a large dataset, the system attempts to hold the entire workbook structure in RAM. Additionally, the ORM unnecessarily prefetches fields when iterating over the account.move.line recordset and performs excess sub-queries to look up move_type for journal entries. This combination results in massive memory consumption, slow load times, and eventual server crashes. ### Desired behavior after PR is merged: The VAT Books report generates successfully and efficiently, even on massive databases, with a significantly reduced memory footprint. Specifically: - The ORM bypasses cache bloat by disabling field prefetching (prefetch_fields=False) during the recordset iteration. - The query execution is optimized by changing the search domain from move_type to move_id.move_type, leveraging the existing join table rather than triggering expensive sub-queries. ### Benchmark: The model is iterating through ~1.1M journal items when generating the full report. For Memory: | # Input Data | Before PR | After PR| | -------- | -------- | -------- | | ~7,800 journal items | 1.4GB| 202 MB | | ~32,000 journal items | MemoryError | 278 MB | | ~141,500 journal items | MemoryError | 760 MB | | ~1.1M journal items | MemoryError | 1.4 GB | For Speed: | # Input Data | Before PR | After PR| | -------- | -------- | -------- | | ~7,800 journal items | 2 min | 1.5s | | ~32,000 journal items | MemoryError | 4s | | ~141,500 journal items | MemoryError | 12s | | ~1.1M journal items | MemoryError | 56s | ### Reference opw-6037414 ----------------------------------------------------------------- I confirm I have signed the CLA and read the PR guidelines at [www.odoo.com/submit-pr](http://www.odoo.com/submit-pr) Forward-Port-Of: odoo/enterprise#112230
This update streamlines the payment status refresh button in the Odoo Enterprise system. Previously, the button was always visible, leading to unnecessary data requests. Now, it only appears for payments that are actively being processed (pending or unsigned), optimizing performance and reducing system load.
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 Forward-Port-Of: odoo/enterprise#113182
This update resolves an issue where close buttons on views without names triggered unexpected behavior in the application. Now, the system accurately identifies when a close button is used, ensuring proper tracking and functionality. This improves the reliability of the application's response to user actions.
Original PR description
View buttons with no name cause onClosed to be called without any parameters even if special=true or dismiss=true. This commit fixes that which allows to know if a close/discard button caused the action onClosed callback. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#260482 Forward-Port-Of: odoo/odoo#260301
This update resolves an issue where splitting payslips into multiple bank accounts resulted in duplicate <InstrId> tags in SEPA files, a requirement for accurate international payments. The fix adds a unique identifier to each transaction block, ensuring compliance with ISO 20022 standards and preventing potential payment processing errors. This improves the reliability of our SEPA payment exports.
Original PR description
### Issue: If a payslip is split into multiple bank accounts (Salary Allocation), the generated SEPA file contains duplicate <InstrId> tags ### Cause: The `_get_payments_vals` method, `InstrId` is…
### Issue: If a payslip is split into multiple bank accounts (Salary Allocation), the generated SEPA file contains duplicate <InstrId> tags ### Cause: The `_get_payments_vals` method, `InstrId` is based on the payslip ID When a single payslip generates multiple transaction blocks, this ID is duplicated, violating the ISO 20022 requirement for unique instruction identifiers https://knowledge.xmldation.com/support/iso20022/general_rules/instrid This commit adds a unique suffix with the bank_account.id (slip.id-ba.id) to the `InstrId` for each transaction generated to ensure technical uniqueness This is the part of the code that use the payment name: https://github.com/odoo/enterprise/blob/194a8d35ef3e9b47ff566479b0c35c0f963fb42d/account_iso20022/models/account_journal.py#L294-L299 ### Steps to reproduce: - Install `hr_payroll_account_iso20022` with demo data - On the Bank Journal, set a valid IBAN (e.g. BE04957751619131) for `Bank Account Number` - Open the Employee page for Abigail Peterson - In the Personal tab, add 2 Bank Accounts (Send Money: True, Account Number: any) - Click on Salary Allocation and Save (You'll have a 50/50 ratio) - Create a new Pay Run (for Abigail Peterson) - Open the last PaySlip and Validate - Create Payment Report (Export Format: SEPA) - Download the Payment Report and check the <InstrId> tags opw-6069670 Forward-Port-Of: odoo/enterprise#113113
This update corrects a bug preventing users from increasing the quantity of combo products with 'Sell when Out-of-Stock' disabled. The fix ensures that combo products are correctly limited to a maximum quantity, preventing overselling and maintaining accurate inventory levels. This resolves an issue introduced in a recent code change.
Original PR description
You cannot increase the quantity of a combo product that has options with Sell when Out-of-Stock disabled Steps to reproduce: 1. Install Inventory and eCommerce 2. Go to Website > eCommerce >…
You cannot increase the quantity of a combo product that has options with Sell when Out-of-Stock disabled Steps to reproduce: 1. Install Inventory and eCommerce 2. Go to Website > eCommerce > Products and create a new product "Combo" 3. Set the Product Type to Combo, create and edit a Combo Choice "test" with two options "test 1" and "test 2". Both have Track Inventory enabled, 5 Quantity On Hand and Sell when Out-of-Stock disabled 4. Publish product "Combo" to the website 5. Click on smart button "Go to Website" to open the shop page of product "Combo" 6. Try to increase the quantity 7. The quantity is limited to 1 Solution: Always set the quantity input's maximum when `has_max_combo_quantity` is true Issue: We only set the quantity input's maximum if `allow_out_of_stock_order` is false This error was introduced in https://github.com/odoo/odoo/commit/0247538efe788a9ff9a4d58f64470325348a4eaa opw-6050876 Forward-Port-Of: odoo/odoo#260523 Forward-Port-Of: odoo/odoo#257386
This update resolves compatibility issues with Python 3.14 and the Ubuntu Resolute operating system. It includes necessary code changes to ensure Odoo functions correctly, primarily focusing on internal Python optimizations and a fix for a base64 encoding error.
Original PR description
Forward-Port-Of: odoo/odoo#258568
This update prevents errors when sharing helpdesk tickets after the user who created the message has been removed. Previously, deleting a user would cause a link to fail. This fix ensures that shared links continue to function properly, improving the user experience for helpdesk ticket sharing.
Original PR description
Currently, an error occurs when opening a shared helpdesk ticket link if the message author has been deleted. **Steps to Reproduce:(v19.2)** - Install Contacts and Helpdesk modules (with demo data). - Log in as "**Marc Demo**". - Create a helpdesk ticket and send a message via the chatter. - Log in as **Admin**. - Delete the demo user and the related partner from Contacts. - Go to Helpdesk > All Tickets and open the created ticket. - Click "**Share Ticket**" and open the generated link in another browser. Error: `ValueError - Expected singleton: res.partner()` **Cause:** When the partner linked to `message.author_id` is deleted, the recordset becomes empty, which raises a singleton error. Fix: This commit ensures that the author details are only included when the message author exists. sentry-7337698605 Forward-Port-Of: odoo/odoo#260332 Forward-Port-Of: odoo/odoo#254175
This update fixes an error in how Odoo calculates depreciation for companies with non-standard fiscal years (e.g., May-December). Previously, depreciation entries were missed for certain months, now the system accurately determines the correct fiscal year start date for accurate depreciation calculations. This ensures financial reporting aligns with the company's actual accounting period.
Original PR description
When a company has a shortened fiscal year defined via account.fiscal.year (e.g. May-December), the depreciation board computation for degressive assets incorrectly computes the start of the next…
When a company has a shortened fiscal year defined via account.fiscal.year (e.g. May-December), the depreciation board computation for degressive assets incorrectly computes the start of the next fiscal year using `date_from + 1 year` instead of querying the actual next fiscal year. This causes entries for the months between the wrong and correct FY start (e.g. January-April) to be skipped entirely. Step to reproduce: - Create a company with a fiscal year starting in May (e.g. May 1st 2025 to 31st December 2025) - Create an asset with a start date in the 1 December 2025, with a 24 months duration and degressive method - Compute the board and observe that entries from January to April 2026 are missing Fix the FY boundary detection in _recompute_board to query the fiscal year containing the day after the current period end, revert the effective_start_date logic in _compute_board_amount that was masking the root cause, and move the prorata date clamping to _create_move_before_date where it is needed for disposal. opw-6016834 Forward-Port-Of: odoo/enterprise#113521
This change simplifies the setup of the Mollie payment method in POS. Previously, a validation error prevented users from saving their configuration, forcing them to repeat steps. Now, users can complete the initial setup once, though an error will still appear if the API key is missing.
Original PR description
Before this commit, when configuring the Mollie payment method in POS, a validation error would be raised if the associated payment provider did not have the API key set. While this makes sense given that it needs to be set in order for payments to work, it resulted in this unintuitive UX: 1. User fills in all the fields in the Mollie POS payment method form. 2. The user tries to save, but hits the validation error. 3. The user uses the internal link to go to the payment provider and fill in the API key. 4. The user returns to the POS payment method form, but because the form couldn't save they have to fill in everything *again*. This commit removes the validation error, allowing everything to be filled in just once. There will still be an error if trying to make a payment without an API key set. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#260293
This update fixes a crash that occurred when assigning recruiters in the Odoo recruitment Kanban view. The issue stemmed from an unnecessary parameter in the avatar image URLs, which caused a data access error. Removing this parameter resolves the crash and ensures stable functionality for recruiters.
Original PR description
**Steps to Reproduce:** 1. Open Recruitments 2. Find a job position without a recruiter in the kanban view 3. Clicking on the assign recruiter widget produces a traceback **Bug Cause:** The…
**Steps to Reproduce:** 1. Open Recruitments 2. Find a job position without a recruiter in the kanban view 3. Clicking on the assign recruiter widget produces a traceback **Bug Cause:** The `?unique=` cache related parameter was added to the avatar image URL in the `autoCompleteItem` slot of `KanbanMany2OneAvatarEmployeeField`. This parameter relies on `write_date` being available on the autocomplete suggestion record. However, `web_name_search` only returns `id` and `display_name`, so `write_date` is undefined on autocomplete suggestion records, causing a crash when accessing `autoCompleteItemScope.record.data.write_date.ts`. **Bug Solution:** Remove the `?unique=` parameter from the avatar image URL in the `autoCompleteItem` slot, reverting it to its original form. Cache is unnecessary for autocomplete suggestion avatars as they are only visible for the duration of the dropdown interaction. **Task:** 6092768 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes a minor visual issue where buttons within the call layout (like Fullscreen) didn't have reduced opacity when not hovered. The fix adjusts the opacity to 75% for non-hover states, ensuring consistent visual feedback and a slightly refined user experience. This improves the clarity of options within the call view.
Original PR description
Recent commit fixes an issue where items like Fullscreen in call menu had reduced opacity when this should only affect layout buttons in call view [1]. To do so it limits the opacity to the layout…
Recent commit fixes an issue where items like Fullscreen in call menu had reduced opacity when this should only affect layout buttons in call view [1]. To do so it limits the opacity to the layout actions, but the style was not applied because ActionList has more CSS specificity that requires using `--o-mail-ActionList-Button-opacity` variable for the non-hover opacity value. Since this was not defined, this default to opacity 100%, thus not applying the reduced opacity when not mouse-hovering. This commit fixes the issue with `--o-mail-ActionList-Button-opacity` of `.75`, so that opacity is slightly reduced when no mouse-hovering. [1]: https://github.com/odoo/odoo/pull/259866 Before / After (mouse-hover on "Picture-in-Picture", see lack of visual distinction) <img width="58" height="32" alt="Screenshot 2026-04-22 at 11 21 47" src="https://github.com/user-attachments/assets/e04b0f8c-c754-4ea4-8870-752610418587" /> <img width="57" height="28" alt="Screenshot 2026-04-22 at 11 21 25" src="https://github.com/user-attachments/assets/a5aa9987-ddaf-45f8-9e2a-260fd04dcfb9" /> Forward-Port-Of: odoo/odoo#260599
This update resolves a visual bug affecting the display of offline status icons on Discuss avatars in Safari. The fix addresses a Safari-specific CSS issue that caused misaligned positioning, ensuring the offline status is correctly shown. This improves the user experience for all users.
Original PR description
IM status on avatars in Discuss have been improved to properly mask the image [1]. To do so, this uses SVG and ForeignObject on top of mask, so that it can uses font-awesome icons such as `fa…
IM status on avatars in Discuss have been improved to properly mask the image [1]. To do so, this uses SVG and ForeignObject on top of mask, so that it can uses font-awesome icons such as `fa fa-circle` for online status. This change introduced an accidental regression in Safari, where position of the offline status is wrong. This comes from a bug in Safari where some CSS inside foreignObject resets the position of the element to position 0, 0 on the global SVG [2] [3]. This affects offline status because this IM status has an `opacity-75`, intended to reduce distraction from the offline, but since this changes opacity this introduce the bug in Safari of mis-position. This commit fixes the issue by moving the applied CSS to change opacity from `opacity-X` rules inside foreignObject to the parent `g` tag above `foreignObject`. That way, the element inside `foreignObject` has no change of opacity but instead the `g` has it, which is ok for Safari. Note that this implementation assumes that change of opacity inside `foreignObject` is made only once and with `opacity-X` classnames. [1]: https://github.com/odoo/odoo/pull/246182 [2]: https://github.com/bkrem/react-d3-tree/issues/284 [3]: https://bugs.webkit.org/show_bug.cgi?id=23113 Task-6143646 Before / After <img width="308" height="579" alt="Screenshot 2026-04-21 at 12 51 52" src="https://github.com/user-attachments/assets/41596916-f371-407e-acb1-eb097c497360" /> <img width="310" height="584" alt="Screenshot 2026-04-21 at 12 51 20" src="https://github.com/user-attachments/assets/513df1f5-4cde-4cb7-8769-d6264dfb36a0" />
This update fixes a bug that occurred when rescheduling work orders in the Gantt view, specifically when dependent operations lacked start or end dates. The fix ensures that date comparisons are only performed when dates are actually defined, preventing a technical error and improving the stability of the Gantt scheduling feature.
Original PR description
Currently, an error occurs when rescheduling work orders in the Gantt view if a dependent operation has no start or end date. **Steps to Reproduce:** - Install the MRP module (with demo data). -…
Currently, an error occurs when rescheduling work orders in the Gantt view if a dependent operation has no start or end date. **Steps to Reproduce:** - Install the MRP module (with demo data). - Activate "**Custom Work Order Dependencies**". - Create a new MO for the _Drawer_ product with _SEC-ASSEM_ BoM. - Confirm and plan the MO. - Remove both start and end dates of any dependent operation. - Manufacturing > Planning > Work Orders > Gantt - Enable **Auto-Reschedule (Keep Buffer)** and reschedule the first operation (in 'Drill 1'). **Error:** `TypeError - '>' not supported between instances of 'bool' and 'datetime.datetime'` **Cause:** At [1], `date_start` and `date_finished` can both be set to False because a condition that bypasses the UserError when both dates are empty (unlike earlier versions). As a result, during rescheduling, a False value is compared with a datetime, leading to a TypeError at [2]. Fix: This commit adds a condition before date comparisons to ensure the dates are defined. [1]: https://github.com/odoo/odoo/blob/3f256437a7e6c124affca8d5304476a67375753f/addons/mrp/models/mrp_workorder.py#L281-L284 [2]: https://github.com/odoo/enterprise/blob/ef2efe113684104032d798b5aa237c67a3bc240a/web_gantt/models/models.py#L484-L491 sentry-7377739830
A recent change in how receipts are printed caused Swedish tax data to disappear from the receipt footer. This fix corrects the receipt template and data generation, ensuring that all Swedish blackbox receipts now accurately display the required fiscal information. This resolves a printing error impacting users of the Swedish POS module.
Original PR description
Since the receipt printing refactor that allowed printing receipts from either the frontend or backend, the fiscal data for Swedish blackbox receipts has been broken. In the frontend, the receipt prints but the blackbox data is missing from the footer. In the backend, attempting to print the receipt gives a 500 error. This commit fixes both these issues by correcting the receipt template and data generation. Community - https://github.com/odoo/odoo/pull/260587
This update resolves an issue where the salary amount wasn't correctly displayed on the Employee Offer form when opened from the employee record. The fix involves adding the necessary context to ensure the correct salary information is populated, improving the user experience for setting up employee offers.
Original PR description
task-5979287
This update fixes an issue where adding a new vehicle (car or bike) would incorrectly make all vehicles available. The change ensures that only vehicles of the same type are made available, maintaining consistent and accurate vehicle tracking. This prevents confusion and ensures data integrity.
Original PR description
When you are getting a new car or a new bike, it'll make available all the your vehicle whatever is the type of vechicle. To keep consistent behaviour, we are only make available vahicle of same type Bug introduced in refactoring: https://github.com/odoo/odoo/pull/220160 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where deleting a document from a sign request would cause the system to crash. The fix ensures the system handles deleted documents gracefully by redirecting the user to a safe view, improving stability and user experience. This addresses a critical bug impacting sign request functionality.
Original PR description
Steps to reproduce: - Open a sign request - Go to Details - Delete the document from the form view - The UI tries to reload the document Issue: The system tries to load a document that has already been deleted. Current behavior: An error is shown and the page crashes when trying to reload the deleted document. Expected behavior: The system should handle the missing document gracefully and redirect the user to a safe view. Fix: Handled the deleted document case properly by returning a valid response and redirecting the user instead of trying to load the removed document. task id- 6095120
This update corrects a visual issue on the subscription portal where product lines weren't correctly aligned with calculated tax totals. The change ensures that only invoiceable product lines are displayed, resolving a discrepancy between the portal view and the underlying financial data. This improves the accuracy and clarity of subscription information for users.
Original PR description
Previously, the portal view for subscriptions displayed all un-collapsed products from the sales order, ignoring whether they were actually invoiceable lines. This caused a visual mismatch where the displayed lines did not correspond to the calculated tax totals at the bottom of the view. This commit updates the visibility logic to ensure that product lines are only included if they are invoiceable. task-6128619 Forward-Port-Of: odoo/enterprise#114088