Friday, December 5, 2025
32 changes · saas-18.4
Resolved issues and error corrections
This update ensures Odoo automatically updates remaining modules in the database, regardless of how Odoo is started. Previously, this only worked when Odoo was launched with specific command-line arguments. This change adds a configuration setting to trigger the automatic update process, improving database consistency and stability.
Original PR description
In https://github.com/odoo/odoo/pull/216025, we force auto upgrade of modules remaining in the database when `preload_registries` is called. However, this strategy doesn't work if Odoo is not started with the `-d` argument, because `preload_registries` is only called for databases specified in the `-d` argument. This commit fixes the issue by adding a special record in `ir_config_parameter` with key `base.partially_updated_database` to indicate that the next time `Registry.new` is called, it should force auto upgrade of modules remaining in the database. 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#238748 Forward-Port-Of: odoo/odoo#238320
This update fixes an issue where the 'Journal Items' link in the General Ledger Report was incorrectly displaying items not associated with the selected account group. The fix ensures that users see the correct journal items linked to their account groups, improving report accuracy and data reliability.
Original PR description
Repro steps: 1. Create account groups 2. Go to general ledger report 3. Click on 'Journal Items' of one of the account groups lines Problem: The journal items shown don't belong to the account group that it should belong to. Fix: This commit fixes this issue by adding the correct action_domain of account_id.group_id. opw-5180867 Forward-Port-Of: odoo/enterprise#100191
This update resolves a bug where the aged receivable report was not displaying correct data for invoices without a due date. The fix ensures the report accurately reflects outstanding balances by aligning the data source used in the report with the invoice's maturity date. This improves report accuracy and data visibility.
Original PR description
step to reproduce: - create a invoice and confirm it - remove due date from it and save it - ensure the confirmed invoice do not payment term or due date - open aged receivable report - open this…
step to reproduce: - create a invoice and confirm it - remove due date from it and save it - ensure the confirmed invoice do not payment term or due date - open aged receivable report - open this entry <img width="1599" height="238" alt="image" src="https://github.com/user-attachments/assets/010f97f4-0d50-4e5a-9366-ae67d17e2bb7" /> Observation: - on clicking the entry, when redirected to list view, there are `0` records. Issue: - The query which is used to display data on report uses `COALESCE(account_move_line.date_maturity, account_move_line.date)` https://github.com/odoo/enterprise/blob/ffc329e4ff2bd6512164ecd4206210fd5c9264b9/account_reports/models/account_aged_partner_balance.py#L222-L226 - while the method `_build_domain_from_period` uses only `date_maturity` in domain redirecting to list view - This creates inconsistencies between two. https://github.com/odoo/enterprise/blob/ffc329e4ff2bd6512164ecd4206210fd5c9264b9/account_reports/models/account_aged_partner_balance.py#L383-L394 opw-5237298 Forward-Port-Of: odoo/enterprise#99883
This update resolves an error that occurred when creating time off requests, specifically when a start date was removed and the employee was changed. The fix ensures the system only checks for past dates when a start date is provided, preventing the 'bool' object has no attribute 'date' error.
Original PR description
Currently, an error occurs when creating a time off request for an employee. Steps to Reproduce: - Install the `hr_holiday` module. - Go to `Management > Time Off`. - Create a `new time off` and…
Currently, an error occurs when creating a time off request for an employee. Steps to Reproduce: - Install the `hr_holiday` module. - Go to `Management > Time Off`. - Create a `new time off` and `remove the start date`. - Now `change the employee`. `AttributeError: 'bool' object has no attribute 'date'` This error occurs when creating a time off request for an employee. If the start date is removed and then the employee is changed, the compute method [1] runs to determine whether the time off can be approved and to update the states [2]. During this process, the system checks whether the time off date is in the past, and since the start date is missing, it results in the error [3]. This commit ensures that the system only checks whether the time off is in the past when a start date is provided. [1]- https://github.com/odoo/odoo/blob/aa53689d3c593a8a41479c51edc2b01e3c284f96/addons/hr_holidays/models/hr_leave.py#L594-L597 [2]- https://github.com/odoo/odoo/blob/aa53689d3c593a8a41479c51edc2b01e3c284f96/addons/hr_holidays/models/hr_leave.py#L1279 [3]- https://github.com/odoo/odoo/blob/aa53689d3c593a8a41479c51edc2b01e3c284f96/addons/hr_holidays/models/hr_leave.py#L1237 No Task ID --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238281
This update fixes an issue where application refusal emails weren't sent promptly, relying solely on a delayed queue. Now, emails are sent immediately upon refusal and a log entry is created in the applicant's chat, improving communication and transparency in the recruitment process. This ensures candidates receive timely updates.
Original PR description
**Steps to reproduce:** 1. Install `hr_recruitment` 2. Create a job position and then an application with an email address for it 3. Refuse the application with "Send Email" enabled **Issue:** 1. Refusal emails are not sent right away; they are only queued and delivered later by the scheduled action. 2. No log entry is created in the chatter. **Cause:** - During the recruitment refusal flow refactoring, mail handling was not properly adapted. The code prepared the refusal mail but never explicitly sent it, resulting in it being added to the queue only. **Solution:** - Ensure refusal mails are sent immediately instead of waiting for the queue. Log the refusal mail in the applicant’s chatter at the time of refusal. opw-5058709
This update ensures that bills automatically received through the PEPPOL network are immediately posted to the system, rather than remaining in a draft state. This streamlines the billing process and improves efficiency for partners using the PEPPOL network for invoice receipt.
Original PR description
Currently, even if a partner has auto-post bills enabled, the incoming bills stay in the draft state. This change addresses that issue. Task-5373302 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238473
This update fixes an issue where tax calculations weren't automatically applied during Express Checkout using Stripe. Now, the correct tax position (based on the user's address) is applied immediately, eliminating the need for a page reload. This ensures accurate pricing and tax calculations for eCommerce users.
Original PR description
## Issue: When a fiscal position should apply based on the address provided during Express Checkout, it was not applied automatically The correct fiscal position only appeared after reloading the…
## Issue: When a fiscal position should apply based on the address provided during Express Checkout, it was not applied automatically The correct fiscal position only appeared after reloading the checkout page This issue affects public users using the eCommerce with Stripe Express Checkout ## Cause: The fiscal position was correctly determined during the `availableCarriers` computation, but it was not propagated to the payment request itself As a result, prices and taxes were only updated after a full page reload ## Steps to reproduce: - Configure Stripe with Express Checkout (e.g., Google Pay) - Create a fiscal position with automatic detection (Country = US, Tax mapping: 15% → 0%) - Create a product using the 15% tax - Go to the website shop and add the product to the cart - Use Express Checkout with a US address - Observe that the fiscal position is not applied unless the page is reloaded opw-5018238 Forward-Port-Of: odoo/odoo#238690 Forward-Port-Of: odoo/odoo#236832
This update corrects a technical issue in the Danish Nemhandel integration by ensuring that Denmark-specific document type checks are applied only to Danish partners. This prevents conflicts with standard Peppol processes and ensures consistent data flow, improving the reliability of the system.
Original PR description
Before: - The l10n_dk_nemhandel override of _check_document_type_support replaced the generic Peppol logic and did not accept process_type, causing errors when other localizations relied on the base method. After: - Aligned the method and applied the DK-specific logic only for Danish partners, falling back to the generic Peppol behavior otherwise. Impact: - Prevents unintended overrides towards standard Peppol flow. Forward-Port-Of: odoo/odoo#238543
This update prevents the creation of duplicate reversal and deferral entries when generating deferred entries from invoices. The change corrects a calculation issue introduced with a new method for handling monthly accounting dates, ensuring cleaner and more accurate journal entries.
Original PR description
When generating deferred entries from invoice lines, certain scenarios led to the creation of both a reversal and a deferral for the same amounts. These entries would effectively cancel each other out, creating unnecessary noise in the journal entries. This issue primarily occurred when the start date, end date, and accounting date all fell within the same calendar month. The problem was exacerbated by the introduction of the `full_months` computation method in https://github.com/odoo/enterprise/commit/5dca9c0c2691cba2335e110ad63a2dcc8bbf6d57. To correctly handle this method and prevent the erroneous paired entries, the end date must now be adjusted by subtracting one month when calculating the deferral period. opw-5000337 Forward-Port-Of: odoo/enterprise#101258 Forward-Port-Of: odoo/enterprise#100507
This update corrects a visual issue in the bank reconciliation widget where the activity badge was misaligned. The fix removes unnecessary styling classes, ensuring the badge now appears correctly positioned on the icon. This improves the user experience and visual consistency of the bank reconciliation process.
Original PR description
Current behavior before PR: The activity badge inside the bank reconciliation widget was misaligned, <img width="55" height="60" alt="image" src="https://github.com/user-attachments/assets/0f99ea55-fedd-401a-a65e-226296070e32" /> Desired behavior after PR is merged: The activity badge now sits in the correct position on the icon. <img width="62" height="55" alt="image" src="https://github.com/user-attachments/assets/abf96aed-73d4-4153-8e0a-56937d4ff08a" /> Changes implemented: - Removed `fa-fw` class. - Removed the unnecessary 'fa-fw' class from comment and paperclip icon. task-5354994 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/enterprise#100573
This update resolves an issue where users without the correct permissions couldn't upload documents to activities. The fix checks user rights before attempting the upload, preventing errors and ensuring all users can properly attach files to activities. This improves the usability of the Project management feature.
Original PR description
Step To Reproduce: - install Project - login with admin and open any Project settings, say Project 1. - create a upload document activity for 'marc demo' - ensure marc demo has 'User' access for…
Step To Reproduce: - install Project - login with admin and open any Project settings, say Project 1. - create a upload document activity for 'marc demo' - ensure marc demo has 'User' access for project - login with marc demo - open same project (kanban card -> view) - upload a document for the created activity Observation: - Traceback ``` TypeError: Cannot destructure property 'id' of '(intermediate value)' as it is undefined at Activity.onFileUploaded ``` Cause: - upload request to `/mail/attachment/upload` , calls `mail_attachment_upload` which then tries to access thread for 'write' mode, 'project.project ' model . - as marc demo does not have write access to this model, no thread is returned - so `NotFound()` is raised https://github.com/odoo/odoo/blob/322c6d0468bf79e9d29e1375c49aa13d4a7b7a67/addons/mail/controllers/attachment.py#L48-L55 Fix: - we check if selected user has appropriate rights or not for upload activity opw-5160132 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238360 Forward-Port-Of: odoo/odoo#234936
This update resolves an error that occurred when creating time off allocations with hourly time off types, specifically when all attendance entries had start and end dates. The fix prevents a division-by-zero error, ensuring time off allocations are created correctly. This addresses a symptom of a deeper issue with how attendance dates are handled, but doesn't fully resolve the underlying problem.
Original PR description
_ ## Short functional explanation of the error When creating a time off allocation with a time off type expressed in hours, and having start/end dates for every attendance in the corresponding…
_ ## Short functional explanation of the error When creating a time off allocation with a time off type expressed in hours, and having start/end dates for every attendance in the corresponding calendar, an error is raised. ## Reproduction Steps 1. Go to Employees and click on the Configuration tab > Working Schedules. 2. Click on a schedule and click on the button next to Work Entry Type to show the Starting date. 3. Set a starting date for each entry. 4. Go to Time Off. Click on the Configuration tab > Time Off Types. 5. Click on a time off and next to the Take Time Off in, select Hours. 6. Click on the Management tab > Allocations. Click on New. 7. Select an employee that has the schedule you updated earlier. ## Expected behavior The allocation is created. ## Unexpected Behavior A traceback occurs: ``` ZeroDivisionError: float division by zero ``` ## Origin of the issue When setting a start or/and an end date to an attendance, this attendance won't be taken into account for global attendances anymore. This leads to an erroneous computation of hours_per_day, leading to a few issues; one of them is related to time off allocation: When setting a time off with a time off type expressed in hours, if every single attendance in the calendar has a start/end date, there will be no global attendance hours left, leading to a division by 0: https://github.com/odoo/odoo/blob/8097b674a23858ed7692a0b30ca74419b8f890f7/addons/hr_holidays/models/hr_leave_allocation.py#L262 After discussion, we decided that this fix would only fix a symptom, and not the problem itself. _ opw-5340056 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237782
This update resolves an issue where the timesheet grid incorrectly displayed unavailable days when flexible hours were enabled for a company. The fix ensures that all days are treated as working days when flexible hours are in use, providing accurate timesheet availability. This improves the usability of the timesheet feature for companies utilizing flexible work schedules.
Original PR description
**Description** When a company's working schedule has flexible hours enabled, the timesheet grid was incorrectly displaying random weekdays as non-working days (greyed out cells). The affected days…
**Description** When a company's working schedule has flexible hours enabled, the timesheet grid was incorrectly displaying random weekdays as non-working days (greyed out cells). The affected days varied by month because the unavailability calculation was time-dependent. **Steps to reproduce** 1. Enable flexible hours on company's working schedule 2. Go to Timesheets > All timesheets 3. Switch to Grid view and filter by month 4. Observe that random weekdays (e.g., Wed/Thu or Mon/Tue) are greyed out **Fix** The grid_unavailability method now checks if the company calendar has flexible_hours enabled. When true, it returns an empty list of unavailable days, treating all days as potential working days. This fix adds the flexible_hours check in two locations within the grid_unavailability method to cover all code paths: 1. get_company_unavailable_dates() helper function - prevents unnecessary calculation when called as fallback 2. company_unavailable_days assignment from calendar_work_intervals - handles the direct path when company calendar is found This follows the same pattern as the gantt view fix #100385 opw-5215646 Forward-Port-Of: odoo/enterprise#100881
This update resolves an issue where switching between different media types (like images and icons) in the HTML editor didn't correctly remove outdated class names. Previously, an image might retain a class that wasn't valid for icons. This fix ensures that the HTML editor consistently removes irrelevant classes, improving the editor's functionality and preventing unexpected styling.
Original PR description
Before this commit, switching the media type would not properly remove the classes of the element. For example, images can have the class "w-100" while icons cannot. If an image had the class "w-100", switching to an icon would keep the class "w-100", even though this class isn't valid for icons. This commit fixes the code to properly remove all invalid classes. Forward-Port-Of: odoo/odoo#238501
This update fixes an issue where debit notes generated in the Uruguayan localization were incorrectly assigned as e-invoices (type 111). The fix ensures debit notes automatically use the correct document type (113), streamlining invoice processing for Uruguayan customers. This improves data accuracy and compliance.
Original PR description
**Steps to reproduce:** * Install and activate the **Uruguayan Localization** for the company. * Create a contact located in Uruguay. * Create an invoice for this customer and set **Document Type =…
**Steps to reproduce:** * Install and activate the **Uruguayan Localization** for the company. * Create a contact located in Uruguay. * Create an invoice for this customer and set **Document Type = 111 (e-Invoice)**. * From the invoice's gear icon, create a **Debit Note**. **Observed behavior:** * The debit note is automatically assigned **Document Type 111 (e-Invoice)**, even though it should use **113 (e-Invoice Debit Note)**. * Attempting to change the document type manually only shows 113 as an option, confirming the debit note should not have been set to 111. **Cause:** * `_compute_l10n_latam_document_type()` applies a rule that assigns Document Type **111** to all Uruguay electronic invoices with RUT identification. * This logic does **not** check whether the move is a **debit note** (`m.debit_origin_id`), and therefore incorrectly overrides the expected debit note document type. * The override prevents the correct selection (internal_type == *debit_note*) from being applied. **Fix:** * Add a condition in the automatic e-Invoice assignment logic. * Debit notes now bypass the e-Invoice assignment and fall through to the parent method, which correctly assigns **Document Type 113**. opw-5154599 Forward-Port-Of: odoo/enterprise#100938
This update increases the time allowed for sending log data from the IoT box to the database, resolving previous issues that caused frequent errors. By extending the timeout to 10 seconds and increasing the log sending frequency to 12 seconds, the system is now more reliable in capturing and transmitting important data.
Original PR description
Currently the request to send logs to the db from the iot box is at 0.5s timeout. This leads to many exceptions and failed requests. This commit sets the timeout for such requests to 10s (previously 0 5s) and the frequency of sending logs to every 12s (previously 0.5s) Forward-Port-Of: odoo/odoo#238648
This update removes outdated services automatically added when connecting to the Peppol network. These services were irrelevant due to restrictions on user registration from Australia, New Zealand, and Singapore, and were likely causing confusion. This change simplifies the system and reduces potential errors.
Original PR description
When creating a new connection to the Peppol network, we add multiple services by default. This commit remove from the default (they can still be manually enabled): - the ANZ BIS3 Invoice &…
When creating a new connection to the Peppol network, we add multiple services by default. This commit remove from the default (they can still be manually enabled): - the ANZ BIS3 Invoice & CreditNote that is deprecated in favor of the PINT version, - the SG BIS3 Invoice & CreditNote that will also be deprecated soon by its PINT version. Note that anyway for the moment we don't allow to register user from AU/NZ/SG on Peppol, so we were in any case registering those services for all participants, and none of them were relevant for those two local formats ... In the future we would like to handle the received services(formats) on IAP directly to handle change better. https://github.com/odoo/odoo/blob/0af9d32e305c1f1afb51e126c1e6747879e78225/addons/account/models/company.py#L35-L50 I checked on our AP, and only 8-10 invoices were sent with these formats, between Belgians... so it is most likely errors. Let's reduce the confusion. <img width="1283" height="65" alt="image" src="https://github.com/user-attachments/assets/208bbd7e-f836-4bc9-a594-795313b06be9" /> Source: https://docs.peppol.eu/edelivery/codelists/v9.4/Peppol%20Code%20Lists%20-%20Document%20types%20v9.4.json Forward-Port-Of: odoo/odoo#238674
This update corrects a previous error in the EPF (Employee Provident Fund) tax calculations for Malaysian employees. The changes ensure accurate rounding of tax amounts to the next ringgit, aligning with current legislation. This update improves the accuracy of payroll processing for Malaysian businesses.
Original PR description
Previous behavior did not account for the rounding of the amount of tax to the next ringgit. Also the employee's rate has been updated in accordance to the legislation. task-5286179 Forward-Port-Of: odoo/enterprise#100736
This update fixes an issue where short feedback messages were incorrectly wrapping the last word, creating a messy layout. The change ensures that feedback messages display cleanly, especially when combined with the rating image, resulting in a better user experience. This backport addresses a minor visual inconsistency.
Original PR description
**Current behavior before PR:** - Short feedback wraps the last word unnecessary.  **Desired behavior after PR is merged:** - Short messages wrapped unnecessarily due to block-level element conflicting with floated rating image. This fix ensures cleaner inline layout.  Backport of this: [Commit](https://github.com/odoo/odoo/commit/52a1913ea7082655009c9eca1201c8c42e4e4037) task-[4788428](https://www.odoo.com/odoo/project/1519/tasks/4788428) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#215577
This update resolves an issue where users were unexpectedly redirected back into the sign flow after completing a document signature. The fix ensures users return directly to the correct record form without lingering 'Sign' breadcrumbs, improving the user experience and preventing confusion.
Original PR description
Issue:
- After signing a document, the user is redirected to the correct
record form (e.g., Offer, Invoice) but an extra "Sign" breadcrumb
remained in the navigation.
- Clicking that breadcrumb sent the user back into the sign flow,
creating confusion and breaking the expected navigation behavior.
Fix:
- Updated the close flow in the thank you dialog to use
`stackPosition: "replacePreviousAction"` when a reference document
exists, ensuring the sign dialog controller is removed cleanly.
- Fallbacks use `clearBreadcrumbs` when no reference document is
linked (standalone sign documents).
- This restores correct breadcrumb generation across all sign flows.
Impact:
- Users return to the proper parent record without leftover sign
breadcrumbs.
- Prevents unexpected navigation back into the sign request.
Task: 5175992
Forward-Port-Of: odoo/enterprise#99525This update resolves an issue where onchange events in Odoo didn't consistently update related records when multiple One2many fields were involved. Specifically, it ensures that all relevant changes are reflected across related records during updates, improving data consistency and accuracy. This fix addresses a potential data discrepancy and enhances the reliability of Odoo's record management.
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 simplifies the process of creating new signature templates in Odoo Enterprise. Now, newly created templates automatically default to the standard 'Sign' folder, eliminating the need for users to manually set this option each time. This streamlines workflow and reduces potential errors.
Original PR description
Assign a default document folder to sign templates so that each newly created template automatically points to the default "Sign" folder. task-5023107
This update resolves a technical issue that prevented the printed receipt tour from working correctly after installing the `l10n_se_pos` module for Swedish Point of Sale. The fix corrects a programming error, ensuring the receipt tour functions as expected for users.
Original PR description
in this commit: - Fixed TypeError: this.get_order is not a function raised during the `test_printed_receipt_tour` in POS after installing `l10n_se_pos`. runbot-233248 Forward-Port-Of: odoo/enterprise#97355
This update corrects a problem where email templates were not rendering correctly due to differences in how HTML is processed. The fix ensures that all HTML elements, except for specifically allowed 'void' elements, have proper closing tags, 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#235924This update corrects a bug where 'Other Activities' were incorrectly grouped, leading to inaccurate counts in the systray. By separating these activities, the system now correctly identifies and displays overdue, today, and planned activities, ensuring users have a precise view of their tasks. This improves the reliability of the activity tracking feature.
Original PR description
Activities without a resource model (displayed as "Other Activities") were previously grouped together. This caused the counter logic, which splits activities into 'overdue', 'today', and 'planned', to fail. It would evaluate the entire group of activities and assign all of them to the first state it encountered (e.g., all 5 activities would be marked 'overdue' even if only 1 was). This commit changes the grouping key for these "mail.activity" records so that each "Other Activity" is processed individually, allowing its state to be correctly counted and displayed in the systray menu. Task-5226403 Forward-Port-Of: odoo/odoo#234899
A test related to payroll accounting was failing when run on a database without the standard demo data. The fix added a default account to the test environment, resolving the error and ensuring the test now runs correctly. This ensures consistent test results regardless of the database setup.
Original PR description
Steps to reproduce: Install hr_payroll_account on a fresh db without demo data. Run the test test_payment_hr_payslip. The test fails. Cause: With demo data, the us payroll was installed and with it, the payroll accounts were configured. Without demo data, default account is missing. Fix: Add a default account in the test and fix the amount balance with a new debit rule to balance the credit one. Task: 5386528 Runbot Error: 161615 Forward-Port-Of: odoo/enterprise#101299
This update fixes an issue where scanning a lot multiple times during a barcode picking process would incorrectly create a backorder. The fix ensures that quantity updates are applied correctly to the relevant lines, preventing unnecessary backorders and improving order fulfillment accuracy. This change resolves a bug related to how the system interprets lot scans.
Original PR description
**Steps to reproduce:** - create a product tracked by lot - create a lot with a quantity of 2 - create a new sale order - add two sale order lines, both for a quantity of 1 of the product - confirm -…
**Steps to reproduce:** - create a product tracked by lot - create a lot with a quantity of 2 - create a new sale order - add two sale order lines, both for a quantity of 1 of the product - confirm - open the picking in barcode - scan the stock location - scan the lot - scan the lot another time - validate **Current behavior:** a backorder is created **Expected behavior:** No back order should be created **Cause of the issue:** After scanning the lot for the first time we have the following situation: two lines : - one with a quantity of 1, qty_done of 1 and reserved_uom_qty of 1 - one with a quantity of 1, qty_done of 0 and reserved_uom_qty of 1 both lined grouped in a parent line with quantity of 1 qty_done of 1 and reserved_uom_qty of 2 All of this is correct. when scanning the lot for the second time: _findLine iterates through the lines to select the right line to use. _findLine calls _lineIsNotComplete on the first line to check if it's complete (this first line is complete). https://github.com/odoo/enterprise/blob/58d55868750b827a9d5ebd8b4ab2cc23c4445eca/stock_barcode/static/src/models/barcode_model.js#L1684 But _lineIsNotComplete will actually do the check on the parent line (which is not complete), so the return value will be true. https://github.com/odoo/enterprise/blob/58d55868750b827a9d5ebd8b4ab2cc23c4445eca/stock_barcode/static/src/models/barcode_picking_model.js#L1338 As a consequence, the quantity will be added in the first line and we will have a qty_done of 2 in the first line and a qty_done of 0 in the second line. Which will lead to the creation of a back order opw Forward-Port-Of: odoo/enterprise#100912 Forward-Port-Of: odoo/enterprise#99774
This update addresses a technical issue where form changes were causing confusing error messages. The team has implemented a fallback to gather more information about these errors, improving stability and reducing disruption for users. This change focuses on internal technical improvements.
Original PR description
Related to https://runbot.odoo.com/odoo/error/234669: somewhere somehow an onchange warning is malformed (it's not a mapping) and the Form is unable to cope with it, leading to a rather unhelpful error. TBH I don't understand how it can happen as `onchange` has a rewriting layer between the `warning` out of onchange methods and the one it sends to the client. And most of the `onchange` overrides are preprocessing not post. And the two overrides which do postprocess modify `values` in place. Add a fallback to attempt to get more insight into this error. Forward-Port-Of: odoo/odoo#238705
This update resolves a test failure in the l10n_eg_hr_payroll module caused by incorrect calculations for employee leave balances in 2026. The fix incorporates a 'freeze_time' setting to ensure accurate calculations, preventing the test from incorrectly reporting zero balances. This ensures accurate leave tracking for employees.
Original PR description
Before this commit, the test `test_get_annual_remaining_leaves_with_allocation` was checking the balance of an employee with an allocation for 2025. As no freeze_time was set, the test would fail in 2026 as the allocation would be invalid and the employee balance would fallback to 0. Same issue for the test `test_get_annual_remaining_leaves_after_leave_taken` The PR https://github.com/odoo/enterprise/pull/98223 was targetting the wrong test and thus, the error was not fixed. This commit merges all 3 tests in one using freeze_time runbot error 231559
This update corrects a problem that arose in the production environment after migrating to versioned employees. The fix ensures that time off calculations only consider employees and their companies, preventing incorrect totals when calculating paid time off. This improves data accuracy and reliability for payroll processing.
Original PR description
this commit fixs an issue introduced in production by adding a where clause to select employees and their version belonging to the selected companies only. This prevents from accessing employees from other companies later when summing the attestation days that might not be accessed by the user. task-5386951
This update resolves a visual issue on the Odoo website's mobile preview, specifically eliminating a distracting shadow effect appearing in the corners of the device image. The fix corrects a misalignment in the border-radius property, ensuring a cleaner and more professional look for mobile users. This improves the overall user experience on smaller screens.
Original PR description
This PR aims to fix an issue about the shadow around the device in the mobile preview, specifically in the corners, when the height of the viewport is bigger than 1080px. Prior to this, the border-radius property was not correctly aligned with the radius of the mobile device image (in `.o_mobile_preview_layout`). | Before | After | |--------|--------| | <img width="468" alt="image" src="https://github.com/user-attachments/assets/1d8aaba4-2e8f-45fd-a6b8-853c82051a51" /> | <img width="468" alt="image" src="https://github.com/user-attachments/assets/b3a10e9b-ac53-429d-8780-a03120316df4" /> | task-4795450 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#214853
This update fixes an issue where toggling block elements in product descriptions caused unwanted page reloads. By explicitly setting the button type to 'button', the change prevents this behavior, resulting in a smoother and more reliable user experience for customers viewing product pages.
Original PR description
**Context** If you add a toggle block element in the ecommerce description of a product in your backend, it will be rendered inside a `<form />` element on your website's product page. **Before this commit** The button controlling the toggling of this element does not have an explicit "type" attribute set. This has the effect that these buttons will act as "submit" buttons for the form element on the website, causing a page reload. https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/button#type **After this commit** Explicitly set the "type" attribute to be "button" so that toggling a block doesn't reload the user's website. opw-5369171