Daily updates from Odoo
Monday, November 10, 2025
24 changes · master
Enhancements to existing features
Australian payroll now handles flexible employee benefits through salary-rule based inputs rather than separate employee version fields. This aligns the localization with the newer benefits system, making benefits easier to manage consistently in payroll calculations, reporting, and related accounting flows.
Original PR description
purpose: adapting the new system of flexible benefits coming from salary rules for au localization - adapted the fields in `hr.version` to become salary rules with `condition_select` as `property_input` which makes it appear in the input section Task: 5122332
Employee payslips in India payroll no longer show internal salary rule descriptions meant for HR teams. This keeps payslips clearer for employees and prevents long internal notes from being cut off in the document.
Original PR description
Salary rule descriptions are intended for HR officers, not employees. Displaying them on the employee payslip is unnecessary and causes cropping issues when the text is too long. task-4984330
This update prepares Studio-related test environments for offline behavior, helping ensure the interface works reliably when offline support is enabled. It also makes an existing Studio test more dependable by avoiding clicks on a disabled menu icon.
The Indian Payroll payment advice wizard now lets users indicate whether a payment is made by cheque. When cheque payment is not used, the report hides cheque details instead of showing placeholder text, making payment advice documents clearer and more professional.
Original PR description
This commit allows the payment advice wizard to have the option of not using a cheque and therefore hiding the cheque details from the report if it is not needed instead of having XXXXXXXX as a placeholder. Task-ID: 5231902
Payroll now alerts users when a payslip's net pay is zero or negative. This helps payroll teams spot unusual or potentially incorrect payslips before processing, reducing the risk of payment mistakes.
Original PR description
If the net pay for the payslip is either less than or equal to zero, a warning message will appear
Saudi payroll employer costs now include allowances and company-paid items such as work permits, iqama, and medical insurance, giving businesses a fuller view of employment expenses. Immigration-related employee fields are also shown only when relevant and grouped with employer costs for clearer payroll management.
Original PR description
Previously, the Employer Costs section only considered the employee's basic wage and did not include additional expenses such as allowances or work permit/visa-related fees. This improvement updates the employer cost calculation to include: - Allowances (housing, transportation, and other) - Work permit, iqama, and medical insurance costs At the payslip level, the following salary rules now contribute to the employer costs: - Net - GOSI - Company Contribution - GOSI - Employee Contribution - Medical Insurance (Company Contribution) - Iqama (Company Contribution) - Work Permit (Company Contribution) Additionally: - Fields related to immigrant workers are now only visible for non-Saudi employees. - These fields have been moved under the Employer Costs section. Task - 5064850
The UAE payroll payment report has been adjusted to match Dubai Islamic Bank's expected WPS format, helping businesses submit salary payments with fewer bank rejections. A scheduled monthly update was also added to keep employee leave day values current for payroll processing.
Original PR description
The format of the payment report has been adjusted to adhere to the expected format of Dubai Islamic Bank.
The Payroll menu item previously called "Employment Types" is now labeled "Contract Types." This makes the wording consistent with the Employee module and helps users find the same concept under the same name across the system.
Original PR description
- Renamed the (hr_contract_type_action) menu item from (Employment Types) to (Contract Types) for consistency with the Employee module. task-5118865
Payroll percentage and rate fields are now stored consistently as fractional values and displayed using the percentage format. This improves clarity and consistency across payroll screens, reports, demo data, and tests in several country-specific payroll modules.
Original PR description
Generalised the definition of fields displayed as percentages to be fractional numbers (ratio of 1.0) rather than whole numbers (ration of 100.0), and used the percentage widget to display them all. task-4987743
Saudi Arabia payroll now has a dedicated payslip printout that better matches local payroll expectations. The report removes fields that are not needed for this localization and adjusts the layout to make payslips clearer and more relevant for Saudi employees and payroll teams.
Original PR description
- Introduce a dedicated payslip printout tailored for Saudi localization. - Remove unnecessary fields from the default format and adjust the layout to match Saudi payroll requirements. Task: 5126583 Forward-Port-Of: odoo/enterprise#96373
This update improves how records are loaded in several Odoo apps, reducing unnecessary database work while keeping computed information accurate. Users should see more reliable behavior in affected areas such as projects, appointments, payroll, assets, knowledge, and Amazon sales integrations.
Original PR description
Fix a computed field which is now called with several records because of better prefetching.
The GST report columns for India have been reordered so IGST appears before CGST. This aligns Odoo reports with the government portal layout, making comparisons and submissions easier for users.
Original PR description
In this PR, the IGST column is moved before the CGST column to match the government portal report layout and provide a better user experience. task-5244841 Forward-Port-Of: odoo/enterprise#99062
Resolved issues and error corrections
Fixes an issue where editing a website checkout page after adding a rental-related product could trigger an error due to repeated tooltip cleanup. The change limits cleanup to the intended rental information messages, making the checkout and website editing flow more reliable.
Original PR description
Following commits odoo/odoo@d37d908 and odoo/enterprise@901b8ea, the tooltip cleanup logic disposes elements in `website_sale_renting`, and when the same logic runs again in `payment`, it tries to…
Following commits odoo/odoo@d37d908 and odoo/enterprise@901b8ea, the tooltip cleanup logic disposes elements in `website_sale_renting`, and when the same logic runs again in `payment`, it tries to dispose them a second time, causing a null element error.
Steps to reproduce:
1. Install `website_sale_renting`
2. Install a demo payment method
3. Go to the shop, add any product to the cart, proceed to payment
4. Click the "Edit" button on the website → observe the error
```js
web.assets_frontend_lazy.min.js:3912 TypeError: Cannot read properties of null
(reading 'closest') at Tooltip.dispose (web.assets_frontend_lazy.min.js:2710:70)
at PaymentForm.<anonymous> (web.assets_frontend_…zy.min.js:8282:1450)
at Colibri.destroyInteraction (web.assets_frontend_lazy.min.js:6472:68)
at Colibri.destroy (web.assets_frontend_lazy.min.js:6524:55)
at InteractionService.stopInteractions (web.assets_frontend_lazy.min.js:6584:162)
at InteractionService.stopInteractions (web.assets_frontend_lazy.min.js:6625:907)
at stop (website.assets_insid…rame.min.js:137:290)
at HTMLDocument.<anonymous> (website.assets_insid…rame.min.js:153:450)
at WebsiteBuilderClientAction.onEditPage (web.assets_web.min.js:22215:55)
```
- Restrict tooltip handling to elements with the .o_rental_info_message class to ensure only the intended elements are selected.
- This fix ensures tooltip cleanup is performed safely without re-disposing already disposed elements.
Forward-Port-Of: odoo/enterprise#98748Amazon order fulfillment updates now include the carrier code required in some countries. This helps delivery confirmations match Amazon's expected format and reduces the risk of rejected or incomplete shipment updates.
Original PR description
The `POST_ORDER_FULFILLMENT_DATA` feed that is used to push order delivery info to Amazon should follow the `OrderFulfillment` schema (see https://images-na.ssl-images-amazon.com/images/G/01/rainier/help/xsd/release_4_1/OrderFulfillment.xsd), but it was missing the `CarrierCode` element, which is required in some countries. This commit adds the missing element to the payload, with the formatted carrier name as a value. If the carrier name cannot be matched, "Other" is used as a fallback to signal Amazon that they should rely on the `CarrierName` instead. Forward-Port-Of: odoo/enterprise#99026
The Sign app now handles unsupported file uploads properly when debug mode is enabled. Instead of showing a technical crash, users see a clear message explaining that the file type is not supported.
Original PR description
Version: - saas-18.3 Steps to reproduce: - Enable debug mode. - Try uploading a non-PDF file in the Sign app. Before: - Uploading a non-PDF file in debug mode caused a traceback error. - The TemplateAlertDialog component tried to use a message prop that wasn’t defined. After: - Replaced the use of the undefined message prop with the correct body prop to display the error message. Impact: - Fixes the traceback error in debug mode. - Shows a clear and user-friendly error message when uploading unsupported file types. task-4828439 Forward-Port-Of: odoo/enterprise#89081
This fix makes Shiprocket delivery tax processing more robust when India GST tax data is not available. It also stabilizes related tests by using a consistent tax rate, reducing false failures and improving reliability.
Original PR description
Some other test adds a fiscal position with tax mapping. This creates 2 problems 1. The new taxes have a tag, which means we evaluate the right hand of…
Some other test adds a fiscal position with tax mapping. This creates 2 problems
1. The new taxes have a tag, which means we evaluate the right hand of
https://github.com/odoo/enterprise/blob/8d3fe30c627eada1186c15480876fb2e8f7ddb59/delivery_shiprocket/models/shiprocket_request.py#L239
However, since l10n_in is not installed,
`tax.env.ref(f"l10n_in.tax_tag_{gst}gst", False)`
does not return anything (False is not a fallback)
https://github.com/odoo/odoo/blob/1e96a3d127e8f521d3027f7110026ae84e11ed5e/odoo/api.py#L588
So we end up looking for `None` in `tax_tag_ids`, which leads us to compare the `_name` properties, see
https://github.com/odoo/odoo/blob/1e96a3d127e8f521d3027f7110026ae84e11ed5e/odoo/models.py#L6545-L6558
2. The test added in 4d5df93 was assuming the default company 15% tax, which was not always true
Solution
-----
1. Provide a fallback for the `ref` lookup
2. Force a 15% tax in the test
-----
runbot-232692
Forward-Port-Of: odoo/enterprise#99027
Forward-Port-Of: odoo/enterprise#97998Fixed an issue where converting very large Excel files with many sheets into Odoo spreadsheets could fail with an error. This improves reliability for users working with complex uploaded spreadsheets in Documents.
Original PR description
Steps to reproduce: - upload a large xlsx file (e.g. with >1000 sheets) - open it and convert it to o-spreadsheet => traceback Task: 5222481 Forward-Port-Of: odoo/enterprise#99087 Forward-Port-Of: odoo/enterprise#98443
Fixes Swedish POS fiscal reporting so sales orders are correctly validated through the required blackbox process again. It also restores reliable receipt reprint tracking and corrects the organisation number format, helping businesses stay compliant with Swedish point-of-sale requirements.
Original PR description
Before this commit, the Swedish blackbox was completely broken in 18.0 because the `push_single_order` function is no longer used. To fix this, the same approach as `pos_blackbox_be` was used, where the `preSyncAllOrders` function was overridden instead. In addition, the old receipt reprinting logic was no longer working, and so it now uses the `nb_print` field to keep track of the number of reprints. Finally, we also forward port a fix from 17.0 (ddbc1fc) to correct the format of the organisation number, which for some reason was not forward ported originally. task-5077448 Forward-Port-Of: odoo/enterprise#98437 Forward-Port-Of: odoo/enterprise#98139
This fix ensures payroll work entries stay accurate when employee attendance records are created, edited, or deleted. It prevents duplicate, missing, or wrongly removed work entries so payroll calculations better reflect actual attendance time.
Original PR description
[FIX] hr_work_entry: fix work entries not being regenerated on attendance modification Steps to reproduce: - In Attendance, create, modify or delete an attendance - In Payroll, go to the work entries…
[FIX] hr_work_entry: fix work entries not being regenerated on attendance modification Steps to reproduce: - In Attendance, create, modify or delete an attendance - In Payroll, go to the work entries tab - If creating an attendance, work entries with the previous and current attendance duration will be displayed - If modifying an attendance, changing the duration would not create a new work entry nor modify the existing one(s) - If deleting an attendance, the work entry would be deleted even if there were other attendances on the same day Reason: - For creation, the method creating work entries from attendances had a strict inequality, which caused the check to never trigger. - For modification, nothing was done to regenerate the work entry after editing the duration. - For deletion, the method archived work entries regardless of whether or not there were other attendances in the day. How it was fixed: - For creation, changed the strict inequalities to inequalities to allow the check for work entries to be made - For modification, if the check in or check out dates are changed, triggers the regeneration of linked worked entries - For deletion, the work entry is only deleted when no attendances are left, and then regenerate work entries to match the new total attendance duration Task ID: 5116353 Forward-Port-Of: odoo/enterprise#96635
The Accounting Reports control panel now handles narrow mobile screens correctly. Users can scroll horizontally within the report controls while the header remains stable, making reports easier to use on phones.
Original PR description
Before this commit, the control panel had an overflow in mobile view. The classes `mx-auto` and `fit-content` were causing the issue, so they got taken out. The class `overflow-x-auto` got put in to manage the horizontal overflow and get a horizontal scroll on the content so the header could stay fixed. task-4768525
Quality checks created during receipt confirmation now use the company from the related stock move line instead of the currently active company. This prevents errors when users confirm Company B receipts while working from Company A, improving reliability for multi-company operations.
Original PR description
When creating quality checks per quantity, a multi-company error occurs if the active company differs from the one defined on the control point. Steps to reproduce: - Create a Quality Control Point for Company B and Product Table for the receipt operation with a per-quantity control. - Create a receipt in Company B for this product but leave it in draft. - Switch to Company A and try to confirm → error. Root cause: The company_id was not set when creating the quality check, causing it to default to `env.company` (A) instead of the stock move line’s company (B). opw-86993 Forward-Port-Of: odoo/enterprise#99076 Forward-Port-Of: odoo/enterprise#98655
This fixes a display issue in the Gantt view where the empty-state helper’s blur effect could appear over other page elements. Users should see cleaner screens when no Gantt content is available, without visual obstruction of nearby controls or components.
Original PR description
This commit resets the `position` and `top` attributes in `gantt_view.scss` causing the previously implemented opacity blur effect of the nocontent helper to wrongly appear on top of some components. task-5245728 Forward-Port-Of: odoo/enterprise#98997
The sitemap now only lists the Helpdesk page for websites where Helpdesk is actually enabled. This prevents visitors and search engines from seeing links to Helpdesk pages on websites that do not offer that service.
Original PR description
Steps to reproduce: 1) Create two websites(Website A, Website B) in one company 2) Configure domains in both websites, for example, http://localhost:8069 for Website A, http://127.0.0.1:8069 for Website B 3) In Helpdesk team settings, enable Website Form and select Website A as the website for the helpdesk 4) Now go to browser, and open http://127.0.0.1:8069/sitemap.xml Current Behaviour: Website B will show <loc>http://127.0.0.1:8069/helpdesk</loc> in sitemap even though Website B has no Helpdesk Team! Solution: This commit will add a sitemap method, that will only show the helpdesk in sitemap if it's enabled Forward-Port-Of: odoo/enterprise#96912
This fix updates an automated test so it runs under the same project user permissions expected in normal use. It prevents misleading test failures caused by administrator-level access, helping keep project budgeting quality checks reliable.
Original PR description
In commit [1], a new test was added, but it fails because the result of `template_values` does not match the expected outcome. The failure occurs at line [2], where the method `_get_profitability_values` is called with the project's environment. This environment includes the superuser, which causes the discrepancy in the result. This commit resolves the issue by calling the project (self.project_goats) with the user set to `self.user_projectuser`. [1]: https://github.com/odoo/enterprise/commit/29c6e1d648218219c718a0448fffb8b8444af5df [2]: https://github.com/odoo/odoo/blob/fad692777e90f3c91f91d2a91e706f8bdb64a08a/addons/project/models/project_update.py#L116 runbot-233851 Forward-Port-Of: odoo/enterprise#98897