Monday, October 13, 2025
18 changes · master
Resolved issues and error corrections
This update adds test coverage to ensure new Helpdesk tickets can be created when a stage has a “Days to rot” value set. It helps prevent a crash that could block support teams from logging new customer requests.
Original PR description
Currently an error occurs when user creates the helpdesk ticket. Steps to Reproduce: - Install the `helpdesk` module. - Go to `Stages` and, in the `Kanban view`, open the `New Stage` record. - Set a value `greater than 0` in the `Days to rot` field. - Go to `Tickets` and click `New`. `TypeError: unsupported operand type(s) for +: 'bool' and 'datetime.timedelta'` This commit adds a test for this [PR](https://github.com/odoo/odoo/pull/230271). sentry-6927500374 Forward-Port-Of: odoo/enterprise#96507
Payroll salary rules now prevent changes to the salary structure once the rule is linked to an employee property. This helps avoid accidental payroll configuration changes that could affect employee pay calculations.
Original PR description
As some other `hr.salary.rule` fields (like Section and Unit), Salary Structure is now readonly when the rule has a property on an employee. [task-5135927](https://www.odoo.com/odoo/project/1251/tasks/5135927)
This update fixes how payroll finds related work entries after a field name change. It helps ensure payslips use the correct work entry dates and avoids errors caused by outdated date fields.
Original PR description
There is no more date_start and from in work entries. Use date instead. Forward-Port-Of: odoo/enterprise#96840
Fixed an issue where barcode users could see raw formatting code instead of a readable help message after validating a filtered transfer. This improves clarity during inventory receipt workflows and avoids confusing on-screen text.
Original PR description
Issue: ------ When validating a transfer after filtering by scanning a product, the empty help message was shown as raw HTML instead of parsed text. Steps to reproduce: ------------------- 1. Install Barcode. 2. In Inventory, create a receipt with product Pedal Bin. 3. Click Mark as Todo. 4. Open Barcode → Operations → Receipts. 5. Scan the barcode of Pedal Bin. 6. Open the receipt and validate. The helper text is displayed in raw format. Cause: ------ The server returned the help text as a plain HTML string. Since JSON serialization strips Python markup objects, the client received raw HTML, which was not parsed and therefore rendered as-is. Fix: ---- The web client now wraps the help text with `markup()` before display, ensuring the message is parsed and shown in a readable format. opw-5090075 Forward-Port-Of: odoo/enterprise#96655 Forward-Port-Of: odoo/enterprise#95020
Creating a goal from an employee appraisal now correctly uses the employee linked to that appraisal instead of defaulting to the current user. Creating goals directly from the Goals menu no longer pre-fills employee or manager details, reducing accidental assignment errors.
Original PR description
If you go on _appraisals -> any employee -> goals smart button -> new_, it will populate the employee field with the current user. Instead, the field should be filled by the appraisal's user. If the goal is created from the "Goals" menu item directly, then no user / manager should be put by default in the goal's fields. I changed the field's default value to use the employee already passed in the context. I also added some tests to make sure the bug doesn't happen again. task-5048292 Forward-Port-Of: odoo/enterprise#96687 Forward-Port-Of: odoo/enterprise#93522
This update ensures Indian payroll template values are correctly copied when template data is loaded. It prevents missing payroll configuration fields, helping businesses avoid incomplete setup data during payroll configuration.
Original PR description
in this commit, fixes issue when load template data fields
values didn't get copy.
issue:
missing fields in list of whitelisted_fields.
task-5155428
Forward-Port-Of: odoo/enterprise#96694The appraisal skills list now scrolls properly on mobile devices, making the justification field and add/remove buttons accessible again. This helps managers and employees complete skill appraisals without missing key fields or actions on smaller screens.
Original PR description
Horizontal scrolling has been disabled on the appraisal skills list. An unwanted side effect of that is that the justification field along with the add and remove buttons are not visible on mobile. This PR re-enables the scrolling and removes some dead css. task-5001344 Forward-Port-Of: odoo/enterprise#96797 Forward-Port-Of: odoo/enterprise#91882
Social Marketing posts now correctly recognize URLs that include comma-separated parameters, so previews no longer cut links at the first comma. This helps users share tracking or parameterized links accurately across social posts.
Original PR description
**Steps to reproduce:** - Go to `Social Marketing` app. - Click on `New Post`. - Select Facebook for preview (should not matter). - Write a message with an URL which have comma-separated parameters. (e.g 'TEST URL https://example.be:8080/path/res-123/ext/?param1=v1,v2,v3') - URL is cut on the first comma in the preview. **Issue:** URL regex did not match URLs containing comma-separated query parameters, causing them to be truncated. **Fix:** Updated the regex to include commas. opw-5042131 Forward-Port-Of: odoo/enterprise#96340 Forward-Port-Of: odoo/enterprise#94220
Individual salary attachments created from a multi-employee salary adjustment now keep the original duration setting. This prevents limited-duration adjustments from incorrectly becoming one-time items, helping payroll records stay accurate.
Original PR description
**Issue** When creating individual attachments from a salary adjustment with multiple employees, the duration_type field was not being copied to the individual records causing all split attachments to default to "One Time" instead of preserving the original duration type. **Steps to reproduce** - Go to Payroll > Employees > Salary Adjustments - Create a new Salary Adjustment for multiple employees - Set Duration to "Limited" and create individual attachments - Open any individual attachment, duration shows "One Time" instead of "Limited" Task ID: 5136664 Forward-Port-Of: odoo/enterprise#96152
Mexican DIOT reports now correctly identify United Kingdom records using the proper country code instead of grouping them under “Other country.” This improves reporting accuracy for businesses with UK-related transactions.
Original PR description
The DIOT country adaptation map lacked the ISO 3-letter code for the UK, causing records with country 'GB' to be reported as 'ZZZ' ("Other country").
Added mapping 'GB' → 'GBR' to ensure correct DIOT country code generation.

Forward-Port-Of: odoo/enterprise#96771Belgian POS users now see a clear “Device disconnected” message when the blackbox device is unplugged or loses connection. This replaces a vague unknown error, helping staff understand and resolve the issue faster.
Original PR description
When the blackbox is being disconnected the user gets "unknown blackbox error" instead of "Device disconnected" explicit message. This PR removes this vague error message introduced in https://github.com/odoo/enterprise/pull/93468 Forward-Port-Of: odoo/enterprise#95587 Forward-Port-Of: odoo/enterprise#95489
The update stabilizes follow-up report tests that could fail if they started before midnight and continued after midnight. This helps keep automated quality checks reliable without changing customer-facing accounting behavior.
Original PR description
Tests https://runbot.odoo.com/odoo/runbot.build.error/159772 where failing when setUpClass run before midnight and the test itself run at/after midnight because `today` was not the same. As follow-up report divides the lines per partner to due/overdue utilizing `today` in comparison, This resuls in different lines than expected. Forward-Port-Of: odoo/enterprise#96486
Location barcode images are now hidden when the barcode contains characters that cannot be rendered. This prevents upgrade failures for customers with unsupported barcode values while keeping valid barcodes visible.
Original PR description
A new field `barcode_img` was added odoo/enterprise@53d008e9ce11bbf870e5d2f248fd591fa679be0e to display location barcodes in the form view. It uses the `barcode` field of the location, but some clients have values with unsupported characters (e.g., `Ž`, `بيع`) that cannot be encoded in Code128. This caused upgrade failures as such barcodes could not be rendered. Now, Don't show barcode in the form view if it fails to render. opw-5129150 Forward-Port-Of: odoo/enterprise#96523
Creating a work entry without selecting a work entry type no longer causes an error. This keeps HR work entry planning usable even when optional information is left blank.
Original PR description
If the user creates a work entry without a work entry type, it will fetch "false" id work entry type. It raises a traceback task-5078885 Forward-Port-Of: odoo/enterprise#95149
Commission achievement reports now use the latest plan end date as the default end date in all cases. This prevents reports from ending too early when multiple commission plans are involved, giving sales teams and managers more accurate reporting periods.
Original PR description
When there is active_plan_ids in the context the date_to are the max of plans' date_to when not it's the min, this is wrong it should be the maw as well Forward-Port-Of: odoo/enterprise#96526
This fixes an issue where some sales commission adjustments could create conflicting achievement records. The change helps ensure commission reporting remains accurate when multiple related log entries are created at nearly the same time.
Original PR description
This commit 5b6fdda126e4cfa5ebf92f7b96d1805f6c4b992b introduce an entropy date to avoid having two separate achievment.report record with the same ID. Entropy date for log where based on the write_date, this commit 03d1ee3495a4936fbff0d21743bb784c85b50b12 add the sign of the amount. Unfortunatly this is not enough, the adjustment after the transfer can be positive as well and thus two achievment ends-up with the same ID anyway. This commit use the id of the log to add more entropy to the entropy_date, since log are created in the same transaction, they are likely to have id just seperate by one or only few number, id % 10 seems enough, therefore two log on the same order, with the same create_date will have different entropy date and end up with a different id. Forward-Port-Of: odoo/enterprise#96622
The grid view now keeps all months visible when users turn off weekend display in yearly reports. This prevents missing months in Analytic Reporting and makes year-based views easier to trust.
Original PR description
To reproduce: ============= 1- Go to Analytic Reporting. 2- From the year dropdown, uncheck "Show weekends". → Some months disappear unexpectedly. Problem: ========= Weekend filtering was applied even in year range. In year view, each column is already a full month, so filtering out weekends is incorrect. Fix: ==== Adjust the condition to skip filtering when range is not "month". Weekend logic now only applies to month range grid. community-pr: https://github.com/odoo/odoo/pull/226975 opw-5078200 Forward-Port-Of: odoo/enterprise#96171 Forward-Port-Of: odoo/enterprise#94593
This fixes failing automated tests by ensuring sample products are treated as properly configured items. It helps keep manufacturing planning and rental test coverage reliable after a lead-time rule change for unconfigured products.
Original PR description
This PR addresses the issue where tests were failing due to unconfigured products (no vendor/ no BoM). Now unconfigured products' lead_time is incremented by 365 due to this PR: https://github.com/odoo/odoo/pull/216293 Before this fix: Products have `buy` route by default and no vendor, so they are considered unconfigured products and lead time is incremented by 365, and tests fail as any lead time refers to a date earlier than today would only affect the first period in the MPS which is not intended in the tests. After this fix: Products have `manufacture` route and there is BoM, so they are considered configured products and lead time is calculated normally from BoM which is 0. Task-4779057 Forward-Port-Of: odoo/enterprise#96911 Forward-Port-Of: odoo/enterprise#88766