Thursday, August 28, 2025
16 changes · master
Resolved issues and error corrections
Signing a Belgian salary contract now correctly updates assigned cars or bikes so they are no longer shown as available for change. This prevents confusion in fleet planning and keeps employee vehicle assignments accurate.
Original PR description
Issue: When a contract was signed and a future driver was assigned to a vehicle, the car still remained marked as available. Fix: Once the first signature is completed and the future driver is assigned, the vehicle is correctly marked with plan_to_change_car = False (the same applies to the bike). Related task: 4926335. Forward-Port-Of: odoo/enterprise#92590 Forward-Port-Of: odoo/enterprise#89774
This update adds automated coverage for a previously fixed issue in bank statement reconciliation when no payment account is set. It helps ensure the accounting workflow remains reliable and prevents the same customer issue from returning in future releases.
Original PR description
Add a test to previous fix: https://github.com/odoo/enterprise/commit/582e3ee22cba404ff38782534e76569bc93a44ef opw-5039931 opw-5039807 Forward-Port-Of: odoo/enterprise#93308 Forward-Port-Of: odoo/enterprise#93182
The Belgian reporting tests were updated to match a renamed account used in annual account export checks. This keeps automated validation aligned with the latest account naming changes and helps prevent false test failures.
Original PR description
### PURPOSE:- - With this [PR](https://github.com/odoo/odoo/pull/221416), we are going to remove or update some accounts. - The test case **test_annual_account_export** fails because we change the account name of account 700000, from **Sales in Belgium (Trade Goods)** to **Sales of Goods in Belgium** in the above PR. ### SPECIFICATION:- - The above test case is modified as per the updated name. task-4948805
The Peru electronic purchase report now places detraction details in the official columns required by SUNAT. This helps businesses submit compliant TXT reports and reduces the risk of reporting errors or rework.
Original PR description
According to the Annex N.°8 of RS 040-2022/SUNAT (page 20 of https://www.sunat.gob.pe/legislacion/superin/2022/anexo-040-2022.pdf), detraction informations are considered as additional informations and should be displayed in columns 42 and 43. This commit moves detraction infos from columns 38, 39 to columns 42, 43. opw-4860530 Forward-Port-Of: odoo/enterprise#93044
The payroll test setup now gives the test user the needed payroll permissions before running Saudi payroll accounting checks. This prevents false build failures caused by missing access rights, helping keep payroll validation reliable.
Original PR description
steps to reproduce: install l10n_sa_hr_payroll_account run test_payslip_overtime_1 test added payroll user and manager groups to the test user to avoid missing access rights error build_error-230673
The payroll accounting test setup for Poland now gives the test user the required permissions. This prevents avoidable access errors during automated checks, helping keep payroll-related updates reliable.
Original PR description
add missing user groups to the test user to avoid access errors build_error-230676
Fixes an error that could stop an expense from being saved when the selected employee was not linked to a user account. This helps ensure expense uploads and edits remain reliable for all employee records.
Original PR description
Currently, an error occurs when creating an expense for an employee that is not linked to a user. **Steps to reproduce:** - Install the `hr_expense` module. - Create a new employee `test` (ensure…
Currently, an error occurs when creating an expense for an employee that is not linked to a user. **Steps to reproduce:** - Install the `hr_expense` module. - Create a new employee `test` (ensure this employee is not linked to a user). - Go to Expenses > upload [1] and open it. - Set the `Employee` to `test` and click `Save` (it may take up to 5 seconds). (See [2] for Steps to reproduce) **Error:** `AttributeError: 'hr.expense' object has no attribute 'uid'` **Root Cause:** At [3], the code incorrectly uses `self.uid` instead of `self.env.uid`. Since `hr.expense` records do not have a `uid` field, this leads to an `error`. **Fix:** This commit ensures that expenses can be saved correctly, even when the selected employee is not linked to a user. [1]: https://drive.google.com/file/d/1Ew2B_zMFCQbw-6nwfKctJPy1W4y2ZaIb/view?usp=sharing [2]: https://drive.google.com/file/d/1qP-9L_emaox3l9JyoNVYjqj1Ht8bJSmZ/view?usp=sharing [3]: https://github.com/odoo/enterprise/blob/804f263b80cb78884e3f246bcc7fa7ea4e0cf73a/hr_expense_extract/models/hr_expense.py#L90 sentry-6834628909 Forward-Port-Of: odoo/enterprise#93211
The AI Website page creation dialog now shows only the intended styled Generate Text toggle instead of both a checkbox and a switch. This removes a confusing duplicate visual element while keeping the option fully functional for users.
Original PR description
The 'Generate text' option used a custom switch with an AI icon, but the checkbox was still visible alongside the styled toggle, causing duplicate UI elements. The standard 'Switch' component already hides its checkbox with 'visually-hidden' class. This commit applies the same approach by adding the 'visually-hidden' class, ensuring the checkbox remains functional but only the styled toggle with AI icon is visible to the user. Task-5039009
This change makes an internal appointment-related test more predictable by fixing the appointment time used during the test. It helps prevent occasional false test failures, supporting smoother quality checks without changing customer-facing behavior.
Original PR description
Before this commit: --- - In the test case, the appointment start time was not explicitly set. - By default, the time was rounded (e.g, if current time is 8:09 PM, it defaults to 8:30 PM). - Sometimes this default time did not fall within the current hour filter, causing test failures. After this commit: --- - In the test case add `freezeDateTime` to ensure created appointemnt always matches the current filter. runbot-231194
This fixes a small setup error where return report options pointed to the return record instead of the correct report. It helps ensure users open and work with the intended return report without confusion or incorrect navigation.
Original PR description
During this pr: https://github.com/odoo/enterprise/pull/93187 We made a small mistake by setting the return id instead of the report id in the options.
Rental invoice lines are now excluded from automatic cost-of-goods-sold accounting entries. This prevents rental sales from generating inappropriate stock cost postings, improving financial accuracy for companies using rental workflows.
Original PR description
…entries Modified the COGS generation logic to skip any invoice lines that come from a rental sales order. task-4919306 Forward-Port-Of: odoo/enterprise#91472 Forward-Port-Of: odoo/enterprise#90901
Accounting report exports to XLSX now handle unusual account codes or values that look like infinity without crashing. This helps users reliably export reports such as the Trial Balance even when account data contains extreme numeric-looking text.
Original PR description
_set_xlsx_cell_sizes tries to convert each cell into a float if it's possible. If the cell contains "inf", "1e1000" (or any value such that float(value) = float("inf")), then there is an OverflowError which is not catch by the try/except.
To reproduce, set an account code as "1E1000", make this account appearing in the trial balance (by creating a move) and export it as XLSX.
opw-4981385
Forward-Port-Of: odoo/enterprise#91686Fixed an issue that caused the Payroll payslips page to crash when debug mode was enabled on a new database. This ensures payroll users and administrators can access payslips reliably while troubleshooting or configuring the system.
Original PR description
steps to reproduce: - create an empty db (without demo data) - install payroll - enable "debug" mode - go to Payroll > Payslips > Payslips menu - notice the traceback (`payrunId` is not a number) cause: - in "debug" mode the prop types are strictly checked - and `payrunId` is set optional but the type is `Number`, and `null` is passed fix: - pass `payrunId` only if it is not `null` :) task-5004937 Forward-Port-Of: odoo/enterprise#91996
Subscription upsells and renewals now keep the invoice journal from the original sale order when one was set. This prevents billing details from being lost or left blank when company templates do not provide the right subscription journal.
Original PR description
Up until now, the invoice journal set on a given subscription sale order was not copied when the order was upsold or renewed. Only the sale_order_template_id was copied, which depends on the company and has a value for the invoice journal inside. Usually, the copany either doesn't have a sale_order_template attached or they have one for normal sale orders, not subscriptions. In these cases, the invoice journal was extracted from the sale_order_template which didn't contain any (or any valid) and so was left empty. Here we check if the invoice journal value on the order has a value of its own and, in that case, we copy it so that it is preserved. This might be overridden by the value in the company template if there is one. Task: 5031427
Fixed an issue in OCR manual correction where removing a selected box appeared to work but was not saved. This prevents previously unselected boxes from reappearing as selected after refreshing the page.
Original PR description
During refactoring of the boxes interface of the OCR (see commit acfbaf3), this occurrence of `dataMoveId` wasn't replaced with `recordId`. It causes a small bug where the box unselection wouldn't work properly. Visually, it looked like it was working as the JS code handling the unselection of boxes worked fine, but the unselection wasn't saved to the database. Upon refresh, all the boxes that were selected at some point will still be displayed as "user selected" in the UI. task-none Forward-Port-Of: odoo/enterprise#92980
Restoring an Excel spreadsheet without a folder no longer saves an invalid folder value. This keeps the Documents view consistent and avoids confusing search panel behavior after files are restored from the trash.
Original PR description
Steps to reproduce: - Go to documents and upload an XLSX file - Move the XLSX file to the trash - Restore the XLSX file Current behavior before PR: - The key 'searchpanel_documents_document' was set to undefined, When the file had no folder Desired behavior after PR is merged: - Files without a folder now store 'false' as the default search panel folder_id Task: [5005319](https://www.odoo.com/odoo/2328/tasks/5005319) Forward-Port-Of: odoo/enterprise#92799