Monday, September 22, 2025
8 changes · saas-18.2
Enhancements to existing features
Australian payroll withholding rules for student and training support loans have been updated to match the latest ATO Schedule 8 rates. This helps businesses calculate employee payslips correctly under the new guidance effective from September 2024.
Original PR description
This commit updates the Schedule 8 witholding flow and rate for mid year update as per ATO guidelines effective from 24-09-2024. https://softwaredevelopers.ato.gov.au/2025-pay-you-go-payg-withholding-tax-tables Task: 5088270 Forward-Port-Of: odoo/enterprise#95083
Resolved issues and error corrections
The trial balance period comparison now calculates end balance columns correctly for Profit and Loss accounts, using only the latest displayed year instead of adding prior years together. This prevents misleading balances and keeps previous years' amounts in the appropriate unaffected earnings account, improving financial report accuracy.
Original PR description
When activating the period comparison with the trial balance, the end balance columns used to sum the values of the displayed periods, which should not be the case for Profit and Loss accounts. Indeed, only the last displayed year should be used in the end balance, while the previous years' amount must be displayed in the unaffected earnings account. We used to optimize the query by computing in python the end balance on some conditions (for example analytic groupby filter). This wasn't actually totally working, for example the end balance columns used to display amounts in both debit and credit columns. This optimization is no longer possible since the P&L accounts of the previous fiscal years need to be displayed in the unaffected earnings account. task-4728887 Forward-Port-Of: odoo/enterprise#94600
Bank synchronization now avoids importing or creating entries on dates that are protected by an accounting lock date. This prevents bank transactions and opening balances from being placed on incorrect dates, helping preserve accurate financial records after connecting a bank feed.
Original PR description
If you have a company with a lock date set, and you connect a bank that has transactions dated to the day of the lock date, these transactions will be fetched, which do not make sense because nothing…
If you have a company with a lock date set, and you connect a bank that has transactions dated to the day of the lock date, these transactions will be fetched, which do not make sense because nothing should be created in a period covered by a lock date. As a result, these transactions would be created at a wrong date (if the current month is the first after the lock date or if the sequence has a monthly reset, then they would be appended to the current month, else if the sequence reset annually, then they would be created at the current date). Additionally, the potential opening balance would be created at a wrong date too, since it would try to create it one day prior to the oldest transaction. The date which the opening balance is created would not be the same as the transactions above, which adds a layer to the mess created. To prevent this, at initialization, we set the last sync date one day after the lock date, not the same day. As for the opening balance, we do not try to set it one day prior to the oldest transaction, but the same day. The `internal_index` computed will ensure it is displayed as the first transaction of that journal. Finally, the test related to statement creation were adapted to this new behavior. Some ordering based on `date` in other tests were changed to `internal_index` to unify the test file with these changes. opw-4890538 Forward-Port-Of: odoo/enterprise#94648 Forward-Port-Of: odoo/enterprise#93543
The Spanish Mod347 tax report now includes withholding taxes when calculating report totals. This prevents understated figures for affected customer or supplier transactions, helping businesses submit more accurate tax reporting.
Original PR description
Withholding taxes should be taken into account in mod347 tax report. Steps: - Create a bill for a spanish customer - Set the amount of 40000, tax 21% and 15% withholding tax - Go to mod347 tax report -> Line "B - Sales of goods and services greater than 3.005,06 €" is showing 42,400.00 instead of 48,400.00 (same goes for other lines with similar configuration) Before this commit, custom engines domains were only including aml with payable or receivable account. With this commit, we include tax lines that are of type 'retencion' in the custom engines domains. opw-4448662 Forward-Port-Of: odoo/enterprise#94338
Single-company databases can now find and merge duplicate records even when those records have different company values. This prevents missed duplicates and helps keep customer or business data cleaner without requiring multi-company settings.
Original PR description
**Issue** In single company databases, it wasn't possible to find duplicate records with different `company_id` values to merge them (in multi company databases, it is possible to enable the "Cross-Company" option on the deduplication rule). **Change** Always ignore the company field in single company databases. opw-4794408 Forward-Port-Of: odoo/enterprise#94797 Forward-Port-Of: odoo/enterprise#93184
The project timesheet forecast reports now apply date filters consistently for users in different time zones. This prevents records from being incorrectly included or excluded by one day, improving report accuracy for planning and review.
Original PR description
This commit fixes the timezone issues with the Date filters, in which we were comparing a UTC DateTime value to a local timezone's Date. In certain timezones, this leads to off-by-one errors in the records fetched from the DB, depending on how far ahead or behind UTC that timezone is. Specifically, we remove the UTC conversion within the filter domains. opw-5068870 Forward-Port-Of: odoo/enterprise#94032
This fix ensures that changes made to the Time Spent field in the timesheet list view remain visible when users move focus away with Shift+Tab. It prevents newly entered or edited time values from appearing to revert, reducing confusion and helping users trust that their timesheet updates are preserved.
Original PR description
Steps to reproduce: ----------------- 1. Go to Timesheet → My Timesheet → List View → New OR Edit already filled time. 2. Change time in the Time Spent field. 3. Press Shift + Tab. Observation:…
Steps to reproduce: ----------------- 1. Go to Timesheet → My Timesheet → List View → New OR Edit already filled time. 2. Change time in the Time Spent field. 3. Press Shift + Tab. Observation: ----------------- The focus changes, but the Time Spent field reverts to its old value instead of keeping the newly entered one. Issue: ----------------- - For new records, the component retrieves the value only from the state, which is updated in the `onWillUpdateProps` lifecycle. This lifecycle triggers only on saving or editing, not when simply changing focus. https://github.com/odoo/enterprise/blob/e14b991927df14f41535e92dd01ea2ecac44a404/timesheet_grid/static/src/components/timesheet_display_timer/timesheet_display_timer.js#L123-L128 - The same behavior occurs when editing existing records, leading to incorrect value display. https://github.com/odoo/enterprise/blob/e14b991927df14f41535e92dd01ea2ecac44a404/timesheet_grid/static/src/components/timesheet_display_timer/timesheet_display_timer.js#L31-L33 Solution: ----------------- - For new records, since the default value is 0, the fix makes the component fall back to the updated record value if the state value is not yet available. - For existing records, if the timer is running, the timer’s value is displayed. otherwise, the component falls back to the updated record value. opw-4922847 Forward-Port-Of: odoo/enterprise#94729
Point of Sale sessions using Worldline terminals now continue receiving cancellation confirmations even if the browser page was refreshed during payment. This prevents orders from getting stuck and adds clearer error messages for payment terminal issues.
Original PR description
This PR fixes a bug where the point of sale didn't receive notifications from the Worldline payment terminal for the cancellations if the browser webpage was refreshed How to reproduce: 1. Open a POS session with Worldline terminal 2. Send a transaction to the terminal 3. Refresh the browser webpage before paying 4. Click on "Cancel" on the POS screen --> your order will be stuck and never receive the confirmation This PR removes the check for the iot longpolling action identifier which changes on refresh of the webpage + adds more error messages for Worldline terminals Related PR in >= saas-18.3: https://github.com/odoo/enterprise/pull/94629 task-5075860 Forward-Port-Of: odoo/enterprise#94670 Forward-Port-Of: odoo/enterprise#94635