Tuesday, December 2, 2025
48 changes · master
Resolved issues and error corrections
The first use of Send & Print for a customer invoice no longer automatically saves that delivery method as the contact’s default. This prevents users from being unexpectedly locked into an email or e-invoicing choice they did not knowingly configure.
Original PR description
Before this commit, we were setting the preferred invoice sending method on the Contact depending on what was in the first Send & Print to this specific partner. It's a bad idea because user don't know about this setting and when they want to switch the default method (example email -> peppol) the wizard will keep propose them to send it by email only and they don't know why since they never knowingly set it to "email". task-none (feedback from AVW) Forward-Port-Of: odoo/odoo#238029 Forward-Port-Of: odoo/odoo#237956
The employee creation button is now hidden from administrators who do not have HR permissions. This prevents users from clicking an action they are not allowed to complete and avoids a confusing access error.
Original PR description
**Version:** - 17.0 **Steps to reproduce:** - Make sure Marc Demo is an Administrator but has no Employees (HR) access rights. - Log in as Marc Demo. - Go to Settings → Users → Create a new user. - Enter a name and email, then Save. - You’ll see the "Create Employee" button it appears even though the user has no HR rights. - Click it → an Access Error occurs. **Isuue:** - The "Create Employee" button is visible for users who don’t have HR permissions, causing an access error when clicked. **Solution:** - Hide the "Create Employee" button for users without HR access by adding the correct group restriction. task-5212464 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#235258
Fixes an issue in the HTML editor where list markers did not reliably match the styling of the text when multiple styles, such as color and size or bold, were applied. This ensures documents and website content keep a consistent appearance when styled text is converted into lists.
Original PR description
**Current behavior before PR:** - When applying a color or size style to the entire text and then converting it into a list, the style was reflected on the list marker. - However, if multiple styles (e.g., both color and size, or color and bold) were applied, only one style or sometimes none was reflected on the marker. **Desired behavior after PR is merged:** - When text with color, size, or both styles is converted into a list, The list markers now consistently reflect those styles. task-5097649 Forward-Port-Of: odoo/odoo#234296 Forward-Port-Of: odoo/odoo#227813
This fix makes an automated website menu test wait for the page frame to finish loading before making changes. It reduces random test failures, helping keep website quality checks stable without changing customer-facing behavior.
Original PR description
In this commit, we fix a non deterministic behavior by ensuring the iframe is loaded before set and attribute on iframe content element. runbot-error-id~233039 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#237513
This fix ensures delivery records created from Point of Sale orders are linked to the correct customer. It prevents customer information from being missing or incorrect on related stock picking documents after a recent stock module change.
Original PR description
in this commit: - The partner was not being set on pickings due to a recent change in the stock module. Previously, the `partner_id` was derived from the `group_id`, but it is now taken directly from the values. We updated the values to ensure the correct partner is passed. reference PR: [212679](https://github.com/odoo/odoo/pull/212679/files#diff-a8e268c29293c3896cc7bf77c5a0809a394ffe929388180b6e96cce485177956L331) runbot-232733 Forward-Port-Of: odoo/odoo#234533
Manufacturing reports now calculate operation times correctly when a bill of materials uses decimal quantities. This helps teams get more reliable production planning and costing information for products made in fractional amounts.
Original PR description
When a BoM has a decimal quantity, the operations' times are not correctly computed. task: 5366973 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237927
This fix ensures the Peppol connection setting is created during reset when it was missing, instead of being skipped. It helps keep test or neutralized environments consistent and prevents leftover connection behavior from remaining active unexpectedly.
Original PR description
There can be some siutations where you can not have the key account_peppol.edi.mode while having a connection. But the neutralize only updates and so, if the key is not present, it does nothing. So change it to insert the key if no present --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238184
Electronic invoice imports now ignore repeated bank account numbers in the same file. This avoids errors or duplicate partner bank records when supplier documents contain multiple payment sections with the same account details.
Original PR description
Currently `_import_retrieve_and_fill_partner_bank_details` may try to to create multiple res partner bank with the same account. This can i.e. happen in case there are multiple `cac:PaymenMeans` nodes in the XML. After this commit we filter out duplicate bank accounts numbers. opw-5149621 Forward-Port-Of: odoo/odoo#238139 Forward-Port-Of: odoo/odoo#236676
Opening the date filter on website mail groups no longer triggers an error. This keeps visitors and users from being interrupted when browsing or filtering mail group content by date.
Original PR description
Steps to reproduce =================== 1. Open any mail group on the website side. 2. Try to access the date filter. Here https://github.com/odoo/odoo/pull/206575/commits/99ece288df1bbb98fd538479b07da14f3abf0d03, we missed wrapping the tuple in the `Domain` class. Task-5369008 Forward-Port-Of: odoo/odoo#238076
Email marketing test messages now use a valid mailing contact when creating the 'view online' link, instead of relying on the current user's ID. This prevents broken preview links when the matching contact record no longer exists, making test emails more dependable before campaigns are sent.
Original PR description
In the email marketing, when you add "view_online" and dynamic placeholder "object.name", and try doing a test email, it creates a url token for the "view online" with the res_id as the user's id which grabs the record from the mailing_contact with that res_id. So, in case the mailing_contact with the res_id is deleted, the "view_online" gives you error saying record with id "res_id" cannot be find. Our fix is to search the mailing_contact and grab the id of the first record. This fix updates the code from this commit: [8a9981e](https://github.com/odoo/odoo/commit/8a9981e78a438ceb53a4fdc0445ebed2170c6624) opw-5049654 Forward-Port-Of: odoo/odoo#232440
This fix ensures that values changed during a website interaction are returned to their original state when the interaction ends. It helps prevent stale or incorrect information from remaining visible after dynamic page behavior stops.
Original PR description
When the Interaction framework was introduced in [1], fields that were modified by t-outs weren't restored to the initial values, although initial values were saved. This commit restores them on destroy. [1]: https://github.com/odoo/odoo/commit/dd13994674d4ef4683f5a4d46a1f604650cfb92b Forward-Port-Of: odoo/odoo#238120 Forward-Port-Of: odoo/odoo#237912
Links added to Terms and Conditions on invoices and quotations now open in a separate browser tab. This keeps customers on their document in the portal and makes it easier to continue reviewing or paying without losing their place.
Original PR description
Problem: Links placed in the Terms and Conditions field on quotations and invoices open in the same browser tab on the customer portal. This navigates the user away from their document, and since the URL does not change, it can be confusing to return to the previous view. Solution: Inject `target="_blank"` into all `<a>` tags. This ensures that all external links within the terms and conditions open in a new tab, providing a better and more intuitive user experience. task-5114681 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
Loyalty cards must now be linked to a loyalty program before they can be saved. This prevents a save-time error and helps keep loyalty card records complete and usable.
Original PR description
Currently, an error occurs when user tries to save loyalty card. Steps to replicate: - Install `sale_management` and `loyalty`. - Using Open View open `loyalty.card` form view. - Click save and error…
Currently, an error occurs when user tries to save loyalty card. Steps to replicate: - Install `sale_management` and `loyalty`. - Using Open View open `loyalty.card` form view. - Click save and error will occur. Error: `KeyError: loyalty.program()` Cause: - The error occured because there was no loyalty program linked to the loyalty card at [1], so `create_comm_per_program` is an empty dict and then code tries to access `program_id` from empty `dict` [2] that causes the Keyerror. Solution: - Made the `program_id` required to prevent creation of any loyalty card with no program. Upgrade PR: https://github.com/odoo/upgrade/pull/8821 [1]: https://github.com/odoo/odoo/blob/7747c5810eabe798a1631c3e3b26b81a5c89b4b4/addons/loyalty/models/loyalty_card.py#L139-L140 [2]: https://github.com/odoo/odoo/blob/7747c5810eabe798a1631c3e3b26b81a5c89b4b4/addons/loyalty/models/loyalty_card.py#L142 sentry-6857518052 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes a manufacturing test so it behaves consistently regardless of the timezone settings present in the test environment. It helps prevent false test failures and supports more dependable validation of manufacturing scheduling changes.
Original PR description
The `test_replan_mo_after_updating_bom`, introduced in [PR](https://github.com/odoo/odoo/pull/223415), test was failing because the workcenter's resource calendar used during the test ended up with a different timezone when DB was installed with demo data, which shifted the planned times and caused the assertion to fail. This commit sets the workcenter’s resource calendar timezone explicitly in the test so it gives consistent results across all test environments. runbot - 234339
The employee profile now hides the Certifications tab when no certification types are enabled. This prevents users from opening a blank form and encountering confusing required-field errors.
Original PR description
### Steps to Reproduce 1. Disable "Certification" on all Skill Types. 2. Open an Employee form and click "Add a line" in the Certifications tab. 3. The modal is blank, and saving triggers a "Missing required fields" error. ### Reason The form needs a list of Certification Types to work. When that list is empty, the form is broken, but the tab was still shown to the user. ### Solution Hide the "Certifications" tab entirely if no enabled certification types exist in the database. Task: 5349249 Forward-Port-Of: odoo/odoo#236859
This fixes visual glitches in the website mobile preview when moving between long pages. Scrollbars now remain consistent during page transitions and leftover preview content is cleared after loading, reducing distracting display artifacts for editors.
Original PR description
### [FIX] website: copy the whole document to fallback iframe Since da85d7f8f39f43bd21603b40f357dfc572036d27, the style in head and the body of the website preview are copied to the fallback iframe's…
### [FIX] website: copy the whole document to fallback iframe Since da85d7f8f39f43bd21603b40f357dfc572036d27, the style in head and the body of the website preview are copied to the fallback iframe's document. This did not copied the attributes on the `html` node, which somtimes impacted the appearance. With this commit, the whole document is copied to the fallback iframe. Steps to reproduce: - Activate "Mobile preview" when viewing the website - Go to a page that is long enough for a scrollbar to appear - Navigate to another page - Bug: During the transition, the fallback is shown, and its scrollbar is wider than the one of the page that was shown just before task-5212287 ### [FIX] website: remove content of fallback iframe after load Since commit 7b19831e1c624b483008feb526ba773ec8b23009, an fallback iframe is shown behind the website preview to avoid flicker on navigation. Since commit 3036c7dc4720a88f2717b96a29d45d923eb6ec75, the preview for mobile has some transparency on its scrollbar. Thus the part of the fallback iframe behind the scrollbar when previewing mobile was slightly visible. This commit fixes it by removing the fallback iframe's content after the website has loaded (and the fallback is not needed anymore). Steps to reproduce: - On website, activate "Mobile preview" - Navigate to a page long enough to have a scrollbar - Navigate to another page long enough to have a scrollbar - Scroll a bit - Bug: The scrollbar of the fallback is slightly visible task-5212287 Forward-Port-Of: odoo/odoo#237810 Forward-Port-Of: odoo/odoo#233373
Fixed an issue in Point of Sale where clicking the IoT Box status button while the box was disconnected caused an error. This helps cashiers view device status without interrupting their workflow.
Original PR description
Before, in point_of_sale when the IoT box was disconnected and the status button of the IoT Box top right was pressed an error was triggered. This PR solves this issue.
```
TypeError: v1.trigger is not a function
at ProxyStatus.hdlr1 (eval at compile (http://10.30.64.95:8069/web/assets/debug/web.assets_common.js:21918:16), <anonymous>:16:25) (/web/static/lib/owl/owl.js:5480)
at Object.mainEventHandler (http://10.30.64.95:8069/web/assets/debug/web.assets_common.js:22185:25) (/web/static/lib/owl/owl.js:5747)
at HTMLDivElement.listener (http://10.30.64.95:8069/web/assets/debug/web.assets_common.js:16746:20) (/web/static/lib/owl/owl.js:308)
```
[task-3252747](https://www.odoo.com/web#cids=1&menu_id=4720&action=333&active_id=1737&model=project.task&view_type=form&id=3252747)Fixes an error that occurred when users checked the status of a disconnected IoT Box from the Point of Sale screen. This helps store staff confirm device connectivity without the interface breaking.
Original PR description
Before, when we were trying to check the status of an IoT Box which is disconnected by using its status button an error was triggered:
```
TypeError: v1.trigger is not a function
at ProxyStatus.hdlr1 (eval at compile (http://10.30.64.95:8069/web/assets/debug/web.assets_common.js:21918:16), <anonymous>:16:25) (/web/static/lib/owl/owl.js:5480)
at Object.mainEventHandler (http://10.30.64.95:8069/web/assets/debug/web.assets_common.js:22185:25) (/web/static/lib/owl/owl.js:5747)
at HTMLDivElement.listener (http://10.30.64.95:8069/web/assets/debug/web.assets_common.js:16746:20) (/web/static/lib/owl/owl.js:308)
```
This PR solves that issue
[Task 3252747](https://www.odoo.com/web#id=3252747&cids=1&menu_id=4720&action=333&active_id=1737&model=project.task&view_type=form)This change makes Odoo's automated test retry process better at recognizing failure details when they are logged in a different format. It also prevents a known browser disconnect issue from interrupting request handling, improving stability of internal test and build runs.
Original PR description
The auto-retry is supposed to catch error logs as well as tracebacks. In some cases a traceback is logged as a message, and not as a logger arg, bypassing the replace already in place. This pr simply replaces the traceback string in the message as well. Build error [234619](https://runbot.odoo.com/odoo/runbot.build.error/234619) Also fixes OSError while handling request paused Build error [229906](https://runbot.odoo.com/odoo/runbot.build.error/229906) Forward-Port-Of: odoo/odoo#238133
This fixes an issue that could occur when several scheduled mail messages were created at once. The change ensures each new scheduled message is handled individually, improving reliability of automated mail scheduling.
Original PR description
This commit fixes an issue introduced by [1] with the introduction of the _message_created_hook on the `mail.scheduled.message` model. This hook requires to be called in a single record scenario. But this wasn't the case, as its call was done on potentially multiple newly created records. To fix this, the call to the hook is now done on a single record instead of a potential recordset. [1]: https://github.com/odoo-dev/odoo/commit/3a3bf6361dcabd8319811ac9090ace6052f79fdb task-5350130 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237560
This update prevents an error that could occur when creating product variants before their related product template is fully available. It helps make product creation more reliable and avoids interruptions for users managing product records.
Original PR description
If _compute_write_date is launched when creating a product.product without starting from an existing product.template, the compute may be launched before the product.template is created, hence record.product_tmpl_id.write_date is False, and comparing datetime and bool leads to an error. This completes the fix proposed https://github.com/odoo/odoo/pull/138177 I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237756 Forward-Port-Of: odoo/odoo#237523
This fixes an unreliable automated website menu test that occasionally failed even when the product was working correctly. The change makes the test steps more precise, reducing false failures and helping the team keep development checks stable.
Original PR description
The `test_17_website_edit_menus` test fails nondeterministically on runbot, with an observed failure rate of about 3% at the time of this commit. See [1]. The issue is related to the penultimate…
The `test_17_website_edit_menus` test fails nondeterministically on runbot, with an observed failure rate of about 3% at the time of this commit. See [1]. The issue is related to the penultimate `drag_and_drop`, which sometimes fails to drop the target element in the correct location. This happens because `drag_and_drop` is called with no extra options, thus the arguments "position" and "relative" default to "top" and "true". This default setting seems to lead to the element to be sometimes dropped to the wrong place. This commit explicitly sets the options for that call of `drag_and_drop`, removing the source of nondeterminism. The same fix is applied to a previous call to `drag_and_drop`, even if it does not seem to make the test fail. Additionally: 1. The fourth call to `clickOnExtraMenuItem` is moved after the wait for the sidebar to fully open. This is more reasonable because this button must be pressed after entering edit mode. 2. To maintain consistency along the tour, the unnecessary keywords "async" are removed from every call to `helpers.drag_and_drop`. 3. The text "nested_menu" is replaced with "new_nested_menu", which is the correct label of the menu entry. [1]: https://runbot.odoo.com/odoo/runbot.build.error/233372 Forward-Port-Of: odoo/odoo#238092
A small mobile layout issue was corrected so empty control panel button areas no longer leave extra space. This keeps navigation and action items aligned, improving the user experience on smaller screens.
Original PR description
On mobile when the `o-control-panel-adaptive-dropdown` doesn't have any `control-panel-buttons` to render in its slot, the `o_control_panel_main_buttons` is still rendered. This results in the `gap-1` being applied and visible before the `o_control_panel_breadcrumbs_actions` which misaligns it. This commit applies a `display: none` when the dropdown has only one child to not render the `o_control_panel_main_buttons` when it's not used. (Note the class `d-empty-none` can't account for `d-none` children). task-5357485 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237542
Human Resources records can now link employees to portal users, not only internal users. This helps organizations correctly associate employee profiles with the right user account while keeping internal users as the default search focus.
Original PR description
- Display all portal users in the user field. - Set the default filter in the search view to show internal users. - Change the placeholder text for the `user_id`. task-5176046 Forward-Port-Of: odoo/odoo#238195 Forward-Port-Of: odoo/odoo#237564
This fix updates CRM performance testing to account for stage checks that confirm a lead's stage matches its sales team. It helps keep nightly monitoring accurate and prevents false performance alerts for CRM operations.
Original PR description
**Issue:**
Query count increases as `lead.stage_id.team_ids` needs to be used to ensure the current `stage_id` is related to the current lead `team_id`.
```py
@api.depends('team_id', 'type')
def _compute_stage_id(self):
for lead in self:
if not lead.stage_id or (lead.team_id and lead.stage_id.team_ids and lead.team_id not in lead.stage_id.team_ids):
lead.stage_id = lead._stage_find(domain=[('fold', '=', False)]).id
```
related: https://github.com/odoo/odoo/commit/ce8fdbb1989703715663d334662a87d1900a28fe
Forward-Port-Of: odoo/odoo#237386This change fixes a rare timing issue in an internal test that could fail unpredictably even when the underlying product behavior was correct. It improves confidence in automated validation and helps reduce false alarms during development and release checks.
Original PR description
In some rare cases the late_request_thread could execute so fast without releasing the GIL that assertCanOpenTestCursor was executed before the main_lock.acquire(), causing the lock to be None. In…
In some rare cases the late_request_thread could execute so fast without releasing the GIL that assertCanOpenTestCursor was executed before the main_lock.acquire(), causing the lock to be None. In this case, acquiring the lock is pointless since the late_request_thread has already finished, defeating the purpose of this quire, but we can workaround this keeping a reference to the main_lock before starting the thread. This way, even if the late_request_thread is already finished, we can still acquire the lock even if it is already released. Normal flow: - main_thread acquires main_lock - main_thread span request_thread - main_thread tries to acquire main_lock and again and blocks - request_thread runs and releases main_lock - main_thread acquires main_lock and continues When it fails - main_thread acquires main_lock - main_thread span request_thread - request_thread runs and releases main_lock - main_thread tries to acquire main_lock witch is None and fails Fixed - main_thread acquires main_lock - main_thread span request_thread - request_thread runs and releases main_lock - main_thread tries to acquire main_lock but it is already released - main_thread acquires main_lock and continues Runbot error [229827](https://runbot.odoo.com/odoo/runbot.build.error/229827) Forward-Port-Of: odoo/odoo#237886
Fixed an issue that caused the Inventory Valuation report to crash when Odoo was used in Arabic. Dates are now sent in a standard format, allowing users to open the report reliably regardless of language settings.
Original PR description
Steps:
- Switch UI language to Arabic.
- Accounting ▸ Review ▸ Inventory Valuation.
Before this commit:
- Crash during RPC with: ValueError: time data '٢٠٢٥-١٠-٢١' does not match format '%Y-%m-%d' (from stock_account.stock.valuation.report._get_report_data)
Cause:
- The client sent the date string with Eastern Arabic digits. Python’s strptime('%Y-%m-%d') only accepts ASCII digits.
with this commit:
When building kwargs for `get_report_values`, serialize the date with `toISODate()` (ASCII `YYYY-MM-DD`).
Replace localized formatting (`toFormat('yyyy-MM-dd')` with `toISODate()` at the call site. This is locale-independent and avoids TZ side effects for pure dates. Keeps existing behavior for empty date (send `false`).
opw-5146684
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#232495The employee profile form now shows document-related fields in a new Documents section under the Personal tab. This makes important employee document information easier for HR teams to view and maintain without needing workarounds.
Original PR description
- These fields were not available in the employee form view. - create a new section named 'Documents' under the Personal Tab in employee form view - added the fields in the employee form view task-5366982 Forward-Port-Of: odoo/odoo#238119 Forward-Port-Of: odoo/odoo#237954
The mail composer’s plus button has been adjusted so it lines up cleanly with the other action icons. This small visual fix improves polish and consistency in the messaging interface without changing functionality.
Original PR description
Follow-up of https://github.com/odoo/odoo/pull/229025 PR above fixed an issue of misalignment of "+" button of composer. However this was still not exactly perfect: the button was still slightly misaligned. This comes from buttons having a border by default, and this border impact button by misaligning it by 1 px. We don't want border for these buttons, as these buttons are just icons. Quick actions of composer, i.e. buttons on right, already have border removed hence why they were properly aligned. This commit fixes the issue by setting no border to "+" button, similar to other composer buttons. Before <img width="515" height="65" alt="Screenshot 2025-12-02 at 15 20 46" src="https://github.com/user-attachments/assets/6d31f0b3-b515-4b9c-8e69-ef206b436bee" /> After <img width="513" height="63" alt="Screenshot 2025-12-02 at 15 20 39" src="https://github.com/user-attachments/assets/9bd4dc2c-8fe0-4ed7-ae6c-9f5533ec2c2c" />
The Website app now shows the correct custom favicon in the browser tab when a website is opened or switched. This prevents confusion for users managing multiple websites and keeps each site’s branding visible immediately.
Original PR description
When editing a website favicon in settings or switching between websites with different favicons, the browser tab always displayed the default Odoo favicon instead of the specific website's favicon.…
When editing a website favicon in settings or switching between websites with different favicons, the browser tab always displayed the default Odoo favicon instead of the specific website's favicon. the favicon were not immediately reflected due to browser caching. The browser is responsible for caching the favicon. When you load a page, the browser sees `<link rel="shortcut icon" href="...">`. If it has already downloaded the image at that URL, it will use the stored (cached) copy instead of asking the server for it again. This improves performance. but also it's responsible for the bug. Steps to reproduce: =================== 1. Set a custom favicon for your website in Settings. 2. Open the Website app. 3. Observe that the browser tab shows the default Odoo favicon instead of the custom one. Solution: ========= Retrieve the favicon URL directly from the iframe's document content (link[rel~='icon']) and update the main window's favicon opw-5126299 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237361
Fixes a visual issue where badges in the Mail sidebar could appear cropped in the community edition. Badges now keep their intended shape, improving readability and polish without changing functionality.
Original PR description
In community, the badges in the sidebar looked cropped. By replacing the fixed `min-width` value with the corresponding variable, the badges' shape is fixed. | Before | After | | ------------- | ------------- | | <img width="296" height="901" alt="Screenshot 2025-11-20 at 16 50 23" src="https://github.com/user-attachments/assets/5dba05a2-5a0e-4563-a555-de72e607abf6" /> | <img width="296" height="901" alt="Screenshot 2025-11-20 at 16 50 08" src="https://github.com/user-attachments/assets/28c49c5a-57e9-49cb-ba9d-c65e2f8976a0" /> | task-5223774 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#236740
This update addresses a minor technical issue that was causing a runbot error in our point-of-sale (POS) system. The fix involved adjusting test timing and simplifying the verification process to ensure order acceptance times are correctly recorded. This improves the reliability of the POS functionality.
Original PR description
in this commit: - Fixed the `_acceptOrder, _dispatchOrder, _completeOrder` test, which could fail due to minor timing delays. - Updated the assertion to only verify that `orderAcceptTime` is not empty. runbot-error-234594 Forward-Port-Of: odoo/enterprise#100942
This pull request addresses several bugs and inconsistencies within Odoo's product tour functionality. The changes improve the user experience by correcting display issues and ensuring tours function as intended across different Odoo modules. This resolves minor usability problems and enhances the overall reliability of product demonstrations.
This update resolves an issue where closing the '/article' dialog in the Knowledge editor caused the page to jump back to the top. The fix ensures the dialog's focus is properly managed during closing, eliminating this disruptive scroll behavior. This improves the user experience when editing long articles.
Original PR description
Problem: When editing a long Knowledge article and executing the `/article` command, closing the dialog automatically scrolls the page to the top. Cause: This happens because `useActiveElement` inside the `Dialog` component runs its cleanup function when the dialog unmounts. While unmounting, `document.activeElement` is `body`, so the cleanup tries to focus back the `oldActiveElement`, which is the `editable`, and this resets the selection and causes the scroll jump. Solution: Set the selection when closing the dialog, ensuring the `editable` remains the `document.activeElement` during cleanup, preventing the focus reset. Steps to reproduce: - Edit a long article further down the page. - Use the `/article` command. - Dismiss the dialog. → The page scrolls back to the top. opw-4797567 Forward-Port-Of: odoo/enterprise#100634
This update resolves an issue where the system would fail to print payslips for employees who didn't have a contract assigned. The fix ensures that a contract is required to generate a payslip, preventing errors and improving data accuracy. This change ensures consistent payslip generation.
Original PR description
An error occurs while printing a payslip for an employee who does not have a contract. Steps to reproduce the error: - Install the ``hr_payroll`` module - Create an employee without contract - Create a payslip for that employee > Compute Sheet > Print Traceback: ``` Error while rendering the template: TypeError: '<' not supported between instances of 'datetime.date' and 'bool' ``` https://github.com/odoo/enterprise/blob/368a81a277b2fa7c5eac7c63addd0d75ec89111b/hr_payroll/views/report_payslip_templates.xml#L70 Here, ``version_id.contract_date_start`` will be ``False`` when the employee does not have a contract, which leads to the above traceback. Solution: User can not print payslip without running contract. sentry-6922017511 Forward-Port-Of: odoo/enterprise#96374
This update resolves a technical problem identified during testing of the l10n_ch_hr_payroll module. Specifically, a freeze time error was corrected, ensuring the accuracy of payroll calculations within the Swiss tax system. This ensures the system is functioning correctly and generating accurate reports.
Original PR description
Forward-Port-Of: odoo/enterprise#100953
This update resolves an error that prevented users from accessing the Time Off overview in the Gantt view when an employee lacked a defined working schedule. The fix skips unnecessary calculations when a working schedule is missing, preventing the 'AttributeError' and ensuring the feature functions correctly for all employees. This improves the user experience and prevents data access issues.
Original PR description
Currently, an error occurs when an employee has no working schedule set and the user tries to open the Time Off overview in the Gantt view. **Steps to Reproduce:** 1. Install `hr_holidays_gantt` with demo data. 2. Remove the **Working Hours**(Payroll section) of **Marc Demo**. 3. Navigate to: Time off > Overview. **Error:** `AttributeError - 'bool' object has no attribute 'upper'` **Cause:** The error occurs because at [1], the contract does not have a `resource_calendar_id` (working schedule) assigned. As a result, it attempts to access attributes of a False value, causing the error. **Fix:** This commit skips the computation when the contract does not have a working schedule set. [1] - https://github.com/odoo/enterprise/blob/db049f42ad4c2c291b2d64a9e637cd2292c280e8/hr_holidays_gantt/models/hr_leave.py#L204 sentry-7017326141 Forward-Port-Of: odoo/enterprise#100730
This update resolves a technical issue within Odoo's Web Studio tool that prevented accurate field choices from being displayed. The fix ensures that the system correctly utilizes data, improving the reliability of the user interface when creating and editing forms. This change enhances the overall user experience within Web Studio.
Original PR description
In this commit, we fix the `getFieldChoices` method. This method takes `this.props.node.field`, whereas it can be called from `onWillUpdateProps`. All other methods take this into account except for `getFieldChoices()`. As a result, `this.props.node` could be outdated when needed. This commit fixes this error.
This update corrects a technical issue within the Odoo Enterprise reporting system. Previously, the way data was aggregated in reports didn't guarantee a consistent order, which could lead to inaccurate results. This change enforces order within the aggregation, ensuring reliable reporting data.
Original PR description
The array_agg does not enforce an order by default. It causes issues when we want to check the result. Let's enforce it now runbot-error-234281
This update resolves a performance issue related to a field in the Helpdesk module by switching to a new widget. The change ensures the field functions smoothly and efficiently, maintaining the quality of the Helpdesk experience for users. This is a technical fix to optimize performance.
Original PR description
This commit adapts the definition of the field using the `badge_rotting` widget since that widget no longer extend to SelectionBadge widget due to a perfomance issue. Forward-Port-Of: odoo/enterprise#99943
This update fixes a problem that prevented the Acerata payroll export file from generating correctly when the employee name was missing. The fix uses the display name field, which is always populated, and includes a new test suite to ensure the export process works reliably. This ensures accurate payroll reporting.
Original PR description
When generating the export file, a traceback occurred because the name field was empty. The logic has been updated to use the display_name field instead, ensuring the export runs correctly, as it is always set to a value. However, the display_name sometimes is just a date, so I depended on a customizable new lable to show the employee to this version. Additionally, a comprehensive test suite was added to validate Acereta code behavior, including: - validation of code length for employees, companies, and work entry types, - handling of codes across different companies, - and the complete Acereta export flow (from work entry creation and validation to export file generation). task-5153727 Forward-Port-Of: odoo/enterprise#100987 Forward-Port-Of: odoo/enterprise#96823
This update resolves a bug that prevented correct configuration of payroll within the Odoo Enterprise system. The fix involved adjusting how a specific field is used across modules to ensure compatibility and proper functionality. This change improves the reliability of HR payroll processes.
Original PR description
…act_salary A runbot build error was reported for one of my tests: https://runbot.odoo.com/odoo/runbot.build.error/233591 The issue was because the field `hide_in_offer` was used in a module where it did not exist. I have overridden the function to make it call the field when it was installed, and moved the logic using it to that inheriting function. task-5350522 Forward-Port-Of: odoo/enterprise#100986 Forward-Port-Of: odoo/enterprise#100190
This update corrects a bug in the ESIC payroll calculation. It now ensures that ESIC contributions are only applied to employees with gross salaries below 21,000 rupees, aligning with current regulations. This change improves payroll accuracy and compliance.
Original PR description
### Before this commit, ESIC amount is applied to all cases, which is wrong. ### After merge of this commit, It should apply to employees with gross salaries less than 21000 rupees. task-5038256 Forward-Port-Of: odoo/enterprise#99996
This update corrects a potential issue where delivery IoT reports weren't verifying the existence of associated IoT devices before printing. This change ensures that reports only generate when valid IoT device data is present, preventing errors and improving report reliability. It's a minor fix focused on data integrity.
Original PR description
As `delivery_iot.ir_action_report` is overriding `iot.ir_action_report` and bypassing the IoT device record existance check, we need to also check in delivery IoT. Forward-Port-Of: odoo/enterprise#100994
This update adds a section to the employee form to display relevant documents. Previously, important document fields were missing from this view. This enhancement improves employee record management and provides a more complete view of employee information.
Original PR description
- These fields were not available in the employee form view. - create a new section named 'Documents' under the Personal Tab in employee form view - added the fields in the employee form view task-5366982 Forward-Port-Of: odoo/enterprise#100956 Forward-Port-Of: odoo/enterprise#100869
This update resolves a crash that occurred when users attempted to validate signed documents. The issue stemmed from a missing field in the system after a related module was uninstalled. The fix adds a graceful bypass to handle the missing field, ensuring smooth signature validation.
Original PR description
The system will crash with an error when the user tries to validate the signature. **Steps to produce:** - Install `Sign, Employee Contracts, and Documents` apps with demo data. - Go to Apps and…
The system will crash with an error when the user tries to validate the signature.
**Steps to produce:**
- Install `Sign, Employee Contracts, and Documents` apps with demo data.
- Go to Apps and uninstall the `hr_contract_sign`module.
- Send any employee a sign request for a document.
- When the employee tries to validate and send the document, the error appears.
**Error:**
`KeyError: 'sign_request_ids'
ValueError: Invalid field hr.employee.sign_request_ids in condition ('sign_request_ids', 'in', [1])`
**Cause:**
- When `sign` route is called, then we try to search field `sign_request_ids` in `hr_employee`. but we can see the field `sign_request_ids` is defined in `hr_contract_sign` module.
- And user removed the `hr_contract_sign` module, so the field no longer exists. in the hr_employee model.
**Solution:**
- Added a graceful bypass when `sign_request_ids` is missing,
**sentry-6819182542**
Forward-Port-Of: odoo/enterprise#100796
Forward-Port-Of: odoo/enterprise#95449This update resolves a technical problem preventing users from accessing sales commission achievement reports. Previously, the system couldn't reliably determine if the necessary temporary database view was available, leading to errors. Now, the system checks both the existence and availability of the view, ensuring consistent report access.
Original PR description
In the commission module, the achievements are computed with a temporary SQL view. These view have limited visibility inside a SQL session. Before this commit, we checked the existence of a temporary view with the following SQL request: SELECT viewname FROM pg_catalog.pg_views WHERE viewname='sale_commission_achievement_report_view' This simple query would return the existence of the view but not its availability in the current session. As a result, when the user tried to access the report values, SELECT * FROM sale_commission_achievement_report_view would result in an error as the temporary view would not be available in all the running sessions. Only the one which created the temporary view would be able to access the data. After this commit, the existence and the availability of the view is checked to make sure that it is possible to fetch the results in the current session. task-5378382 Forward-Port-Of: odoo/enterprise#101070
This update fixes a technical issue that prevented the 'fuel_type' selection field in the HR contract model from being properly translated. By directly using the variable for options, this change ensures all available fuel types can be localized, improving the user experience for Belgian users.
Original PR description
The selection field `fuel_type` in the `hr.contract` model was not properly translatable, because it used a function yielding static strings for the options. This commit changes the field to use the variable directly, allowing them to be translated. Forward-Port-Of: odoo/enterprise#101046 Forward-Port-Of: odoo/enterprise#100748