Wednesday, January 7, 2026
43 changes · 19.0
Resolved issues and error corrections
This fixes Vietnamese Viettel electronic invoices in foreign currencies by limiting the exchange rate to the allowed two decimal places. Businesses issuing USD or other foreign-currency invoices should avoid submission errors caused by overly precise exchange rates.
Original PR description
* STEP TO REPRODUCE: create USD invoice to issue sinvoice, have currency rate like 26337.9186666777 , when issue we will get error because too many decimal * SOLUTION: round exchange rate up to 2 decimal because documentation said that is maximum 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#241061
Opening XML files in Documents no longer fails when the file contains embedded PDF data. The preview now only tries to create PDF thumbnails for valid PDF files, preventing an unnecessary error for users viewing imported documents.
Original PR description
Steps to reproduce: 1. Install `documents` 2. Upload an XML file that contains an embedded PDF in base64. 3. Click on the `Info & Tags` icon on the top right in the Documents kanban view 4. Open the imported XML file Issue: - An `Invalid Operation: Only PDF files can have thumbnail` error occurs. Cause: - The `Attachment` model attempts to generate a thumbnail for the XML file because it contains PDF data. However, as of now, thumbnails are only generated for valid PDFs, so the `generatePdfThumbnail` function returns `isPdfValid: false` but `setPdfThumbnail` method fails to handle this `false` value in resulting invalid rpc call. Solution: - Update the condition in `setPdfThumbnail` to consider only valid PDFs. File: [Link](https://drive.google.com/file/d/19OxVJeqj9i-VgH9D6Aqk0P9Tuf6zlPwB/view?usp=sharing) opw-5374529
Taiwan ECPay electronic invoice addresses are now sent without the company name and formatted as a single comma-separated line. This helps match the expected address format for EDI submissions and reduces the risk of rejected or incorrect invoice data.
Original PR description
In this commit: --- Update EDI address formatting to remove the company name and send a comma-separated single-line address. task-5410619 Forward-Port-Of: odoo/odoo#241964 Forward-Port-Of: odoo/odoo#241108
Closing the event registration selection window from a sales order no longer causes an error. If the selection is dismissed, the related product line is removed cleanly, keeping the sales order workflow uninterrupted.
Original PR description
**Steps to produce:** - Install `Events and Sales` modules. - Go to `sale > sale order > Open any SO > Add product > Event registration`. - When the wizard opens, dismiss it by either clicking the X…
**Steps to produce:**
- Install `Events and Sales` modules.
- Go to `sale > sale order > Open any SO > Add product > Event registration`.
- When the wizard opens, dismiss it by either clicking the X button in the
top-right corner of the modal or by pressing the `Escape` key.
**Traceback:**
`TypeError: Cannot convert undefined or null to object.`
**Root cause:**
- In this [commit], the `{ dismiss: true }` option was added to the `dismiss` call.
- At [1], when `onClose` is triggered, we only check `!closeInfo || closeInfo.special`.
Since `{ dismiss: true }` does not satisfy either condition, the code falls into the `else` branch,
where `update` is called with an `undefined` value.
**Solution:**
- Now, we also check the condition `closeInfo.dismiss`.
- So, now that we have closed the selection of the event, our product is also removed from the SO line.
[commit]: https://github.com/odoo/odoo/commit/31c00161fd3a77c9fbd260754cb8c142fcb0d652
[1]https://github.com/odoo/odoo/blob/01a896557ec2bada04db60195926c6fa61375b10/addons/event_sale/static/src/js/sale_product_field.js#L40
**opw-5349732**
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#238061This fix resolves an error that could prevent the Croatian KPD category list from loading correctly. It keeps the Croatian e-invoicing module aligned with the current 19.0 version, helping users avoid setup or compliance workflow interruptions.
Original PR description
Fixing the loading error for KPD category list, consistent with 19.0 version of the module. runbot-237639 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242188
This fix ensures automated testing of the Accounting dashboard does not contact the live Odoo Fin service when favorite institutions are shown. It keeps test runs isolated from external systems, reducing false failures and avoiding unnecessary production calls.
Original PR description
The aim of this commit is making sure that the click all won't try to contact our external server odoo fin when the accounting application is opened. Indeed, the accounting application is displaying the favorite institutions for a particular country in the accounting dashboard which is doing a call to production.odoofin.com. This commit adds a mock using _request_handler to patch the call to odoo fin. runbot-error-231151 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#223680 Forward-Port-Of: odoo/odoo#223602
Sales orders for prepaid service packs now show remaining or overused time accurately, without small rounding errors. This prevents confusing balances such as showing 2 hours and 1 minute overused when the actual overuse is exactly 2 hours.
Original PR description
Steps to reproduce: - Create service product with UoM 'pack of 20 hours' and prepaid policy - Sell the product and confirm the Sales Order - Create a helpdesk ticket/task linked to the Sales Order…
Steps to reproduce: - Create service product with UoM 'pack of 20 hours' and prepaid policy - Sell the product and confirm the Sales Order - Create a helpdesk ticket/task linked to the Sales Order Line - Log 22:00 on timesheets Current behavior: Sales Order Line shows '-2:01 remaining' Expected behavior: Should show '-02:00' to reflect two hours overconsumed without rounding. Root cause: Python's float type follows the IEEE 754 double-precision standard, where only base-2 fractions can be stored precisely. Base-10 fractions cannot be represented exactly, introducing tiny rounding errors. During chained operations such as multiple conversions or subtractions, these small errors accumulate into larger discrepancies. The float_round() function uses a small constant epsilon to correct rounding noise, but as arithmetic chains grow, errors exceed epsilon's tolerance and it can no longer correct them. Since a single global epsilon cannot handle every case (small vs. large values, chained vs. single operations, or regressions), rounding drift is inevitable when rounding happens repeatedly. Fix: To prevent these rounding errors from compounding, the solution is to stop intermediate rounding altogether. By using conversions with round=False, all arithmetic is done in the base unit (hours) with full float precision, and rounding is applied only once when displaying the final value. This eliminates error accumulation and ensures consistent, drift-free results. task-5090240 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241120 Forward-Port-Of: odoo/odoo#229282
Fixes an issue in the website editor where changing settings on an accordion or quote block could unintentionally affect similar blocks nested inside it. This makes page editing more predictable and helps prevent accidental design changes on website pages.
Original PR description
This commit fixes some issues that occur when editing nested instances of `s_accordion` and `s_blockquote` snippets. In all cases, changes applied to a parent unintentionally propagate to nested…
This commit fixes some issues that occur when editing nested instances of `s_accordion` and `s_blockquote` snippets. In all cases, changes applied to a parent unintentionally propagate to nested snippets. **Accordion issues** How to reproduce: drop two nested `s_accordion` snippets. Then: 1. Change the outer "Style" from "boxed" to "highlight active" -> both accordion change, 2. Change the outer "Round Corners" -> both accordion change, 3. Change the outer "Icon Position" -> both accordion change, 4. Change the outer "Icons" style -> both accordion change. **Blockquote issues** How to reproduce: drop two nested `s_blockquote` snippets. Then: 1. Change the outer "Decoration" -> both blockquotes change, 2. Set the inner "Decoration" to "Icon" -> works only if the outer snippet has icon too, 3. Change the outer "Author Alignment" -> only the inner blockquote changes. **Cause** The above issues occur because certain `applyTo` and certain CSS selectors match all nested elements rather than restricting the scope only to the snippet being edited. **Fix** The relevant `applyTo` and CSS rules now use more specific selectors. **Note** See also https://github.com/odoo/odoo/pull/237733 task-5362171 Forward-Port-Of: odoo/odoo#242077
Fixes the website carousel so number indicators remain readable when placed outside the slide area. The previous and next controls now align properly with the carousel for number or hidden indicators, improving page appearance for visitors.
Original PR description
The css rules for indicators outside the carousel were not adapted for number indicators, and used the button color intended for dots and bar as background of the numbers, making them unreadable and…
The css rules for indicators outside the carousel were not adapted for number indicators, and used the button color intended for dots and bar as background of the numbers, making them unreadable and ugly. The height of the indicators when outside influences the margin needed to align the bottom of the prev/next buttons. That caused the bottom of the next/prev buttons to not reach the bottom of the slide with "Numbers" or "Hidden" as indicators. This commit adds the necessary css rules to correctly size and colors the number indicators (and the hidden one) when positioned outside. Steps to reproduce - Add a carousel - Set "Indicators" to "Numbers" - Set "Style" to "Indicators outside" - Bug: The colors are all wrong, we cannot see the numbers - Bug: The bottom of the previous/next buttons do not reach the bottom of the carousel - Set "Indicators" to "Hidden" - Bug: The bottom of the previous/next buttons is even further from the bottom of the carousel task- 5358507 Forward-Port-Of: odoo/odoo#237397
This fix prevents errors when analytic distribution data includes text markers instead of only account IDs. Business users benefit from more reliable analytic processing and fewer interruptions when working with accounting-related records.
Original PR description
Issue: Before this commit, the analytic distribution field contained a mix of integers (account IDs) and strings (such as '__update__'). When attempting to retrieve the account ID, converting the '__update__' string to an integer caused an error. Fix: As a generic solution, instead of skipping only the '__update__' key—which may not be the only non-numeric string in the future—we now process only the strings that can be safely interpreted as numbers. opw-5450293 Forward-Port-Of: odoo/odoo#242021
Arrow keys now correctly adjust website builder range controls that use decimal values, such as parallax intensity. This makes keyboard adjustments more accurate and predictable for users editing page snippets.
Original PR description
**Problem** Arrow-keys don't work properly on `BuilderRange` if the `step` value is fractional. **How to reproduce** The problem is present on every `BuilderRange` having fractional `step`. For example: snippet `s_parallax` -> set "Scroll Effect" to "Parallax to Top" -> "Intensity" range. **Why the problem happens** The method `BuilderRange.onKeydown` retrieves the range value as a string, converts it to a number using `parseInt`, and then adds or subtracts the step value. Of course, `parseInt` is inappropriate when the value is expected to be fractional. **Fix** `parseInt` has been replaced by `parseFloat`. task-5405036 Forward-Port-Of: odoo/odoo#239428
Vendor bill imports from UBL files now use the supplier's registered legal company name instead of a contact person's name when both are present. This helps ensure vendor records are created or matched with the correct business name, reducing confusion in accounting workflows.
Original PR description
Steps To Reproduce ------------------ 1- Go to Accounting > Vendors > Bills. 2- Upload a UBL XML file containing both RegistrationName and Contact/Name (you can use one of the two attached in the…
Steps To Reproduce ------------------ 1- Go to Accounting > Vendors > Bills. 2- Upload a UBL XML file containing both RegistrationName and Contact/Name (you can use one of the two attached in the ticked). 3- Check the Vendor field. Issue ----- The vendor name is set to the contact person name instead of the company's legal name. Cause ----- In `_import_retrieve_partner_vals`, the XPath prioritizes `cac:Contact//cbc:Name` (contact person) over `cbc:RegistrationName` (company legal name). Fix --- Swap the priority to check `RegistrationName` first, falling back to `Contact/Name` only when no registration name exists. Legal/Standards Proof (OASIS UBL 2.1 Specification) according to sources: https://www.datypic.com/sc/ubl21/e-cac_PartyLegalEntity.html - cbc:RegistrationName: "The name of the party as registered with the relevant legal authority." http://www.datypic.com/sc/ubl21/e-cac_Contact.html - cac:Contact/cbc:Name: "The name of this contact. It is recommended that this be used for a functional name and not a personal name." The RegistrationName is the official legal company name, while Contact/Name is just a contact point at the company. Test ------ For the test I updated a test file so that `test_import_partner_fields` fails without these changes. opw-5392139 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242046
This fixes keyboard access for the Edit and Trash buttons in Kanban quick create cards. Users can now activate these actions with Space or Shift+Space again, restoring expected behavior and improving accessibility.
Original PR description
In kanban's quick create record, the 'Space' key is not working on 'Edit' and 'Trash' buttons as earlier versions. After this commit 'Space' key will work as expected. Task-5319051 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Stat buttons shown inside bottom sheets now display correctly instead of appearing visually broken. This improves the user experience in affected areas such as project-related sales and timesheet workflows.
Original PR description
when a stat button is displayed inside a bottom sheet, it can appear broken (e.g., in sale_project, sale_timesheet). task-5359751 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Email invitations sent from public Discuss channels are now classified correctly as user notifications. This prevents invite-related system messages from appearing as removed messages after users refresh the channel, reducing confusion for channel participants.
Original PR description
Steps to reproduce: * Open a public Discuss channel. * Invite an external user by email. * Refresh the page. An email-related message is fetched and displayed as `this message has been removed`. This happens because the message is created with `message_type = 'email_outgoing'`, even though it is conceptually a user notification and not meant to be rendered as an email in Discuss channels. This commit fixes the issue by setting the correct `message_type` (`user_notification`) instead of `email_outgoing`, ensuring the message is not displayed in Discuss, avoiding a misleading removed message. Task-5438936 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an issue where electronic invoice exports could fail or group taxes incorrectly when tax grouping information was missing. It also corrects handling for excise taxes, helping businesses generate compliant invoice files more reliably.
Original PR description
Some overrides assign a value to the tax's grouping_key after the super call. However, the returned value could be None. Also fix a little mistake regarding excise taxes. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#239959 Forward-Port-Of: odoo/odoo#239954
This update removes an obsolete test step related to copying a website tracker link. It reduces confusion in the automated checks without changing any customer-facing website link behavior.
Original PR description
Following PR [^1], the step about copying the tracker link doesn't do anything as the only actual "action" made in the custom "run()" function has been removed (sic), leaving only the mocking of the Clipboard API (which isn't called anymore, anyway). This commit removes this unused step to avoid confusion. [^1]: https://github.com/odoo/odoo/pull/170548 Forward-Port-Of: odoo/odoo#241358
This fix relaxes an overly short timeout in internal email server tests that could cause test runs to fail unnecessarily. It helps keep automated validation more stable, reducing false alarms without changing business functionality.
Original PR description
There are multiple cases where the SMTPD tests fail due to a timeout error. It is much worse to get a red runbot due to a silly timeout than to sometime wait a bit longer than .1 second. 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#242214
This fix ensures Indonesian tax data is loaded only once for a parent company instead of being repeated for its child companies. It prevents duplicate tax records and avoids migration or update errors for businesses using multi-company setups.
Original PR description
When searching companies with `("chart_template", "=", "id")` we were iterating them in `order=parent_path`. This meant the parent company was processed first, and then its child. During the child iteration, `_load_data` attempted to create the same tax records again, triggering the Python constraint `_constrains_name` due to duplicate tax names under the same root company.
To avoid this, only parent companies are selected for the tax loading.
opw-5266906
upg-3407920
tbg-2297
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-prThis update makes form views provide consistent context to menu actions, matching other view types and helping related business actions access the right record information. It also speeds up how menu options are prepared by checking them in parallel instead of one by one.
Original PR description
Task 5155523
This fix updates automated walkthroughs so they explicitly show the product column on invoices and bills when their steps depend on it. It restores test reliability after a previous change made that column hidden by default, helping keep accounting and sales workflows stable.
Original PR description
Commit 9c8e012 changed the visibility of the product column on invoices and bills. This caused several tours to fail as they expected the column to be visible by default. This commit fixes the failures by explicitly toggling the column visibility within the affected tours when required. runbot-234710 runbot-234871 runbot-234872 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix improves how Odoo reports errors when templates are processed from XML nodes rather than standard references. It gives support and development teams clearer context around failures, making troubleshooting faster and reducing time spent diagnosing template issues.
Original PR description
This PR fixes the error logging when QWeb is used with an `etree` node instead of a standard xmlid or id, to display the path of the directives (xml node) crossed. I have also improved the logging output when running with `--dev=qweb`: the error message now includes the generated code snippet surrounding the line that caused the error. This should make debugging much more intuitive by providing immediate context for the failure.
Messages posted in the chatter now keep the expected spacing after paragraphs, matching what users see while composing and in sent emails. This makes chatter messages easier to read and avoids inconsistent formatting after sending.
Original PR description
Problem: When adding a paragraph in the composer and sending the message, the paragraph posted in the chatter has a `margin-bottom` of 0. Cause: Paragraphs in the chatter rendering override the default bottom margin, resulting in inconsistent spacing compared to the composer and the sent email. Solution: Update selector to only target the last `p`. Steps to reproduce: - Open the chatter composer. - Add a paragraph using "/Paragraph". - Add some text. - Send the message. - Observe that the message posted in the chatter has no bottom margin, unlike in the composer. opw-5378129 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#240082
This update improves how Odoo reads and validates return descriptions in developer documentation, especially longer multi-line explanations. It also cleans up many existing public docstrings across apps so automated checks are more accurate and documentation is less likely to omit important details.
Website editors no longer see a misleading horizontal cursor appear between card blocks when navigating with the keyboard. This keeps editing behavior focused on actual editable areas and reduces confusion while building pages.
Original PR description
Since [1] when the selection placeholder plugin was introduced, a horizontal cursor is displayed between cards in website, while that area is not supposed to be editable. This commit disables the `SelectionPlaceholderPlugin` inside the `html_builder`. It also makes the `<figure>` element around images non editable - in order to be able to write a test that does not enforce it to be wrong. Steps to reproduce: - Drop an `s_cards_grid`` block - Put the cursor in a card - Move the cursor with the arrow keys until you leave the card => The cursor was displayed between cards. [1]: https://github.com/odoo/odoo/commit/edf7f7bb0c62978640c181eccb4934855d5d872d task-5383957
Website editors can now enter SEO keywords longer than 30 characters. This removes an unnecessary limit, making it easier to use more specific search phrases for page optimization.
Original PR description
Steps to reproduce: - Open the SEO dialog on a website page. - Try to enter a keyword longer than 30 characters. - Observe the input stops at 30 characters. Before this commit, the keyword field had a 30 character maxlength and blocked longer keywords. After this commit, the SEO keyword input accepts longer values with no maxlength restriction. task-5423796
Point of Sale now correctly displays the chosen product variant name when a customer selects a variant as part of a combo. This helps cashiers and customers verify orders more clearly and avoids confusion on combo line items.
Original PR description
In POS, if in a combo, one of option has instantly created variant it will not show the variant name in the order ### Steps to reproduce: * Create a product with instantly generated variants * Create…
In POS, if in a combo, one of option has instantly created variant it will not show the variant name in the order ### Steps to reproduce: * Create a product with instantly generated variants * Create a combo choice and add one of his variants * Create a combo product and add the combo * Open an store that sells this combo * Select the combo and choose the product with variant and confirm the selection Issue : On the left size in the order the variant name will not appear. ### Observation: When it tries to retrieve the attribute information for the variant https://github.com/odoo/odoo/blob/942b7a21d7e0eb15133f4af1b47e68f48dec70c7/addons/point_of_sale/static/src/app/services/pos_store.js#L1048 It is empty since during the call of computeComboItems the attribute was not retrieved for this scenario. https://github.com/odoo/odoo/blob/942b7a21d7e0eb15133f4af1b47e68f48dec70c7/addons/point_of_sale/static/src/app/models/utils/compute_combo_items.js#L31-L33 ------------ When adding a always variant to a combo they are considered like their own product, and attribute.extra_price should not be considered. The extra price for an always variant is setup in the combo with comboItem.extra_price like stand alone products. opw-5037355 Forward-Port-Of: odoo/odoo#239314 Forward-Port-Of: odoo/odoo#227176
Changing a website dynamic snippet template now clears any previously selected content width before applying the new template. This prevents old layout settings like a thin container from unexpectedly carrying over, keeping page design behavior consistent for editors.
Original PR description
Steps to Reproduce: 1. Drop a dynamic snippet from debug block. 2. Set the fetched elements to 1. 3. Set the content width to Thin (o_container_small). 4. Change the template of the snippet. When changing a dynamic snippet's template, previously set container widths (e.g., "Thin") could persist even though the option resets. Issue: Only template defined containerClasses were removed, leaving manually set classes like "o_container_small" behind. Fix: All container classes are cleared before applying the new template's containerClasses or falling back to "container".
This fix prevents upgrade failures on IoT hardware images when Tailscale is not found after moving to version 19.1. It helps keep device upgrades smoother and avoids interruptions caused by a missing dependency.
Original PR description
This PR adds a compatibility with Tailscale after upgrading 25_06/25_07 images to 19.1. It fixes the error ``` FileNotFoundError: [Errno 2] No such file or directory: 'tailscale' ``` Forward-Port-Of: odoo/odoo#242292
This update resolves an issue where deleting a specific product (Booking Fees) caused an access error due to company-related permissions. The fix uses `sudo()` to ensure the product template can be accessed regardless of the currently selected company, improving stability and preventing data loss.
Original PR description
**Steps to produce:** - Install `appointment_account_payment` and `l10n_be` with demo data. - Go to product `Booking Fees` and assign company `YourCompany`. - Switch the current company to `Belgium Company`. - Try to delete any product. **Issue:** - An access error is raised when deleting a product. **Root cause:** - During product deletion, method `_unlink_except_booking_fee_product_template` is executed [1]. - If the 'Booking Fees' product is assigned to another company, the current company cannot access its record, which triggers an access error. **Solution:** - Use `sudo()` when fetching the "Booking Fees" product template so that the record can be accessed regardless of the current company. [1]: https://github.com/odoo/enterprise/blob/0ba44def7fd961e1c17aa218e1a86a48f0918371/appointment_account_payment/models/product_template.py#L9-L15 opw-5255991 --- Forward-Port-Of: odoo/enterprise#101582
This update removes the use of Gemini 1.5 models within the AI features of Odoo Enterprise. The change provides a clear error message when attempting to use these models, preventing unexpected behavior. This ensures a more stable and reliable AI experience for users.
Original PR description
This PR deprecates the Gemini 1.5 models. Specifically, it gives a proper non-technical error when the model is used. The error occurs either when the user tries to set the model on an agent or if the model is already on the agent, it will raise the error upon usage of the agent. task-5129790
This update corrects a visual issue where the OCR label for expense documents was incorrectly displayed, causing misalignment in the expense report grid. The fix ensures that all labels and data fields are properly aligned, improving the user experience when viewing OCR-processed expenses. This was triggered by a change in how OCR data is handled.
Original PR description
Prerequisites ------------- To test this scenario you need either OCR credits, a free trial or to use the IAP account we have in the spreadsheet. Steps To Reproduce ------------------ 1- Go to Expenses > My Expenses. 2- Upload a receipt to trigger OCR. 3- Open the expense in Normal Mode (It works fine in Debug Mode). Issue ----- "Payment Method" field is misaligned - label appears in the value column and field appears in the label column. Cause ----- The label for "ID of the request to IAP-OCR" (`extract_document_uuid`) is visible when OCR data exists, but its field is only visible in Debug Mode. This orphan label breaks the grid layout. opw-5369619 Forward-Port-Of: odoo/enterprise#103189
A technical issue causing a traceback when using the AI button in the applicant refusal process has been resolved. The fix involved modifying the widget's behavior to correctly identify applicant IDs, preventing a required field error. This ensures the AI refusal feature functions reliably.
Original PR description
Step to reproduce: - Install hr_recruitment. - Open any applicant in any job position. - Click the Refuse button to open the refusal wizard. - Enable the send email toggle key. - Click on AI button Issue: traceback occurs Reason: - required field for using this widget is not defined. - so it tries to slice the res_ids field which is still not defined Solution: - In stable versions, we cannot add the missing required fields because this would cause upgrade issues. - Instead, we extend the widget and override its behavior to use active_model and active_id. task-5058510 Forward-Port-Of: odoo/enterprise#99498
This update fixes an issue where job offer emails didn't include the employee's name in the subject line. Now, the email subject will automatically include the employee's name, improving clarity and personalization for candidates. This ensures a more professional and informative communication.
Original PR description
**Steps to reproduce:** - Go to Employees app and select any employee - Press "Offers" smart button - Create a new job offer and send it by email **Issue:** The employee name is not populated in the email subject. Task: 5407028 Forward-Port-Of: odoo/enterprise#102628
This update corrects calculations for Belgian withholding taxes in the HR payroll module, ensuring accurate reporting up to the year 2026. This change addresses a technical adjustment to reflect the latest tax regulations for employees in Belgium, maintaining compliance and accurate financial reporting.
Original PR description
TaskID: 5403525 Forward-Port-Of: odoo/enterprise#103271 Forward-Port-Of: odoo/enterprise#103215
This update resolves a technical issue preventing the POS system from correctly interacting with new IoT box devices. The fix adds a necessary 'version' field to the IoT box data loaded into the POS, ensuring the WebRTC check functions as intended. This improves compatibility and stability of the POS with updated IoT devices.
Original PR description
In odoo/enterprise#101547, a check was added to never try using WebRTC when paired to a new IoT box image (where WebRTC is removed). This works outside of the POS, but due to the IoT box models being loaded directly from the POS data, they were missing the version field required for the check. This commit adds the `version` field to the IoT box fields loaded in the POS, fixing the WebRTC check.
This update fixes a bug that occurred when a user deleted the 'Default 48 hours/week' working schedule. The 'Payroll: Update data' cron job then encountered an error because the reference to this schedule was no longer found. This ensures the payroll update process continues to function correctly after schedule deletions.
Original PR description
When the ``Default 48 hours/week`` working schedule is deleted and the ``Payroll: Update data`` cron runs, a traceback is raised. Steps to reproduce the error: - Install ``l10n_mx_hr_payroll`` module…
When the ``Default 48 hours/week`` working schedule is deleted and
the ``Payroll: Update data`` cron runs, a traceback is raised.
Steps to reproduce the error:
- Install ``l10n_mx_hr_payroll`` module with demo data
- Switch to ``INNOVACION VALOR Y DESARROLLO SA SA`` company
- Go to Employees > Configuration > Settings > Change Company Working Hours
- Go to Working Schedules > Delete ``Default 48 hours/week`` working schedule
- Run the ``Payroll: Update data`` cron
Traceback:
```py
ValueError: External ID not found in the system: l10n_mx_hr_payroll.resource_calendar_def_48h
ParseError: while parsing /home/odoo/src/enterprise/l10n_mx_hr_payroll/data/hr_payroll_structure_type_data.xml:3, somewhere inside <record id="l10n_mx_employee" model="hr.payroll.structure.type">
<field name="name">Mexico: Employee</field>
<field name="default_resource_calendar_id" ref="l10n_mx_hr_payroll.resource_calendar_def_48h"/>
<field name="country_id" ref="base.mx"/>
</record>
```
The ``Payroll: Update data`` cron updates payroll data that references the ``Default 48 hours/week`` working schedule.
If the user has deleted this working schedule, the external ID no longer exists, leading to the above traceback.
sentry-7166574553A bug preventing users from searching within sign templates has been fixed. Previously, the search function within PDF templates was unresponsive. This update removes a technical issue that blocked users from utilizing the search feature, ensuring proper functionality.
Original PR description
Currently when the user is viewing sign templates, they are unable to search within a PDF. **Steps to replicate:** * Install `sign` with demo data * Sign > Templates > Open a template * Try searching using the magnifying glass button **Observed Behavior:** * User is unable to type anything in the PDF search box. **Root cause:** * This error happens because `preventDefault()` is called during a `keydown` event. At [1], calling `event.preventDefault()` stops the key’s normal behavior, so the typed character is not added to the input field. **Solution:** * Remove the `preventDefault` call which allows the search to work again. [1]: https://github.com/odoo/enterprise/blob/3df585779e6ede664279331c4531043688dadf17/sign/static/src/backend_components/editable_pdf_iframe_mixin.js#L623 opw-5366074 Forward-Port-Of: odoo/enterprise#102749
This update streamlines security permissions within the VoIP CRM module. Previously, access was granted based on multiple roles, which has been simplified to only require the 'salesman' role. This change enhances security and reduces potential access issues.
Original PR description
`group_sale_manager` implies `group_sale_salesman`[1] [2]. Just checking `group_sale_salesman` is enough. [1]: https://github.com/odoo/odoo/blob/54681272e9f00a171fe49f690979e2a8353ff5fb/addons/sales_team/security/sales_team_security.xml#L25-L33 [2]: https://github.com/odoo/odoo/blob/54681272e9f00a171fe49f690979e2a8353ff5fb/addons/sales_team/security/sales_team_security.xml#L17-L23i Task-5461729
This update fixes a cluttered appraisal form view issue that occurred when a large number of appraisal templates were used. The change simplifies the form by reverting to a standard, searchable dropdown, enhancing usability and readability for users. This improves the overall user experience when managing appraisals.
Original PR description
Steps to reproduce: - Install the hr_appraisal module. - Open the form view of an appraisal when more than 100 appraisal templates exist. Issue: When the appraisal form view is opened with a large number of templates, the view becomes cluttered because all templates are displayed at once. Fix: This PR removes the widget and reverts to a standard related field with a searchable dropdown, improving readability and usability. task-5438146
This update resolves an issue where long date ranges in Field Service tasks caused the kanban card layout to break. The fix ensures the date range widget stays within the card's boundaries, maintaining a consistent and visually appealing user experience. This prevents visual disruptions and improves usability.
Original PR description
Steps to reproduce: ---------------------------- 1. Install Field Service module 2. Open any task from Field service module 3. In the Planned date field set a wide range spanning years, for example:…
Steps to reproduce: ---------------------------- 1. Install Field Service module 2. Open any task from Field service module 3. In the Planned date field set a wide range spanning years, for example: Dec 16, 2024, 1:30 PM → Oct 13, 2026, 6:00 PM. 4. Go back to kanban view 5. Adjust display to around 360 px Observation: ---------------------------- The planned date daterange widget overflows and extends outside the kanban card, breaking the card layout and visual containment. Issue: ---------------------------- The daterange widget's parent container did not enforce a width, so the widget could grow beyond the kanban card boundary when a long date range was used. Solution: ---------------------------- Add the w-100 class to the daterange container div to enforce full-width layout within the kanban card. Before: <img width="584" height="529" alt="before_css" src="https://github.com/user-attachments/assets/e89302b0-975c-47eb-91ec-89dbfe813493" /> After: <img width="561" height="528" alt="after_css" src="https://github.com/user-attachments/assets/48b60a78-18da-4504-98ef-a9c4013b107b" /> opw-5219941
This update corrects inconsistencies in the documentation across several Odoo modules. The changes ensure that all public documentation is clear, accurate, and follows established standards. This improves the usability and maintainability of the system for internal teams.
This update resolves a validation error that occurred when creating new spreadsheet templates within the Quality Control app. The fix provides a default name for the template, ensuring the creation process completes successfully. This improves usability for users creating quality control spreadsheets.
Original PR description
**Issue** A validation error is raised when creating a new spreadsheet template from a Quality Control Point. **Steps to reproduce** 1. Open the Quality app. 2. Go to Quality Control > Control…
**Issue** A validation error is raised when creating a new spreadsheet template from a Quality Control Point. **Steps to reproduce** 1. Open the Quality app. 2. Go to Quality Control > Control Points. 3. Click "New". 4. Set the type to "Spreadsheet". 5. Click on Spreadsheet Template > Search More. 6. Click "New". -> A validation error is raised. **Cause** In `quality_view`: https://github.com/odoo/enterprise/blob/f54585f84b0fa7a73efb3f0e14266972d510f0a6/quality_control/views/quality_views.xml#L840C17-L845C19 the `many2one_spreadsheet` widget (see [`many2one_spreadsheet_field.js`](https://github.com/odoo/enterprise/blob/f54585f84b0fa7a73efb3f0e14266972d510f0a6/spreadsheet_edition/static/src/assets/components/many2one_spreadsheet_field.js#L36)) overrides "Create and Edit" to create a new spreadsheet through `Many2XSpreadsheetAutocomplete`: https://github.com/odoo/enterprise/blob/f54585f84b0fa7a73efb3f0e14266972d510f0a6/spreadsheet_edition/static/src/assets/components/many2one_spreadsheet_field.js#L11C9-L14C51 This flow does not set a default value for the required `name` field, nor does `action_open_new_spreadsheet`:https://github.com/odoo/enterprise/blob/8365feab396679f0323e89c2f4e0c825a0b2ee7e/spreadsheet_edition/models/spreadsheet_mixin.py#L348 Since `name` is required: https://github.com/odoo/enterprise/blob/8365feab396679f0323e89c2f4e0c825a0b2ee7e/quality_control/models/quality_spreadsheet_template.py#L12 validation fails. **Solution** Provide a default value for the `name` field, using the same default as in `documents_document.py`: https://github.com/odoo/enterprise/blob/8365feab396679f0323e89c2f4e0c825a0b2ee7e/documents_spreadsheet/models/documents_document.py#L321 opw-5340710 Forward-Port-Of: odoo/enterprise#101671
Original PR description
Improve the docstring linter and fix yet another batch of docstrings.