Friday, May 29, 2026
35 changes · saas-19.2
Enhancements to existing features
This update adds logging to the IoT drivers to help our support team quickly diagnose issues when an IoT box is unable to connect or is running an outdated version. These logs will provide valuable information for troubleshooting and resolving connectivity problems, ultimately improving the user experience.
Original PR description
This PR adds some minor logs to help identify issues around iot box hanging ip address and version See https://github.com/odoo/enterprise/pull/118377 Forward-Port-Of: odoo/odoo#266538 Forward-Port-Of: odoo/odoo#266410
This update enhances logging around IoT device connections and messages, providing more detailed information for support teams. A key change optimizes a search process, preventing unnecessary activity and improving efficiency. This contributes to better troubleshooting and support for our IoT customers.
Original PR description
This PR adds some minor logs around ip/version change and websocket messages sent to the iot box. It also inverts a condition to avoid doing a useless search when sending websocket messages See https://github.com/odoo/odoo/pull/266410 Forward-Port-Of: odoo/enterprise#118442 Forward-Port-Of: odoo/enterprise#118377
Resolved issues and error corrections
This update resolves a bug where the HTML editor shortcut incorrectly removed empty lines after inserting inline commands. The issue stemmed from how the system handled `<br>` tags, leading to the deletion of preceding lines. This change ensures that empty lines are preserved when using the shortcut, improving the user experience.
Original PR description
…r <br> Problem: Typing "->" + Space after a Shift+Enter on an empty line correctly inserts the → character, but removes the empty line above it. Cause: - Consecutive `<br>` elements were not preserved when determining the old block boundary; the preceding `<br>` was incorrectly deleted. - Inline commands were wrapped in a block element instead of being inserted inline. Steps to reproduce: 1. Type "a" 2. Press Shift+Enter twice 3. Type "->" then Space 4. The empty line above is removed when the shortcut is applied task-6229525 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Code cleanup and technical improvements
This update enhances the way timesheet values are displayed and formatted, making it easier to customize the look and feel. By creating a more adaptable widget, we've simplified the process of adjusting timesheet settings, improving usability for users.
Original PR description
This PR slightly refactors the FloatTime widget to create a getter for the formatting options of its value and popover, which not only is a DRY-positive thing, but also allows us to override it more easily in Timesheets Task-6251180
This update adjusts the timeout for Epson printer connections in the Point of Sale system. Previously, a popup would appear unnecessarily, especially on iPads, while the print job completed. Increasing the timeout to 15 seconds ensures the system doesn't prematurely alert customers to issues that aren't actually occurring, improving the user experience.
Original PR description
[FIX] point_of_sale: increase epson printer timeout Extend the timeout duration for the Epson printer integration to avoid the "RetryPrintPopup" keep appearing on users' devices, especially iPads, while the ticket is properly printed. Previously, the popup was displayed after 3 seconds. In reality, it can take 8 seconds for the printer to respond, which is considered normal. After this fix, the timeout at 15 seconds covers worst cases as well. The printer will take the time it needs to print and the POS won't rush to warn the customer about an issue that has not actually occurred yet. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes a technical issue that could cause CFDI invoices to be rejected due to multiple Addenda nodes. The change ensures the CFDI structure adheres to official standards, preventing errors when the invoice generation process is run repeatedly. This improves the reliability of our Mexican invoicing functionality.
Original PR description
Before this commit, if the `_l10n_mx_edi_cfdi_invoice_append_addendas` method was executed more than once on the same invoice, the resulting CFDI would contain multiple `<cfdi:Addenda>` nodes. This…
Before this commit, if the `_l10n_mx_edi_cfdi_invoice_append_addendas` method was executed more than once on the same invoice, the resulting CFDI would contain multiple `<cfdi:Addenda>` nodes.
This occurred because the method manually injects the new Addenda string at the end of the XML without checking if one was already present from a previous execution.
According to the SAT's Anexo 20 and the CFDI 4.0 XSD, the Addenda must be a single node and the last element of the Comprobante. Duplicating root-level nodes like `cfdi:Addenda` is a bad XML formation practice that can cause rejection by the recipient's automated systems.
This fix ensures the CFDI structure remains valid by:
1. Searching for an existing `{*}Addenda` node in the CFDI string.
2. Removing the old node before reconstructing the XML.
3. Preventing the string replacement logic from stacking multiple Addenda blocks.
This ensures that the CFDI remains clean and compliant with the official standard even if the process is triggered multiple times.
Forward-Port-Of: odoo/enterprise#109760This update streamlines the initial setup for users accessing the timesheet assistant. Previously, users needed to manually start a server each login; this step has been removed due to an update in the activity watch installer. This simplifies the onboarding process and improves user experience.
Original PR description
Before this commit, the wizard to onboard the user to correctly install activity watch for timesheet assistant, mentioned the user has to start the server each time he logs in on his computer. This step is not longer needed thanks to an update on the odoo activity watch installer. This commit removes the line saying the user has to start the server each time he starts his working day. task-6081636 Forward-Port-Of: odoo/enterprise#115373
This update prevents the automatic generation of OIOUBL XML files for users who do not have a VAT number when using Nemhandel. Previously, this could create unnecessary complexity and potential issues. This change ensures Nemhandel functionality aligns with Danish VAT regulations.
Original PR description
Users with no VAT number shouldn't be able to use Nemhandel and shouldn't have a OIOUBL xml generated. task-6196225 Forward-Port-Of: odoo/odoo#266670 Forward-Port-Of: odoo/odoo#263244
This update addresses a technical issue related to how Odoo retrieves VIES identifiers for VAT calculations. Specifically, a race condition was preventing accurate updates, which could lead to incorrect VAT reporting. The fix includes improved testing and ensures data integrity for IAP integrations.
Original PR description
- Avoid race condition while getting the IAP VIES identifiers - Clarify to which state the Intra-Community value has been updated - Increment validity of the webhook_token while waiting for a push update - Add more tests, especially for the controller and the cron - Remove no-longer-relevant tests task-none Forward-Port-Of: odoo/odoo#266814 Forward-Port-Of: odoo/odoo#260440
This update corrects an issue where property search filters were not working correctly, leading to inaccurate search results. The problem stemmed from a misunderstanding of how boolean values are treated during database query construction. This fix ensures property searches return the expected results based on the specified criteria.
Original PR description
# How to reproduce - Go to the Form view of a model to which you can Add Properties (e.g. Project > Tasks) - Click on the gear icon > Add Properties - Create a property field with : - Name : X -…
# How to reproduce
- Go to the Form view of a model to which you can Add Properties
(e.g. Project > Tasks)
- Click on the gear icon > Add Properties
- Create a property field with :
- Name : X
- Field Type : Decimal
- Create two records for that model and set the value of the property to 1 & 2
- Go back and Add a custom filter with ('Properties.X', '=', 1)
# The problem
We see both records even tho we should only see one
# Cause of the issue
When doing the search, we transform the domain into the where clause of a
query. This transformation is done with the `condition_to_sql()`
function of the concerned field (`fields_properties` in our case):
https://github.com/odoo/odoo/blob/ba9e18688cc9c6e0d4da5ab60acf08d4c49b99d7/odoo/orm/fields_properties.py#L589
In this function, we manipulate a bit the condition depending on the value,
notably if the value is/contains True. To check it does, we do this :
https://github.com/odoo/odoo/blob/ba9e18688cc9c6e0d4da5ab60acf08d4c49b99d7/odoo/orm/fields_properties.py#L601
The issue is that in python, True in [1] and evaluates to True
because bool is a subset of int. This changes the condition and replaces it in
our case with ('Properties.X', '!=', 'False'), which is obviously not what
was initially asked for.
opw-6224811
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#266231
Forward-Port-Of: odoo/odoo#265835This update fixes an issue where adding a component move to a validated stock move didn't always result in a fully validated move. The change replicates a necessary check to ensure that component moves, which have different identifiers than standard moves, are correctly validated, maintaining accurate inventory tracking.
Original PR description
Unlocking a validated MO to add a new component move should, naturally, bring about a validated move. Although there exists a `state` check in `stock.move`'s `create()` as of odoo/odoo#196161, it only checks for `picking_id`, whereas a component move has a `raw_material_production_id` (and a finished (by)product has a `production_id`), so we replicate the check here. Task ID: [6226710](https://www.odoo.com/odoo/project/966/tasks/6226710)
This update optimizes the timesheet grid by preventing unnecessary reloading of the entire form when users switch focus between the timer field and other elements. This change improves the user experience by making the timesheet grid faster and more responsive. It addresses a minor performance issue.
Original PR description
This PR prevents re-rendering the whole systray form view when focusing in and out of the timer field. We instead handle the focus in the widget, ensuring only the field itself re-renders. Task-6251180
This update fixes a bug that caused the company car contract configuration process to unexpectedly crash. The change ensures the system handles different contract scenarios correctly, preventing errors related to version identification. This improves the stability of the payroll configuration feature.
Original PR description
Before this commit, signing a salary contract in the configurator with a company car selected could crash on the cp200_employees_salary_company_car (ATN.CAR) rule with KeyError('origin_version_id'), because the Belgian _get_period_contracts() accessed self.env.context['origin_version_id'] directly whenever salary_simulation was set, while hr_version_context injects salary_simulation=True without that key.
After this commit, the lookup uses .get() and falls back to the default behavior so the rule evaluates safely.
task-6240418This update ensures that invoices generated from Point of Sale orders now correctly include the product's internal reference (like 'E-COM11') alongside the product name. Previously, invoices lacked this key detail. This change improves invoice accuracy and provides more complete product information for accounting and reporting.
Original PR description
Currently invoices generated from pos orders do not show the product referense alongside the product name. Steps to reproduce: ------------------- * Open shop and select Cabinet with doors * Add…
Currently invoices generated from pos orders do not show the product referense alongside the product name. Steps to reproduce: ------------------- * Open shop and select Cabinet with doors * Add customer to order * Pay the order * Wether you selected to invoice or you didn't, does not matter, you can invoice from the backend > Observe on the invoice that the product does not show the internal reference "Cabinet with Doors" * Create a sale order for the same product, deliver and invoice > Observe the invoice, the product shows reference "[E-COM11] Cabinet with Doors" Why the fix: ------------ After this commit: https://github.com/odoo/odoo/commit/aff477805577cb7ed00fb94440dda5cf2f29cb44 we're using `full_product_name` to set the name on move line name. We could simply add the reference when computing the product name but the logiq used to computed the display name is a bit more complex than simply adding it always. Instead we use both display_name and full_product_name to build the final name. This way it has the reference if any and all information about variants are kept as well. opw-5950016 Forward-Port-Of: odoo/odoo#253540
This update resolves a potential error in the currency rate settings module. Previously, the system relied on an outdated function that was removed in the saas-19.1 release. This change ensures the currency rate settings function reliably and prevents errors.
Original PR description
Since saas-19.1, get_param has been removed from ir.config_parameter and replaced by typed helpers such as get_int, get_float, and get_bool, etc. This commit replaces the deprecated get_param call with get_int to prevent an AttributeError. Forward-Port-Of: odoo/enterprise#118621
This update fixes a visual issue where Selection fields in dark mode sign templates appeared unreadable due to white-on-white elements. The fix ensures that dropdown options and selected values are clearly visible regardless of the user's dark mode preference, improving usability.
Original PR description
**Problem:** When the user has dark mode enabled and a sign template contains a Selection field, both the displayed value and the dropdown option list are unreadable: the selected value renders…
**Problem:** When the user has dark mode enabled and a sign template contains a Selection field, both the displayed value and the dropdown option list are unreadable: the selected value renders white-on-white in the field, and clicking the dropdown shows an empty-looking popup (white options on white system menu). **Steps to reproduce:** 1. Enable dark mode in user preferences 2. Open Sign > Templates > duplicate any template 3. Add a Selection field with a few options (e.g. Low / Medium / High) 4. Save and Sign Now 5. Reach the Selection field and click it 6. Observe: the dropdown options are invisible (white on white) and, after picking one, the selected value in the field is also invisible **Cause of the issue:** The Selection sign item is rendered with a native `<select>` element inside the PDF.js iframe (`sign_items.xml`, `t-if="type == 'selection'"` branch). The iframe's stylesheet (`sign/static/src/css/iframe.css`) declares the `select` rule with `background: transparent` but no explicit `color`, and never styles `<option>` at all. When the OS or the user activates dark mode, the iframe document resolves to a `color-scheme: light dark` root, so the browser's UA stylesheet paints form controls with the dark palette (white text). The popup background stays white (`<option>` has no explicit background), so options render white-on-white. The same UA-white propagates to the displayed value of the `<select>` inside the pink-tinted sign item, which is also nearly white. **Fix:** Pinning the `<select>` text color and the `<option>` color/background to fixed light-mode values restores predictable contrast inside the iframe regardless of the surrounding color scheme. We deliberately do not rely on `color-scheme: dark` here — that would only swap which side of the contrast issue we land on (browsers don't reliably honor it for `<option>` background painting), and the sign item background (the pink dashed default style) is itself light, so dark option text on a white popup is the readable target in all themes. opw-6197638 Forward-Port-Of: odoo/enterprise#117697
This update ensures that all point of sale orders, including those that have been invoiced, are now accurately included in the periodic sales digest emails. Previously, invoiced orders were being missed, leading to an incomplete overview of sales data. This change improves the accuracy of the digest reports.
Original PR description
Currently in the periodic digest sent by mail only the pos orders that are not invoiced are counted. Steps to reproduce: ------------------- * On empty db (no order previously) * Create a pos order of 10$, don't invoice it * Create a pos order of 10$, invoice it * Close session * Generate the periodic digest: * Go to settings * Under Emails, find "Digest Email" * Select "Configure digest emails" * Select "Your Odoo Periodic Digest" * Make sure "Pos Sales" is ticked * Select "Send Now" * In debug: * In the settings, under Technical, select Emails > Emails * Select the Periodic Digest > Observation: In the point of sale tab, it shows only 10$ Why the fix: ------------ Previously pos orders that were invoiced were not taken into account, now they are. opw-6111304 Forward-Port-Of: odoo/odoo#262561
This update resolves a compatibility issue with the XML processing library (lxml) used in Odoo. Updating the library ensures Odoo continues to function correctly and prevents potential disruptions. This change is a routine maintenance update.
Original PR description
Note: support for version 6+ of lxml has been merged in odoo/odoo@4b1797fccdf1447a8adb817148cc39bc322428a6 runbot-938365 Forward-Port-Of: odoo/odoo#266893 Forward-Port-Of: odoo/odoo#266627
This update corrects a technical issue in the Odoo versions timeline where data was being incorrectly formatted. Specifically, the system was creating a list of field names instead of individual items when updating version information. This change ensures the timeline displays version data accurately and reliably.
Original PR description
The push function does not take a list of items but items. So when it was pushed into the fieldNames list it would create a list with ['display_name', [...]] which is not wanted. task-6072932 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#266767 Forward-Port-Of: odoo/odoo#256130
This update fixes a visual glitch where the text color button in the HTML editor wasn't correctly updating when the color picker was open or closed. The fix ensures the button's active state is always synchronized with the color picker, providing a consistent user experience. This improves the editor's usability and visual accuracy.
Original PR description
Problem: The state of the text color button is not synchronized with the color picker state. When the picker is open, the button is sometimes not shown as active. Cause: The `.active` class depends on `colorPicker.isOpen`, which does not trigger a rerender when updated. As a result, Owl does not refresh the button state when the picker opens or closes. Solution: Use a component state for the picker visibility and update it through `onOpen` and `onClose` callbacks so Owl rerenders and properly adds or removes the `active` class. Steps to reproduce: - Select some text and expand the toolbar. - Click the text color button to open the color picker. - Observe that the text color button is not active. - Click on the "Custom" tab in the color picker. - Observe that the text color button becomes active. task-6205286 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#263754
This update fixes a potential issue where users could unintentionally select inactive Intrastat codes when setting them on products. The system now displays a warning message if an inactive code is chosen, ensuring data accuracy and preventing incorrect reporting. This improves data integrity for international trade reporting.
Original PR description
Problem: When choosing an intrastat code on a product, all the codes are shown, even the ones that are expired or not yet active. Users can select an intrastat code that is not active. Steps to reproduce: 1. Check the intrastat code list and find a code with a start date in the future or an expiry date in the past 2. Note the code description 3. Open a product form view and try to set/change the intrastat code 4. Search for the code description noted in step 2 5. Note that the code is proposed while it should not be proposed Solution: When an intrastat code is selected, if the code is not active, a warning message is shown to the user. opw-6217915 Forward-Port-Of: odoo/enterprise#118569 Forward-Port-Of: odoo/enterprise#117884
This update fixes an access error that prevented certain users from viewing time off details. The change hides a restricted field from the time off list view, ensuring users without the necessary permissions cannot access it. This improves the user experience and prevents unexpected errors.
Original PR description
## Steps to reproduce: - Install hr_payroll module - Create a user and remove any access rights he might have in 'Time off' or 'Payroll' - Login as this created user - Go to 'Time off' app and click on one day from the dashboard - Click on the dropdown menu for the time off type and click on 'Search more' - An access error will pop-up that you can't access unpaid_structure_ids ## Cause: The model 'hr.payroll.structure' is defined to be accessed only by group_hr_payroll_user and above and since it is one of the fields in the list view of the work_entry_types it will try to read it when loading the view. So an access error will be triggered if the user doesn't have the proper group ## Fix: Add the group needed for accessing the field to the xml tag for this field so it should be hidden since the user won't be able to access it anyways opw-6213378
This update corrects a technical issue that could cause errors in the DMFA report PDF generation. It now validates that the work address code contains only numerical characters, preventing the report from failing due to invalid input. This ensures accurate and reliable DMFA reporting.
Original PR description
Added a validation error in the _get_code function in case the code contains non-numerical characters. This prevents non-numerical characters input from breaking the DMFA report PDF generation. Task: 6231125 Forward-Port-Of: odoo/enterprise#118367 Forward-Port-Of: odoo/enterprise#117889
This update resolves a technical issue that caused an 'Invalid Operation' error when matching posted Vendor Bills in Odoo. The fix ensures the system correctly handles scenarios with zero residual lines, preventing errors and allowing users to complete the matching process smoothly. This improves stability and usability.
Original PR description
**Description of the issue/feature this PR addresses:** This PR fixes an "Invalid Operation" UserError during the Bill Matching process. The error occurs when Odoo attempts to call the line addition…
**Description of the issue/feature this PR addresses:** This PR fixes an "Invalid Operation" UserError during the Bill Matching process. The error occurs when Odoo attempts to call the line addition method on a Posted Vendor Bill, even when there are no new residual lines to add. This triggers a write attempt on read-only fields (such as invoice_line_ids) of a validated account move, which is prohibited by Odoo’s ORM. Furthermore, this addresses a functional inconsistency: Odoo allows users to select "Posted" bills in the matching view, but the underlying code is not prepared to handle a "zero residual" scenario on a validated move. If Odoo intends to prevent matching on posted bills, they should be filtered out from the view; since they are available to select, the system must be able to process them when no further modifications to the accounting entries are required. **Current behavior before PR:** When performing a match between a posted Vendor Bill and Purchase Order lines where the "residual" (lines left to add) is zero: The system executes _add_purchase_order_lines() regardless of whether the recordset of lines is empty. Odoo's ORM detects an update attempt on a posted record. A UserError is raised: "You cannot modify the following readonly fields on a posted move: invoice_line_ids". This blocks the user from completing the matching process even if the lines are already technically accounted for. **Desired behavior after PR is merged:** The system will check if residual_purchase_order_lines contains any records before attempting to update the bill. If there are no lines to add, the method call is skipped. The matching process completes successfully without attempting an illegal write on a posted move. **Steps to Reproduce** 1) Create a Purchase Order (PO): Add a product (e.g., "Acoustic Bloc Screens") and confirm the order. 2) Create a Vendor Bill manually: Do not use the "Create Bill" button from the PO. Instead, go to Accounting -> Vendors -> Bills and create a new bill for the same vendor and product. 3) Post the Bill: Set a bill date and click Confirm to move it to the "Posted" state. 4) Open Bill Matching: Go back to the Purchase Order and click the Bill Matching button (or navigate to the matching view). 5) Select Lines: Select the PO line and the corresponding Bill line (which are already equal in quantity/price). 6) Trigger the Match: Click on the Match button. Observe Error: An "Invalid Operation" popup appears, preventing the link because Odoo tries to "add" zero lines to a posted invoice. **Video:** https://drive.google.com/file/d/12aeZIx1JRRSKA9TaWfXy0TeSOgMUMQcg/view --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241171
This update fixes an issue where checklists were not appearing correctly in email templates generated from activity HTML fields. The change re-enables the checklist functionality and ensures that checklists are converted to standard lists when emails are sent, improving the formatting and usability of email communications.
Original PR description
Purpose: - The checklist command was removed from the activity html field. This change re-enables the checklist command for the activity html field. - When sending mail, convert checklist into a normal list. task-6144663 Forward-Port-Of: odoo/odoo#263287
This update fixes a formatting issue in the export of work entry data to the Acerta system. The export now adheres to Acerta's specific requirements for padding the external reference number and work entry type code, ensuring accurate data transmission. This ensures compliance and proper processing of payroll information.
Original PR description
We want to adhere to the correct format for the export of work entries to Acerta. There, the number of external reference is padded to 17, not 20, and is followed by 3 spaces, before the date. Also, the code of the work entry type is padded to 4 and followed by 2 spaces. Task: 6168106 Forward-Port-Of: odoo/enterprise#118389 Forward-Port-Of: odoo/enterprise#118124
This update resolves a bug that prevented users from correctly applying custom groupings within the Analytic Report feature. The fix ensures that custom group options are properly included in the search process, allowing for more flexible reporting. This improves the usability of the accounting module for users creating custom reports.
Original PR description
Steps to reproduce: - Install `Accounting` module - Search `Analytic Report` > Click on `Total` > `Custom Group` - Select `Journal Item` > Now again close and select `Journal Item` Traceback: ```js…
Steps to reproduce:
- Install `Accounting` module
- Search `Analytic Report` > Click on `Total` > `Custom Group`
- Select `Journal Item` > Now again close and select `Journal Item`
Traceback:
```js
TypeError: Cannot destructure property 'fieldName' of 'searchItems.find(...)' as it is undefined.
at AnalyticPivotRenderer.onGroupBySelected (http://localhost:8069/web/assets/3b7bf10/web.assets_backend_lazy_dark.min.js:434:7)
at Object.onSelected (eval at compile (http://localhost:8069/web/assets/b0799bf/web.assets_web.min.js:1376:421), <anonymous>:78:62)
at DropdownItem.onClick (http://localhost:8069/web/assets/b0799bf/web.assets_web.min.js:2373:24)
```
Cause:
Custom groupBys were not being added to the search items list in `onGroupBySelected`, causing a lookup failure when selecting a custom groupBy from the dropdown.
Solution:
Added custom groupBys to the search items list so they can be found and applied correctly.
opw-6227164
Forward-Port-Of: odoo/odoo#265810This update fixes an issue where child contacts linked to a company were incorrectly flagged as companies themselves. The fix prevents inherited data from triggering a false 'company' designation, ensuring accurate contact identification. This impacts users managing Argentinian and Latin American businesses.
Original PR description
### Issue: When creating a company with CUIT 30999003156, any child contact added under it is incorrectly considered as a company ### Cause: In `l10n_ar`, `_compute_is_company()` relies on:…
### Issue: When creating a company with CUIT 30999003156, any child contact added under it is incorrectly considered as a company ### Cause: In `l10n_ar`, `_compute_is_company()` relies on: `l10n_ar_afip_code` and the prefix of `l10n_ar_vat` However, these fields are propagated to child contacts As a result, child contacts inherit the same values as the parent company and are incorrectly computed with `is_company = True` ### Note: This same fix also fix the issue on `l10n_latam_base` and `l10n_co` ### Steps to reproduce: - Install `l10n_ar` and switch to an AR Company - Create a Partner in Contacts (Name: Test Company, Country: Argentina, Identification Number: CUIT 30999003156) - Add a Contact (Name: Test Contact) - Go in Contacts and add a Filter for Name: Test ### Before the fix: The Contacts are: Test Company and Test Contact ### After the fix: The Contacts are: Test Company and Test Company, Test Contact opw-6140921 Forward-Port-Of: odoo/odoo#263503
This update resolves an issue that caused errors when sending shifts involving multiple resources. The fix ensures the system correctly handles shifts with multiple assigned employees, preventing a traceback and improving the reliability of shift scheduling. This enhances the overall planning process for users.
Original PR description
Steps to reproduce: - Install Planning - Create two resources - Enable "Employee Unavailabilities > Unassign themselves from shifts - Create a shift with multiple resources - Send the shift Issue: A traceback occurred when sending a shift linked to multiple resources. Cause: The unavailability URL was generated using `employees.token`, which expects a single employee record. Fix: Handle shifts with multiple resources correctly when generating the unavailability URL to avoid the traceback when sending shifts. issue commit-https://github.com/odoo/enterprise/pull/106700/commits
This update fixes a problem where selecting the start date first would incorrectly set both the start and end dates for postponed accounting periods. Previously, selecting the end date first resulted in dates being displayed in reverse order. This change ensures the system correctly calculates and displays deferred period dates, improving data accuracy and usability.
Original PR description
The issue is when selecting deferred dates, if the start date is selected first, the system will set both the start and end dates. However, when selecting the end date first, the period appears backwards example ( 2026 - 2025 ). task: 6140024 Forward-Port-Of: odoo/enterprise#114866
This update corrects a reporting issue where bank statement KPIs wouldn't update when no statements were processed. Previously, an empty list returned by the system resulted in the KPI remaining unchanged. Now, any unreported KPI column is cleared, ensuring accurate reporting of bank statement processing status.
Original PR description
The aim of this commit is to update the integer kpis when those aren't received. ### Context: The account module report the bank statement in draft to process. When all bank statement have been processed, there isn't any and thus, the module send back an empty list. ### Before this commit: The bank statement kpi wasn't updated as we didn't received anything about that specific kpi. ### After this commit: Any kpi that wouldn't be reported would get it's column emptied. opw-6170973 Forward-Port-Of: odoo/enterprise#115695
This update fixes an issue where internal links within the Timesheet Assistant's custom form view opened in a separate window, disrupting the user's workflow. Now, these links open within a modal, keeping users seamlessly within the Timesheets Assistant menu for a smoother experience.
Original PR description
This commit opens the internal links in the custom form view displayed in the timesheet assistant inside a modal to stay in Timesheets Assistant menu. task-[6132392](https://www.odoo.com/odoo/project/4105/tasks/6132392) Forward-Port-Of: odoo/enterprise#114596
This update fixes a bug that prevented users from opening project records in a new tab. Previously, records opened directly in the current browser tab. Now, users can open records in a new tab by using Ctrl+click, improving workflow efficiency and user experience.
Original PR description
Steps to reproduce ================== - Install project,board - Go to project - Open any project - Click on the cog menu - Click on Dashboard > Add to my dashboard - Confirm - Open the dashboard app > My dashboard - ctrl+click on a record => The record is opened in the current tab Cause of the issue ================== The params newWindow passed to the selectRecord props was ignored Forward-Port-Of: odoo/odoo#266729
A recent update incorrectly added attributes to all website select elements, causing performance issues and database clutter. This fix removes the problematic code, ensuring website performance and data integrity. It's a routine maintenance update to improve the system's efficiency.
Original PR description
Commit [1] introduced an option to link state and country, which uses the data-link-state-to-country attribute. However, because parentheses were missed, it added the mentioned attribute to all select elements, which polluted the dom and the database. [1]: https://github.com/odoo/odoo/commit/7a43c49441b5a50168c3919fb8e8b658686363b5 Forward-Port-Of: odoo/odoo#266986
This update simplifies how plugins manage submit buttons within Odoo. Previously, changes required modifying core code, but now plugins can easily register their own button selectors, making the system more flexible and easier to maintain. This reduces the need for developers to directly alter the base Odoo code.
Original PR description
\* = website, website_payment Previously submit button selectors were defined in a single hardcoded string in the save snippet logic. This made the list harder to maintain and required modifying the base code whenever a new plugin needed to exclude its submit button from being saved as a snippet. Introduce a resource allowing plugins to register their own submit button selectors. Plugins can now extend this list directly from their code without modifying the base implementation. This makes the logic easier to maintain and provides a reusable extension point for other submit-button related behaviors in plugins. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#264839 Forward-Port-Of: odoo/odoo#252679