Tuesday, January 6, 2026
37 changes · saas-18.4
Resolved issues and error corrections
This update fixes an issue where the DIN5008 invoice report didn't include Incoterm information. The fix adds the necessary logic to display the Incoterm code and location, ensuring compliance with DIN5008 standards. This improves invoice accuracy for international transactions.
Original PR description
**Steps to reproduce:** 1. Install the modules account and l10n_din5008. 2. Go to Settings and set DIN5008 as the default invoice report template. 3. Navigate to Configuration → Settings and set a default Incoterm. 4. Create a new customer invoice. 5. Print the DIN5008 Invoice Report. **Issue:** The DIN5008 invoice report did not display the Incoterms, while other invoice layouts printed them correctly. **Cause:** This was due to missing logic in l10n_din5008 report to include Incoterm data. Confirmed with TSB that the DIN5008 layout should display Incoterms. **Fix:** This commit adds the Incoterm information to the DIN5008 template data: - Always include the Incoterm code - If an Incoterm location is set, display it as `CODE - LOCATION` **opw-5349267** Forward-Port-Of: odoo/odoo#240688 Forward-Port-Of: odoo/odoo#238682
This update resolves a technical error that prevented timesheets from correctly linking to sale orders when multiple identical sale orders were used. The fix ensures that timesheets consistently link to the first applicable sale order line, maintaining accurate tracking of service hours. This improves the reliability of timesheet data.
Original PR description
Steps to reproduce: ------------------------------ 1. Install `industry_fsm_sale` module. 2. Open the settings of the field-service project and open the invoicing page 3. Add one employee on the…
Steps to reproduce:
------------------------------
1. Install `industry_fsm_sale` module.
2. Open the settings of the field-service project and open the invoicing page
3. Add one employee on the Invoicing page and create a new product with a Unit Price
4. On the product form, set the same value in the Sales Price field
5. Create a Sale Order with two sale order lines that use the same product and the same quantity
6. In Field Service create a Task for the same customer and set one of the sale order lines in the Sales Order Item field.
7. Create one timesheet for the task using the same employee added in the Invoicing page. Save the timesheet and click Mark as done
Observation:
------------------------------
A singleton traceback occurs when marking the task done:
```
raise ValueError('Expected singleton: %s' % record)
ValueError: Expected singleton: sale.order.line(62, 63)
```
Issue:
------------------------------
In the following code:
https://github.com/odoo/enterprise/blob/31663b503c75dc2a83cc9585280df02f4d704e89/industry_fsm_sale/models/project_task.py#L507-L511
According to our scenario, we will get two SOL for the same product `id` and `price_unit` Which on further used to link the SOL to timesheet. Following code assumes the single SOL and gives singleton error https://github.com/odoo/enterprise/blob/31663b503c75dc2a83cc9585280df02f4d704e89/industry_fsm_sale/models/project_task.py#L553-L554
Solution:
------------------------------
When building the `sols_by_product_and_price_dict` using the key
(product_id, price_unit), When multiple sale order lines exist for the same key,
only keep the one that comes first in the sequence to maintain the consistency.
as in following code:
https://github.com/odoo/enterprise/blob/a7b79f79d90a37fb2458f05bcf439c109f1d756f/industry_fsm_sale/models/account_analytic_line.py#L15-L20
This ensures the timesheet always links to the first applicable sale
order line, matching existing behavior.
opw-5373018
Forward-Port-Of: odoo/enterprise#101774This update fixes an issue where the system was creating multiple Dimona activities for employees, leading to potential data inconsistencies. The change ensures that only one Dimona activity is created per employee, streamlining payroll processing and improving data accuracy. It was triggered by a manual update of the 'HR Employee: Update Current Version' automation.
Original PR description
create an instance on saas-18.4 with l10n_be_hr_payroll settings > company > my company > update infos > country: Belgium employee > new > payroll > contract > start_date: any date (this should create a first dimona activity) settings > technical > automation > scheduled actions > "HR Employee: Update Current Version" > run manually `_trigger_l10n_be_next_activities` in `hr.version` of `l10n_be_hr_payroll` is duplicating Dimona activities on records that already have one. We check if a dimona activity already exists for a given `hr.employee` before creating the new activity. Same is done for dimona declaration of part times. The activity now redirects to the employee form (instead of the version form) and appears in it. tasks-5134380 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 resolves an issue where the search panel in the hierarchy view was getting cut off when navigating deep within the organization structure. The fix ensures proper scrolling functionality for the hierarchy content, allowing users to seamlessly explore the entire structure without clipping or layout problems. This improves the user experience and stability of the hierarchy view.
Original PR description
Issue: The hierarchy renderer was missing the standard .o_renderer class, so global layout and scrolling rules were not applied. Fix: Add .o_renderer on the hierarchy renderer root a to correct scrollable container. Impact: Restores expected scrolling behavior in hierarchy view Task: 5326054 Forward-Port-Of: odoo/odoo#236823
This update clarifies the purpose of the 'force_create' function within the Odoo account module. Previously, it was unclear that this function didn't actually create new records but instead updated existing ones. This change ensures better understanding and consistent use of the feature.
Original PR description
I have adding a docs for force_create that I have added in a previous task as it was not clear for some colleagues that it do not create but still updates the available records 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#241995
This update fixes a visual issue on the user profile page where course tags were being cut off at the bottom. The change adjusts the layout to ensure all tags are fully visible, maintaining a consistent and professional appearance. This improves the user experience by preventing truncated information.
Original PR description
In the website profile page, the course tags are slightly cut on the bottom. This commit adapts the block size to fit the entire tag. Note that the combo of fixed height / hidden overflow is actually intended to only show a single line of tags and not all of them, to avoid having a variable course card total height. Task-5457464 Forward-Port-Of: odoo/odoo#241897
This update fixes an issue where links to headings within locked articles didn't scroll to the correct location after loading. The fix ensures consistent navigation behavior for all articles, regardless of whether they're locked, improving the user experience for accessing content within the Knowledge base.
Original PR description
Problem: When navigating to a link that points to a heading in a locked article, the page does not scroll to the target heading after load. Cause: When an article is locked, `HtmlViewer` is used instead of the editor. In this mode, `HeadingLinkPlugin` is not loaded, even though it is the component responsible for scrolling to elements with `data-heading-link-id`. Solution: Add the same heading link scrolling logic to `HtmlViewer` so that links to headings work consistently, even when the article is locked. Steps to reproduce: - Go to Knowledge. - Copy a heading link. - Lock the article. - Paste the URL in the browser. - When the page loads, it does not scroll to the heading. opw-5418474 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where links to headings within locked Knowledge articles didn't scroll to the correct section after loading. By adding scrolling logic to the `HtmlViewer` component, the system now consistently supports heading link navigation, regardless of article locking status. This improves the user experience for accessing information within Knowledge articles.
Original PR description
Problem: When navigating to a link that points to a heading in a locked article, the page does not scroll to the target heading after load. Cause: When an article is locked, `HtmlViewer` is used instead of the editor. In this mode, `HeadingLinkPlugin` is not loaded, even though it is the component responsible for scrolling to elements with `data-heading-link-id`. Solution: Add the same heading link scrolling logic to `HtmlViewer` so that links to headings work consistently, even when the article is locked. Steps to reproduce: - Go to Knowledge. - Copy a heading link. - Lock the article. - Paste the URL in the browser. - When the page loads, it does not scroll to the heading. opw-5418474
This update resolves an issue where tax grouping keys in the account_edi_ubl module could sometimes be unexpectedly empty. This fix ensures accurate tax reporting when generating invoices and other financial documents, particularly when using customizations. It also includes a minor correction related to excise taxes.
Original PR description
Some overrides assign a value to the tax's grouping_key after the super call. However, the returned value could be None. Also fix a little mistake regarding excise taxes. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#239954
This update fixes a reporting error in the French P&L statements. The 'owner remuneration' account (644) was incorrectly categorized as 'tax and duties'. It has now been moved to the correct 'wages and salaries' category, ensuring accurate financial reporting for French businesses.
Original PR description
Account '644 owner remuneration' was in the 'tax and duties' category in the french P&L but it belongs to the 'wages and salaries' category task-5446018 Forward-Port-Of: odoo/enterprise#103214 Forward-Port-Of: odoo/enterprise#103061
This update resolves an issue where color fields within editable list views weren't consistently saving changes when using the 'bottom' editing mode. Previously, users would need to refresh the page to see updates. This fix ensures color field edits are reliably saved, improving the user experience and data accuracy within Odoo's list views.
Original PR description
This commit fixes the issue where editing a field with widget="color" does not save it when the list is in editable="bottom" mode. project.task~5262582 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#238644
This update clarifies delivery slip reports by explicitly labeling the delivery address as 'Delivery Address' and simplifying customer information labels. These changes reduce potential errors and improve operational efficiency when processing deliveries.
Original PR description
To resolve ambiguities and improve operational efficiency: 1. The delivery address is explicitly labeled 'Delivery Address'. Ensuring no doubt about the final destination. 2. The label for the customer's primary information has been updated from 'Customer Address' to simply Customer, which prevents operators from mistaking it for the delivery point. Backport of https://github.com/odoo/odoo/pull/220019 Task: 3379926 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#241988
A bug prevented the correct calculation of working time for tasks assigned in company B when a time off was previously set in company A. The issue stemmed from a system-wide holiday check that didn't account for the specific company, leading to incorrect working time assignments. This fix ensures accurate working time calculations across multiple companies.
Original PR description
__ ## Short functional explanation of the error Let's say we have 2 companies: company A and company B. We create a public time off of a few days starting before today and ending 2 days later in…
__ ## Short functional explanation of the error Let's say we have 2 companies: company A and company B. We create a public time off of a few days starting before today and ending 2 days later in company A, then switch back to company B. In company B, we create a project and a task, and assign this task. The working time to assign will stay at 0. ## Reproduction Steps 1. Switch to company A and create a timeoff starting before today and ending later. 2. Switch back to company B. Create a project, a stage and a task. 3. Enable the debugger. 4. The field Working Time to Assign is invisible by default, so open studio, click on View, and check Show Invisible Elements. 5. Click on the tab Extra info and on the block Working time to assign. Uncheck Invisible. 6. Close studio and assign someone to the task. Make sure that you do this operation at a different time than the one recorded for the last stage change. ### Expected behavior The hours under Working Time to Assign should compute the difference between the last time the task got its stage changed and the time of assignation ### Unexpected behavior Nothing happens ## Origin of the issue When computing the working time to assign, we also take into consideration leaves: if this happened during public holidays, we consider that it took no working time to get assigned. However, when a holiday is set in another company, the Working Time to Assign duration will be impacted, as the domain to retrieve the corresponding leaves is the following: https://github.com/odoo/odoo/blob/c7e965a61b7ce856c2daa8e2574cf4c60caf7a20/addons/resource/models/resource_calendar.py#L537-#546 The company isn't taken into account in the domain, applying the holiday for every company. _________________________________________ opw-5222883 Forward-Port-Of: odoo/odoo#236043
This update fixes a technical issue where Odoo incorrectly processed partner names with only one word. Previously, a single-word name would result in an empty first name field. Now, single-word names are correctly assigned to the first name, ensuring accurate data entry and reporting.
Original PR description
Description of the issue/feature this PR addresses: The name splitting logic fails when the partner name contains only one word, resulting in an empty first name. Current behavior before PR: Splitting a single-word name returns an empty first name and assigns the word to the last name. Desired behavior after PR is merged: A single-word name is correctly assigned to the first name field, leaving the last name empty. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241926
This update fixes an issue where delivery slips were printed with move lines in the wrong order. The fix ensures that move lines are printed in the correct sequence based on their original move IDs, resulting in accurate delivery slip generation. This improves the reliability of the delivery slip printing process.
Original PR description
**Steps to reproduce:** - Add 2 products in a delivery - Add the second's product move lines before the first one. - Validate and print delivery slip **Issue:** We iterate the `move_line_ids` directly which means if we have a new move line for a move with a lower id, it will push the product to the end of the delivery slip. **Example:** If we have `stock.move(1,)` with `stock.move_line(52,)` and `stock.move(2,)` with `stock.move_line(51,)`. `stock.move_line(51,)` will be printed first, which introduces a change in the order of the delivery slip. **Fix:** Iterate on `move_ids` and access `move_line_ids` through it, to print `move_lines_ids` in the same order of the `move_id`. Task: 4570203 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#213400
This update resolves a bug that prevented users from exporting data from the MRP MPS view. The issue stemmed from a recent change that incorrectly pulled fields from a related model. Now, the export function correctly displays the expected fields from the 'mrp.product.forecast' model, ensuring data can be exported without errors.
Original PR description
Steps to reproduce: - Go to MPS - Select one or more records - Click on Action > Export - Search and expand "Forecasted quantity at date" - Select "Forecasted quantity at date/Minimum to Replenish" - Export Before: A traceback is raised with the following error: "ValueError: Invalid field 'min_to_replenish_qty' on 'mrp.product.forecast'" This is caused by the model being overwritten by "mrp.production.schedule". The regression was introduced by commit ac52882, which added a default model "mrp.production.schedule". After: The export works correctly with sub fields. https://github.com/odoo/enterprise/commit/ac52882891a9ede6a5b008ac39fc62b82b7bf813 opw-5406704 Forward-Port-Of: odoo/enterprise#103097
This update enhances the security of the HTML editor by sanitizing data transferred through drag and drop. Specifically, it prevents potential risks when users copy and paste content using the Odoo-Editor format, ensuring a safer editing experience. This change addresses a vulnerability related to data handling.
Original PR description
Purpose: Ensure that content transferred via drag and drop using the `application/vnd.odoo.odoo-editor` MIME type is sanitized before insertion.
This update fixes an issue with how Odoo identifies the latest HR employee version, ensuring accurate versioning across the system. The change simplifies the version lookup process and provides a reliable fallback mechanism if a specific version isn't available, enhancing stability and data consistency.
Original PR description
- Replaced search() with filtered_domain() to simplify version lookup. - Added self.ensure_one() to ensure single record context. - Used max() to get the latest version based on date_version. - Falls back to the first version in version_ids if no valid version is found. task-5215836
This update addresses a critical issue by implementing a standard neutralization process for the l10n_gt_edi module. This ensures that support teams can safely investigate database duplicates without risking unintended impacts on the live production system or customer data. It's a preventative measure to maintain system stability and data integrity.
Original PR description
This commit adds the missing neutralization necessary for the l10n_gt_edi module The purpose of the standard neutralization framework is to allow us to create database copies that will not interact with external systems in ways that could impact the production database (or if it is not possible to prevent the interactions, make sure that they are benign or won't result in actual changes), or impact the customers of the operator of the production database. This is mainly useful to allow safe support investigation on database duplicates. Forward-Port-Of: odoo/enterprise#102695
This update adds a crucial neutralization step for the l10n_tw_edi_ecpay module, allowing our support team to safely examine database copies without impacting the live production system. This process prevents unintended interactions and ensures data integrity during support investigations, improving overall stability.
Original PR description
This commit adds the missing neutralization necessary for the l10n_tw_edi_ecpay module introduced in [1] The purpose of the standard neutralization framework is to allow us to create database copies that will not interact with external systems in ways that could impact the production database (or if it is not possible to prevent the interactions, make sure that they are benign or won't result in actual changes), or impact the customers of the operator of the production database. This is mainly useful to allow safe support investigation on database duplicates. [1] https://github.com/odoo/odoo/pull/223132 Forward-Port-Of: odoo/odoo#240975
This update fixes an issue where large .docx files weren't being correctly identified with their proper file type (like 'application/zip') when the `python-magic` library was installed. Previously, the system was defaulting to the wrong type. This ensures accurate file handling for all document uploads, especially large ones.
Original PR description
### Description of the issue/feature this PR addresses: The current number of bytes (1024) sent to the mimetype guesser function is not enough for a correct guess on big .docx files (maybe other open…
### Description of the issue/feature this PR addresses: The current number of bytes (1024) sent to the mimetype guesser function is not enough for a correct guess on big .docx files (maybe other open office files too) whenever `python-magic` is installed. If `python-magic` is not installed, it falls back to a [simpler implementation (by odoo)](https://github.com/odoo/odoo/pull/233266/files#diff-706296f6593337a9ff88c0e33e0e090eec75f63a22f9825dd31833ba17922840R145) that actually works correctly. But in odoo.SH it seems that `python-magic` is always installed and in that case, it returns the mimetype "application/zip" for big .docx files. The issue is not reproducible in runbot, so I'm assuming `python-magic` is not present in that environment. I've tested it with double the amount of bytes and it seems to work correctly. Please check the [following ticket](https://www.odoo.com/odoo/project.task/5125592) for more details. ### Current behavior before PR: <img width="1141" height="674" alt="image" src="https://github.com/user-attachments/assets/a3d28757-c55a-4b0f-9ee5-042777943635" /> ### Desired behavior after PR is merged: The uploaded file's mimetype is correctly identified for big (>40mb) open office files. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241565 Forward-Port-Of: odoo/odoo#233266
This update fixes an issue where job offer emails didn't include the employee's name in the subject line. Now, the email subject will automatically include the employee's name, improving clarity and personalization for candidates. This ensures a more professional and informative communication.
Original PR description
**Steps to reproduce:** - Go to Employees app and select any employee - Press "Offers" smart button - Create a new job offer and send it by email **Issue:** The employee name is not populated in the email subject. Task: 5407028
A technical issue causing a traceback when using the AI button in the applicant refusal process has been resolved. The fix involved modifying the application's code to correctly handle required fields, preventing errors and ensuring the AI functionality works reliably. This improves the applicant experience and reduces potential disruptions.
Original PR description
Step to reproduce: - Install hr_recruitment. - Open any applicant in any job position. - Click the Refuse button to open the refusal wizard. - Enable the send email toggle key. - Click on AI button Issue: traceback occurs Reason: - required field for using this widget is not defined. - so it tries to slice the res_ids field which is still not defined Solution: - In stable versions, we cannot add the missing required fields because this would cause upgrade issues. - Instead, we extend the widget and override its behavior to use active_model and active_id. task-5058510
This update fixes a minor issue where the appraisal plan start date wasn't being correctly set. A previous change removed some duplicate code, but this PR restores the necessary logic to ensure employees have the correct appraisal start date. This ensures accurate performance reviews and HR reporting.
Original PR description
**Issuee:** A recent change (https://github.com/odoo/enterprise/pull/100599/changes) was made to remove duplicate mehtod, but we need to maintain the main logic of setting the `appraisal_plan_start_date` field. This PR reintroduces this logic. Task:5408846
This update corrects a bug where changes made to nested website snippets (accordions and blockquotes) unintentionally affected parent snippets. The fix ensures that edits are isolated to the specific snippet being modified, improving the consistency and reliability of nested snippet editing within the website builder.
Original PR description
This commit fixes some issues that occur when editing nested instances of `s_accordion` and `s_blockquote` snippets. In all cases, changes applied to a parent unintentionally propagate to nested…
This commit fixes some issues that occur when editing nested instances of `s_accordion` and `s_blockquote` snippets. In all cases, changes applied to a parent unintentionally propagate to nested snippets. **Accordion issues** How to reproduce: drop two nested `s_accordion` snippets. Then: 1. Change the outer "Style" from "boxed" to "highlight active" -> both accordion change, 2. Change the outer "Round Corners" -> both accordion change, 3. Change the outer "Icon Position" -> both accordion change, 4. Change the outer "Icons" style -> both accordion change. **Blockquote issues** How to reproduce: drop two nested `s_blockquote` snippets. Then: 1. Change the outer "Decoration" -> both blockquotes change, 2. Set the inner "Decoration" to "Icon" -> works only if the outer snippet has icon too, 3. Change the outer "Author Alignment" -> only the inner blockquote changes. **Cause** The above issues occur because certain `applyTo` and certain CSS selectors match all nested elements rather than restricting the scope only to the snippet being edited. **Fix** The relevant `applyTo` and CSS rules now use more specific selectors. **Note** See also https://github.com/odoo/odoo/pull/237733 task-5362171
This update ensures that products designated for point-of-sale use (like those with discounts or tips) cannot be deleted or archived. This prevents potential errors and data inconsistencies within the point-of-sale system, ensuring accurate sales tracking.
Original PR description
Before this commit, it was possible to delete or archive some products even if they were special for the pos (discount, tips, settle, etc.). This commit adds a mechanism to prevent this and reduce the risk of errors linked to missing products in the pos. Enterprise PR: https://github.com/odoo/enterprise/pull/95789 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#229074
This update ensures that essential products like 'settle due' and 'deposit' are automatically configured for all Point of Sale (POS) settings when the pos_settle_due module is installed. Previously, these products were only available in POS sessions without open sessions, causing potential issues. This change guarantees consistent product availability across all POS configurations.
Original PR description
Before this commit, when the module pos_settle_due was installed, the special products (settle due, deposit, settle invoice) were only set on the POS configurations that did not have any open session. This could lead to issues when trying to use these products in a POS session of a configuration that did not have them set. Now, the special products are set on all POS configurations when installing the module. Community PR: https://github.com/odoo/odoo/pull/229074 Forward-Port-Of: odoo/enterprise#95789
This update fixes a bug that prevented users from creating helpdesk tickets when helpdesk teams included members from different companies. The fix prevents unnecessary data fetching in sudo, ensuring users only access resources within their own company. This resolves a potential error and improves the stability of the helpdesk module.
Original PR description
Before this commit, the `resource_ids` field in `res.users` model was fetched in sudo due to the `resource_calendar_id` related field in `res.users` and so the user will get the resources of members…
Before this commit, the `resource_ids` field in `res.users` model was fetched in sudo due to the `resource_calendar_id` related field in `res.users` and so the user will get the resources of members in a helpdesk team from another company than the current one(s). The problem is since the current user does not have access to those resources due to the multi company rule, he will get a traceback when he will try to create a ticket from that helpdesk team if the assignement method is ramdom and a user with resource exists in another company. This commit makes sure the resource_ids field in res.users is not fetched in sudo to correctly determine which user to set to the ticket when the current user tries to create a ticket. Steps to reproduce the issue: ---------------------------- 1. Install helpdesk module 2. Create a new company B 3. Create a new user with helpdesk user access right (or use Marc demo) and give the company B to that user 4. Select that new company created in step and go to helpdesk app. 5. Create an helpdesk team with auto-assignment set to "randomly" and set admin user as members in that helpdesk team 6. log in as the user created in step 3 7. make usre the company selected is the one created in step 2 8. create a ticket in the helpdesk team created in step 5 Expected behavior: ----------------- The ticket should be created without any issue. Actual behavior: --------------- An access error is raised because the current user does not have access to the resource of admin user since it is not in the same company than the current one. opw-5223717 Forward-Port-Of: odoo/enterprise#102910 Forward-Port-Of: odoo/enterprise#102859
This update resolves an issue where users couldn't answer incoming calls when opening modals like email or SMS wizards. The fix adjusts the software's layering to ensure the softphone is always visible and clickable when a call is active. This improves the user experience by allowing immediate call handling.
Original PR description
If you get a call when opening any modal/composer like email/sms wizard, you won't be able to pick up the call as the softphone is not clickable. This is because the z-index of the softphone is less than the modal. This commit fixes that issue by making the softphone above modals only if there is a pending call. [Task-4018118](https://www.odoo.com/odoo/project.task/4018118) Forward-Port-Of: odoo/enterprise#103072
This update fixes a limitation where payslips could only be generated for the current year. Now, historical employee data is retroactively updated, allowing for accurate payslip generation for past years. This ensures compliance and provides a complete record of employee compensation.
Original PR description
Currently employee data only updates current year snapshots, which can be an issue when generating payslips for previous years, in this PR we enable retroactive updates by changing the mecanism. The new mecanism updates snapshots of the payslip years, making a reference date usage possible. Forward-Port-Of: odoo/enterprise#103147
This update addresses a compatibility issue preventing older Odoo IoT boxes from running with saas-19.1. The PR updates the underlying operating system and Python version, allowing seamless integration with newer Odoo databases. This avoids the need for remote troubleshooting or box flashing.
Original PR description
This PR adds 2 migration scripts which allow older iot box images (<= 25_07) to work with databases in saas-19.1 and later. It updates os to debian trixie and installs all of the necessary packages…
This PR adds 2 migration scripts which allow older iot box images (<= 25_07) to work with databases in saas-19.1 and later. It updates os to debian trixie and installs all of the necessary packages to allow working after upgrades or with new databases. The update takes approximately 30 minutes. A warning about the necessity to update is added in this upgrade script: https://github.com/odoo/upgrade/pull/9153 1) Our IoT Boxes which the clients are currently using are running under "Bookworm" os with Python 3.11 with Odoo on it. 2) We have a mecanism which aligns the iot box code to the connected database version using `git checkout` 3) In saas-19.1 Odoo bumped the Python minimal version requirement to 3.12 4) As a result when our iot boxes will do 'git checkout saas-19.1' Odoo will never be able to start anymore 5) When this happens the only way to fix it is either remotely connect to the iot box and run a script like in this PR (remote debug must be activated before upgrading) or flash the iot box with a new image based on Trixie 6) This PR avoids this by updating the current OS to Trixie and the Python version accordingly so that the clients can keep using their iot boxes in saas-19.1 Forward-Port-Of: odoo/odoo#241910 Forward-Port-Of: odoo/odoo#241129
This update resolves an issue where empty popups remained open and displayed incorrect options after content was removed. The fix ensures popups close correctly and prevents errors related to outdated options, improving the user experience. This change was made to enhance stability and usability.
Original PR description
**Descripion of the problems** When the content of a popup is deleted, two problems happen: 1. The popup stays open displaying an empty white rectangle. 2. Options relative to the last removed…
**Descripion of the problems** When the content of a popup is deleted, two problems happen: 1. The popup stays open displaying an empty white rectangle. 2. Options relative to the last removed element are still displayed and produce an error if the user interacts with them. **How to reproduce** Drop the snippet `s_popup`, and remove the "Block" element. Problems: 1. the popup is still open but empty, 2. the "Block" options are still displayed. **Origin of the problems** Problem 1 happens simply because nothing takes care of removing empty popups. Problem 2 happens because `RemovePlugin.removeCurrentTarget` set the `nextTargetEl` without first checking if the element is activable or not. Thus, when removing the last block in a popup, the next target is set to the `.o_we_no_overlay` close button, despite it being not activable. As a result, when `BuilderOptionsPlugin.updateContainers` is called, it does not update containers because the target is not activable. Thus, the "Block" options are still displayed despite the element being removed. **Fix** Both problems are fixed by changing `RemovePlugin.isEmptyAndRemovable` such that empty popups are marked as removable. task-5401692
This update ensures that vendor names imported from UBL XML files are correctly set to the company's legal name (RegistrationName) instead of the contact person's name. This aligns with industry standards (OASIS UBL 2.1) and improves data accuracy for accounting and billing processes.
Original PR description
Steps To Reproduce ------------------ 1- Go to Accounting > Vendors > Bills. 2- Upload a UBL XML file containing both RegistrationName and Contact/Name (you can use one of the two attached in the…
Steps To Reproduce ------------------ 1- Go to Accounting > Vendors > Bills. 2- Upload a UBL XML file containing both RegistrationName and Contact/Name (you can use one of the two attached in the ticked). 3- Check the Vendor field. Issue ----- The vendor name is set to the contact person name instead of the company's legal name. Cause ----- In `_import_retrieve_partner_vals`, the XPath prioritizes `cac:Contact//cbc:Name` (contact person) over `cbc:RegistrationName` (company legal name). Fix --- Swap the priority to check `RegistrationName` first, falling back to `Contact/Name` only when no registration name exists. Legal/Standards Proof (OASIS UBL 2.1 Specification) according to sources: https://www.datypic.com/sc/ubl21/e-cac_PartyLegalEntity.html - cbc:RegistrationName: "The name of the party as registered with the relevant legal authority." http://www.datypic.com/sc/ubl21/e-cac_Contact.html - cac:Contact/cbc:Name: "The name of this contact. It is recommended that this be used for a functional name and not a personal name." The RegistrationName is the official legal company name, while Contact/Name is just a contact point at the company. Test ------ For the test I updated a test file so that `test_import_partner_fields` fails without these changes. opw-5392139 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update adjusts the timing for maintaining video call connections, preventing disruptions when the Odoo server experiences temporary slowdowns. By extending the ping interval, the system can now handle brief connection hiccups without dropping calls, ensuring smoother video communication for users. This enhances the overall reliability of Odoo's video conferencing features.
Original PR description
Before this commit, the ping to keep rtc sessions alive was done every 30 seconds and had a 1 minute timeframe to successfully ping, which meant that missing a single ping would drop the rtc session. This commit increases the timeframe to 1 minutes and 15 seconds so that one ping can be missed. This can help preventing disconnections when the Odoo server is slow, as calls can work fine without a stable connection to the odoo server (since P2P and SFU connections are independent from Odoo once the connections are initialized). task-5177246 Forward-Port-Of: odoo/odoo#234553
This update resolves a memory error that occurred when processing recurring invoices with a large number of subscriptions. By optimizing how the system retrieves data, the change significantly reduces memory consumption, improving the stability and performance of the invoicing process. The fix resulted in a 1.7GB memory error being reduced to 191MB.
Original PR description
A MemoryError can be thrown when running the scheduled action `_cron_recurring_create_invoice` on large databases. When there are lots of subscriptions, sale.orders and account.move.lines, the…
A MemoryError can be thrown when running the scheduled action `_cron_recurring_create_invoice` on large databases. When there are lots of subscriptions, sale.orders and account.move.lines, the compute method overwrite `_get_invoiced` in the sale_subscription module can consume a lot of memory. The issue is mostly coming from the search on account.move.line. In case a lot of account.move.lines have a subscription_id, the search to get `all_subscription_ids` is going to return a lot of records. Then, accessing any field on this recordset will prefetch all the prefetchable fields, leading to a MemoryError. This commit fixes that by manually fetching the fields we need on account_move_line. Since `subscription_move_lines` is not used anywhere else and `move_by_origin` only contains ids, the number of queries stays the same while the memory consumption plummets. #### Benchmark In a database with 236 000 account.move.line with a non-null subscription_id, running the schedule action with 5 subscriptions to invoice consumes at least 1.7GB (MemoryError raised). After this commit it consumes 191MB. <img width="1918" height="943" alt="sale_subscription_before" src="https://github.com/user-attachments/assets/e868921f-e691-47c3-8474-edb9a1d22d0b" /> <img width="1920" height="949" alt="sale_subscription_after" src="https://github.com/user-attachments/assets/78e9fc31-4c5f-4369-8bd0-494ca2c693fd" /> Forward-Port-Of: odoo/enterprise#102364
This update fixes an issue where combo prices were incorrectly recalculated after changing the order's preset (e.g., from dine-in to delivery). Now, extra items within a combo are accurately priced based on their base cost, ensuring consistent and correct order totals. This improves the user experience and prevents pricing discrepancies.
Original PR description
**Problem:** When ordering a combo product, you can order more products than the combo requires, which will the add *base_price* to the combo price. The problem is that when changing the preset, like…
**Problem:** When ordering a combo product, you can order more products than the combo requires, which will the add *base_price* to the combo price. The problem is that when changing the preset, like going from eat in to delivery, the pricelist is reconfigured, and it does not take the extra products from the combo into account. This means that the price will go back to the combo's price without the extra products. **Steps to reproduce:** - Have a combo that can take on multiple free products and has a limit above this free product number - Order more than the free quantity - Change the preset (from eat in to delivery) - The price is recomputed without taking the extra products into account **Why the fix:** The extra articles were not accounted for when changing the pricelist, meaning they would end up free and the price would change. We now make a separation between the free products (that are from the combo) and the extra products. The extra products cost the *base_price* of said combo. To do that, we need to get the extra lines from the combo, which are the products that are not free in the case where there are more products selected in the combo than free products defined in the definition of the combo. To make that happen, we add the non free lines to the extra lines list once we have at least as many free products as defined in the combo definition. In the case where the quantity of a product is greater than the number of free items, the lines are automatically split. Meaning if we have a combo with 2 free items but we order 3, we will have a line with a quantity of 2 and another line with a quantity of 1. In that case, the first line will be free, but the second line will be an extra. This logic is implemented here https://github.com/odoo/odoo/blob/0087cc96b2d2190ab107c3d50d3bdd48f7a687e9/addons/point_of_sale/static/src/app/components/popups/combo_configurator_popup/combo_configurator_popup.js#L88-L106 Which is then retrieved here to make the separation in the combo's price https://github.com/odoo/odoo/blob/0087cc96b2d2190ab107c3d50d3bdd48f7a687e9/addons/point_of_sale/static/src/app/services/pos_store.js#L879 opw-4885574 Forward-Port-Of: odoo/odoo#217082
This update fixes a visual inconsistency in the Point of Sale system. Previously, when searching for partners with wildcard characters, the system would show a 'found' count but not display the results in the partner list. This change ensures that the system accurately reflects the number of partners found during a search, resolving user confusion.
Original PR description
When the client typed `a%t%` into the search bar and pressed 'Enter', we load the partners from the backend using `getNewPartners` and showed a dialog "x partners found", however, we never show those results in the partner list since the search bar didn't support the wildcard ilike pattern. This commit adds support for searching wildcard patterns, to match the SQL behavior more or less. Clients now won't be confused by seeing "x partners loaded" and at the same time seeing an empty list. opw-5395340 Forward-Port-Of: odoo/odoo#242140 Forward-Port-Of: odoo/odoo#240541