Daily updates from Odoo
Tuesday, October 21, 2025
13 changes · master
Resolved issues and error corrections
Icons created in Studio are now reduced to a maximum of 64 by 64 pixels before being saved. This keeps app icons lightweight, reducing storage, cache size, and request overhead without changing how users create icons.
Original PR description
Before this commit, the IconCreator images were sent as is in their full size. Downstream it was problematic because apps' icons were bigger than necessary, bloating the different caches, the database, and the request. After this commit, icon are resized to a max of 64x64 pixels. Forward-Port-Of: odoo/enterprise#97626 Forward-Port-Of: odoo/enterprise#94480
The spreadsheet sale management field sync now handles undo and redo actions without crashing. This improves reliability for users editing linked sales spreadsheet data and reviewing version history.
Original PR description
Fix an issue where field sync would crash when used with UNDO/REDO. Task: 4854879 Forward-Port-Of: odoo/enterprise#97424 Forward-Port-Of: odoo/enterprise#92883
This fix adds the missing payroll group setting to several Swiss payroll employee fields. It helps ensure those payroll details are correctly organized and displayed, reducing configuration or validation issues during payroll processing.
Original PR description
The payroll group was missing on some payroll fields. Related runbot issue: https://runbot.odoo.com/odoo/runbot.build.error/233445 task-5179821 Forward-Port-Of: odoo/enterprise#97611
Updated an HR Payroll automated test so it remains reliable with newer Chrome browser behavior. This helps keep payroll development checks stable and avoids false test failures unrelated to product functionality.
Original PR description
Since either 140 or 141[^0] Chrome uses compact serialization rules for text-decoration, as a result of w3c/csswg-drafts#12486. This was merged [on August 12th][CL-6824265] and Chrome 139 was cut on August 5 so couldn't have had this change. The new serialization rule means values which can be ommitted from a shorthand (default or fallback) should be, so the default `text-decoration-line` and a `text-decoration-color` matching the `color` won't be serialized in `text-decoration` anymore. Instead of matching the shorthand, match the actual stored properties. [^0]: 140 was not deployed on chrome next so it may or may not have been broken then [CL-6824265]: https://chromium-review.googlesource.com/c/chromium/src/+/6824265 Forward-Port-Of: odoo/enterprise#97667
Ecuadorian XML vendor bill imports now read discount amounts and apply the matching discount percentage in Odoo. This prevents imported bills from overstating line amounts when supplier XML files include discounts.
Original PR description
In the l10n_ec_edi localization, XML files that include a <descuento> (discount) tag do not apply the discount when imported into Odoo. - Create an invoice with a discount and export the XML. - Re-import the XML as a vendor bill — the discount is missing. This commit fixes the issue by computing and importing the discount percentage from the <descuento> tag. opw-5137439 Forward-Port-Of: odoo/enterprise#96712
Refreshing appointment availability for a selected staff member no longer triggers an error when checking capacity. This helps customers and staff continue booking appointments smoothly without interruption.
Original PR description
This commit fixes an issue where the refresh with appointment based on staff user was raising a traceback as it also tried to compute the max capacity possible. Related commit 3cca7e47ab58f8a7d4e9196dbf60f7068348216b task-5118860 Forward-Port-Of: odoo/enterprise#97634 Forward-Port-Of: odoo/enterprise#95862
This fix prevents automated receipt scanning from replacing an expense name that a user has already edited after upload. It also makes the OCR status banner appear immediately after adding an attachment, so users get clearer feedback without refreshing the page.
Original PR description
This commit https://github.com/odoo/odoo/commit/ca1f644a3c15f17482f56a2ece2a57f0f03098ff introduced the "untitled expense" title for expense when being uploaded. The user can then change manually the name. However, if the OCR is called after, it overrides the name previously set by the user. Therefore, if the name of an expense starts with "Untitled Expense", the OCR should not override the name. In addition, when uploading an expense on the form view, the OCR banner used to be not visible until the page was refreshed. This banner is now displayed directly after uploading the attachment. task-4684825
The Planning / Timesheet Analysis report now calculates planned and remaining hours using each employee's actual working schedule instead of assuming a standard Monday-to-Friday week. This makes reporting accurate for part-time employees or staff with non-standard days, helping managers rely on the report for capacity and workload decisions.
Original PR description
To reproduce: ============= - set the company calendar to 40h/week (Mon to Fri) - create an employee with a 32h/week working schedule (doesn't work on Fri) - on planning app, create a shift for this employee for ex from 01/09 to 15/09 with 2h allocated - go to Planning / Timesheet Analysis report and check report for this employee on september -> planned hours and remaining hours are wrong Problem: ======== when querying the data for the desired period, we divide the allocated hours by the number of weekdays (Mon to Fri) in the period, but we should divide by the number of working days according to the employee's working schedule Solution: ========= we compute the number of working days based on the resource calendar of the employee and use this number to compute the planned hours and remaining hours opw-5008066 Forward-Port-Of: odoo/enterprise#95115
This fixes automated test behavior by skipping an Early Payment Discount scenario when the full accounting app is not installed. It prevents false test failures in batch payment checks, helping keep validation results reliable without changing business functionality.
Original PR description
Some new tests would test for the application of Early Payment Discounts in the bank reconciliation widget, but without the accountant module installed, that doesn't make much sense as a payment with move is automatically created for those cases, rendering the test useless. runbot error 233509
This update prevents batch payment tests from failing when the Accountant module is not installed. It improves test reliability across different system setups without changing business features or user workflows.
Original PR description
Issue: some tests may fail when "accountant" module is not installed. Solution: Handle the case when "accountant" module is not installed separately as it is done in previous versions. runbot-231231,231238
The Documents app now correctly updates debug mode when users use the command palette shortcut. This avoids confusion where the URL did not reflect the requested mode unless edited manually.
Original PR description
Issue: In the documents app toggling debug mode through the command palette (ctrl-k) does not work. Manually editing the URL works as expected. Cause: A patch on `router.stateToUrl` for the documents app rebuilds the URL to create clean, shareable links. When doing so, it attempted to preserve the debug status by referencing the global `odoo.debug`. This global object did not reflect client-side state changes. The command palette correctly provides the intended future state to the router. The patch was ignoring this incoming state and using the outdated global value, causing the generated URL to be incorrect. Solution: Modify the patch to use the `state` argument provided to `stateToUrl`, which contains the correct, up-to-date information for the navigation. Task-5095056 Forward-Port-Of: odoo/enterprise#96275
This update adjusts demo employee signatures so names use a cleaner layout by default. It avoids extra spacing that previously appeared in signatures, reducing manual cleanup for users setting up or reviewing these records.
Original PR description
Adapt signatures for Laurie Poiret and Maggie Davidson so that they are wrapped in a `<div>` instead of a `<p>`, because lxml `document_fromstring` would wrap text content in a `p` during record creation. Ideally all user data records should do that for their signature field. This commit only updates the main ones. `p` in a signature is not desired because it has a native margin-bottom, and the user has to change it to a `div` in order not to have it. Making `div` the default container for signatures simplifies that tedious process. task-5149570 Forward-Port-Of: odoo/enterprise#97229
Fixes an issue where a bank payment that only covered part of an invoice could incorrectly mark the full invoice as paid. Payments are now applied only up to the transaction amount, preventing incorrect suspense balances and improving accounting accuracy.
Original PR description
Steps: - Have a payment term making 3 installments (33.33%, 33.33% and 33.34%) - Create and confirm an invoice for $200 with the previously created payment term - Create a bank transaction for $90…
Steps: - Have a payment term making 3 installments (33.33%, 33.33% and 33.34%) - Create and confirm an invoice for $200 with the previously created payment term - Create a bank transaction for $90 -------- Option 1 -------- - Reconcile the statement line with the three invoice lines from the reconcile button on the stmt line itself -------- Option 2 -------- - From the invoice, add the stmt line from the outstanding payments widget -> The invoice is marked as fully paid and the bank entry looks like this: | account | debit | credit | | ------- | ----- | ------ | | Bank account | 90.00 | 0.00 | | Receivable account | 0.00 | 66.66 | | Receivable account | 0.00 | 66.66 | | Receivable account | 0.00 | 66.68 | | Suspense account | 110.00 | 0.00 | It should look like this: | account | debit | credit | | ------- | ----- | ------ | | Bank account | 90.00 | 0.00 | | Receivable account | 0.00 | 66.66 | | Receivable account | 0.00 | 23.34 | This is because we're calculating the partial amount only when looping over the last move line, which result with no partial amount since the transaction amount is already exceeded, therefore we end up adding all the line and balancing it with the suspense account line, which is wrong. With this commit, we add some conditions to check wether the amount is exceeded or will be exceeded, and we calculate the partial amount accordingly. opw-5076498 Forward-Port-Of: odoo/enterprise#97632 Forward-Port-Of: odoo/enterprise#96847