Monday, August 25, 2025
64 changes
22 changes
Resolved issues and error corrections
The Unsplash image picker now handles duplicate images returned in the same search results. This prevents users from seeing an error when searching for images, such as with the term "Inventory", and keeps the media selection flow working smoothly.
Original PR description
This commit fixes an OwlError when we try to render the images received from Unsplash after a search. The issue is that Unsplash can send duplicate images in the same batch of images. When we render those in a `t-foreach` and use the image `id`s as the keys, we get a duplicate key error. This is fixed by expanding on the previous filtering code, which ignored duplicates over multiple batches. We now ignore duplicates within batches as well. At the time of writing, Unsplash is sending us duplicate images on a search for "Inventory". opw-5027032 Forward-Port-Of: odoo/odoo#223789
The time off wizard now opens bulk employee time off and allocation actions in the right navigation context. This prevents confusing breadcrumbs or URLs that made the action look tied to a single leave request.
Original PR description
Task ID: 5004005 **Description of the issue this PR addresses:** When generating time off or allocations for multiple employees using the wizard, the resulting breadcrumb and navigation incorrectly inherit the active_id from the parent view (a specific leave request) appearing as a child of a specific leave record in the breadcrumb and URL. Forward-Port-Of: odoo/odoo#222764
Lead enrichment now stops retrying when a lead has no valid email after the first attempt. This prevents repeated error loops and reduces unnecessary processing for CRM teams.
Original PR description
If a lead has no valid email, try to enrich it only once This will avoid infinite loop of errors of "Enrichment could not be done because…" Forward-Port-Of: odoo/odoo#223967 Forward-Port-Of: odoo/odoo#223874
Approved and partially approved time off entries opened from the calendar now keep the Employee field read-only. This prevents accidental changes to the employee linked to an already validated request and keeps the calendar dialog consistent with the main form.
Original PR description
Issue: - In Management > Time Off > Calendar View clicking on an approved or partially approved time off opens a dialog where the Employee field is currently editable even if it's read-only on the form view Fix: - The employee_id field has been set to read-only, same as the form view. task- 4862383 Forward-Port-Of: odoo/odoo#214332
The website editor now shows only the relevant color options when choosing dot and line colors for timeline image sections. This removes confusing choices and makes it easier for users to style timelines consistently.
Original PR description
The goal of this commit is to display only the ‘solid’ and ‘custom’ tabs for the color pickers used to choose the color of the dots and dot lines for the timelineImages snippet. 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
This update prevents Point of Sale loyalty barcode activation from failing when a customer record has not been loaded yet. It also makes sales testing more reliable by avoiding duplicate customer names that could cause the wrong customer to be selected.
Original PR description
In PoS loyalty when activating a barcode we were not checking if the partner was already loaded in the PoS resulting of an undefined var. Now we check if the partner is loaded before trying to access it. In PoS sale tour, we were creating a partner called "Test Partner" which was already created in the setup, so sometime the tour was selecting the wrong one. Now, the name of this partner is changed to "AAA - Test Partner invoice" Runbot error: 230992, 230995 https://runbot.odoo.com/odoo/runbot.build.error/230992 https://runbot.odoo.com/odoo/runbot.build.error/230995 Forward-Port-Of: odoo/odoo#223785 Forward-Port-Of: odoo/odoo#223618
Default self-order kiosk images and backgrounds no longer appear as suggestions in the website image picker. This keeps the website editor cleaner while still allowing user-uploaded kiosk images to be reused on website pages.
Original PR description
Commit [1] forced kiosk image and background attachments to be public, therefore making them displayed in the website media dialog in edit mode, as a suggestion. Steps to reproduce: 1. Install…
Commit [1] forced kiosk image and background attachments to be public, therefore making them displayed in the website media dialog in edit mode, as a suggestion. Steps to reproduce: 1. Install website and pos_self_order 2. Go to the website, edit a page, add a block with an image 3. Double-click on the image => the media dialog is empty 4. Save, go to "Point of Sale" 5. Create a "bar", configure it to be a self-order kiosk, add products with the right categories, etc. 6. Go back to the website, edit the page, double-click on an image => the media dialog now shows the kiosk images and background images This commit solves the issue by making it so that the *default* ones are not displayed in the website media dialog. To do that, while keeping them public, we use "url" type attachment pointing to Odoo static files, which are excluded from the website media dialog because that's the way default snippet images for the website are defined too. For user-chosen kiosk images, we keep the behavior of suggesting them in the website media dialog. After all, they are user-chosen public images, it make sense for the user to potentially use them in their website. At least, with this commit, the website media dialog is less polluted while demoing on runbot. [1]: https://github.com/odoo/odoo/commit/b12c49bffafaf81e59ec97a3a51d1b4e05726142
This fixes the placement of action buttons on log notes written by the current user. The buttons now appear consistently next to the date, making message threads easier to read and use.
Original PR description
**Purpose of this PR:** Fix the position of message actions on log notes authored by the current user. Messages authored by self appear on the right side of the thread. This PR mirrors the action placement logic so that, like messages from others (which show actions to the right of the date), self-authored messages show actions to the left of the date. Before: <img width="392" height="638" alt="image" src="https://github.com/user-attachments/assets/8b66c98f-3e00-47c8-abf3-ee62169ed499" /> After: <img width="392" height="638" alt="image" src="https://github.com/user-attachments/assets/d1a425da-fb0c-4793-a080-735286bc2bb9" /> task-[4689357](https://www.odoo.com/odoo/project/1519/tasks/4689357) Forward-Port-Of: odoo/odoo#223788 Forward-Port-Of: odoo/odoo#216520
Uploading GIF images in the website or HTML editor no longer causes an error when image size details cannot be calculated. Instead of showing invalid size information, the interface now hides unavailable size details, making image uploads smoother for users.
Original PR description
When uploading a gif image file, no transformation occurs and therefore no data URL is being generated. Because of this, trying to compute the size from the data URL fails. This commit avoids computing the size from non transformed images, and hides the size info when it is unavailable. (vs "NaN kb") task-4367641
The website builder’s automated checks have been updated to match recent page structure changes, allowing a previously disabled scrollbar-related test to run again. This helps maintain confidence that popup and scrolling behavior in website snippets continues to work as expected, while a separate animation issue remains pending.
Original PR description
This PR aligns tour steps with new DOM structure and re-enable related tests. The `snippet_popup_and_scrollbar` tour was broken due to changes in DOM structure from the new website builder. This tour disabled. Split `test_snippet_popup_with_scrollbar_and_animations` into two separate tours: `snippet_popup_and_scrollbar` and snippet_popup_and_animation`. Note that animation behavior remains unfixed as `On Hover` option is missing.
Fixes a website header styling issue where certain active link styles made the sign in button appear larger than intended. This keeps the header layout consistent and avoids a visual glitch for visitors who are not logged in.
Original PR description
Before this commit, using the "outline" or "border bottom" options for the Link Style (active page link in the header) would make the sign in button bigger. This was due to the fact the selector was not precise enough and would also include the button. This commit improves the selector to avoid impacting the sign in button. Steps to reproduce: - Go to Edit mode - Click on the header - Set the Navbar > Links Style option to "Border Bottom" - Save - Log Out Forward-Port-Of: odoo/odoo#223441
The sales order availability indicator is now hidden when a remaining delivery/backorder has been canceled. This avoids showing a red “No future availability” warning when the customer or user has intentionally decided not to deliver the remaining quantity, reducing confusion for sales teams.
Original PR description
Issue ----- The availability widget states "No future availability" when the backorder of a product has been cancelled, despite the product being available in stock. Steps to reproduce ----- - Create…
Issue ----- The availability widget states "No future availability" when the backorder of a product has been cancelled, despite the product being available in stock. Steps to reproduce ----- - Create a stored product with some on hand quantity - Create a SO for the product - Register a partial delivery (or set the move quantity to 0) - Cancel the backorder - Go back to the SO --> The widget is red and states that there is "No future availability". While the logic is sound, this is confusing the user because they have some qty in stock. Solution ----- The user has manually decided not to deliver the (full qty of) product. There is aready some logic to set the `display_qty_widget` field to False when the user deletes the move from the the picking. https://github.com/odoo/odoo/blob/693e1ef2f934f58209a78787404d5c76be550af4/addons/sale_stock/models/sale_order_line.py#L61 Since the user specified that there is nothing left to deliver, we can extend the condition to include our use case. To do so, we can simply check the existence of a move that is not in a 'done' or 'cancel' state. This will make the widget invisible because it is conditionally invisible. https://github.com/odoo/odoo/blob/693e1ef2f934f58209a78787404d5c76be550af4/addons/sale_stock/static/src/widgets/qty_at_date_widget.xml#L7 ----- Ticket: opw-4942277 Forward-Port-Of: odoo/odoo#220796
Editing the Contact Us page could fail in Italian when the form question block contained duplicate translated labels. The update uses a unique internal identifier so the website editor opens reliably for affected pages.
Original PR description
**Steps to reproduce:** -Install the Website module. -Change the language to Italian. -Enable debug mode. -Go to the website. -Navigate to Website → Contact Us page -Click to Edit -Try to edit the Question block. **Issue:** A traceback occurs with the error: Uncaught Promise > Got duplicate key in t-foreach: Contatto **Cause:** https://github.com/odoo/odoo/blob/d69402a13914428fe6e05cc772157f0eec2c5627/addons/website/static/src/builder/plugins/form/form_option.xml#L7-L11 The t-foreach loop was using model.name as the key, which can result in duplicates (e.g., multiple records with the name 'Contatto'), causing the editor to fail. **Solution:** Use model.id as the t-foreach key instead, ensuring uniqueness for all records. **opw**- 4972693
This fix prevents an error screen when users cancel an import from areas like Contacts or Products. Instead of attempting to continue with missing record information, Odoo now returns users to the previous screen as expected.
Original PR description
To reproduce: ============== 1. Go to any import screen in Odoo (e.g., Contacts, Products). 2. Click on *Cancel*. → Traceback occurs. Problem: ======== In the old behavior clicking on cancel will call historyBack function which will call restore. https://github.com/odoo/odoo/blob/93451453deff4b316cb1865055d1817f8290f8ef/addons/web/static/src/webclient/actions/action_service.js#L1668 and now in this version. this PR changed the way the exit works. https://github.com/odoo/odoo/pull/211187 So when you click on `Cancel` it will call doAction with resIds undefined instead of calling restore. Solution: ========== In case the resIds is undefined we can proceed with the old behavior which is calling the historyBack function. opw-5015226 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Installing the Belgium Accounting localization now continues successfully even if a referenced demo account tag was previously deleted. This prevents setup failures in demo or test environments and makes the installation process more reliable.
Original PR description
Currently, installing the Belgium Accounting localization fails with an error, if the user has deleted referenced demo account tags. **Steps to reproduce:** - Install the Accounting app. - Delete the "Demo Capital Account" account tag. - Install the Belgium Accounting localization (`l10n_be`). **Error:** `ValueError - External ID not found in the system: account.demo_capital_account` At [1], if the `account.demo_capital_account` is not found, it raises an error if the external ID is missing. This commit prevents the error by explicitly passing `raise_if_not_found=False` and skipping the tag if not found. [1] - https://github.com/odoo/odoo/blob/71d1c9a4bef1c29485e3b0390713a9301ad6db4f/addons/l10n_be/demo/account_demo.py#L13-L19 sentry-6776341713 Forward-Port-Of: odoo/odoo#221227
This fixes the help link in Timesheets settings so it opens the correct documentation page after a recent documentation structure change. Users clicking the info icon for Time Off settings will no longer be sent to a missing or outdated page.
Original PR description
**Description:** - In a recent documentation commit, the overview section was removed from the timesheets path. commit: odoo/documentation@3bceee836fa8b8edfd8a35c20b21867354f6c078 **Steps to reproduce:** - In a `v18` runbot - open settings > Timesheets settings > under Time off - click on the info icon <img width="1905" height="944" alt="2025-08-21_18-25" src="https://github.com/user-attachments/assets/34ec76ed-46f7-4b08-8c23-10269e105b43" /> --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#223711
Fixed an error that prevented users from printing the yearly salary report in Indian Payroll after payslips were paid. The report now uses the correct translated payroll structure name, avoiding the crash and allowing payroll teams to access annual salary details as expected.
Original PR description
Steps to Reproduce:
- Install Indian Payroll Localization
- create a payslip of any employee and mark as paid
- try to print yearly salary report from reporting menu
Issue:
- A traceback error occurs when printing the yearly salary report.
Reason:
- the sturcture name is translatable field, which gives the value in a dict with the key as languages like {'en_US': 'India: Regular Pay'}.
- The error occurs because the code attempts to use this dictionary with setdefault, which expects a string.
Solution:
- Get the structure name corresponding to the appropriate language from the dictionary before passing it to setdefault.
task-5002518
Forward-Port-Of: odoo/enterprise#91901Bank statement creation no longer fails when a bank journal has no outstanding receipt or payment account configured. This prevents an unexpected error and lets accounting users continue creating statements in this valid setup.
Original PR description
**Steps to reproduce:** - Install Accounting - Make sure that no outstanding receipt/payment account is configured on the Bank journal - Go to the Bank journal - Create a new statement **Issue:** A traceback is raised while executing a SQL query. **Cause:** A IN condition is evaluated with an empty tuple: `AND aml.account_id IN ()` This is due to the fact that there is no outstanding account. **Solution:** Only execute the SQL query if there is an outstanding account. opw-5039931 Forward-Port-Of: odoo/enterprise#93091
Belgian payroll users now see a clear message when trying to change an employee working schedule without a contract start date. This prevents an unexpected system error and helps users correct the missing employee information before continuing.
Original PR description
Prevent the apparition of a traceback when changing the schedule through the wizard
Payroll configuration screens now show Python code correctly for salary rules and rule parameters. This helps payroll administrators review and maintain calculation logic more reliably, reducing confusion when checking pay rule settings.
Original PR description
Forward-Port-Of: odoo/enterprise#92960 Forward-Port-Of: odoo/enterprise#91811
Helpdesk ticket portal pages no longer show an unrelated “Timesheets” breadcrumb just because the ticket contains timesheet entries. This keeps customer-facing navigation clearer and avoids confusion when viewing tickets online.
Original PR description
**Steps to reproduce:** 1. Install 'Helpdesk Sale Timesheet' and 'Website' modules. 2. Create a helpdesk ticket and add timesheets to it. 3. Go to the portal view of helpdesk tickets. **Issue:** If the ticket contains timesheets, the "Timesheets" breadcrumb appears in the portal ticket view. **Cause:** The reason the timesheet variable is used in the hr_timesheet portal template is because it makes the condition evaluate to true, which is why the breadcrumb for Timesheets is displayed. **Fix:** Renamed the loop variable in `t-foreach` to avoid shadowing the `timesheet` variable from the outer context. task-4744294 Forward-Port-Of: odoo/enterprise#85411
Manufacturing users can now search for employees to assign without hitting errors caused by records from companies they cannot access. The employee selection is limited to companies available to the current user, making work order assignment more reliable in multi-company setups.
Original PR description
Task ID: 5005753 Prev behavior: when searching for employees to assign (employee_assigned_ids) from the manufacturing page and using "Search More", it was raising an error bc it was fetching data even from employees part of companies he's not part of New behavior: added domain over employee_assigned_ids such that the accessed users are only the ones being part of a company the current user can access
16 changes
Resolved issues and error corrections
The Unsplash image picker now handles cases where Unsplash returns the same image more than once in a search result. This prevents users from seeing a crash when browsing image search results, such as searches for “Inventory”.
Original PR description
This commit fixes an OwlError when we try to render the images received from Unsplash after a search. The issue is that Unsplash can send duplicate images in the same batch of images. When we render those in a `t-foreach` and use the image `id`s as the keys, we get a duplicate key error. This is fixed by expanding on the previous filtering code, which ignored duplicates over multiple batches. We now ignore duplicates within batches as well. At the time of writing, Unsplash is sending us duplicate images on a search for "Inventory". opw-5027032 Forward-Port-Of: odoo/odoo#223789
12 changes
Resolved issues and error corrections
Helpdesk portal tickets with logged timesheets no longer show an unrelated Timesheets breadcrumb. This keeps navigation clearer for customers viewing their support tickets online.
Original PR description
**Steps to reproduce:** 1. Install 'Helpdesk Sale Timesheet' and 'Website' modules. 2. Create a helpdesk ticket and add timesheets to it. 3. Go to the portal view of helpdesk tickets. **Issue:** If the ticket contains timesheets, the "Timesheets" breadcrumb appears in the portal ticket view. **Cause:** The reason the timesheet variable is used in the hr_timesheet portal template is because it makes the condition evaluate to true, which is why the breadcrumb for Timesheets is displayed. **Fix:** Renamed the loop variable in `t-foreach` to avoid shadowing the `timesheet` variable from the outer context. task-4744294 Forward-Port-Of: odoo/enterprise#85411
14 changes
Resolved issues and error corrections
The Employee app resume section now keeps the skills table within its intended area, even when a resume entry contains a very wide table. This prevents resume content and action buttons like Add and Delete from being hidden, making employee profile editing more reliable.
Original PR description
Steps to reproduce:
1- Go on employee app
2- Click on resume section
3- Click on Add on resume tab
4- Put on description a big table with at least 20 columns
5- Save
The resume table and the buttons "add", "delete" with be hidden by the skill table.
Reason:
The skill table element is too wide
Solution:
The skill table's width is fixed and is contained in resume section element
task-4881917
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 fix prevents the multi-employee time off and allocation wizard from carrying over navigation details from an unrelated leave request. Users will now see clearer breadcrumbs and URLs when generating time off or allocations for multiple employees.
Original PR description
Task ID: 5004005 **Description of the issue this PR addresses:** When generating time off or allocations for multiple employees using the wizard, the resulting breadcrumb and navigation incorrectly inherit the active_id from the parent view (a specific leave request) appearing as a child of a specific leave record in the breadcrumb and URL. Forward-Port-Of: odoo/odoo#222764
Product pages no longer show a delivery truck or delivery status when the only available option is in-store pickup. This avoids confusing shoppers by only showing delivery information when home delivery is actually supported.
Original PR description
Versions -------- - saas-18.3+ Steps ----- 1. Disable all delivery methods except for "Pick up in store"; 2. go to a product page. Issue ----- A delivery truck is shown with its delivery status, even though delivery is not supported. Cause ----- The `delivery_stock_data` info looks for all published "delivery" carriers, including `in_store` types, which is already covered by `in_store_stock_data`. Solution -------- - Exclude `in_store` delivery types when looking for delivery carriers. - If the `deliveryStockData` object is empty, don't render the truck. opw-5010081
This fixes a Point of Sale startup error that could occur when the default sales preset required a customer to be selected. Stores using this setup can now open POS sessions normally, reducing disruption at checkout.
Original PR description
Before this commit, if the POS default preset required a partner, an error would occur during initialization. opw-5023987 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix adjusts where action buttons appear on log notes written by the current user. It makes the message layout more consistent and easier to use by placing actions on the correct side of the timestamp.
Original PR description
**Purpose of this PR:** Fix the position of message actions on log notes authored by the current user. Messages authored by self appear on the right side of the thread. This PR mirrors the action placement logic so that, like messages from others (which show actions to the right of the date), self-authored messages show actions to the left of the date. Before: <img width="392" height="638" alt="image" src="https://github.com/user-attachments/assets/8b66c98f-3e00-47c8-abf3-ee62169ed499" /> After: <img width="392" height="638" alt="image" src="https://github.com/user-attachments/assets/d1a425da-fb0c-4793-a080-735286bc2bb9" /> task-[4689357](https://www.odoo.com/odoo/project/1519/tasks/4689357) Forward-Port-Of: odoo/odoo#223788 Forward-Port-Of: odoo/odoo#216520
Leads without a valid email will now only be sent for enrichment once. This prevents repeated failed attempts and avoids ongoing error loops, keeping CRM enrichment activity cleaner and more reliable.
Original PR description
If a lead has no valid email, try to enrich it only once This will avoid infinite loop of errors of "Enrichment could not be done because…" Forward-Port-Of: odoo/odoo#223874
This fixes how order dates are sent for online payments in Point of Sale so they use the expected UTC time. It helps prevent incorrect order timestamps caused by local time zone conversion.
Original PR description
In 2a5f1abf2e98ee09fa7a912b87d71879b5ff260b, we formatted the `order_date` with `toFormat(...)`, however, that transforms the date into local, while the backend expects it to be in UTC. In this commit, we set the date tz back to UTC before formatting it. opw-4942697
Fixed a website header display issue where certain navigation link styles made the sign-in button appear larger than intended. This keeps the header layout consistent after editing link style options, improving the visual polish for visitors and users.
Original PR description
Before this commit, using the "outline" or "border bottom" options for the Link Style (active page link in the header) would make the sign in button bigger. This was due to the fact the selector was not precise enough and would also include the button. This commit improves the selector to avoid impacting the sign in button. Steps to reproduce: - Go to Edit mode - Click on the header - Set the Navbar > Links Style option to "Border Bottom" - Save - Log Out Forward-Port-Of: odoo/odoo#223441
Installing the Belgium Accounting localization no longer fails when a referenced demo account tag was previously deleted. This makes setup more reliable for demo or test environments where sample accounting data may have been changed.
Original PR description
Currently, installing the Belgium Accounting localization fails with an error, if the user has deleted referenced demo account tags. **Steps to reproduce:** - Install the Accounting app. - Delete the "Demo Capital Account" account tag. - Install the Belgium Accounting localization (`l10n_be`). **Error:** `ValueError - External ID not found in the system: account.demo_capital_account` At [1], if the `account.demo_capital_account` is not found, it raises an error if the external ID is missing. This commit prevents the error by explicitly passing `raise_if_not_found=False` and skipping the tag if not found. [1] - https://github.com/odoo/odoo/blob/71d1c9a4bef1c29485e3b0390713a9301ad6db4f/addons/l10n_be/demo/account_demo.py#L13-L19 sentry-6776341713 Forward-Port-Of: odoo/odoo#221227
This update corrects the help link in Timesheets settings after the related documentation page was moved. Users clicking the information icon for time off settings will now be taken to the right documentation instead of a broken or outdated page.
Original PR description
**Description:** - In a recent documentation commit, the overview section was removed from the timesheets path. commit: odoo/documentation@3bceee836fa8b8edfd8a35c20b21867354f6c078 **Steps to reproduce:** - In a `v18` runbot - open settings > Timesheets settings > under Time off - click on the info icon <img width="1905" height="944" alt="2025-08-21_18-25" src="https://github.com/user-attachments/assets/34ec76ed-46f7-4b08-8c23-10269e105b43" /> --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#223711
Creating a bank statement now works even when the Bank journal has no outstanding receipt or payment account configured. This prevents an error screen and lets accounting users continue their workflow in setups where those accounts are intentionally left blank.
Original PR description
**Steps to reproduce:** - Install Accounting - Make sure that no outstanding receipt/payment account is configured on the Bank journal - Go to the Bank journal - Create a new statement **Issue:** A traceback is raised while executing a SQL query. **Cause:** A IN condition is evaluated with an empty tuple: `AND aml.account_id IN ()` This is due to the fact that there is no outstanding account. **Solution:** Only execute the SQL query if there is an outstanding account. opw-5039931
Planning calendar invites can now be exported even when a shift has no assigned employee. The system uses a safe default timezone instead of failing, reducing interruptions when publishing or sharing open shifts.
Original PR description
Currently, an error occurs when a user tries to export a calendar invite (ICS) for a planning shift that has no assigned resource. **Steps to reproduce:** - Install the `planning` module. - Go to `Planning > New`, and click `Publish & Send`. - Enable developer mode and go to `Settings > Technical > Email > Emails`. - Open the latest email record and click `iCal/Outlook`. **Error:** `AttributeError: 'bool' object has no attribute 'upper'` **Root Cause:** At [1], when no employee is assigned to the shift, `slot.employee_id` is `empty`, so `slot.employee_id.tz` is `False`, which leads to an error. This commit ensures a valid timezone is always used by selecting the current user's timezone or 'UTC' when the shift has no assigned employee. [1] https://github.com/odoo/enterprise/blob/13ce65b8ca61f9a825f2876e2727cddfae83f894/planning/controllers/main.py#L355 sentry-6781639319 Forward-Port-Of: odoo/enterprise#91889
Purchase bills matched by their IRN number no longer trigger an error during processing. This improves reliability for Indian GST reporting workflows by ensuring bill matching can complete successfully.
Original PR description
Before this IR: - When a purchase document was matched using the IRN number, the variable `matching_keys` was not defined. - This led to an `UnboundLocalError` during bill matching. After this PR: - `matching_keys` is now set together with the IRN number. - This ensures `matching_keys` is always available and prevents runtime errors when IRN matches bills. opw-5037128
The Indian Payroll yearly salary report now handles translated salary structure names correctly. This prevents an error when users print the report after creating and paying payslips, helping payroll teams access annual salary details reliably.
Original PR description
Steps to Reproduce:
- Install Indian Payroll Localization
- create a payslip of any employee and mark as paid
- try to print yearly salary report from reporting menu
Issue:
- A traceback error occurs when printing the yearly salary report.
Reason:
- the sturcture name is translatable field, which gives the value in a dict with the key as languages like {'en_US': 'India: Regular Pay'}.
- The error occurs because the code attempts to use this dictionary with setdefault, which expects a string.
Solution:
- Get the structure name corresponding to the appropriate language from the dictionary before passing it to setdefault.
task-5002518Payroll configuration screens now show Python code correctly for salary rules and rule parameters. This helps payroll administrators review and maintain calculation logic more reliably, reducing confusion when checking payroll setup.
Original PR description
Forward-Port-Of: odoo/enterprise#92960 Forward-Port-Of: odoo/enterprise#91811
Helpdesk ticket portal pages no longer show an unrelated Timesheets breadcrumb when a ticket includes logged time. This keeps customer navigation clearer and avoids confusion when viewing support tickets online.
Original PR description
**Steps to reproduce:** 1. Install 'Helpdesk Sale Timesheet' and 'Website' modules. 2. Create a helpdesk ticket and add timesheets to it. 3. Go to the portal view of helpdesk tickets. **Issue:** If the ticket contains timesheets, the "Timesheets" breadcrumb appears in the portal ticket view. **Cause:** The reason the timesheet variable is used in the hr_timesheet portal template is because it makes the condition evaluate to true, which is why the breadcrumb for Timesheets is displayed. **Fix:** Renamed the loop variable in `t-foreach` to avoid shadowing the `timesheet` variable from the outer context. task-4744294 Forward-Port-Of: odoo/enterprise#85411
The automated setup check for field service reports has been adjusted to follow the correct page flow more reliably. This helps prevent false test failures and supports smoother quality assurance for future updates.
Original PR description
In this commit, we fix tour by splitting
{
isActive: ["auto"],
trigger: 'body:not(.modal-open) nav.o_main_navbar, button[name="action_generate_new_template"]',
run: "click",
},
in two distinct steps
For this, we use isActive key of a step that allow to activate the step with conditions.
We take advantages of this commit to add expectUnloadPage where it is required.
Forward-Port-Of: odoo/enterprise#92834Payroll administrators will now see Python code displayed correctly when working with salary rules and rule parameters. This reduces confusion and helps users review or maintain payroll configurations more reliably.
Original PR description
Forward-Port-Of: odoo/enterprise#92960 Forward-Port-Of: odoo/enterprise#91811
A missing setup entry has been added so the payroll correction wizard is properly loaded. This ensures users can access the intended correction screens in payroll without manual workarounds.
Original PR description
- wizard views file was missing from the manifest file Task: 4731029
This update corrects display issues in stock valuation settings and makes Peru stock report lines appear in a consistent order. It helps users avoid confusing configuration screens and prevents inconsistent report results when records share the same date.
The Journal Audit report PDF export now works when users filter by receivable or payable account types. This prevents an error that blocked exporting the report, helping accounting users retrieve audit documents reliably.
Original PR description
- In the Journal Audit report options, set the Account Type (filter_account_type) to either receivable, payable, or both. - Attempt to export the PDF of the Journal Audit report. A traceback occurs because, in _generate_document_data_for_export, we attempt to add a join using an alias. However, if the filter_account_type option is enabled, there is already a left join in the query with the same alias: account_move_line__account_id. opw-4926547 Forward-Port-Of: odoo/enterprise#92240 Forward-Port-Of: odoo/enterprise#91683
This fixes an issue where Sendcloud delivery filters could fail when reading a shipping option identifier. Users should see more reliable Sendcloud delivery handling without invalid index errors interrupting the workflow.
Original PR description
Before this commit: `sendcloud_shipping_id` is of type `Object`. Trying to index the field was causing `invalid index error`. After this commit: Value is accessed correctly with the key `id`. opw-5011642 Forward-Port-Of: odoo/enterprise#92859
WhatsApp composer actions are now disabled when a conversation is inactive, preventing users from attempting actions that should not be available. This keeps the messaging experience consistent after recent changes to discussion actions.
Original PR description
Before this commit, whatsapp composer actions were enabled when the whatsapp conversation is inactive. This shouldn't be the case, and happened from the recent technical changes around discuss actions that affected composer actions. `showQuickAction` no longer exists in template. Commit puts the semantically equivalent code in composer action definition.
This update corrects internal point-of-sale calls after a recent technical change, helping restaurant and UrbanPiper delivery workflows continue to behave as expected. It also updates related automated tests to match the corrected behavior, reducing the risk of checkout or ticket screen issues.
Original PR description
In a previous commit, some method signatures were changed to use an options object instead of multiple parameters. This commit updates the affected method calls to use the new options object format. Forward-Port-Of: odoo/enterprise#92696 Forward-Port-Of: odoo/enterprise#92091
When an applicant is hired through the salary configurator, their recorded skills are now transferred to the employee profile. This prevents HR teams from losing useful candidate information during onboarding and avoids manual re-entry.
Original PR description
Originally, an applicant, who became an employee through the salary configurator flow, loses his skill info. So, the migration of applicant information, through the salary configurator flow, to employee view has been adjusted. Forward-Port-Of: odoo/enterprise#92591 Forward-Port-Of: odoo/enterprise#87076
Adds test coverage for a crash that occurred when users tried to Freeze and Share a spreadsheet containing an Odoo List from Documents. This helps ensure the sharing workflow remains reliable after the related fix in the community codebase.
Original PR description
Steps to reproduce: - Install documents_spreadsheet (enterprise) - Create a spreadsheet with an Odoo List - Open the document view - Select the spreadsheet - Click on "Freeze and Share" => Boom This commit contains only the test, the fix is done in the community PR. Task: 5025331 Forward-Port-Of: odoo/enterprise#92627
The Indian Payroll EPF report export now uses the correct date format when finding payslips. This prevents an error when users export the EPF report to XLSX after processing paid payslips.
Original PR description
Steps to Reproduce: - Install Indian Payroll Localization - enable the Provident Fund of the employee in Payroll tab of employee form view - Create a payslip of the employee and mark as paid - Try to export XLSX file of EPF report from the reporting menu Issue: - A traceback error occurs when click on 'Export XLSX File' report. Reason: - The domain used to search payslips uses an incorrect date format. Solution: - Use the correct date format for the search. task-5002518 Forward-Port-Of: odoo/enterprise#91920
This fix prevents errors when creating, updating, or validating work entries for employees with fully flexible schedules. It helps HR teams process these entries reliably when no fixed working calendar is assigned.
Original PR description
When we validate/write/create a work entry for an employee with a fully flexible working schedule, we can encounter a traceback when trying to call `_attendance_intervals_batch` on a non-existing calendar. To rectify this issue, we continue in the loop when no calendar is set. opw-4979974 opw-4968312
The Job Position form now shows eligible recruiters and interviewers even when no company is selected. This prevents hiring teams from seeing empty selection lists and makes recruitment setup smoother in multi-company environments.
Original PR description
In the Job Position form, the 'Recruiter' and 'Interviewers' fields were empty when no company was selected. This was due to the static domain using 'company_id' directly without taking into consideration that company_id can be False. This fix introduces computed domain fields (, ) that dynamically adapt based on the selected company. If a company is set, users belonging to that company are shown. If not, only internal users are listed regardless their companies. Related task: 4926154. 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#217884
This fixes an error that could appear after merging contacts and then selecting multiple contact records. Peppol-related contact information is now calculated separately for each contact, keeping contact management workflows from being interrupted.
Original PR description
**Steps to Reproduce:** 1. Install `account_peppol` and `contacts`. 2. Open the Contacts app (list view). 3. Select any two contacts and click on "Merge" from the "Actions" menu. 4. Open any of the merged contacts in form view. 5. Close the form view and click on "Add a line". 6. Select multiple records. **Error:** ValueError - Expected singleton: res.partner(11, 9) **Cause:** The method `_compute_available_peppol_eas` accesses `self.available_peppol_eas` directly. When multiple `res.partner` records were involved, it will raised a singleton error. **Fix:** Loop over each partner to compute `available_peppol_eas` for each. This prevents the singleton error when multiple records are processed. sentry-6807787390
The Italian localization now uses the updated €100 threshold for the VP7 line in VAT tax reports, replacing the previous €25.82 amount. This keeps tax reporting aligned with current requirements and reduces the risk of incorrect report values.
Original PR description
While implementing the modulo tag of the tax report xml export, it came to light that the vp7 line of that report which previously used a 25,82€ threshold has been changed for one at 100,00€. This commit adapts the amount across the module. --- Enterprise PR: https://github.com/odoo/enterprise/pull/86642 task-4826511 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#216887
Users returning from editing a shared project task are now taken back to the correct project instead of another project's task board. This prevents confusion when multiple shared projects are available and keeps the portal navigation aligned with the task being edited.
Original PR description
Steps to Reproduce: ------------- 1. Install project and create two projects and tasks. 2. Share both projects with edit access. 3. Edit a task from the portal view (Back to edit mode) then click the (back to tasks) button. 4. Instead of the correct project the page redirects to the another project kanban view. Issue: -------------- - When redirecting to a task from project sharing (edit mode – task form view) it redirects to a different project’s kanban view instead of the actual project. Cause: ------------- - In the portal view the URL is hardcoded with `id=1` instead of dynamically using the correct project ID. Fix: --------------- - pass the correct `project_id` in the URL instead of using a hardcoded value. The issue occurred from this PR-https://github.com/odoo/odoo/pull/174648 task-5031632
New recruitment candidates and applicants now create linked contacts using the candidate's name instead of falling back to the email address. This helps recruiters and other users identify people correctly in contact records, while related point-of-sale test updates help keep automated checks reliable.
Original PR description
after this commit when a candidate or applicant is created, the corresponding contact should display the candidate’s name correctly, rather than defaulting to the email address. task-4687196 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Check validation now compares payments using the check's effective payment date instead of the operation date. This prevents valid customer receipts with already-issued checks from being incorrectly blocked or warned.
Original PR description
When validating check movements, the system was comparing the operation date against date, which caused false warnings in scenarios such as customer receipts that include checks already issued with…
When validating check movements, the system was comparing the operation date against date, which caused false warnings in scenarios such as customer receipts that include checks already issued with past payment dates. This commit changes the validation to use payment_date, which is the correct reference for ensuring that the payment operation is not prior to the last effective payment of the check. Description of the issue/feature this PR addresses: When validating check movements in `l10n_latam_checks`, the system compares the operation date (`date`) of the last check operation against the current payment date. This generates false blocking warnings in cases such as customer receipts, where checks can be received with past payment dates (already issued and ready to be deposited). Current behavior before PR: The validation uses `last_operation.date` for comparison. If the last operation's `date` is greater than the current payment's date, the system raises a warning, even if the check's `payment_date` is already in the past and valid. Desired behavior after PR is merged: The validation uses `last_operation.payment_date` instead of `last_operation.date`. This ensures that the comparison is consistent with the effective payment date of the check, avoiding false positives when processing checks in customer receipts. Video: https://drive.google.com/file/d/1Ro2NvKGK_uRyBovMuNeA395y-6MUbzu5/view --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix stops users from selecting the Shop Floor screen as their default home action. It prevents a login-time error that could appear when that screen opened before the system had loaded the current app context.
Original PR description
**PROBLEM** In debug mode, we can change the default home action of a user (the action he sees when logging in). When the action `action_mrp_display` is set as the home action, there is a traceback after logging in. **STEP TO REPRODUCE** 1. Go in debug mode 2. Change the home action of a user to the 'Shop Floor' action (in the user form, in the preference tab). 3. log out, and log in with this user. 4. a js traceback should appear. **CAUSE** On the js side, the Shop Floor action uses the `menu` service to get the name of the current app. when accessing the 'Shop Floor' action as a home action, the `menu` service app is set after the action is rendered, so the current app during rendering is undefined. **FIX** Prevent the user from selection the 'Shop Floor' action as a home action (we already do this for action that doesn't work as home action). opw-4926317
Installing the Belgium Accounting localization now continues successfully even if a referenced demo account tag was previously deleted. This avoids a setup failure in demo-data scenarios and makes localization installation more reliable for affected users.
Original PR description
Currently, installing the Belgium Accounting localization fails with an error, if the user has deleted referenced demo account tags. **Steps to reproduce:** - Install the Accounting app. - Delete the "Demo Capital Account" account tag. - Install the Belgium Accounting localization (`l10n_be`). **Error:** `ValueError - External ID not found in the system: account.demo_capital_account` At [1], if the `account.demo_capital_account` is not found, it raises an error if the external ID is missing. This commit prevents the error by explicitly passing `raise_if_not_found=False` and skipping the tag if not found. [1] - https://github.com/odoo/odoo/blob/71d1c9a4bef1c29485e3b0390713a9301ad6db4f/addons/l10n_be/demo/account_demo.py#L13-L19 sentry-6776341713 Forward-Port-Of: odoo/odoo#221227
The contract offer screen now hides the signature request button when the current user cannot access any related signature request. This prevents users from clicking a button that would lead to an error, while still allowing authorized users such as signing administrators to use it.
Original PR description
Before this PR, when logged in as a different user from the one responsible for counter-signing the contract, the smart button still showed, and clicking on it caused an error. This PR fixes that, by hiding the smart button when there are no accessible signature requests. Note that sign admins will still be able to see the smart button; users with access to the signature request. Task-4966129
Portal users viewing helpdesk tickets with logged timesheets will no longer see an unrelated Timesheets breadcrumb. This keeps ticket navigation clearer and avoids sending users toward the wrong portal section.
Original PR description
**Steps to reproduce:** 1. Install 'Helpdesk Sale Timesheet' and 'Website' modules. 2. Create a helpdesk ticket and add timesheets to it. 3. Go to the portal view of helpdesk tickets. **Issue:** If the ticket contains timesheets, the "Timesheets" breadcrumb appears in the portal ticket view. **Cause:** The reason the timesheet variable is used in the hr_timesheet portal template is because it makes the condition evaluate to true, which is why the breadcrumb for Timesheets is displayed. **Fix:** Renamed the loop variable in `t-foreach` to avoid shadowing the `timesheet` variable from the outer context. task-4744294 Forward-Port-Of: odoo/enterprise#85411
Product weight and volume information retrieved from barcode lookup is now properly saved on the product record. This helps keep product data complete and avoids missing logistics details after lookup.
Original PR description
Before this commit: ------------------------- - The weight and volume fields were not present in the main product form, so even when data was retrieved, it was not stored in the product record. After this commit: ----------------------- - We have added the weight and volume fields to ensure that whenever data is fetched, it is properly stored in the product record Runbot error: https://runbot.odoo.com/odoo/runbot.build.error/231155
Steps to reproduce: -------------------------- 1. Install `l10n_co` and activate spanish(es_419) language 2. Configure [DIAN Environment](https://www.odoo.com/documentation/18.0/applications/finance/fiscal_localizations/colombia.html#electronic-invoicing-credentials-and-dian-environment) by enabling DIAN mode 3. Create a customer invoice 4. Fill the required details in the related [customer and journal](https://www.odoo.com/documentation/18.0/applications/finance/fiscal_localizations/colomb
Original PR description
Steps to reproduce: -------------------------- 1. Install `l10n_co` and activate spanish(es_419) language 2. Configure [DIAN Environment](https://www.odoo.com/documentation/18.0/applications/finance/fiscal_localizations/colombia.html#electronic-invoicing-credentials-and-dian-environment) by enabling DIAN mode 3. Create a customer invoice 4. Fill the required details in the related [customer and journal](https://www.odoo.com/documentation/18.0/applications/finance/fiscal_localizations/colombia.html#sales-journals) record 5. Send it with DIAN box checked Issue: -------- `Payment Means` and `Payment Method` are not translated to spanish(es_419). Cause: -------- After this 88d7e5a, the `<br/>` tag was removed and its related **.pot** and **.po** files were not updated. Solution: ----------- Apply the changes to the **.pot** and **.po** files to resolve the issue. opw-4790642