Daily updates from Odoo
Navigate
Branch
Tuesday, December 9, 2025
209 changes
15 changes
Enhancements to existing features
This update allows other Odoo modules to customize the criteria used to define SLAs (Service Level Agreements) when creating helpdesk tickets. Previously, this customization was limited, but this change expands flexibility and improves the ability to tailor SLAs to specific business needs. It builds on existing functionality for related domains.
Original PR description
Allow other modules to modify the _sla_find domain when adding SLAs to helpdesk tickets. This is already the case for extra and false domains, while the main domain is hardcoded up to this commit. Forward-Port-Of: odoo/enterprise#97501
Resolved issues and error corrections
This update fixes a discrepancy in how invoices are recorded for Vietnamese accounting. Previously, the system incorrectly treated 'Unearned Revenue' (account 3387) as a payable account, leading to inaccurate balance sheet reporting. This change ensures 'Unearned Revenue' is correctly classified as a current liability, improving financial accuracy.
Original PR description
When posting an invoice, the system creates: - Journal Entry: Dr 131 (Receivable) / Cr 511 Then the system creates a deferral entry: - Deferral entry: Dr 511 / Cr 3387 (Payable) Falsifying the…
When posting an invoice, the system creates: - Journal Entry: Dr 131 (Receivable) / Cr 511 Then the system creates a deferral entry: - Deferral entry: Dr 511 / Cr 3387 (Payable) Falsifying the Balance sheet report, in the accounts receivable and accounts payable indicators The issue was that account 3387 was configured as `Payable`, which caused the system to generate both Receivable (131) and Payable (3387) for the same partner. This is incorrect because account 3387 represents "Unearned Revenue", which is a current liability, not a payable account. By changing the account type from `Payable` to `Current Liabilities`, the deferral entry now correctly reflects that 3387 is a current liability account, preventing the incorrect reconciliation behavior where both receivable and payable entries were created for the same partner. After this fix: - Entry: Dr 131 (Receivable) / Cr 511 - Deferral: Dr 511 / Cr 3387 (Current Liabilities) 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#238807 Forward-Port-Of: odoo/odoo#237493
This update simplifies the handling of MPF payments within the Hong Kong accounting module. Previously, separate payments for wages and MPF were registered, creating complexity. Now, MPF accounts are set to be unreconcilable by default, requiring accountants to manually reconcile statements with the government account.
Original PR description
Currently, we register two separate payments for MPF at the same time as we do for the employee's wages. This is not what we want to do; as both are not paid at the same time. MPF is also handled separately, and paid outside of Odoo on the government platform, making the registration of separate payments more complex for not many benefits. Thus, we make these accounts un-reconcilable by default, and will expect accountants to reconcile the statement with the account directly. task-5349299 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238074
This update fixes an issue where timesheet values were incorrectly displayed in project updates. A recent change in how the system handles time conversions led to an extra conversion step, resulting in inaccurate day counts. This fix ensures that timesheet hours are now correctly converted and displayed in project updates, providing accurate reporting.
Original PR description
Similar to: 0104cee Steps to reproduce: -------------------- 1. Install hr_timesheet 2. Create a new project and a task 3. On the task, add a timesheet line with some time (e.g., 16 hours) 4. Open…
Similar to: 0104cee Steps to reproduce: -------------------- 1. Install hr_timesheet 2. Create a new project and a task 3. On the task, add a timesheet line with some time (e.g., 16 hours) 4. Open the project dashboard > create a new project update > observe the timesheet time 5. Go to Timesheets > Configuration > Settings 6. Set "Encoding method" to "Days/Half-days" 7. Reopen the project dashboard > create another project update > observe the timesheet time again Issue: ------ Incorrect value displayed in the Timesheets. (e.g., 16 Days instead of 2 Days) Cause: ------- After commit 28b69da, the UoM model was restructured, changing how conversions between hours and days are computed. https://github.com/odoo/odoo/blob/aeda822db05b218fd1271c7666307950b7a98512/addons/hr_timesheet/models/project_project.py#L137-L143 The `total_timesheet_time` value is now already stored in the final unit (e.g., days). Whenever a new project update is created, the division in `create()` performs an unnecessary second conversion on an already converted value, causing the incorrect display. https://github.com/odoo/odoo/blob/583bacdc8ad2b87b99b11d1e12dacf6e42edf22b/addons/hr_timesheet/models/project_update.py#L36-L37 Solution: ---------- This commit ensures accurate conversion of timesheet values between hours and days. opw-5184077 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237532
This update resolves an issue that previously blocked users from creating new Amazon accounts within a newly created company. The fix ensures the system correctly handles the absence of initial warehouses and stock locations, allowing for seamless account setup.
Original PR description
Currently, an error occurs when user tries to create a new amazon account on a new company. Steps to replicate: - Install `sale_amazon`. - Create a new company and switch to it. - Go to Settings >…
Currently, an error occurs when user tries to create a new amazon account on a new company.
Steps to replicate:
- Install `sale_amazon`.
- Create a new company and switch to it.
- Go to Settings > Amazon account > Try to Create a new account.
Error:
```
File /home/odoo/odoo18/enterprise/sale_amazon/models/amazon_account.py, line 214, in create
'location_id': parent_location_data[0]['view_location_id'][0],
IndexError: list index out of range
```
Cause:
- Whenever a new company is created, it doesnt have any warehouses [1] and amazon stock locations [2].
- This causes the `parent_location_data` to be an empty list and causes error at line [3].
Solution:
- Assigning the `location_id` if the `parent_location_data` exists.
[1]: https://github.com/odoo/enterprise/blob/23f085bdba333807a25a2d41214b25f474c7edf8/sale_amazon/models/amazon_account.py#L206-L210
[2]: https://github.com/odoo/enterprise/blob/23f085bdba333807a25a2d41214b25f474c7edf8/sale_amazon/models/amazon_account.py#L201-L204
[3]: https://github.com/odoo/enterprise/blob/23f085bdba333807a25a2d41214b25f474c7edf8/sale_amazon/models/amazon_account.py#L214
sentry-7086464738
Forward-Port-Of: odoo/enterprise#101465This update resolves an issue preventing the IoT Box upgrade script from correctly updating the Odoo configuration file. By using sudo and installing pip requirements as the Odoo user, the script now functions reliably, ensuring a smoother and more secure upgrade process. This improves the stability of the IoT Box deployment.
Original PR description
On 25.06 images, the IoT Box upgrade script can't update `odoo.conf` file (modules to load) as odoo user running sed doesn't have enough permissions. We now run this command with sudo then ensure the ownership of the file is still `odoo:odoo` We now also ensure that pip requirements are installed for user `odoo` instead of root. Task: 5383045 Forward-Port-Of: odoo/odoo#238553
This change prevents distracting audio notifications during Odoo tests. Previously, test runs were disrupted by unexpected sounds from the computer, leading to frustration. This update ensures a cleaner and more reliable testing environment.
Original PR description
When running tests locally, it's really annoying (and sometimes really jarring / surprising) to hear random beeps and boops from your machine, especially when it's an old timey ringtone from voip. Make it stop. Forward-Port-Of: odoo/odoo#238906 Forward-Port-Of: odoo/odoo#238882
This update resolves a bug where a button would disappear when animated and its label was edited. The fix utilizes `textContent` instead of `innerText` to accurately retrieve the button's label content, regardless of its visibility state. This ensures the button remains visible during editing operations.
Original PR description
Problem: When adding an animation to a button and then trying to edit its label, the button disappears. Cause: Because of the animation effect, while editing, the button is in its initial `invisible` animation state. In that state, `innerText` always returns an empty string because it checks only the visible content of the element. Solution: Use `textContent` instead, which does not depend on element visibility. Steps to reproduce: - Open Website. - Drop any text snippet. - Add a button. - Add an animation to the button. - Edit the button label. - The button disappears. opw-5391115 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves a technical issue related to how the Swedish SIE import process calculates SHA512 hashes. The fix ensures that SHA512 digests are generated correctly, improving the reliability of data import and preventing potential import errors. This primarily impacts the l10n_se_sie_import module.
Original PR description
Forward-Port-Of: odoo/enterprise#101511
This update optimizes the speed of dropzones within the Odoo interface, particularly when adding multiple snippets at once. Previously, the process could take several seconds. This change improves the user experience by significantly reducing the time it takes to drag and drop elements, making the interface more responsive.
Original PR description
We had a problem when the number of snippets was quite big (>50). For example, when we try to drop a snippet in that situation it takes around 2-3 seconds to activate dropzones and the dragging "card" to appear. Now we don't get getComputedStyle() and getBoundingClientRect() for every element and perform DOM insertions at once for every parent. This commit follows [the html_builder refactoring]. [the html_builder refactoring]: https://github.com/odoo/odoo/commit/9fe45e2b7ddb Related to task-4367641
This update resolves an issue preventing clients from exporting their bills. Previously, bills weren't being generated, leading to a missing export option. This change ensures that clients can now successfully download their bill documents.
Original PR description
After this PR: https://github.com/odoo/odoo/pull/235934, clients can't export bills because they were never sent. Allow clients to export bills. Related feedback on task-4946367 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes a visual issue where form fields were displaying placeholder text as 'null' instead of an empty field. When creating or editing website forms, the placeholder text is now correctly blank, providing a cleaner and more intuitive user experience. This ensures consistent form appearance and usability.
Original PR description
Steps to see the issue: - Open website and start editing - Drop a form - Add a new field, or click on an optional field, the type of which we can modify - Set the field type to 'Selection' or 'Radio Buttons' (or any other that does not have placeholders) - Set the field type back to 'Text' => Field's placeholder is `'null'`, but it should just be empty. task-5383835 Forward-Port-Of: odoo/odoo#238710
This update fixes an issue where new employee timesheets weren't correctly reflecting previously created time off requests. The change ensures that only global time offs are considered, preventing incorrect timesheet generation and improving accuracy for new hires. This resolves a technical glitch impacting employee time tracking.
Original PR description
**Steps to reproduce** 1. Have a future `resource.calendar.leaves` without a `calendar_id` but with a `resource_id`. To achieve this, you can for example install Payroll and Attendance, create a contract with the work entry source being attendances and with no working schedule. Then, create a time off in hours for that employee and validate it. In that case, the `hr.leave` has no `resource_calendar_id` as computed in `_compute_resource_calendar_id`. This leads to a `resource.calendar.leaves` record without a `calendar_id` once the time off is validated. 2. Create a new employee. A timesheet corresponding to the previously created time off is created. **Change** Make sure only global time offs are considered. opw-5248992 Forward-Port-Of: odoo/odoo#237773
This update resolves an issue where clicking a Field Service record in the kanban view opened it in the same tab instead of a new one. The fix corrects a technical error within the `industry_fsm` module that prevented the expected new-tab behavior when using the middle mouse button. This ensures a smoother user experience when accessing records.
Original PR description
Steps to reproduce: 1. Install `industry_fsm` 2. Open Field service module 3. In the kanban view, click a record with the middle mouse button Issue: - The record opens in the same tab instead of a new tab. Cause: - `FsmMyTaskKanbanRecord` overrides `onGlobalClick` without propagating the `newWindow` argument, preventing the expected new-tab behavior. Solution: - Forward the `newWindow` parameter to the parent implementation to restore the correct handling of the middle mouse click opw-5351842 Forward-Port-Of: odoo/enterprise#100926
This update resolves an issue where the correct group wasn't being assigned to the teleworking field in the payroll module for Switzerland (l10n_ch_hr_payroll). This ensures accurate reporting and compliance with Swiss tax regulations related to remote work arrangements. The change improves the accuracy of payroll calculations.
Original PR description
Forward-Port-Of: odoo/enterprise#101691
18 changes
Enhancements to existing features
This update expands the flexibility for setting Service Level Agreements (SLAs) on helpdesk tickets. Previously, a key domain was hardcoded, but now other modules can adjust it, allowing for more customized SLA rules. This improves the adaptability of our helpdesk system.
Original PR description
Allow other modules to modify the _sla_find domain when adding SLAs to helpdesk tickets. This is already the case for extra and false domains, while the main domain is hardcoded up to this commit. Forward-Port-Of: odoo/enterprise#97501
Resolved issues and error corrections
This update fixes an accounting error related to invoice posting in the Vietnamese localization. Previously, the system incorrectly created entries for both receivable and payable accounts for 'Unearned Revenue' (account 3387). Changing the account type to 'Current Liabilities' ensures accurate financial reporting and prevents mismatched balances.
Original PR description
When posting an invoice, the system creates: - Journal Entry: Dr 131 (Receivable) / Cr 511 Then the system creates a deferral entry: - Deferral entry: Dr 511 / Cr 3387 (Payable) Falsifying the…
When posting an invoice, the system creates: - Journal Entry: Dr 131 (Receivable) / Cr 511 Then the system creates a deferral entry: - Deferral entry: Dr 511 / Cr 3387 (Payable) Falsifying the Balance sheet report, in the accounts receivable and accounts payable indicators The issue was that account 3387 was configured as `Payable`, which caused the system to generate both Receivable (131) and Payable (3387) for the same partner. This is incorrect because account 3387 represents "Unearned Revenue", which is a current liability, not a payable account. By changing the account type from `Payable` to `Current Liabilities`, the deferral entry now correctly reflects that 3387 is a current liability account, preventing the incorrect reconciliation behavior where both receivable and payable entries were created for the same partner. After this fix: - Entry: Dr 131 (Receivable) / Cr 511 - Deferral: Dr 511 / Cr 3387 (Current Liabilities) 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#238807 Forward-Port-Of: odoo/odoo#237493
This update simplifies the handling of MPF payments in Hong Kong. Previously, Odoo registered separate payments for MPF alongside wages, creating complexity. Now, MPF accounts are unreconciliable by default, directing accountants to reconcile directly with the government platform, streamlining the accounting process.
Original PR description
Currently, we register two separate payments for MPF at the same time as we do for the employee's wages. This is not what we want to do; as both are not paid at the same time. MPF is also handled separately, and paid outside of Odoo on the government platform, making the registration of separate payments more complex for not many benefits. Thus, we make these accounts un-reconcilable by default, and will expect accountants to reconcile the statement with the account directly. task-5349299 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238074
This update resolves an issue where marking multiple manufacturing orders as 'Done' would trigger an error due to how the system handles different unit of measure (UoM) values. The fix ensures accurate calculations and prevents the error when multiple orders with varying UoMs are marked as complete, improving data integrity.
Original PR description
Currently, an error occurs when user marks multiple Manufacturing Orders as Done. **Steps to Reproduce…
Currently, an error occurs when user marks multiple Manufacturing Orders as Done.
**Steps to Reproduce ([Video](https://drive.google.com/file/d/1XfkMB001rMiyulRGrP4dlJFDYByo_5Bv/view?usp=drive_link)):**
- Install the `mrp` module.
- Go to `Settings` and enable `Units of Measure & Packagings`.
- Go to `Products and `create two products` with different `units of measure`.
- Go to `Manufacturing Orders`, create a manufacturing order by `adding one of the products`, and then `create work order` in the Work Orders section and `confirm` it.
- Create another `manufacturing order` with the `same quantity` for the second product and add a `Work Order` for it as well and `confirm` it.
- Go to the `list view`, select `both orders`, and click `Mark as Done` from the `Actions` menu.
**Error:**
```
ValueError: ValueError('Expected singleton: uom.uom(4, 6)') while evaluating
"if records:\n res = records.filtered(lambda mo: mo.state in {'confirmed', 'to_close', 'progress'}).button_mark_done()\n if res is not True:\n action = res"
ValueError: Expected singleton: uom.uom(4, 6)
```
After [this commit], which improves the performance of button_finish, when a user marks multiple orders as done with the same quantity but different uom , it creates all_vals_dict based on the vals[1] data as the key and the work order as the value[2]. Then it stores two or more work orders with different UoMs under the same vals key. When attempting to write multiple work orders[3], the precision rounding is calculated, which raises the error[4] due to multiple UoMs.
The commit ensures that when writing records, precision_rounding is calculated separately for each Work Order's UoM.
[this commit]: https://github.com/odoo/odoo/pull/223715/commits/b857d192085a38b612335223d04f8bdff91b898c
[1]- https://github.com/odoo/odoo/blob/186a9eb4a6c55c9c4c2178d4b2492a9a23a267fe/addons/mrp/models/mrp_workorder.py#L698-L703
[2]- https://github.com/odoo/odoo/blob/186a9eb4a6c55c9c4c2178d4b2492a9a23a267fe/addons/mrp/models/mrp_workorder.py#L706
[3]- https://github.com/odoo/odoo/blob/186a9eb4a6c55c9c4c2178d4b2492a9a23a267fe/addons/mrp/models/mrp_workorder.py#L708
[4]- https://github.com/odoo/odoo/blob/186a9eb4a6c55c9c4c2178d4b2492a9a23a267fe/addons/mrp/models/mrp_workorder.py#L477
sentry-7050854871
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#238086This update fixes an issue where placeholders were missing in the 'Related Company' field within the Contacts module. The fix ensures that placeholder text is correctly displayed, improving the user experience when creating new contacts. This resolves a minor visual inconsistency.
Original PR description
**Issue:** Fields using the res_partner_many2one widget with a placeholder do not display the placeholder text. **Steps to reproduce:** 1. Install `contacts` module 2. Go to Contacts 3. Create new 'Individual' contact 4. Notice just below the name, Related Company field placeholder is not visible. **Cause:** Props are not passed correctly in PartnerAutoComplete component **Solution:** Use the correct prop reference (props.placeholder) when passing the placeholder to the PartnerAutoComplete component, ensuring it is properly rendered. opw-5153125 Forward-Port-Of: odoo/odoo#235696 Forward-Port-Of: odoo/odoo#231445
This update fixes an issue where timesheet values were incorrectly displayed in project updates, showing an incorrect number of days instead of hours. This change ensures that timesheet hours are accurately converted and presented when creating project updates, improving the reliability of project time tracking.
Original PR description
Similar to: 0104cee Steps to reproduce: -------------------- 1. Install hr_timesheet 2. Create a new project and a task 3. On the task, add a timesheet line with some time (e.g., 16 hours) 4. Open…
Similar to: 0104cee Steps to reproduce: -------------------- 1. Install hr_timesheet 2. Create a new project and a task 3. On the task, add a timesheet line with some time (e.g., 16 hours) 4. Open the project dashboard > create a new project update > observe the timesheet time 5. Go to Timesheets > Configuration > Settings 6. Set "Encoding method" to "Days/Half-days" 7. Reopen the project dashboard > create another project update > observe the timesheet time again Issue: ------ Incorrect value displayed in the Timesheets. (e.g., 16 Days instead of 2 Days) Cause: ------- After commit 28b69da, the UoM model was restructured, changing how conversions between hours and days are computed. https://github.com/odoo/odoo/blob/aeda822db05b218fd1271c7666307950b7a98512/addons/hr_timesheet/models/project_project.py#L137-L143 The `total_timesheet_time` value is now already stored in the final unit (e.g., days). Whenever a new project update is created, the division in `create()` performs an unnecessary second conversion on an already converted value, causing the incorrect display. https://github.com/odoo/odoo/blob/583bacdc8ad2b87b99b11d1e12dacf6e42edf22b/addons/hr_timesheet/models/project_update.py#L36-L37 Solution: ---------- This commit ensures accurate conversion of timesheet values between hours and days. opw-5184077 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237532
This update resolves an issue where removing a video URL in the website editor would create a broken iframe, leading to a 404 error. The fix ensures that the 'Add' button is disabled when a video URL is empty, preventing the creation of invalid i-frames and improving website stability.
Original PR description
*=website **Steps to reproduce:** 1. Drop a video 2. Reopen the media dialog 3. Remove the URL 4. Confirm **Issue:** When the URL was removed and confirmed, an iframe without a valid source was saved, leading to a 404 error. **Fix:** When the video URL is cleared, VideoSelector component calls selectMedia with an empty object. MediaDialog did not previously handle this case, so the media selection was not cleared. Now we Update MediaDialog to treat an empty object as a clear-selection signal and disable the Add button accordingly. task-5190485 Forward-Port-Of: odoo/odoo#238884 Forward-Port-Of: odoo/odoo#234085
This update resolves an issue that previously blocked users from creating new Amazon accounts within a newly created company. The fix ensures the system correctly handles the absence of initial warehouses and stock locations, allowing for seamless account setup. This improves the user experience and avoids disruptions during company creation.
Original PR description
Currently, an error occurs when user tries to create a new amazon account on a new company. Steps to replicate: - Install `sale_amazon`. - Create a new company and switch to it. - Go to Settings >…
Currently, an error occurs when user tries to create a new amazon account on a new company.
Steps to replicate:
- Install `sale_amazon`.
- Create a new company and switch to it.
- Go to Settings > Amazon account > Try to Create a new account.
Error:
```
File /home/odoo/odoo18/enterprise/sale_amazon/models/amazon_account.py, line 214, in create
'location_id': parent_location_data[0]['view_location_id'][0],
IndexError: list index out of range
```
Cause:
- Whenever a new company is created, it doesnt have any warehouses [1] and amazon stock locations [2].
- This causes the `parent_location_data` to be an empty list and causes error at line [3].
Solution:
- Assigning the `location_id` if the `parent_location_data` exists.
[1]: https://github.com/odoo/enterprise/blob/23f085bdba333807a25a2d41214b25f474c7edf8/sale_amazon/models/amazon_account.py#L206-L210
[2]: https://github.com/odoo/enterprise/blob/23f085bdba333807a25a2d41214b25f474c7edf8/sale_amazon/models/amazon_account.py#L201-L204
[3]: https://github.com/odoo/enterprise/blob/23f085bdba333807a25a2d41214b25f474c7edf8/sale_amazon/models/amazon_account.py#L214
sentry-7086464738
Forward-Port-Of: odoo/enterprise#101465This change prevents distracting audio notifications during Odoo tests. Previously, unexpected sounds from the computer disrupted test runs, causing delays and frustration. This update ensures a cleaner and more reliable testing environment.
Original PR description
When running tests locally, it's really annoying (and sometimes really jarring / surprising) to hear random beeps and boops from your machine, especially when it's an old timey ringtone from voip. Make it stop. Forward-Port-Of: odoo/odoo#238906 Forward-Port-Of: odoo/odoo#238882
This fix resolves a bug where the 'Working Time to Assign' field incorrectly remained at 0 when assigning tasks after a multi-company time off was set. The issue stemmed from a system-wide holiday calculation that didn't account for the specific company of the task, leading to inaccurate working time assignments. This ensures accurate time tracking for tasks 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 an issue where portal users encountered errors when filtering job postings due to restricted access rights. The fix applies a security measure (sudo()) to ensure portal users can correctly access and filter department data, improving usability for this user group.
Original PR description
**Steps to reproduce:** 1. Install `website_hr_recruitment` 2. Open the job website page and, through editor add a filter for department 3. Switch to a portal user and change the department filter **Issue:** - The controller passes department_id to the template, but unlike before this commit https://github.com/odoo/odoo/commit/0ab6e84c54f134c8744d8f94108a715e989b2815, where the code used sudo() to sort departents https://github.com/odoo/odoo/blob/6159c6527cfa38ea0c92e6f3fa6025ee534a1acb/addons/website_hr_recruitment/controllers/main.py#L81 it now just passes the department_id without actually returning a full record with accessible fields. In the template, the filter rendering uses selected_filter.name, which triggers an AccessError for portal users. **Solution:** - Apply `sudo()` when accessing `hr.department` to avoid access errors for portal users. opw-5103910
This update resolves a technical issue related to how SHA512 hashes are generated during the import of Swedish accounting data. The fix ensures accurate data integrity, preventing potential errors when processing financial information. This improves the reliability of the Odoo Enterprise system for Swedish users.
Original PR description
Forward-Port-Of: odoo/enterprise#101511
This update fixes an issue where form fields, specifically those with 'Text' input types, were displaying a placeholder of 'null' instead of an empty field. This change ensures a cleaner and more intuitive user experience when creating or editing forms on the website.
Original PR description
Steps to see the issue: - Open website and start editing - Drop a form - Add a new field, or click on an optional field, the type of which we can modify - Set the field type to 'Selection' or 'Radio Buttons' (or any other that does not have placeholders) - Set the field type back to 'Text' => Field's placeholder is `'null'`, but it should just be empty. task-5383835 Forward-Port-Of: odoo/odoo#238710
This update resolves an issue preventing the IoT Box upgrade script from correctly updating the Odoo configuration file. By using sudo and installing pip requirements as the Odoo user, the script now has the necessary permissions and avoids potential security vulnerabilities. This ensures smoother and more reliable upgrades for IoT Box deployments.
Original PR description
On 25.06 images, the IoT Box upgrade script can't update `odoo.conf` file (modules to load) as odoo user running sed doesn't have enough permissions. We now run this command with sudo then ensure the ownership of the file is still `odoo:odoo` We now also ensure that pip requirements are installed for user `odoo` instead of root. Task: 5383045 Forward-Port-Of: odoo/odoo#238553
This update fixes an issue where changing the quantity of a combo product in Point of Sale (PoS) didn't correctly update the quantities of its child items. Specifically, when quantity changes are restricted, the system now accurately adjusts the quantities of all items within a combo. This ensures accurate order totals and prevents over-selling.
Original PR description
When changing the quantity of a combo parent product in a PoS that doesn't allow changing quantity (like when using blackbox), the children of the combo would not be updated correctly. Steps to reproduce: ------------------- * Open any PoS and use this command to change the behavior of changing quantity : `posmodel.disallowLineQuantityChange = () => true;` * Add any combo product to the order. * Change the quantity of the combo parent product to 0 > Observation: The children of the combo are still there. Why the fix: ------------ We make sure to adapt the quantity of the combo children when the parent quantity is changed. opw-4876979 Forward-Port-Of: odoo/odoo#239078 Forward-Port-Of: odoo/odoo#224651
This update fixes an issue where timesheets weren't correctly reflecting new employee's time off requests. The change ensures that only global time offs are considered, preventing incorrect timesheet generation when creating new employees with specific leave configurations. This improves the accuracy of time tracking and reporting.
Original PR description
**Steps to reproduce** 1. Have a future `resource.calendar.leaves` without a `calendar_id` but with a `resource_id`. To achieve this, you can for example install Payroll and Attendance, create a contract with the work entry source being attendances and with no working schedule. Then, create a time off in hours for that employee and validate it. In that case, the `hr.leave` has no `resource_calendar_id` as computed in `_compute_resource_calendar_id`. This leads to a `resource.calendar.leaves` record without a `calendar_id` once the time off is validated. 2. Create a new employee. A timesheet corresponding to the previously created time off is created. **Change** Make sure only global time offs are considered. opw-5248992 Forward-Port-Of: odoo/odoo#237773
This update resolves an issue where clicking a Field Service record in the kanban view with the middle mouse button opened it in the same tab. The fix ensures that records now open in a new tab, improving user workflow and efficiency. The change was triggered by a bug in the `industry_fsm` module.
Original PR description
Steps to reproduce: 1. Install `industry_fsm` 2. Open Field service module 3. In the kanban view, click a record with the middle mouse button Issue: - The record opens in the same tab instead of a new tab. Cause: - `FsmMyTaskKanbanRecord` overrides `onGlobalClick` without propagating the `newWindow` argument, preventing the expected new-tab behavior. Solution: - Forward the `newWindow` parameter to the parent implementation to restore the correct handling of the middle mouse click opw-5351842 Forward-Port-Of: odoo/enterprise#100926
This update fixes an issue where outdated sub-channels were being unnecessarily unpinned, leading to unwanted notifications. The change also prevents unpinning sub-channels if members still have unread messages, ensuring the pin feature continues to work as intended for accessing important threads.
Original PR description
Before this commit, outdated sub-channels were unpinned each time the vacuum ran. It occurs because a condition on sub-channel being pinned is missing. In practice, it's not a big deal funtionnaly but leads to useless notifications being sent. While at it, this PR prevents unpins when there are still unread messages in the sub-channel: the pin feature is used to see unread messages on otherwise hidden threads. Forward-Port-Of: odoo/odoo#238493
4 changes
Enhancements to existing features
This update allows other Odoo modules to customize how SLAs are defined for helpdesk tickets. Previously, this customization was limited, but now it's expanded to align with existing flexible configurations. This improves the flexibility and adaptability of SLAs within the helpdesk system.
Original PR description
Allow other modules to modify the _sla_find domain when adding SLAs to helpdesk tickets. This is already the case for extra and false domains, while the main domain is hardcoded up to this commit. Forward-Port-Of: odoo/enterprise#97501
Resolved issues and error corrections
This update resolves an issue where creating a new Amazon account on a newly created company would trigger an error due to missing warehouse information. The fix automatically assigns a location ID when a new company is created, allowing users to successfully set up their Amazon accounts.
Original PR description
Currently, an error occurs when user tries to create a new amazon account on a new company. Steps to replicate: - Install `sale_amazon`. - Create a new company and switch to it. - Go to Settings >…
Currently, an error occurs when user tries to create a new amazon account on a new company.
Steps to replicate:
- Install `sale_amazon`.
- Create a new company and switch to it.
- Go to Settings > Amazon account > Try to Create a new account.
Error:
```
File /home/odoo/odoo18/enterprise/sale_amazon/models/amazon_account.py, line 214, in create
'location_id': parent_location_data[0]['view_location_id'][0],
IndexError: list index out of range
```
Cause:
- Whenever a new company is created, it doesnt have any warehouses [1] and amazon stock locations [2].
- This causes the `parent_location_data` to be an empty list and causes error at line [3].
Solution:
- Assigning the `location_id` if the `parent_location_data` exists.
[1]: https://github.com/odoo/enterprise/blob/23f085bdba333807a25a2d41214b25f474c7edf8/sale_amazon/models/amazon_account.py#L206-L210
[2]: https://github.com/odoo/enterprise/blob/23f085bdba333807a25a2d41214b25f474c7edf8/sale_amazon/models/amazon_account.py#L201-L204
[3]: https://github.com/odoo/enterprise/blob/23f085bdba333807a25a2d41214b25f474c7edf8/sale_amazon/models/amazon_account.py#L214
sentry-7086464738
Forward-Port-Of: odoo/enterprise#101465This update resolves an issue where the Swedish SIE import process was incorrectly calculating SHA512 hashes. The fix ensures accurate data integrity for tax reporting, preventing potential errors and compliance problems. This update is part of a larger effort to maintain the reliability of our Odoo Enterprise offering.
Original PR description
Forward-Port-Of: odoo/enterprise#101511
This update fixes an issue where the barcode scanning feature wasn't correctly handling batches created with multiple pickings. The system now accurately merges moves by picking, ensuring accurate tracking of inventory within batches. This improves the reliability of batch management and reduces potential discrepancies.
Original PR description
Steps to reproduce ----- - Enable batch pickings - Create a product - Create 2 receptions for the product (qty > 1) - Create a batch with the 2 transfers - Open the batch in barcode - Scan part of…
Steps to reproduce ----- - Enable batch pickings - Create a product - Create 2 receptions for the product (qty > 1) - Create a batch with the 2 transfers - Open the batch in barcode - Scan part of both pickings - Go back to the barcode main screen - Open the batch again > Both pickings have their demand = partially delivered quantity Cause ----- When leaving the page, we trigger https://github.com/odoo/enterprise/blob/91d6a096e88e4f11d7504d7a4052a57e2cb09ca8/stock_barcode/models/stock_move.py#L65-L68 in which we end up merging the moves together https://github.com/odoo/enterprise/blob/91d6a096e88e4f11d7504d7a4052a57e2cb09ca8/stock_barcode/models/stock_move.py#L51 This has been added by 9753c24 (ade0bef in 17.0) The problem is that `_merge_moves` merges all of the moves into the first of `merge_into` https://github.com/odoo/odoo/blob/26761e04bb648b46cd35697c6cbc8ed1e27fef90/addons/stock/models/stock_move.py#L1086-L1088 This, however, doesn't make much sense for batches because the moves can be from different pickings. ----- Ticket: opw-5163740 Forward-Port-Of: odoo/enterprise#101499 Forward-Port-Of: odoo/enterprise#100940
1 change
Resolved issues and error corrections
This update resolves an issue where a duplicate dropdown menu appeared when editing or deleting social stream posts. The fix ensures the existing dropdown from the 'social_crm' module correctly integrates with the new 'social' dropdown, maintaining a consistent user experience. This improves usability and prevents confusion for users managing social posts.
Original PR description
Following odoo/enterprise@c9ddf1c a new dropdown has been added to "social" to allow the edition and deletion of a social stream post. This new dropdown didn't take into account the one already existing in "social_crm" resulting in a duplicated dropdown menu. Fixing the issue by making sure the dropdown from "social_crm" is correctly extending the one from "social". As the "Create Lead" action is set above the "Edit" and "Delete" ones, making sure it's also the case for the stream post comments dropdown menu for consistency. Task-5270180
10 changes
New functionality added to Odoo
This update adds a crucial mapping of salary rules accounts within the Odoo Enterprise system. This ensures accurate accounting for Turkish payroll calculations, addressing a previous omission and improving compliance with local regulations. The change supports the correct recording of payroll expenses.
Original PR description
In this commit we add the maping for all the salary rules accounts Taks: 5171954
This update enhances the visual appeal of spreadsheets by allowing images and graphs to be displayed as thumbnails. This improves the user experience when browsing and selecting spreadsheet templates, making them easier to identify and use. It's a small but impactful improvement to the overall spreadsheet functionality.
Enhancements to existing features
This update ensures managers are assigned to separate versions of Odoo, preventing data discrepancies and allowing for accurate reporting across different environments. This change improves the reliability of key reports related to employee performance and timesheet analysis. It addresses a previous issue where managers were inconsistently linked to versions.
Original PR description
Put manager on versions instead of employee to have different managers for different versions Task: 5380683
Resolved issues and error corrections
This update ensures that the delivery address is now included in tax calculations and EDI requests for Brazilian NF-e invoices. Previously, this information was missing, which could lead to tax discrepancies. This change is crucial for compliance and accurate financial reporting.
Original PR description
Purpose: For invoice goods(NF-e), the delivery address can differ from the invoice address. It is necessary for both fiscal and logistical reasons to provide the delivery address in the tax calculation and EDI requests. Failure to do so may result in tax issues for the issuer. Expected Behavior: Users will be able to set a delivery address on the sales order and invoice and the delivery address will be sent in the requests for tax calculation and EDI. The returned EDI document will display the delivery address information. Current Behavior: The delivery address is not sent in the requests. task-5171186 Forward-Port-Of: odoo/enterprise#101267
This update resolves an issue that previously blocked users from creating new Amazon accounts for new companies. The fix ensures that the system correctly handles the absence of warehouses and stock locations when a new company is initially set up, allowing for seamless account creation.
Original PR description
Currently, an error occurs when user tries to create a new amazon account on a new company. Steps to replicate: - Install `sale_amazon`. - Create a new company and switch to it. - Go to Settings >…
Currently, an error occurs when user tries to create a new amazon account on a new company.
Steps to replicate:
- Install `sale_amazon`.
- Create a new company and switch to it.
- Go to Settings > Amazon account > Try to Create a new account.
Error:
```
File /home/odoo/odoo18/enterprise/sale_amazon/models/amazon_account.py, line 214, in create
'location_id': parent_location_data[0]['view_location_id'][0],
IndexError: list index out of range
```
Cause:
- Whenever a new company is created, it doesnt have any warehouses [1] and amazon stock locations [2].
- This causes the `parent_location_data` to be an empty list and causes error at line [3].
Solution:
- Assigning the `location_id` if the `parent_location_data` exists.
[1]: https://github.com/odoo/enterprise/blob/23f085bdba333807a25a2d41214b25f474c7edf8/sale_amazon/models/amazon_account.py#L206-L210
[2]: https://github.com/odoo/enterprise/blob/23f085bdba333807a25a2d41214b25f474c7edf8/sale_amazon/models/amazon_account.py#L201-L204
[3]: https://github.com/odoo/enterprise/blob/23f085bdba333807a25a2d41214b25f474c7edf8/sale_amazon/models/amazon_account.py#L214
sentry-7086464738
Forward-Port-Of: odoo/enterprise#101465This update fixes a bug where Belgian employees on long-term sick leave were incorrectly receiving pay for public holidays. The system now accurately reflects the Belgian accounting rules, ensuring that public holidays are not paid during sick leave exceeding 30 days. This ensures accurate payroll processing for Belgian employees.
Original PR description
Bug: In Belgium, after 30 calendar days of sick leave, all public holidays during the sick leaves are no longer paid. But here they were still being paid. Cause: The method that was checking what to do about public holidays was never seeing public holidays since they were already changed to their corresponding work entries at the work entry generation. Fix: Add the public holidays in the context and change the condition for checking if the current leave is actually from a public holiday or not. Task: 3864585 Forward-Port-Of: odoo/enterprise#100423 Forward-Port-Of: odoo/enterprise#95178
This update resolves an issue where the SHA512 hashing process in the Swedish SIE import module was not correctly implemented. The fix ensures accurate verification of digital signatures, improving the reliability of data import and preventing potential data integrity problems. This primarily impacts the handling of Swedish tax reporting.
Original PR description
Forward-Port-Of: odoo/enterprise#101511
This update resolves a failing test related to the layout of a key report. The team has switched from using XML-based actions to Python dictionaries, requiring a change in how test comparisons are made. This ensures the report layout functions correctly.
Original PR description
In this commit, we change the comparision for `xml_id` in test_action_send_report test with the view_id instead because the we are removing the action xml and replacing it with the python dict action instead. So it's better to compare the view_xml_id instead task-5366725
This update corrects a minor issue in the Swiss payroll module (l10n_ch_hr_payroll_elm_transmission_5_3) by adding a required group to the teleworking field. This ensures accurate data transmission to tax authorities, complying with Swiss regulations and preventing potential reporting errors.
Original PR description
Forward-Port-Of: odoo/enterprise#101691
Code cleanup and technical improvements
This update streamlines Odoo's database queries by removing inefficient dynamic SQL usage. This change focuses on optimizing performance and reducing potential database load, leading to faster application response times. It's a technical update designed to enhance the overall stability and speed of the Enterprise edition.
Original PR description
Removes most / all dynamic SQL queries which don't use the `SQL` wrapper or misuse it.
31 changes
Enhancements to existing features
This pull request improves the user experience and stability of expense processing using Stripe virtual cards. Key changes include visual updates to card displays, automated expense approval for Stripe card users, and fixes related to data synchronization and error handling during card shipping status updates. These improvements streamline the expense workflow and ensure accurate tracking.
Original PR description
- Create Expense at the authorization instead of the capture
- Send a mail when a virtual card is assigned to someone
- Correct text inside card pause dialog
- Improve card look:
- Align date, pin and copy button on the card
- Fix physical card pin number not visible with dark mode
- Fix date horizontal alignment on pending physical cards
- Add Unlimited as placeholder on cards payement limits
task-4860676Resolved issues and error corrections
This update fixes an issue in the VAT Simple tax export report. It now accurately filters tax amounts to include only standard VAT taxes, as defined by the `l10n_ar_vat_afip_code` field. This ensures more precise and reliable financial reporting for Argentina.
Original PR description
The VAT Simple tax export should only report tax amounts from taxes that are standard VAT taxes, not all taxes. This is represented in l10n_ar via the `l10n_ar_vat_afip_code` field on the tax group. opw-5385508
This update fixes an accounting error related to invoices in Vietnam (l10n_vn). Previously, the system incorrectly created entries for both receivable and payable accounts for 'Unearned Revenue' (account 3387). Changing the account type to 'Current Liabilities' ensures accurate financial reporting and prevents mismatched balances.
Original PR description
When posting an invoice, the system creates: - Journal Entry: Dr 131 (Receivable) / Cr 511 Then the system creates a deferral entry: - Deferral entry: Dr 511 / Cr 3387 (Payable) Falsifying the…
When posting an invoice, the system creates: - Journal Entry: Dr 131 (Receivable) / Cr 511 Then the system creates a deferral entry: - Deferral entry: Dr 511 / Cr 3387 (Payable) Falsifying the Balance sheet report, in the accounts receivable and accounts payable indicators The issue was that account 3387 was configured as `Payable`, which caused the system to generate both Receivable (131) and Payable (3387) for the same partner. This is incorrect because account 3387 represents "Unearned Revenue", which is a current liability, not a payable account. By changing the account type from `Payable` to `Current Liabilities`, the deferral entry now correctly reflects that 3387 is a current liability account, preventing the incorrect reconciliation behavior where both receivable and payable entries were created for the same partner. After this fix: - Entry: Dr 131 (Receivable) / Cr 511 - Deferral: Dr 511 / Cr 3387 (Current Liabilities) 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#238807 Forward-Port-Of: odoo/odoo#237493
This update simplifies the handling of MPF payments in the Hong Kong accounting module. Previously, separate payments were registered, creating complexity. Now, MPF accounts are set to be unreconcilable by default, directing accountants to reconcile directly with the government platform, streamlining the process.
Original PR description
Currently, we register two separate payments for MPF at the same time as we do for the employee's wages. This is not what we want to do; as both are not paid at the same time. MPF is also handled separately, and paid outside of Odoo on the government platform, making the registration of separate payments more complex for not many benefits. Thus, we make these accounts un-reconcilable by default, and will expect accountants to reconcile the statement with the account directly. task-5349299 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238074
This update resolves an issue where email templates were not rendering correctly due to differences in how HTML was parsed. The change ensures that all HTML elements, except for void elements, are properly closed, resulting in consistent and accurate email formatting. This prevents errors and ensures emails display as intended.
Original PR description
**Step to Reproduce:** - install Subscription (with demo data) - try to edit `Subscription: Payment Reminder` email template **Observation:** - Traceback for faulty template **Cause** For outgoing…
**Step to Reproduce:**
- install Subscription (with demo data)
- try to edit `Subscription: Payment Reminder` email template
**Observation:**
- Traceback for faulty template
**Cause**
For outgoing mails, we are using output_method = 'xml' when normalizing html content
https://github.com/odoo/odoo/blob/cb5176df98490ef04c0aac481f010bd2ac2f2424/odoo/orm/fields_textual.py#L580-L587
when this content is parsed using DOMParser in browser,
https://github.com/odoo/odoo/blob/cb5176df98490ef04c0aac481f010bd2ac2f2424/addons/html_editor/static/src/html_migrations/html_upgrade_manager.js#L61-L63
we might get different result.
For a very basic template like this:
```
<div>
<t t-if="ctx.get('error')">
<pre t-out="ctx['error'] or ''" />.
</t>
<t t-else="">
<span>some text</span>
</t>
</div>
```
when parsed using Domparser(), return a faulty template:
```
<div>
<t t-if="ctx.get('error')">
<pre t-out="ctx['error'] or ''">.
<t t-else="">
<span>some text</span>
</t>
</pre>
</t>
</div>
```
Issue roots because of use of self-closing tags, which are valid for xml but not for html
**Fix:**
- we forcefully replace all self-closing tags(which are not void elements) with a closing tag.
- see list of void elements https://developer.mozilla.org/en-US/docs/Glossary/Void_element
opw-5234345
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#238695
Forward-Port-Of: odoo/odoo#235924This update fixes a problem where old work entries persisted across different version schedules. The change ensures that outdated work entries are automatically removed when a new version with a different schedule is created, maintaining accurate record-keeping. This improves data consistency and simplifies reporting.
Original PR description
Problem ---------- When we create a new version with a new working schedule, it will generate correct work entries (because no one was generated for this version before) But it will not remove the previous one for the other previous versions. Solution ---------- Nullify work entries if outside the valid period of the version if they were already created before. task-5065139 Forward-Port-Of: odoo/odoo#232658
This update resolves an issue where marking multiple manufacturing orders as done simultaneously caused an error. The fix ensures accurate handling of different unit of measure (UoM) quantities when completing multiple orders, improving data integrity and preventing disruptions to the workflow. This change focuses on a technical detail related to precision rounding within the MRP module.
Original PR description
Currently, an error occurs when user marks multiple Manufacturing Orders as Done. **Steps to Reproduce…
Currently, an error occurs when user marks multiple Manufacturing Orders as Done.
**Steps to Reproduce ([Video](https://drive.google.com/file/d/1XfkMB001rMiyulRGrP4dlJFDYByo_5Bv/view?usp=drive_link)):**
- Install the `mrp` module.
- Go to `Settings` and enable `Units of Measure & Packagings`.
- Go to `Products and `create two products` with different `units of measure`.
- Go to `Manufacturing Orders`, create a manufacturing order by `adding one of the products`, and then `create work order` in the Work Orders section and `confirm` it.
- Create another `manufacturing order` with the `same quantity` for the second product and add a `Work Order` for it as well and `confirm` it.
- Go to the `list view`, select `both orders`, and click `Mark as Done` from the `Actions` menu.
**Error:**
```
ValueError: ValueError('Expected singleton: uom.uom(4, 6)') while evaluating
"if records:\n res = records.filtered(lambda mo: mo.state in {'confirmed', 'to_close', 'progress'}).button_mark_done()\n if res is not True:\n action = res"
ValueError: Expected singleton: uom.uom(4, 6)
```
After [this commit], which improves the performance of button_finish, when a user marks multiple orders as done with the same quantity but different uom , it creates all_vals_dict based on the vals[1] data as the key and the work order as the value[2]. Then it stores two or more work orders with different UoMs under the same vals key. When attempting to write multiple work orders[3], the precision rounding is calculated, which raises the error[4] due to multiple UoMs.
The commit ensures that when writing records, precision_rounding is calculated separately for each Work Order's UoM.
[this commit]: https://github.com/odoo/odoo/pull/223715/commits/b857d192085a38b612335223d04f8bdff91b898c
[1]- https://github.com/odoo/odoo/blob/186a9eb4a6c55c9c4c2178d4b2492a9a23a267fe/addons/mrp/models/mrp_workorder.py#L698-L703
[2]- https://github.com/odoo/odoo/blob/186a9eb4a6c55c9c4c2178d4b2492a9a23a267fe/addons/mrp/models/mrp_workorder.py#L706
[3]- https://github.com/odoo/odoo/blob/186a9eb4a6c55c9c4c2178d4b2492a9a23a267fe/addons/mrp/models/mrp_workorder.py#L708
[4]- https://github.com/odoo/odoo/blob/186a9eb4a6c55c9c4c2178d4b2492a9a23a267fe/addons/mrp/models/mrp_workorder.py#L477
sentry-7050854871
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#238934
Forward-Port-Of: odoo/odoo#238086This update fixes an issue where timesheet values were incorrectly displayed in project updates. A recent change in how the system handles time conversions led to an extra conversion step, resulting in incorrect day counts. This change ensures accurate timesheet time is shown in project updates, particularly when using the 'Days/Half-days' encoding method.
Original PR description
Similar to: 0104cee Steps to reproduce: -------------------- 1. Install hr_timesheet 2. Create a new project and a task 3. On the task, add a timesheet line with some time (e.g., 16 hours) 4. Open…
Similar to: 0104cee Steps to reproduce: -------------------- 1. Install hr_timesheet 2. Create a new project and a task 3. On the task, add a timesheet line with some time (e.g., 16 hours) 4. Open the project dashboard > create a new project update > observe the timesheet time 5. Go to Timesheets > Configuration > Settings 6. Set "Encoding method" to "Days/Half-days" 7. Reopen the project dashboard > create another project update > observe the timesheet time again Issue: ------ Incorrect value displayed in the Timesheets. (e.g., 16 Days instead of 2 Days) Cause: ------- After commit 28b69da, the UoM model was restructured, changing how conversions between hours and days are computed. https://github.com/odoo/odoo/blob/aeda822db05b218fd1271c7666307950b7a98512/addons/hr_timesheet/models/project_project.py#L137-L143 The `total_timesheet_time` value is now already stored in the final unit (e.g., days). Whenever a new project update is created, the division in `create()` performs an unnecessary second conversion on an already converted value, causing the incorrect display. https://github.com/odoo/odoo/blob/583bacdc8ad2b87b99b11d1e12dacf6e42edf22b/addons/hr_timesheet/models/project_update.py#L36-L37 Solution: ---------- This commit ensures accurate conversion of timesheet values between hours and days. opw-5184077 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237532
This update resolves an issue where the 'picked' status on a stock move remained marked after undoing a package action. The fix ensures the 'picked' status is correctly reset when a package is undone, preventing disruptions in availability checks. This improves the reliability of inventory management.
Original PR description
### Issue: To reproduce the bug: 1. Activate `Packages` settings in Inventory: 2. Activate `Move entire packages` on picking type `delivery orders` 3. Create new product `Test move package` 4. Update…
### Issue:
To reproduce the bug:
1. Activate `Packages` settings in Inventory:
2. Activate `Move entire packages` on picking type `delivery orders`
3. Create new product `Test move package`
4. Update quantity in `WH/Stock` with a newly created package and a qty (eg 5)
5. Go to the delivery orders and create a new picking with the created product and a quantity of 5
6. Click on `Mark as Todo`, the picking is set as ready and a package level is created automatically to move the quantity we did put in stock in the package.
7. Mark the checkbox `Done` on the package level (this will mark the move line and the move as picked)
8. Unmark the checkbox `Done` on the package level.
The package level is deleted, as well as the stock move line,
but the stock move still has the checkbox picked that is
marked.
The picking is then in waiting state and we cannot check
availability again.
Currently to be able to check the availability, the picked
check should be undone manually.
### Cause of issue
Currently, in `_compute_picked` in `stock_move`, we don't
update value of move.picked if there is `no move_line_ids`
present which is wrong.
### Fix:
In the fix, picked is set to False when there no
`move_line_ids`
### Issue 2
This fix cause another issue, in which the move loses its `picked` status after manually setting the done quantity when no stock was initially available,
### Cause of issue 2
To be more specific this fix on `_compute_picked`
```diff
- elif move.move_line_ids:
move.picked = False
+ else:
move.picked = False
```
has the following side effect:
- On a confirmed picking, pick a move with a quantity of 0 then change the quantity to 10 the move is unpicked -> undesirable.
After you picked the move, when you set the quantity, you will set `move_line_ids` on your move to match the quantity increase here:
https://github.com/odoo/odoo/blob/57c0ce5f0af9b46c037759d85205bc3e88890af7/addons/stock/models/stock_move.py#L2157-L2165
However,`self._set_quantity_done_prepare_vals(qty)` does not return a `stock.move.line` record set but a `Command.create` whose values do not contain any info on the picked value of the move *line*:
https://github.com/odoo/odoo/blob/57c0ce5f0af9b46c037759d85205bc3e88890af7/addons/stock/models/stock_move.py#L1497-L1507
The fact that the `move_line_ids` is set on the move to this command.create, flags the `picked` field of the stock move to dirty and adds it to the field to recompute because of the dependency `move_line_ids.state`:
https://github.com/odoo/odoo/blob/57c0ce5f0af9b46c037759d85205bc3e88890af7/addons/stock/models/stock_move.py#L208-L209
https://github.com/odoo/odoo/blob/57c0ce5f0af9b46c037759d85205bc3e88890af7/odoo/api.py#L795-L800
THEN, the creation of the move.line happends and since the value of the picked was not set in the command.create, we populate it based on the picked value of the move:
https://github.com/odoo/odoo/blob/57c0ce5f0af9b46c037759d85205bc3e88890af7/addons/stock/models/stock_move_line.py#L347-L348
However, at this point since the picked value of the move has been flagged as dirty it is recomputed using the `compute_method` modified in our fix.
And since the move does not have any move line at this stage, it is computed to be picked = False resetting the picked value.
### Fix of Issue 2:
We should set the picked values in the vals here:
https://github.com/odoo/odoo/blob/57c0ce5f0af9b46c037759d85205bc3e88890af7/addons/stock/models/stock_move.py#L1497-L1507
opw-4964561
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#222034This update corrects a technical issue where text labels from buttons (specifically the 'confirm-title' attribute) were not being included in Odoo's translation files. This ensures these messages can be properly translated and displayed correctly in the user interface for all languages. This improves the localization process and user experience.
Original PR description
Description of the issue/feature this PR addresses: The texts from the "confirm-title" attribute of a <button> tag are missing from the POT files. Current behavior before PR: In this line there is a text (the caption of the confirmation window): https://github.com/odoo/odoo/blob/19.0/addons/mass_mailing/views/mailing_mailing_views.xml#L66 "Ready to unleash emails?" - This text is missing from the POT file. Desired behavior after PR is merged: * These texts will apeear in POT files. * Someone needs to translated them * It will show up as translated texts in UI --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue that previously stopped users from creating new Amazon accounts for new companies. The fix ensures that the system correctly handles the absence of warehouses and stock locations when a company is initially set up, preventing a technical error.
Original PR description
Currently, an error occurs when user tries to create a new amazon account on a new company. Steps to replicate: - Install `sale_amazon`. - Create a new company and switch to it. - Go to Settings >…
Currently, an error occurs when user tries to create a new amazon account on a new company.
Steps to replicate:
- Install `sale_amazon`.
- Create a new company and switch to it.
- Go to Settings > Amazon account > Try to Create a new account.
Error:
```
File /home/odoo/odoo18/enterprise/sale_amazon/models/amazon_account.py, line 214, in create
'location_id': parent_location_data[0]['view_location_id'][0],
IndexError: list index out of range
```
Cause:
- Whenever a new company is created, it doesnt have any warehouses [1] and amazon stock locations [2].
- This causes the `parent_location_data` to be an empty list and causes error at line [3].
Solution:
- Assigning the `location_id` if the `parent_location_data` exists.
[1]: https://github.com/odoo/enterprise/blob/23f085bdba333807a25a2d41214b25f474c7edf8/sale_amazon/models/amazon_account.py#L206-L210
[2]: https://github.com/odoo/enterprise/blob/23f085bdba333807a25a2d41214b25f474c7edf8/sale_amazon/models/amazon_account.py#L201-L204
[3]: https://github.com/odoo/enterprise/blob/23f085bdba333807a25a2d41214b25f474c7edf8/sale_amazon/models/amazon_account.py#L214
sentry-7086464738
Forward-Port-Of: odoo/enterprise#101465This update corrects a discrepancy in the number of employees flagged with invalid bank account warnings within the payroll dashboard. The fix ensures accurate reporting by uniquely identifying employees and optimizing database queries to avoid redundant data processing. This improves the reliability of payroll reporting.
Original PR description
description: - `warning_count` for `hr_payroll_dashboard_warning_employee_invalid_bank_account` is wrong when there are multiple versions for a single employee. steps to reproduce: - install `hr_payroll_account_iso20022` - open Payroll (note: have atleast one employee with multiple versions) - find "Employees With Invalid IBAN Bank Accounts" warning on the dashboard - note the count and click on it, the record count differs fix: - returned unique employee ids from `_get_invalid_iban_employee_ids` - also optimized the query in `_get_account_holder_employees_data` method. reasoning: we do not need bank account data from all the versions, because all the versions share same bank account data. task-5252854
A memory issue occurred during the search for sale order lines related to deferred revenue, specifically when filtering based on invoiced and delivered dates. This resulted in a crash due to excessive memory consumption during the optimization process. The fix addresses the underlying issue in the domain optimization logic.
Original PR description
**Description:** - The ir.actions.act_window [Invoices To Be Issued and Invoiced Not…
**Description:**
- The ir.actions.act_window [Invoices To Be Issued and Invoiced Not Delivered](https://github.com/odoo/enterprise/blob/19.0/sale_account_accountant/views/sale_order_line_views.xml#L73-L91) menus from the sale_account_accountant module were causing memory errors on databases with millions of sale.order.line records. These actions call [_search_invoice_to_be_issued and _search_deferred_revenue](https://github.com/odoo/enterprise/blob/master/sale_account_accountant/models/sale_order_line.py#L17-L29), which iterate over all lines and access the non-stored computed fields [qty_delivered_at_date](https://github.com/odoo/odoo/blob/master/addons/sale/models/sale_order_line.py#L905) and [qty_invoiced_at_date](https://github.com/odoo/odoo/blob/master/addons/sale/models/sale_order_line.py#L985) As a result, qty_delivered and qty_invoiced were repeatedly recomputed, leading to excessive memory usage.
- To fix this, we now pre-fetch these fields so the compute method can directly use the values already loaded in memory.
```
matu_3306966_19.0=> select count(*) from sale_order_line;
count
---------
2159957
(1 row)
```
**Traceback1:**
```
2025-12-03 07:02:25,973 9344 ␛[1;31m␛[1;49mERROR␛[0m matu_3306966_19.0 odoo.addons.base.maintenance.migrations.base.testsodoo.upgrade.base.tests.test_mock_crawl: Adding menu ('sale_account_accountant.menu_sale_order_line_accrual_to_bill_action', 1295, 'Accounting > Review > Sales > Invoices To Be Issued', 2690) to the failing menus
Traceback (most recent call last):
File "/tmp/tmpe9cqlr9_/migrations/base/tests/test_mock_crawl.py", line 333, in crawl_menu
self.mock_action(action_vals)
File "/tmp/tmpe9cqlr9_/migrations/base/tests/test_mock_crawl.py", line 346, in mock_action
return self.mock_act_window(action)
File "/tmp/tmpe9cqlr9_/migrations/base/tests/test_mock_crawl.py", line 506, in mock_act_window
mock_method(model, view, fields_list, domain, group_by)
File "/tmp/tmpe9cqlr9_/migrations/base/tests/test_mock_crawl.py", line 644, in mock_view_list
return self.mock_view_tree(model, view, fields_list, domain, group_by)
File "/tmp/tmpe9cqlr9_/migrations/base/tests/test_mock_crawl.py", line 655, in mock_view_tree
self.mock_web_read_group(model, view, domain, group_by, fields_list, limit_group=5)
File "/tmp/tmpe9cqlr9_/migrations/base/tests/test_mock_crawl.py", line 713, in mock_web_read_group
data = model.web_read_group(domain, [groupby], aggregates, limit=limit)["groups"]
File "/home/odoo/src/odoo/19.0/addons/web/models/models.py", line 397, in web_read_group
groups, length = self._formatted_read_group_with_length(
File "/home/odoo/src/odoo/19.0/addons/web/models/models.py", line 465, in _formatted_read_group_with_length
groups = self.formatted_read_group(
File "/home/odoo/src/odoo/19.0/addons/web/models/models.py", line 830, in formatted_read_group
groups = self._read_group(
File "/home/odoo/src/enterprise/19.0/sale_account_accountant/models/sale_order_line.py", line 33, in _read_group
return self._read_group_for_accrual(domain, groupby, aggregates, having, offset, limit, order)
File "/home/odoo/src/enterprise/19.0/account_accountant/models/analytic_mixin.py", line 21, in _read_group_for_accrual
return super()._read_group(domain, groupby, aggregates, having, offset, limit, order)
File "/home/odoo/src/odoo/19.0/odoo/orm/models.py", line 1904, in _read_group
query = self._search(domain)
File "/home/odoo/src/odoo/19.0/odoo/orm/models.py", line 5361, in _search
domain = domain.optimize_full(self)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 445, in optimize_full
return self._optimize(model, OptimizationLevel.FULL)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 459, in _optimize
previous, domain = domain, domain._optimize_step(model, next_level)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 653, in _optimize_step
children = self._flatten(child._optimize(model, level) for child in self.children)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 608, in _flatten
for child in children:
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 653, in <genexpr>
children = self._flatten(child._optimize(model, level) for child in self.children)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 459, in _optimize
previous, domain = domain, domain._optimize_step(model, next_level)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 957, in _optimize_step
domain = self._optimize_field_search_method(model)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 1016, in _optimize_field_search_method
return Domain.OR(Domain(field.determine_domain(model, '=', v), internal=True) for v in value)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 309, in OR
return DomainOr.apply(Domain(item) for item in items)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 595, in apply
children = cls._flatten(items)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 608, in _flatten
for child in children:
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 309, in <genexpr>
return DomainOr.apply(Domain(item) for item in items)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 1016, in <genexpr>
return Domain.OR(Domain(field.determine_domain(model, '=', v), internal=True) for v in value)
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 1921, in determine_domain
return determine(self.search, records, operator, value)
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 81, in determine
return needle(*args)
File "/home/odoo/src/enterprise/19.0/sale_account_accountant/models/sale_order_line.py", line 28, in _search_invoice_to_be_issued
ids = [line.id for line in so_lines if line.qty_invoiced_at_date < line.qty_delivered_at_date]
File "/home/odoo/src/enterprise/19.0/sale_account_accountant/models/sale_order_line.py", line 28, in <listcomp>
ids = [line.id for line in so_lines if line.qty_invoiced_at_date < line.qty_delivered_at_date]
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 1737, in __get__
self.compute_value(recs)
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 1908, in compute_value
records._compute_field_value(self)
File "/home/odoo/src/odoo/19.0/addons/base_automation/models/base_automation.py", line 907, in _compute_field_value
return _compute_field_value.origin(self, field)
File "/home/odoo/src/odoo/19.0/odoo/orm/models.py", line 4949, in _compute_field_value
determine(field.compute, self)
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 81, in determine
return needle(*args)
File "/home/odoo/src/odoo/19.0/addons/sale/models/sale_order_line.py", line 989, in _compute_qty_invoiced_at_date
line.qty_invoiced_at_date = line.qty_invoiced
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 1693, in __get__
recs._fetch_field(self)
File "/home/odoo/src/odoo/19.0/odoo/orm/models.py", line 3769, in _fetch_field
self.fetch(fnames)
File "/home/odoo/src/odoo/19.0/odoo/orm/models.py", line 3809, in fetch
fetched = self._fetch_query(query, fields_to_fetch)
File "/home/odoo/src/odoo/19.0/odoo/orm/models.py", line 3930, in _fetch_query
field._insert_cache(fetched, values)
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 1600, in _insert_cache
collections.deque(map(field_cache.setdefault, records._ids, values), maxlen=0)
MemoryError
```
**Traceback2:**
```
2025-12-03 07:02:30,098 9344 ␛[1;31m␛[1;49mERROR␛[0m matu_3306966_19.0 odoo.addons.base.maintenance.migrations.base.testsodoo.upgrade.base.tests.test_mock_crawl: Adding menu ('sale_account_accountant.menu_sale_order_line_accrual_deferred_revenues_action', 1296, 'Accounting > Review > Sales > Invoiced Not Delivered', 2691) to the failing menus
Traceback (most recent call last):
File "/tmp/tmpe9cqlr9_/migrations/base/tests/test_mock_crawl.py", line 333, in crawl_menu
self.mock_action(action_vals)
File "/tmp/tmpe9cqlr9_/migrations/base/tests/test_mock_crawl.py", line 346, in mock_action
return self.mock_act_window(action)
File "/tmp/tmpe9cqlr9_/migrations/base/tests/test_mock_crawl.py", line 506, in mock_act_window
mock_method(model, view, fields_list, domain, group_by)
File "/tmp/tmpe9cqlr9_/migrations/base/tests/test_mock_crawl.py", line 644, in mock_view_list
return self.mock_view_tree(model, view, fields_list, domain, group_by)
File "/tmp/tmpe9cqlr9_/migrations/base/tests/test_mock_crawl.py", line 655, in mock_view_tree
self.mock_web_read_group(model, view, domain, group_by, fields_list, limit_group=5)
File "/tmp/tmpe9cqlr9_/migrations/base/tests/test_mock_crawl.py", line 713, in mock_web_read_group
data = model.web_read_group(domain, [groupby], aggregates, limit=limit)["groups"]
File "/home/odoo/src/odoo/19.0/addons/web/models/models.py", line 397, in web_read_group
groups, length = self._formatted_read_group_with_length(
File "/home/odoo/src/odoo/19.0/addons/web/models/models.py", line 465, in _formatted_read_group_with_length
groups = self.formatted_read_group(
File "/home/odoo/src/odoo/19.0/addons/web/models/models.py", line 830, in formatted_read_group
groups = self._read_group(
File "/home/odoo/src/enterprise/19.0/sale_account_accountant/models/sale_order_line.py", line 33, in _read_group
return self._read_group_for_accrual(domain, groupby, aggregates, having, offset, limit, order)
File "/home/odoo/src/enterprise/19.0/account_accountant/models/analytic_mixin.py", line 21, in _read_group_for_accrual
return super()._read_group(domain, groupby, aggregates, having, offset, limit, order)
File "/home/odoo/src/odoo/19.0/odoo/orm/models.py", line 1904, in _read_group
query = self._search(domain)
File "/home/odoo/src/odoo/19.0/odoo/orm/models.py", line 5361, in _search
domain = domain.optimize_full(self)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 445, in optimize_full
return self._optimize(model, OptimizationLevel.FULL)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 459, in _optimize
previous, domain = domain, domain._optimize_step(model, next_level)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 653, in _optimize_step
children = self._flatten(child._optimize(model, level) for child in self.children)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 608, in _flatten
for child in children:
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 653, in <genexpr>
children = self._flatten(child._optimize(model, level) for child in self.children)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 459, in _optimize
previous, domain = domain, domain._optimize_step(model, next_level)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 957, in _optimize_step
domain = self._optimize_field_search_method(model)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 1016, in _optimize_field_search_method
return Domain.OR(Domain(field.determine_domain(model, '=', v), internal=True) for v in value)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 309, in OR
return DomainOr.apply(Domain(item) for item in items)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 595, in apply
children = cls._flatten(items)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 608, in _flatten
for child in children:
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 309, in <genexpr>
return DomainOr.apply(Domain(item) for item in items)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 1016, in <genexpr>
return Domain.OR(Domain(field.determine_domain(model, '=', v), internal=True) for v in value)
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 1921, in determine_domain
return determine(self.search, records, operator, value)
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 81, in determine
return needle(*args)
File "/home/odoo/src/enterprise/19.0/sale_account_accountant/models/sale_order_line.py", line 21, in _search_deferred_revenue
ids = [line.id for line in so_lines if line.qty_invoiced_at_date > line.qty_delivered_at_date]
File "/home/odoo/src/enterprise/19.0/sale_account_accountant/models/sale_order_line.py", line 21, in <listcomp>
ids = [line.id for line in so_lines if line.qty_invoiced_at_date > line.qty_delivered_at_date]
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 1737, in __get__
self.compute_value(recs)
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 1908, in compute_value
records._compute_field_value(self)
File "/home/odoo/src/odoo/19.0/addons/base_automation/models/base_automation.py", line 907, in _compute_field_value
return _compute_field_value.origin(self, field)
File "/home/odoo/src/odoo/19.0/odoo/orm/models.py", line 4949, in _compute_field_value
determine(field.compute, self)
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 81, in determine
return needle(*args)
File "/home/odoo/src/odoo/19.0/addons/sale/models/sale_order_line.py", line 989, in _compute_qty_invoiced_at_date
line.qty_invoiced_at_date = line.qty_invoiced
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 1693, in __get__
recs._fetch_field(self)
File "/home/odoo/src/odoo/19.0/odoo/orm/models.py", line 3769, in _fetch_field
self.fetch(fnames)
File "/home/odoo/src/odoo/19.0/odoo/orm/models.py", line 3809, in fetch
fetched = self._fetch_query(query, fields_to_fetch)
File "/home/odoo/src/odoo/19.0/odoo/orm/models.py", line 3930, in _fetch_query
field._insert_cache(fetched, values)
File "/home/odoo/src/odoo/19.0/odoo/orm/fields_textual.py", line 243, in _insert_cache
super()._insert_cache(records, values)
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 1600, in _insert_cache
collections.deque(map(field_cache.setdefault, records._ids, values), maxlen=0)
MemoryError
```
- opw-5238152, 5269996
- upg-3306966, 3444833
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 change prevents distracting audio notifications during local testing of Odoo. It addresses a common frustration for developers encountering unexpected sounds from their systems, particularly old ringtones. This improves the testing experience and reduces interruptions.
Original PR description
When running tests locally, it's really annoying (and sometimes really jarring / surprising) to hear random beeps and boops from your machine, especially when it's an old timey ringtone from voip. Make it stop. Forward-Port-Of: odoo/odoo#238906 Forward-Port-Of: odoo/odoo#238882
This update fixes an issue where custom highlights with filling colors appeared darker than intended. By adjusting the opacity of these highlights, the blending of stroke and fill is now handled correctly, resulting in a cleaner and more consistent visual appearance. This improves the overall user experience when using the website's text editor.
Original PR description
We can use custom colors on highlights using the inline text editor, and when the highlight isn't a line (e.g., has a filling inside) and we set its color to have a different opacity than 100%, we can see the stroke and the filling overlap, and the semi-transparent colors blend together, creating a darker appearance along the edges. To see the issue: - Open the website and start editing - Select any text and apply a highlight with a filling, for example, freehand_3 - Click on Color, open the "Custom" tab, and slide the opacity slider down -> Observe the darker appearance along the edges of the highlight, which happens because the highlight svg has both `fill` and `stroke`. task-5104135
This update resolves an issue where the correct group wasn't being assigned to the teleworking field in the payroll module for Switzerland (l10n_ch_hr_payroll). This ensures accurate reporting and compliance with Swiss tax regulations related to remote work arrangements. The change improves the accuracy of payroll calculations.
Original PR description
Forward-Port-Of: odoo/enterprise#101691
This update addresses a restriction in the Enterprise version of Odoo's expense reporting system. Previously, expense reports using Stripe cards were automatically rejected based on validation rules. This change now allows for manual overrides, ensuring that expense reports can be approved regardless of the initial validation status. This improves flexibility and reduces potential delays in processing expense reports.
Original PR description
We need in the enterprise PR to change the autovalidation condition for stripe expense cards. task-4860676 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where product packages weren't correctly associated with their company during packing operations. The previous comparison logic incorrectly linked packages to company records, leading to inaccurate data. This change ensures packages are properly linked to their associated company, improving inventory tracking and reporting.
Original PR description
Steps to reproduce: - Have two packs, A & B - Put something in pack A - Put pack A in pack B Issue: Despite pack A having both a location & a company set, only the location is set on pack B. Due to a faulty comparison, we compare package records with company records, which means the `all()` condition will never be true. Fixes #236413 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where debugging employee records in the Saudi Arabia payroll module would generate errors due to a redundant, unused field. The field has been removed, streamlining the system and improving stability. This change aligns with our stable policy and ensures consistent data management.
Original PR description
### Issue: The field `l10n_sa_leaves_count_compensable` is a computed field with no compute method. When in debug mode, trying to look at the fields of an employee results in a traceback because of…
### Issue: The field `l10n_sa_leaves_count_compensable` is a computed field with no compute method. When in debug mode, trying to look at the fields of an employee results in a traceback because of this. ### Cause: This [forward port](https://github.com/odoo/enterprise/commit/4124dc4c13055d39d233d7ea9374b5191afdfcf2#diff-1d84d9d2c9ad02353f40d1b88baa5c66af063880df1e14459befd2d02d66cae5) had a conflict that was badly resolved by re-adding a previously deleted field. The field was replaced by `l10n_sa_remaining_annual_leave_balance` in [this commit](https://github.com/odoo/enterprise/commit/339bc032aa763c62d4dd27b73fc42488b3e1c3aa#diff-1d84d9d2c9ad02353f40d1b88baa5c66af063880df1e14459befd2d02d66cae5). [Failing FWP](https://github.com/odoo/enterprise/commit/b3f276d0d73a24faf322aa2ae8965c3d5aad4a87#diff-1d84d9d2c9ad02353f40d1b88baa5c66af063880df1e14459befd2d02d66cae5) ### Solution: We can no longer delete the field because of the stable policy. The solution is to remove the compute and add `store=False`. Then remove the field in master. opw-5352456
This update resolves an issue where the Website editor would crash when users pasted HTML code for embedded videos. The fix ensures the system correctly parses video URLs, preventing tracebacks and improving the reliability of video embedding functionality. This enhances the user experience when adding video backgrounds to website content.
Original PR description
Problem: A traceback occurs when adding an embedded video in the Website editor. Cause: The code uses `urlInput` as the URL source, but when an embed is pasted, `urlInput` contains HTML instead of a direct URL. Solution: Parse the `url` instead of using `urlInput` directly. Steps to reproduce: - Go to Website. - Add a slides snippet. - Change the background to video. - Paste embedded video HTML. - A traceback is triggered. opw-5265390 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where the approval date for expenses was incorrectly set to 1 AM. By using the current time, the system now accurately calculates the approval date, ensuring proper tracking of expense approvals. This improves the reliability of expense reporting.
Original PR description
When approving an expense, we compute the approval date. We used fields.Date.context_today(expense) that only the the date but the hours are set to 1 AM. By using field.Datetime.now() the hours are computed correctly. task-5262954 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where refund amounts in Point of Sale orders incorrectly inflated sales reports. The change ensures that refund totals accurately reflect zero, resolving miscalculations in the 'Untaxed Total' and 'Total' columns within the sales reporting interface. This improves the accuracy of sales data.
Original PR description
## Versions 19.0+ ## Issue Positive totals for refunds lead to miscalculation and wrong data in the sales report. A PoS order line and its refund should lead to a $0 total. ## Steps to reproduce *In…
## Versions
19.0+
## Issue
Positive totals for refunds lead to miscalculation and wrong data in the sales report. A PoS order line and its refund should lead to a $0 total.
## Steps to reproduce
*In the PoS app*
- Open a register:
- Sell 2 units of any product and process payment by cash;
- Validate payment;
- Navigate to "Orders" tab and filter on "Paid" orders (instead of "Active"):
- Select your latest order and refund 2 items;
- Process refund by cash and validate; *In the Sales app*
- Go to "Reporting > Sales" and change for list view:
- Display "Untaxed total" column;
- Filter on 2 last lines (by date and hour):
- The refund line has positive values for "Untaxed Total" and "Total column";
- The refund line has a "Untaxed Total" equal to the "Unit Price" but should be multiplied by the quantity;
- The bold totals are not equal to 0 for "Untaxed Total" and "Total" columns.
## Cause
Commit c5d4e4f73ac0474675414ee89555028b370f8e30 refactored all PoS taxes logic and there were some forgotten parts.
opw-5241438This update ensures Odoo IoT boxes can connect reliably, even with older database versions. The system now checks the IoT box's version and skips WebRTC usage if it's not compatible with the latest Odoo version, preventing connection issues. This improves compatibility and stability for IoT deployments.
Original PR description
Since odoo/odoo#238626, WebRTC support has been removed from the IoT box in `master` (19.1). However, since IoT boxes can now pair with older database versions, we need to be able to handle an IoT box that doesn't support WebRTC. This commit adds a check to the version field of the IoT box model, and if it matches the newer format used in 19.1+, WebRTC is skipped. task-5386539
This update corrects a bug in the Inventory at Date report that was preventing it from running correctly for certain products. The issue stemmed from the report incorrectly interpreting date inputs as strings, causing a comparison error. This change ensures the report accurately reflects inventory levels.
Original PR description
For products using lot valuation and real-time valuation, the Inventory at Date report may fail since the to_date value is provided as a string instead of a date or datetime object. This leads to a comparison error when generating the report. Steps to reproduce: - Create a product with lot tracking and real-time valuation, and lot valuated - Create and receive a purchase order for this product - Open Inventory > Reports > Inventory at Date - An error occurs due to a comparison between a string and a date opw-5362378
This update resolves a crash that occurred when users clicked the GIF picker within knowledge article comments. The fix adjusts how the composer picker identifies action placement, ensuring it correctly recognizes buttons within 'extra actions' like those found in chatter. This prevents the application from unexpectedly closing.
Original PR description
Before this commit, opening gif picker in a comment of a knowledge article would lead to crash. This happens because composer uses chatter visual, and pickers in composer picks either the quick or more node element as anchor of picker, depending on whether the action is in the quick or more action. In the case of knowledge article, the buttons are placed in extra actions like in chatter. However the picker placement was not taking into account this place, thus it fails to find action placement. This commit fixes the issue by adding support of extra actions as anchor for composer picker. Task-5163888
This update corrects a warning message related to date and duration calculations for work entries, specifically those linked to holidays. The change ensures that the system accurately prevents overlapping work entries, addressing a potential data inconsistency. This resolves a technical issue that could have impacted reporting accuracy.
Original PR description
Problem ---------- This warning message doesn't make sens with the transformation of work entries date_start/stop in date+duration. No overlap is possible. task-5349515
This update fixes an issue where attendance durations were incorrectly calculated when check-ins occurred before an employee's scheduled start time. Now, work entries are automatically generated upon attendance approval, streamlining the process and eliminating the need for manual intervention. This ensures accurate tracking of working hours and overtime.
Original PR description
Before this commit: - For an employee with a Working Schedule as the work entry source and a default overtime ruleset (which creates a specific work entry type for overtime hours), creating an…
Before this commit: - For an employee with a Working Schedule as the work entry source and a default overtime ruleset (which creates a specific work entry type for overtime hours), creating an attendance with a check-in earlier than the employee’s normal working schedule start was not handled correctly. The early portion was ignored, resulting in a wrong attendance work entry duration (e.g., 06:15 instead of 08:00). - Work entries were not created automatically when approving the attendance. The user had to click Reset to force the generation, which is not the intended workflow. After this commit: - Attendance boundaries are now correctly normalized against the employee’s Working Schedule, ensuring the full expected duration is taken into account, even when the check-in occurs before the official start time. - The overtime ruleset is applied correctly, and the generated intervals properly reflect both standard working hours and overtime hours. - Work entries are now automatically created upon approval of the attendance, removing the need for any manual Reset action. task-5082562
This update fixes an issue in the Purchase Order Comparison view where unit prices were incorrectly displayed based on the purchase order's unit of measure. The change now displays unit prices in the product's standard unit of measure, providing a more accurate comparison of purchase costs. This ensures better decision-making regarding purchasing quantities and pricing.
Original PR description
**Problem:** In the Purchase Comparison view the unit price is expressed in the uom of the purchase order line so two purchase order lines with different uom will be compared without the client…
**Problem:**
In the Purchase Comparison view the unit price is
expressed in the uom of the purchase order line
so two purchase order lines with different uom will
be compared without the client knowing it.
**Steps to reproduce:**
- create a new product
- set a unit cost of 1
- in the sales tab, in the packagings add
pack of 6
- Create and confirm a PO for 6 unit of this
product
- create and confirm a PO for 1 pack of 6 of
this product
- on the second PO click on the 'price comparison'
smart button
**Current behavior:**
The unit price average on the group by line
is 3.5.
If you click on the line you'll see that the
price unit for the second purchase order line
is expressed in the uom of the purchase order
line (so here it is 6$ per pack of 6).
So the average does not realy make sense.
**Cause of the issue:**
On the purchase order lines price_unit
is expressed in the UoM of the line and not the
uom of the product
**fix:**
We replace the unit price column by a column
with a unit price expressed in the uom of
the product.
The trade off is that, because the new field
is not stored, we don't have an average in
the group by line anymore.
opw-5220196This fix resolves an issue where the cost of goods sold (COGS) was incorrectly calculated for sales orders with partial deliveries. The update ensures accurate COGS calculation, either with a total COGS of 8.5 or separate values of 7 and 10, based on the order's delivery status. This improves financial reporting accuracy.
Original PR description
**Problem:** partial cogs are not correctly computed (no test in the commit, waiting for the new setup…
**Problem:**
partial cogs are not correctly computed
(no test in the commit, waiting for the new setup
https://github.com/odoo/odoo/blob/a3db18acf8010c989c17ea69ad8eb1f0d6bd6116/addons/sale_stock/tests/test_anglo_saxon_valuation.py#L15)
**Steps to reproduce:**
- create a storable product FIFO/Perpetual
- Order 1 unit of product at 7
- Receive
- Order a second unit at 10
- Receive
- Create SO of 2 units
- Deliver 1 with a backorder
- Invoice one
- Deliver the second
- Invoice remaining
**Current Behavior**:
The first invoice will show double the COGS it is
supposed to (14 instead of 7).
The second invoice shows proper COGS (10)
**Expected behavior:**
Either both cogs should be 8.5 or the first one 7 and
the second one 10.
**Cause of the issue:**
There is two issues here :
- *The first issue* is that when confirming the invoice,
_post() calls _set_value() on the moves.
https://github.com/odoo/odoo/blob/3ce8e3e4e8049eb009ed05bdc3a33275c9eec0d6/addons/stock_account/models/account_move.py#L42
In the case of a fifo move this is a problem because
run_fifo is going to be called and the value of the move
is going to be wrongly recomputed based on the current
fifo stack.
This issue can be illustrated by a simpler use case:
- fifo product
- one move in at 7, one move in at 10
- SO for one product and validate the delivery
- the value of the move is 7
- create and confirm invoice -> the value of the move is now 10
- *The second issue* is about the cogs computation :
in the case of a fifo product, _get_cogs_value() calls
_get_price_unit() on the moves of the sale order line
(fetched via _get_stock_moves()) to compute the unit price.
https://github.com/odoo/odoo/blob/a3db18acf8010c989c17ea69ad8eb1f0d6bd6116/addons/stock_account/models/account_move_line.py#L73
So when computing the cogs for the first invoice:
Inside _get_price_unit(), the value of our back order
move (not yet validated) will be taken into account
in the computation of total_value.
But because the stock move lines of this move are not
picked yet, it's quantity will not be taken into account in
the computation of total_qty (because get_valued_qty() calls
_get_out_move_line() which does not return the unpicked lines).
https://github.com/odoo/odoo/blob/a3db18acf8010c989c17ea69ad8eb1f0d6bd6116/addons/stock_account/models/stock_move.py#L217-L218
So the return value will be 14 (the value of the 2 moves)
divided by 1 (the quantity of only the first move)
**Fix**
There is two possibility for the cogs in this situation :
1) cogs of 7 on the first invoice and then later cogs of 10
on the second invoice
2) cogs of 8.5 on both invoices
In the current state of the code, the value of the second fifo
move (10) is not yet set, it will be set when the move is validated.
Therefore we have to go for option 1).
The first part of the fix is to be sure to fetch only 'done' moves
before using _get_unit_price.
The second part of the fix is to deduce the cogs already posted.
opw-5342803This update resolves an issue where the SHA512 hashing process in the Swedish SE-SIE import module was not correctly implemented. The fix ensures accurate data integrity for tax reporting, preventing potential errors and compliance issues. This update improves the reliability of the import process for Swedish businesses.
Original PR description
Forward-Port-Of: odoo/enterprise#101511
This update ensures that cart notification pop-ups accurately reflect the website's tax settings (included or excluded). Previously, the price displayed didn't align with the configured website tax rules. This change corrects a discrepancy between website and backend invoicing tax configurations, improving the customer experience.
Original PR description
The displayed price in the notification pop-up has to follow the website settings (tax included/excluded) and not the backend invoicing settings. **How to reproduce the issue:** Invoicing Taxes settings: Tax Prices = Tax Excluded Website settings: Display Product Prices = Tax Included **Description of the issue/feature this PR addresses:** The price on the cart notification doesn't include the tax while the website settings says it should. <img width="1107" height="569" alt="image" src="https://github.com/user-attachments/assets/629e89c9-a9c9-4932-b36b-97416e747d83" />
15 changes
Resolved issues and error corrections
This update corrects a critical issue where Swiss account translations were missing, specifically impacting payroll documents. The fix ensures all official payroll documents are consistently translated, preventing mixed language content and maintaining compliance. This improves the accuracy and professionalism of our Swiss accounting reports.
Original PR description
Some Swiss account translations were missing, mainly related to payroll. This resulted in payroll documents having mixed languages, which is not acceptable for official documents. opw-5343680 Forward-Port-Of: odoo/odoo#239001
This update fixes a bug where discounts applied to products tracked by lot were not appearing in the Point of Sale (POS) system. The fix adds the necessary discount line during the payment process, ensuring accurate pricing at the POS. This resolves a customer-reported issue impacting sales transactions.
Original PR description
When creating a sale order for a product, confirming it, Then, when paying for the order in the POS, the discount line is not available. Steps to reproduce: ------------------- * Create a product tracked by lot * Create a sale order for that same product and set the discount * Confirm the sale order * Pay the order in the POS > Observation: The discount line is not appearing. Why the fix: ------------ The customer applies the discount for the product, but it's not appearing in the POS. So I just added the discount line **Before Fix** <img width="485" height="202" alt="before_fix" src="https://github.com/user-attachments/assets/5c559569-8f89-4bfd-8fe8-5415b1236406" /> **After Fix** <img width="485" height="221" alt="after_fix" src="https://github.com/user-attachments/assets/e6aa7ea6-5ff9-4d66-ae56-d18ea25e2878" /> opw-5084170
This change prevents distracting audio notifications from appearing during Odoo tests. Previously, random beeps and ringtones could interrupt test runs, causing frustration. This update ensures a cleaner and more reliable testing environment.
Original PR description
When running tests locally, it's really annoying (and sometimes really jarring / surprising) to hear random beeps and boops from your machine, especially when it's an old timey ringtone from voip. Make it stop. Forward-Port-Of: odoo/odoo#238906 Forward-Port-Of: odoo/odoo#238882
This update resolves an issue where products with multiple identical attributes and optional products would cause website errors when adding to the cart. The fix ensures a more robust mapping of attributes, preventing configuration errors and allowing users to consistently add products to their carts. This improves the overall website stability and user experience.
Original PR description
Issue before this commit: ========================= When a product contains multiple attribute lines using the same attribute and also has optional products, attempting to add the product to the cart…
Issue before this commit:
=========================
When a product contains multiple attribute lines using the same attribute and
also has optional products, attempting to add the product to the cart from the
website resulted in a server error. The product configurator failed during
attribute-line processing, causing the Add to Cart button to crash.
Steps to Reproduce:
=========================
1. Install website_sale and enable product variants.
2. Create a product containing:
- Two or more attribute lines referencing the same attribute
- At least one optional product.
3. Publish the product on the website.
4. Go to the product page and click Add to Cart button.
Cause of the Issue:
=========================
The website product configurator assumes a one-to-one mapping between attribute
lines and their attributes.
When multiple attribute lines share the same attribute_id, the current mapping
logic builds an incomplete attribute map.
This causes a KeyError during configurator construction, leading to a error when
adding the product to the cart.
Related to this PR: https://github.com/odoo/odoo/pull/235170
With This Commit:
=========================
A safer attribute mapping mechanism is introduced, ensuring that each attribute
line even if sharing the same attribute always receives its own attribute data.
This prevents missing keys during configurator processing and allows products
with duplicate attribute lines and optional products to be added to the cart
without errors.
Steps To Reporduce: [Video Link](https://drive.google.com/file/d/1cKLNfJAOvp6IFTmoL4BtkGnZgIV7omta/view?usp=drive_link)
**opw-5361565**This update resolves an issue where the Czech VAT control statement incorrectly categorized invoices in foreign currency (specifically EUR). The fix ensures accurate reporting by correctly handling currency conversions and using the absolute value of the total amount for foreign currency transactions, improving the accuracy of VAT reporting for Czech businesses.
Original PR description
With l10n_cz_reports: - Create a currency exchange between CZK and EUR where the EUR is valued at least at twice the amount of CZK. - Create an invoice in EUR, with a line with price_unit 5000 and a tax. - In the CZ Tax Report, in the VAT control statement, the converted amount is found in section B.3, which contains received taxable supplies and provided payments up to CZK 10,000. However, the converted amount of the invoice in CZK is higher than 10,000. In `_report_custom_engine_control_statement`, the amount used to check whether the move should be included in this section uses `amount_total`, which in the case of foreign currency gives the wrong result. If the move is in a foreign currency the total is not in CZK so we have to use the absolute value of the signed total. opw-5080339
This update resolves an issue in the Swedish SIE import process where SHA512 hashing was not being correctly implemented. The fix ensures accurate data integrity during import, preventing potential data discrepancies and improving the reliability of the import functionality. This update is a critical fix for accurate financial reporting.
Original PR description
Forward-Port-Of: odoo/enterprise#101511
This update resolves an issue causing the Odoo scheduler to freeze in Firefox when sending multiple scheduled messages. The problem stemmed from an infinite loop triggered by reactivity on empty array slots. The fix prevents reactivity in these scenarios, improving stability and preventing user disruption.
Original PR description
**Steps to reproduce:** - (Firefox only) - Go to any record which uses a chatter (e.g. Contact) - Send message > Full composer > click the schedule message icon (lower right corner) - Schedule the…
**Steps to reproduce:**
- (Firefox only)
- Go to any record which uses a chatter (e.g. Contact)
- Send message > Full composer > click the schedule message icon (lower right corner)
- Schedule the message in the future and click send
- You should see now a post in the chatter indicating that the message will be sent
- Now click Send message and repeat the above steps again to schedule a second message
- Whole page will be freezed
- Reloading doesn't help
**Issue:**
Infinite loop in reactive callback on firefox.
The code gets stuck in
```js
for (const callback of [...callbacks]) {
clearReactivesForCallback(callback);
callback();
}
```
because of
```js
const sortProxy2 = reactive(recordProxy, function sortObserver() {
self.requestSort(record, fieldName);
});
this.fieldsSortProxy2.set(fieldName, sortProxy2);
```
which loops over `store._.ADD_QUEUE("sort", record, fieldName);`
(Forcing the `requestSort` only change the infinite loop into a recursion error)
The recomputation seems to be caused by `record[fieldName]` being an array filled with empty slots (previously deleted values). As to why it only happens on firefox, no idea, it's probably related to the design of the tracking on empty slots.
**Fix:**
Avoid reactivity when the value is an array with empty slots. The issue could also happen in other places (e.g. for the `computeProxy2`). Finding a better more reliable/generic fix would be great to avoid the issue on owl level.
related: https://github.com/odoo/odoo/commit/ba77db25c836cb692066cb9487842f7f683beaad
opw-5367371This update clarifies the documentation for the HTML Editor's position plugin, ensuring developers have a clearer understanding of its functionality. The change improves the clarity and maintainability of the HTML Editor's documentation. This ensures consistent and accurate information for developers.
Original PR description
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 introduces a new tax calculation for Italian VAT returns related to RA Agenti withholding, specifically addressing a 23% rate applied to 20% of the base. The changes involve updating export logic and mapping tax rates to ensure accurate reporting of this withholding tax. This ensures compliance with Italian tax regulations.
Original PR description
This commit adds a new RA Agenti withholding tax for the case where 23% is applied on 20% of the base (effective –4.6%) and ensure it is exported using the 23% rate. Key changes: - Added new tax: –4.6% (23% su 20% RA Agenti) - Updated name and invoice label of the existing –11.5% tax - Updated EDI export logic to map –11.5% → 23% and –4.6% → 23% task-5258180
This update resolves an issue where internal URLs (like 'blob:') within Odoo tests required a mock 'fetch' to work correctly. The fix ensures these URLs function seamlessly without the need for mocking, improving test reliability and streamlining the testing process. This change also enforces proper usage of test mocks.
Original PR description
Before this commit, internal URLs (i.e. "blob:" and "data:") required 'fetch' to be mocked to work. This is wierd because these requests are handled directly by the browser and shouldn't require any…
Before this commit, internal URLs (i.e. "blob:" and "data:") required
'fetch' to be mocked to work. This is wierd because these requests are
handled directly by the browser and shouldn't require any particular
manipulation from the (mocked) server.
This commit ensures that internal URLs still work without fetch being
mocked.
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update addresses a requirement from the Belgian Peppol Authority. The system now provides a warning to users attempting to register with the 9925 (BE VAT) method, as this is no longer the standard approach. While the 9925 method remains available for specific cases, the change ensures users understand the correct registration path.
Original PR description
The Belgian Peppol Authority wants us to register belgian users with 0208 (BCE/KBO) and not 9925 (BE VAT). It should still be possible to register with 9925 for some edge case, but let's make it clear to our users that this is not the regular path. task-none (feedback from support + TSB)
A recent update resolved a test failure within the l10n_be_hr_payroll module. The test was previously reliant on a fixed payslip date, leading to errors as the system moved forward. This change updates the payslip date to be relative, ensuring the test accurately reflects current payroll calculations.
Original PR description
Before this commit, the test `test_compute_double_holiday_withholding_taxes_with_3_children` was testing on a payslip that was set in 2024. As this test was based on a contract starting on the system's date -2, the test would start crashing in 2026. This commit changes the payslip date to make it relative instead of fixed runbot error 230738 Forward-Port-Of: odoo/enterprise#101348
This update fixes a potential error that could occur when confirming invoices with zero amounts. Specifically, the system was encountering a division-by-zero error during currency calculations. The fix adds a check to ensure the invoice total isn't zero before performing these calculations, improving invoice confirmation stability.
Original PR description
Steps to reproduce:
--------------------
1. Install l10n_cl and switch to the CL company
2. Create a new invoice:
- Change the currency to a value different from the company currency
(e.g., from CLP to USD)
- Add an invoice line with a price value of 0
- Remove the default tax value
3. Try to confirm the invoice
Issue:
------
A traceback occurs:
`ZeroDivisionError: float division by zero`
Cause:
------
Since the price value is 0, the `amount_total` of the move becomes 0.
When computing the currency rate, it tries to divides by `amount_total`, resulting in a ZeroDivisionError.
Solution:
---------
Add a conditional check before division to ensure the `amount_total` is non-zero
Related enterprise PR: https://github.com/odoo/enterprise/pull/99518
opw-5247058
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#235252This update fixes a potential error that could prevent invoices from being confirmed when specific currency and pricing settings are used. The fix adds a check to avoid division by zero, ensuring invoices can be processed correctly. This improves stability and prevents disruptions to financial workflows.
Original PR description
Steps to reproduce: -------------------- 1. Install l10n_cl and switch to the CL company 2. Create a new invoice: - Change the currency to a value different from the company currency (e.g., from CLP to USD) - Add an invoice line with a price value of 0 - Remove the default tax value 3. Try to confirm the invoice Issue: ------ A traceback occurs: `ZeroDivisionError: float division by zero` Cause: ------ Since the price value is 0, the `amount_total` of the move becomes 0. When computing the currency rate, it tries to divides by `amount_total`, resulting in a ZeroDivisionError. Solution: --------- Add a conditional check before division to ensure the `amount_total` is non-zero Related community PR: https://github.com/odoo/odoo/pull/235252 opw-5247058 Forward-Port-Of: odoo/enterprise#99518
This update resolves issues related to how production splitting and inventory state calculations are handled, particularly concerning work orders and reservations. The changes ensure accurate state computations, preventing errors and improving the reliability of production tracking within the MRP module. This addresses a bug impacting production splitting and related inventory processes.
Original PR description
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
6 changes
Resolved issues and error corrections
This update corrects a technical issue where the text displayed in the confirmation window of a button was not included in the translation files. This ensures that the text can be properly translated into different languages, improving the user experience for international users. The fix adds the necessary attribute to the XML file to allow for translation.
Original PR description
Description of the issue/feature this PR addresses: The texts from the "confirm-title" attribute of a tag are missing from the POT files. Current behavior before PR: In this line there is a text (the caption of the confirmation window): https://github.com/odoo/odoo/blob/19.0/addons/mass_mailing/views/mailing_mailing_views.xml#L66 "Ready to unleash emails?" - This text is missing from the POT file. Desired behavior after PR is merged: * These texts will apeear in POT files * Someone needs to translated them * It will show up as translated texts in UI --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where large product images on the Shop page appeared blurred. The change ensures product images maintain their correct aspect ratio when displayed, providing a better visual experience for customers. This was achieved by adding a specific CSS class to control image scaling.
Original PR description
Steps to reproduce: =================== 1- Add a product with a very large image width & publish product. 2. Go to the Shop page & type product name. -> The product image is blurred. Cause: ====== The product images have `h-100 w-100` classes which force them to fill the container dimensions exactly, ignoring their intrinsic aspect ratio. Solution: ========= Add the `object-fit-contain` class to the image. This ensures the image scales to fit within the container while preserving its aspect ratio. Side note: `object-fit-contain` class will be added only in version 17.0 In the next versions the class already exists. opw-5258658 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
A test related to holiday tax calculations in the Belgian payroll module (l10n_be_hr_payroll) was failing due to an outdated date setting on the payslip. This update changed the payslip date to a relative one, resolving the crash that occurred in future years and ensuring the test continues to run correctly.
Original PR description
Before this commit, the test `test_compute_double_holiday_withholding_taxes_with_3_children` was testing on a payslip that was set in 2024. As this test was based on a contract starting on the system's date -2, the test would start crashing in 2026. This commit changes the payslip date to make it relative instead of fixed runbot error 230738 Forward-Port-Of: odoo/enterprise#101348
This update fixes a bug in the contact import process. Previously, if an import batch contained invalid data (like incorrect values), it wouldn't display any error messages. Now, the system will correctly identify and report these errors during batch imports, ensuring data integrity and preventing incorrect data from being added to the system.
Original PR description
Steps to reproduce ================== - Go to contact, - Import the following file ```csv id,name,active __import__.res_partner_SV_test_01,Name 1,TRUE __import__.res_partner_SV_test_02,Name 2,TRUE __import__.res_partner_SV_test_03,Name 3,TRUE __import__.res_partner_SV_test_04,Name 4,TRUE __import__.res_partner_SV_test_05,Name 5,incorrect value __import__.res_partner_SV_test_06,Name 6,TRUE __import__.res_partner_SV_test_07,Name 7,TRUE __import__.res_partner_SV_test_08,Name 8,TRUE ``` - Set the batch size to 4 - Click on the import button => Only 4 records have been imported and no error is displayed Cause of the issue ================== Errors were only checked in test mode opw-5242285
This update fixes an issue where multiple quality checks were being created for the same picking when adding additional products. The change ensures that only one quality check is generated per operation type (Receipts), streamlining the process and preventing errors. This improves efficiency and data accuracy related to stock quality control.
Original PR description
Steps to reproduce: -------------------------- 1. Install the Quality module. 2. Create a Quality Control Point with: * Control per: Control on Operation. * Operation: Receipts (set in the Operations…
Steps to reproduce: -------------------------- 1. Install the Quality module. 2. Create a Quality Control Point with: * Control per: Control on Operation. * Operation: Receipts (set in the Operations field). 3. Create a Receipt containing one product. 4. Click the Mark as To Do button. 5. Add another product to the same Receipt and save it. Observation: -------------------------- Two quality checks are generated for the same picking, despite the tooltip indicating that only one check should be created per operation. Issue: -------------------------- No validation existed to verify whether an operation-based quality check had already been created for the picking when adding additional stock moves after confirmation. Solution: -------------------------- Add a check ensuring that if a quality check already exists for the same picking type and operation (with no product or category criteria), no additional operation-based quality checks are created. opw-5249233
This update resolves an issue where the OCR process incorrectly assigned foreign currencies to expense items, particularly when linked to products with standard costs. The fix now allows users to correct the total amount after the OCR, ensuring accurate currency conversions and proper reimbursement processing. This prevents errors and improves the reliability of expense reporting.
Original PR description
Fixes a bug where the OCR would sometimes put a foreign currency on an expense with a product having a cost. Making it impossible to switch back to the company currency (because the currency cannot be changed). This also allows the user to change the total amount after the OCR pass, so it can be corrected if needed task-4873236