Daily updates from Odoo
Thursday, May 28, 2026
23 changes · master
New functionality added to Odoo
This update allows 'work clothes fees' to be properly recognized as a benefit within the Odoo Enterprise system. Previously, these fees couldn't be managed effectively. By adding a dedicated benefit, businesses can now better track and account for these expenses.
Original PR description
purpose: Currently the "work clothes fees" can not be hidden because it's not linked to a benefit we can activate/deactivate - added a benefit for "work clothes fees" task-id: 6237160
This update introduces a new system for tracking devices connected to Obox, such as printers and scales. A button has been added to the Obox form to automatically discover and record these devices. Currently, this data is not actively used, but it lays the groundwork for future enhancements.
Original PR description
See: odoo/obox#176 In this commit, we add the `obox.device` model, which represents devices connected to the Obox, such as printers, scales and cameras. A button is added to the Obox form view to discover devices, which will create records for all the devices that are found. For now the device records cannot be used anywhere, but this will come in future PRs. task-6241705
Enhancements to existing features
This update enhances the quality control process within purchase orders by clearly identifying product variants when checking items, resolving a previous ambiguity. Additionally, the quality point search functionality now uses the title instead of the internal reference, providing a more intuitive and user-friendly experience.
Original PR description
1) Product Attributes in QC Wizard The quality check wizard within purchase orders does not display sufficient information when dealing with product variants. For example, if a company purchases tables in two colors -white and black- and needs to perform a quality check upon receipt, the wizard currently does not indicate which variant is being checked, as both products share the same name. This commit resolves this ambiguity by displaying the product's 'display_name' insted of just its name. 2) Quality Points: Search By Title Previously, when searching for a QP by title in the search view, the system relied on the 'reference' column internally. For improved clarity, this has been changed to a title filter. task: 4277084
This update simplifies the way employees access their payslips. A new smartbutton now automatically groups payslips by year, making it easier to find and view past payments. This enhancement improves the user experience and streamlines payroll access.
Original PR description
This will add default filter when accessing payslip view from employee using smartbutton, the filter will group the payslip by date_from year and set the expand = True task:6237600
This update streamlines Australian payroll by consolidating penalty rates into a single, global rate field. This eliminates confusion and ensures consistent overtime calculations in payslips. The change also simplifies the system by removing redundant fields and updating calculations for various work entry types.
Original PR description
Purpose: - The new global Rate field now provides a unified way to define pay rates for work entry types across all countries, making the AU-specific Penalty Rate redundant. - Remove duplicate rate…
Purpose:
- The new global Rate field now provides a unified way to define pay rates for work entry types across all countries, making the AU-specific Penalty Rate redundant.
- Remove duplicate rate definitions in AU payroll by merging Penalty Rate into the global Rate field, avoiding user confusion and ensuring consistent overtime computation in payslips.
- Ensure AU logic fully relies on the global Rate while preserving existing behavior for STP Code, casual loading, and leave loading.
This PR includes:
- Removed Penalty Rate field from model and views.
- Updated computation logic to rely on global Rate while preserving AU-specific behavior based on STP Code.
- Preserved STP-based logic and loading behaviors.
- Hidden the 'Add on Monthly Wage' checkbox for AU because its behavior is
already fully handled via STP code logic, making the field redundant/confusing.
- Added upgrade script to migrate existing Penalty Rate values into Rate to maintain backward compatibility.
- Converted Penalty Rate into Rate format during upgrade: Penalty Rate stores only the extra percentage (e.g., +50%), while Rate represents the full multiplier (100% base(Default) + extra), so where penalty rate is 50%, it becomes 150% (1.5) in Rate.
-------------------------------------------------------------------------------------------------------------------------------------------------------------
Note: Brief overview of AU payslip computation behavior.
Example: hourly wage = 10, Rate = 1.5, leave loading = 17.5%, casual loading = 0.25
1) For normal work entries, the global Rate value is combined with the employee
casual loading. In AU payroll, casual loading is additive and must be added
directly on top of the Rate multiplier instead of being multiplied separately.
- Example:
final calculation = 1.5 + 0.25 = 1.75
amount = 10 * hours * 1.75
2) For AU paid time off entries (AU.PT), the leave loading percentage must be applied
separately and the computation must stop after applying leave loading, meaning
casual loading must not be added on top of it.
- Example:
final calculation = 1.175
amount = 10 * hours * 1.175
3) For overtime work entries using STP code 'T', casual loading must also be
ignored. These entries should only use the Rate multiplier configured on the
work entry type.
- Example:
final calculation = 1.5
amount = 10 * hours * 1.5
- Related Upgrade PR: https://github.com/odoo/upgrade/pull/9557
task-5406660Resolved issues and error corrections
This update fixes an issue where long text in m2m tags avatar fields would overflow and get cut off. By adding a 'truncate' class, text is now automatically shortened with an ellipsis when it exceeds the available space, creating a cleaner and more readable display.
Original PR description
Currently, the m2m tags avatar field does not have the truncate class for the spans. When the text is too long, it overflows and the rest is cut off. This commit adds the truncate class to the spans of the m2m tags so that the text is truncated with an ellipsis when it exceeds the available space. task-4809319 https://github.com/odoo/odoo/pull/256817 Forward-Port-Of: odoo/enterprise#118211 Forward-Port-Of: odoo/enterprise#112590
This update corrects a bug that allowed portal users to unintentionally delete documents they shouldn't have. The fix ensures that portal users can only delete their own records, preventing data loss during the standard cron archiving process. This improves data integrity and aligns with intended user permissions.
Original PR description
Reproduce: with rpc call as portal user, you can archive documents you have access to. This is not desired as this may lead to records being deleted when the cron collects the trash, but we only wanted to support portal users deleting only records they own. What we did when calling toggle_active should be done for all calls to `write` with `active`. It also removes the need for `_raise_if_unauthorized_archive` and `_unlink_except_unauthorized`. Task-6205627 Forward-Port-Of: odoo/enterprise#118194 Forward-Port-Of: odoo/enterprise#116886
This update resolves a test failure related to importing partner and bank account data for Italian reporting. The change restores a necessary data state within the test file, ensuring the tests now pass correctly. This prevents disruptions to the Italian reporting functionality.
Original PR description
The related PR brings a data change in a test file that is used here. We bring back the state of that data in the test class, so that the tests don't fail anymore. Community PR: odoo/odoo#254505 Task [link](https://www.odoo.com/odoo/project.task/6046189) task-6046189 Forward-Port-Of: odoo/enterprise#117514 Forward-Port-Of: odoo/enterprise#112794
This update resolves an issue where report totals were incorrectly duplicated in headers when comparison mode was enabled. Now, values only appear in the line item when the section is expanded, improving the clarity and accuracy of financial reports. This ensures consistent and reliable reporting.
Original PR description
Right now when you expland a section in comparison mode like in the Balance Sheet and P&L, if "Add total below sections" is enabled in the report then it shows in both the header and totals sections. This commit clears up that by only showing the value in the line when it's unexpanded, but once it is expanded it is hidden. task-6190986 Forward-Port-Of: odoo/enterprise#118413 Forward-Port-Of: odoo/enterprise#116479
This update resolves an issue where invoices with excessively long item descriptions were being rejected by the eTIMS system. The fix truncates the description to meet the 200-character limit specified by eTIMS, ensuring successful invoice submission and compliance. This prevents delays in customs processing.
Original PR description
The eTIMs specification limit the `itemNm` to 200 characters, so truncate the invoice line description to that limit to ensure that the invoice can be correctly submitted eTIMS server. Otherwise it will be rejected with: ``` Error sending to the KRA: - Request parameter error[<ItemList><itemNm>: length must be between 0 and 200] ``` Task-Id: 5220129 Forward-Port-Of: odoo/enterprise#118152
This update resolves a validation error that occurred when freezing or converting spreadsheets with group-based access. The fix ensures group permissions are correctly applied during these operations, preventing failures and improving the spreadsheet sharing process. This enhances the reliability of our enterprise document management.
Original PR description
Current behavior before PR: - Freezing a spreadsheet or converting it to XLSX with group-based access in the sharing list triggered a validation error. - The group_id was not properly propagated when creating the new document, resulting in invalid access records and failed operations. Desired behavior after PR is merged: - Group-based access is correctly handled and propagated to the newly created document during freeze and conversion. - This prevents the validation error and ensures the operation completes successfully. Note: - Group access can still be modified independently after sharing. Since both flows are independent, this commit does not enforce full consistency but removes the unnecessary validation error. Task: [6146248](https://www.odoo.com/odoo/project/2328/tasks/6146248) Forward-Port-Of: odoo/enterprise#115404
This update fixes an issue where users could order unlimited quantities of rental products through the website. The change ensures the system limits product availability based on rental schedules, preventing over-ordering and ensuring accurate resource allocation. This improves the reliability of rental orders.
Original PR description
It is possible to order as many products as we want of a rental product that synchronizes shifts depending on a specific service Steps to reproduce: 1. Install website_sale_renting_planning module 2.…
It is possible to order as many products as we want of a rental product that synchronizes shifts depending on a specific service Steps to reproduce: 1. Install website_sale_renting_planning module 2. Go to Rental > Products and create a new product "test" with Sales enabled, Product Type "Service", Plan Services enabled as "Developer", in the Sales tab, enable Is Published and in the Rental prices tab, create a pricing for Daily period 3. In the General Information tab, click on the internal link to "Developer" 4. Enable Sync Shifts and Rental Orders 5. Go to the eCommerce website and search for product "test" 6. You can add as many quantity of the product to your cart Issue: We don't limit the maximum quantity of the product Solution: Look through the renting availabilities of the product and set the maximum quantity to the minimum of the availabilities relevant to the renting dates selected opw-6009928 Forward-Port-Of: odoo/enterprise#118332 Forward-Port-Of: odoo/enterprise#111793
This update simplifies the Belgian payslip by removing employment bonus rows when the calculated total is zero. Previously, these rows were displayed even with zero values, which could confuse employees. This change improves the clarity and user experience of the payslip.
Original PR description
Currently, employment bonus salary rules (EmpBonus.A, EmpBonus.B, EmpBonus.1) are displayed on the printed Belgian payslip even when their calculated totals equal zero. This can be confusing or uninteresting for employees. This commit updates the report template to conditionally render these specific bonus rows only if their final total is non-zero. Task: 6189602
This update removes a previous requirement to immediately provide a bank account number when adding a bank journal through the Odoofin iframe. Previously, this forced users to complete a setup wizard, even if they planned to sync the account number later. Now, the system automatically creates the bank journal if all required data is available, simplifying the process for users.
Original PR description
Previously, when adding a bank journal via the Odoofin iframe, the bank account number was strictly required. Starting from version 19.2, bank journals can no longer be created from the standard form view. This change forces users to provide an account number immediately via the iframe, even if they intended to synchronize it later. While the form view restriction is a 19.2 change, this improvement is applied to 17.0 because the Odoofin iframe is shared across versions. This is resolved across both environments with the: - Odoofin commit: The account number requirement is removed from the iframe. - Enterprise commit: If the account number is missing, the system no longer returns a setup wizard. It creates the bank directly if all required data is available; otherwise, it creates the journal without an account number. task-6072798 OdooFin PR: https://github.com/odoo/odoofin/pull/539 Forward-Port-Of: odoo/enterprise#112506
This update fixes an issue where the quantity to produce was incorrectly reset to zero after generating a lot from a work order. The fix ensures the quantity remains as intended, preventing confusion and ensuring accurate production tracking. This improves the reliability of the manufacturing process.
Original PR description
Step to reproduce: - Create a MO with a lot tracked product (enable it in settings) and a work center - Put the quantity to produce to more than 1 - Confirm the MO - Use the smart button to go to the Shop floor - Click on the three dots and click on "Register production / serial" - Put the quantity to produce to 1 and click on "Generate lot" - The quantity to produce is updated to 0, which is not correct, it should stay to 1 Cause: The quantity to produce was not saved before generating the lot, so after the reload triggered by the generation of the lot, the quantity to produce was reset to the last saved value, which is 0. Task-6158833 Forward-Port-Of: odoo/enterprise#118355 Forward-Port-Of: odoo/enterprise#117067
This update fixes a technical issue impacting the GSTR2B report generated in India. The report now correctly identifies non-GST supplies, ensuring accurate reporting and compliance with tax regulations. This change improves the reliability of the report data.
Original PR description
Before this commit, the domain of the non-GST supplies report line in GSTR2B used the GSTR section `purchase_nongst`, while the actual section key is `purchase_non_gst_supplies`. This commit fixes the domain by using the correct GSTR section key. task-6239820 Forward-Port-Of: odoo/enterprise#118313
This update prevents a crash in the sign template process when the template body is unloaded. The issue stemmed from a change in how Odoo handles props, specifically related to Owl 3. This fix ensures the template remains stable and reliable.
Original PR description
Attempting to assign `this.props.iframe = null` during the `onWillUnmount` hook of `SignTemplateBody` causes a strict mode crash: "TypeError: Cannot set property iframe of [object Object] which has only a getter". I think its due to the owl 3 new changes on props that makes them readonly proxys task: 6253728
This update fixes an issue where CodaBox statements were sometimes incorrectly routed to the wrong bank journal due to currency differences. The system now prioritizes journals with explicit currency IDs, ensuring statements are accurately assigned to the correct currency-specific account. This improves the reliability of financial data integration with CodaBox.
Original PR description
When several journals share the same IBAN but use different currencies, a CODA could land on the wrong journal instead of the currency-specific one. Split the lookup in two passes: first a journal with an explicit currency_id matching the CODA, then fall back to the no-currency journal (qualified by the company currency). Steps to reproduce: - Create 2 bank journals sharing the same IBAN; one without currency and one with USD. - Setup CodaBox connection and retrieve USD statements. - Before this fix: may land on the EUR journal. opw-6048931 Forward-Port-Of: odoo/enterprise#117711 Forward-Port-Of: odoo/enterprise#114590
This update resolves an issue where constant fields within signing documents would become empty during the signing process, leading to signing failures. The fix ensures that default field values are preserved when auto-field calculations result in empty strings, preventing the 'Some required items are not filled' error.
Original PR description
Version: - saas-18.4 Steps to reproduce: - Create sign template. - Add a sign item with read only true and linked model and auto_value field set. - Send document for signing. - Try to sign the document. Issue: - Signing fails with "Some required items are not filled". - Constant readonly fields become empty during signing flow. Cause: - In `_populate_constant_items()`, the default field value was always replaced by `_get_auto_field_value()`. - When no reference document was set, `_get_auto_field_value() `returned an empty string. - This caused an empty value to be stored in `sign.request.item.value`. Solution: - Keep the default field value when auto-field resolution returns an empty string. - Only replace the value when a valid auto-field value is found. task-6229776 Forward-Port-Of: odoo/enterprise#118308 Forward-Port-Of: odoo/enterprise#117880
This update fixes a technical error that occurred when users reviewed eMPF contribution reports in the Hong Kong module. Specifically, the system was attempting to access employee information that wasn't available, causing a system error. The fix ensures a user-friendly error message is displayed, guiding users to correctly populate the necessary employee details.
Original PR description
Currently, an error occurs when the user checks the report line errors. **Steps to Reproduce:** - Install the `l10n_hk_hr_payroll_empf` module with demo data. - Switch to the `Hong Kong` company. -…
Currently, an error occurs when the user checks the report line errors. **Steps to Reproduce:** - Install the `l10n_hk_hr_payroll_empf` module with demo data. - Switch to the `Hong Kong` company. - Go to `Payroll` > `Reporting` > `Hong Kong` > `eMPF Contributions`. - Create a record by setting the `Scheme` and adding a `contribution line`. - Ensure that the employee and payslip fields are empty in the contribution line. - Click on `Validate`, then click on the `error icon` on the report line. `ValueError: Expected singleton: hr.version()` This error occurs when the user manually adds a line and checks the errors on it.. The system attempts to open the employee record from the version [1], but the version is not set [2] on the line because there is no employee. And it raise the error [3]. This commit ensures that when checking errors, if the version is not set on the line, a UserError is raised, prompting the user to set the employee on the line. It also corrects a typo in the status message. [1]- https://github.com/odoo/enterprise/blob/7889b2b0b3d13b32e6e36e616e20379d8c8f8812/l10n_hk_hr_payroll_empf/model/l10n_hk_empf_contribution_report_line.py#L219 [2]- https://github.com/odoo/enterprise/blob/7889b2b0b3d13b32e6e36e616e20379d8c8f8812/l10n_hk_hr_payroll_empf/model/l10n_hk_empf_contribution_report_line.py#L142-L156 [3]: https://github.com/odoo/odoo/blob/98855c6b70df24500babe6027109aa9e17431ec1/addons/hr/models/hr_version.py#L609-L611 Forward-Port-Of: odoo/enterprise#118414 Forward-Port-Of: odoo/enterprise#116607
This update addresses a warning message displayed in the Odoo Enterprise application related to the DMFA certificate. Closing the browser tab triggered this warning, which has now been resolved. This ensures a smoother user experience for employees using the payroll module.
Original PR description
task-6233555
Features or functions removed from Odoo
This update removes the automatic installation of the Avatax module in Odoo Enterprise. Previously, Avatax was installed by default, but it's now optional, giving users more control over their Odoo setup and reducing potential performance impacts. This change aligns with a more standard module approach.
Original PR description
Avatax is too heavy to install by default, and we want to give customers the option to use Odoo without. The current approach uses a `setting_account_avatax` Boolean that was mostly introduced to reduce clutter in the settings [1]. Remove the auto-install and move towards a more typical `module_` boolean approach. [1] task-3226604 task-6231510
This update removes outdated export systems from the Odoo Enterprise platform. The goal is to streamline reporting by focusing on a single export format, simplifying future maintenance and improving efficiency. This change consolidates export capabilities within the core HR module.
Original PR description
In the related Community PR, we remove the export mixins from hr since the aim of the task is to drop the support for all the company specific exports and only concentrate on 1 export format. To do this, here we remove the extension of the mixin in hr_payroll and all the company specific modules. Community PR: https://github.com/odoo/odoo/pull/263225 Task: 6196138