Daily updates from Odoo
Tuesday, March 17, 2026
52 changes · master
New functionality added to Odoo
This update introduces a new report specifically for the Belgian localization of Odoo. It allows HR managers to track and summarize the total amount of meal vouchers paid to employees on a monthly basis, providing a clear audit trail and improved reporting capabilities.
Original PR description
Add a new meal vouchers report model for the Belgian localization to track and summarize paid meal vouchers per month. This report provides a clear overview of employees’ meal voucher entitlements and totals for a given period. task-5907053
This update adds a new field to contract templates, aligning with Belgian payroll requirements. This ensures that relevant employee information is automatically populated based on the selected contract type, streamlining payroll processing. It improves data accuracy and compliance for Belgian employees.
Original PR description
In order to match the current structure for the employee payroll view and automatically fill all the fields based on the contract template selected, the joint committee field will be added to the contract template following the belgian localization. Task: 6023068
This update adds a 'Notice Period' section to the End of Collaboration wizard, streamlining the process for employees leaving the company. It now allows for immediate payslip generation or scheduling of departures, and automatically sends a notification email to the employee, ensuring a smoother transition.
Original PR description
## Before: - End of Collaboration wizard did not have Notice Period details. - FNF Payslip could not be generated directly from the wizard. - No email was sent to the employee on apply or validation. ## After: - Added a "Notice Period" tab in the End of Collaboration wizard. - Enabled FNF Payslip generation directly from the wizard. - If notice duration is 0, the button shows “Apply & FNF Payslip” and generates the payslip immediately. - otherwise the button shows “Schedule” and schedules the departure on the notice end date. - Sends an email to the employee when the End of Collaboration is scheduled. Task-3505331
This update introduces a new report that tracks the growth of Emirati employees within specific skill levels. It compares this growth with a new data model to record emiratization compliance percentages, providing valuable insights into workforce development efforts aligned with UAE regulations.
This update introduces a new interactive onboarding tour for the Planning Field Service module. The tour guides new users through the key features and functionalities, helping them quickly understand and utilize the system. This improves user adoption and reduces the time it takes for users to become proficient.
Original PR description
task-5265667 Forward-Port-Of: odoo/enterprise#110352
Enhancements to existing features
This update enhances the clarity of salary rules within Odoo's payroll system. The display name for salary rules has been standardized to 'Display Name', and a tooltip provides immediate context. Reports now consistently show the salary rule description when available, improving readability and understanding for payroll administrators.
Original PR description
-The display name of description has been changed to "Display Name" -Tooltip has been added for the description field. -Report has been adjusted to show the salary rule description, instead of rule name, if present.
This update improves the handling of private car reimbursements within the HR payroll module. It now provides a warning if an employee's salary is below a certain threshold or if no other transportation benefits are defined, and automatically processes the reimbursement. A tooltip is also added for employees exceeding a minimum threshold.
Original PR description
. Add warning if annual salary below max_sal_privatecar_reimb or no other transportation benefit defined . Reimburse the private car if no other transportation benefit defined . Add a tooltip if the employee is above the minimum task-5993972
This update fixes a display issue in the employee simulation wizard, ensuring it correctly shows the employee's actual salary. The change involved updating the system's context to accurately reflect salary data, leading to more reliable simulation results. This improves the accuracy of forecasting and planning related to employee compensation.
Original PR description
Pass the correct default context to make the wizard show the employee's salary Task-6025688
This update adjusts the layout of product views to align the Avatax category field with sales taxes. This change ensures a cleaner, more organized presentation of product information, particularly for sales tax calculations. The change improves the user experience by streamlining the product view.
Original PR description
The base unit count/price field needs to be exactly below the sales taxes field in the product view, and the Avatax category field is the only field that positions itself right below the sales tax div, getting between the sales taxes and base unit fields. Task ID: [4277792](https://www.odoo.com/odoo/project/966/tasks/4277792)
This update enhances the accuracy of ONSS rate calculations for Belgian payrolls by incorporating company size (importance code). It simplifies company configuration and improves the selection process for employer types. This ensures compliance with Belgian regulations and provides more precise payroll reporting.
Original PR description
In order to accurately compute the ONSS rate of a given company following the Belgian localization of payrolls, importance code (company size) field is added to the configuration of a given company with its different buckets. Moreover, some improvements where added for the label and selections of FFE employer type. To ensure a streamlined process for configuring a company following the belgian localization, the default values and requirement of the field were removed Task: 5923029
This update introduces a new field for tracking partial work time specifically for Belgian employees within Odoo Enterprise. This allows for more accurate payroll calculations when employees work less than full-time, addressing a key requirement for Belgian labor regulations. The change is designed to improve the accuracy of HR and payroll data for this specific region.
Original PR description
Added a part-time field on the employee form only visible for Belgian employees and when the employee is not full-time (i.e. work_time_rate < 1) task-5979825
This update simplifies payroll configuration for US companies by removing unnecessary account codes. The system now supports configuring payroll using XML IDs instead, aligning with the lack of a standardized US CoA. This change improves flexibility and reduces complexity.
Original PR description
We are removing account codes from the US CoA because there's no normalized CoA in the US and account codes are optional. _configure_payroll_account() only worked with codes. An alternative parameter was added to configure payroll with XML IDs instead. The _configure_payroll_account_generic_coa() was removed as well, because it no longer appears necessary. task-5891104
This update simplifies report generation by setting the journal filter to 'off' by default. Now, when a ledger exists, users will automatically see a dropdown menu to select the specific ledger, ensuring relevant financial data is always displayed without requiring manual adjustments. This enhances report usability and clarity.
Original PR description
On the majority of reports, the journal filter is not necessary by default. But we need to still show the ledgers, independently of the journals. So when the journal filter is disabled, but a ledger exists, show a dropdown menu with the ledgers. task-6032881 Forward-Port-Of: odoo/enterprise#110506
This update streamlines the testing process for the stock barcode module by optimizing how test data is prepared. Moving setup configurations to `setUpClass` reduces test execution time slightly. Additionally, the code now creates records in batches where possible, further enhancing efficiency.
Original PR description
This commit moves the records' creation and the configuration of the `stock_barcode` tests from the `setUp` to the `setUpClass` method, so those are done only once and not at the beginning of every test. The purpose of this change is to slightly speed up the run of tests. Forward-Port-Of: odoo/enterprise#110000 Forward-Port-Of: odoo/enterprise#109624
Resolved issues and error corrections
This update resolves several issues related to the integration of Field Service into planning, improving access to intervention portals and enhancing the user experience within the Field Service module. Key changes include streamlined portal access, improved reporting, and enhanced functionality for scheduling and communication.
Original PR description
[FIX] planning_field_service: fix follow-up (round 4) This commit continues to fix the various issues found due to the refactoring of Field Service feature to integrate it into planning instead of…
[FIX] planning_field_service: fix follow-up (round 4) This commit continues to fix the various issues found due to the refactoring of Field Service feature to integrate it into planning instead of being an extension of project. This commit will: - fix 'Print' action and ticket to intervention portal access - always display in range mode for planned dates in planning.slot view - update billable and non-billable filters to take into account `under_warranty` field - review search view of planning.slot, some filters have been renamed and moved. - use employees instead of resources in portal list (no need to display the material resource in the portal views in other words) - add "Send mail", "Send SMS", "Send Report" and "Add/Remove followers" buttons in cog menu of list and kanban views of planning.slot model. - remove helper in ticket button since it does not bring useful information. - add ticket description on related shift, when the user plans an intervention from a helpdesk ticket, the new shift created from that action, will have the description of the related ticket inside Note field (name field) - fix display_name, to avoid displaying the field used in the group by in the display name since it is a bit redundant - take into account worksheet set in product as default - fix some labels, visibility conditions, dates format, group_expand - add default company of the slot when the user creates a resource from the form view of planning.slot model - show customer preview stat button once the intervention is completed and a report is available for that intervention - update tooltip for employee product to bring more context to explain how that new field works. - make sure the SOL for timesheet is not generated when we complete an intervention if the project linked is non billable - add icon on stat button of timesheet - make sure the user can only create service product in product field in employee - show "X Products" button to non sale user in the form view of planning.slot - make project billable and timesheetable by default when the user wants to create a new project from the project_id field inside the form view of planning.slot model - hide schedule stat button in the form view of project.task if the task is a template or linked to a project template - update visibility condition of sign in in calendar, to make visible for planning manager when the slot is published even if the shift is not assigned to that user and the slot is in the past. task-6009593 Forward-Port-Of: odoo/enterprise#110178
This update automatically closes sign activities when a signature request is cancelled. Previously, cancelled requests left lingering active activities, which could mislead users. This change ensures a cleaner workflow and accurate tracking of signature requests.
Original PR description
When a signature request is cancelled (e.g. due to a new one being created), the related sign activity for the responsible user was not closed, leaving a misleading active activity. After this improvement, when a sign request gets cancelled, the associated signature request activity is automatically closes. task-[5920466](https://www.odoo.com/odoo/project/1251/tasks/5920466)
This update enhances the visual presentation of alias email addresses within the Helpdesk module. The change improves the user experience by making alias emails more clearly visible, streamlining communication and reducing potential confusion for support agents. This is a minor visual improvement.
Original PR description
task-6013894
This update corrects a display issue in the employee emergency contact section. Previously, the 'Relationship' field was incorrectly shown for all employees, regardless of their company location. Now, the field is hidden for employees associated with non-Indian companies, ensuring data accuracy and a consistent user experience.
Original PR description
### Steps to reproduce: - Install l10n_in_hr_payroll. - Create an employee (also link a user) in an Indian company and another company. - Go to My Profile > Private Information > Emergency. - The Relationship field is shown for non-Indian employees as well as employees from other countries. ### Issue: - We're not hiding the relationship field if employee is from other country. ### Fix: - We'll hide this field if an employee belongs to non-indian company. Task: 6008888 Forward-Port-Of: odoo/enterprise#109775
This update fixes a formatting issue in Odoo's payslip PDF reports. Previously, hours were displayed as decimals, which was difficult for employees to understand. Now, hours are shown in a more user-friendly HH:MM format, improving clarity and accuracy.
Original PR description
The hours in the payslip PDF file are displayed as a decimal which is not user friendly. The commit changes the payslip report template to display the hours as HH:MM. Task: 5975766
This update fixes an issue where payslips weren't properly connected to their corresponding pay runs. Now, when a payslip is added to a pay run, it's correctly linked to the employee version, ensuring accurate payroll processing. This improves data integrity and reporting.
Original PR description
**Description** . When creating or adding a payslip to a Pay Run, the corresponding employee version (contract record) was not being linked to the Pay Run's version_ids. Instead it include all the employee versions **Implementation** . Link payslip's version_ids to payrun . Remove create() method . Add dates constraints . Add corresponding tests task-5959481
This update resolves an issue preventing the Indian payroll demo data from installing correctly. The fix adds a required field ('structure_id') to the demo data, ensuring compatibility with the system's requirements. This allows users to properly test and utilize the Indian payroll features within the Odoo Enterprise environment.
Original PR description
After this https://github.com/odoo/enterprise/pull/103118 (New Employee Type), Indian payroll failed to install with demo data. Issue: `structure_id` is a required field in the hr.payslip.run model, but after refactoring, it is not updated in the pay run demo data. Fix: Add `structure_id` to pay run demo data. task-6040571
This update fixes an issue where the lower portion of the barcode operation page was hidden by buttons. The fix ensures all fields are visible, regardless of button size, improving usability when adding or editing barcode items. This prevents users from missing important information.
Original PR description
# How to reproduce - Set the barcode of a product - Go to Barcode > Operations > (Select any operation) > New - Click on the cog in the top right and type in the barcode you set for the product - Apply and then edit the item you added - Add options to the page (like Expiration Date) or increase the browser's zoom until the list of fields take the whole page # The problem The fields at the bottom of the page are hidden behind the buttons at the bottom # Why The controls at the bottom are positioned absolutely and with a high z-index, so they hide anything behind them. The form css class fixes this issue by adding a margin-bottom roughly the size of the controls. But this fix does not take into account the fact that the controls can grow in size when the DELETE button is displayed opw-5907564 Forward-Port-Of: odoo/enterprise#107496
This update resolves an issue where changing the 'Kitchen Note' on a food item after a quantity update would cause an error. The fix ensures that the note can be updated successfully, regardless of previous quantity changes, improving the reliability of the POS system.
Original PR description
**Steps to Reproduce:** - Install `pos_restaurant_preparation_display`. - Open Register for POS "**Restaurant**" Shop. - Choose table > select food-item > send the order. - Update food-item quantity > send the updated order. - Update food-item '**Kitchen Note**' > send the note. **Error:** `TypeError - 'NoneType' object is not subscriptable` **Cause:** When the food quantity is updated, a new preparation entry is created for the increased quantity. During the first iteration, the display and order quantities are already merged correctly. However, in a subsequent iteration, the original key no longer exists in `quantity_data`. As a result, accessing a None value leads to a traceback. **Fix:** This commit skips the merge step when the original quantity entry has already been merged. sentry-7197024946 Forward-Port-Of: odoo/enterprise#110184 Forward-Port-Of: odoo/enterprise#104889
This update optimizes the process of deleting `mail.activity` and `mail.message` records linked to `voip.call` records. Previously, a slow scan of the database occurred, impacting performance. Adding an index significantly speeds up these deletions, resulting in faster database operations.
Original PR description
Description ----------- Commit odoo/enterprise@5751f93c53d3cf37ae8cb627fb8d10a81b7b8833 adds a few new `Many2one` fields, but they're are not indexed, leading to a `Seq.Scan` on `voip.call` when deleting a `mail.activity` or `mail.message`, whos tables are usually large. This commit adds an index on the fields to speed up the deletion. Benchmark --------- Deletion of a `mail.activity` on a database with a `voip.call` table with ~13M rows. (on hot) | Before | After | |--------|---------| | 2.3s | 0.85 ms | Forward-Port-Of: odoo/enterprise#110707 Forward-Port-Of: odoo/enterprise#110622
This update resolves an issue where rental income was incorrectly included in the Total Income batch calculation for Hong Kong payroll. The fix removes these rental amounts, ensuring more accurate payroll reporting and compliance with local tax regulations. This improves the reliability of financial data within the Odoo Enterprise system.
Original PR description
. Removing any rental amounts in calculating Total Income batch task-6006636 Forward-Port-Of: odoo/enterprise#110730 Forward-Port-Of: odoo/enterprise#109919
This update allows portal users to upload attachments to knowledge articles. Previously, access restrictions prevented this functionality. This change improves the user experience by enabling users to share richer content within the knowledge base.
Original PR description
Previously, portal users were unable to upload attachments due to access restrictions on ir.attachments. This task overrides those access rights, allowing portal users to upload attachments. Task-4334962
This update adds a warning to salary rules in Odoo when critical fields are missing from their XML definitions. This prevents unexpected runtime values from being used, ensuring accurate payroll calculations. The system automatically backfills existing rules with these missing fields to maintain data integrity.
Original PR description
Reset cron restores salary rules from XML values. If reset-critical fields are omitted in explicit rule definitions, cron can keep unexpected runtime values instead of restoring intended defaults.…
Reset cron restores salary rules from XML values.
If reset-critical fields are omitted in explicit rule definitions, cron can keep
unexpected runtime values instead of restoring intended defaults.
This change does 2 things:
- adds create-time warning for missing reset-critical explicit fields
- backfills existing standard/localization salary rule XML records with those
fields
Warning scope:
- selector fields: condition_select, amount_select
- amount-dependent: quantity (for fix/percentage)
- property_input technical fields only (kept strict, low-noise)
- excludes cosmetic fields (name/description/section/etc.) to avoid warning
noise
Example:
```
<record id="l10n_au_ote_structure_1" model="hr.salary.rule">
<field name="category_ids"
eval="[(6, 0, [ref('l10n_au_hr_payroll.rule_category_ote')])]"/>
<field name="name">Ordinary Time Earnings</field>
<field name="code">OTE</field>
<field name="sequence">20</field>
+ <field name="condition_select">none</field>
<field name="amount_select">code</field>
<field name="amount_python_compute">
...
</field>
</record>
```
Example (amount-dependent quantity):
```
<record id="some_fixed_rule" model="hr.salary.rule">
<field name="condition_select">none</field>
<field name="amount_select">fix</field>
+ <field name="quantity">1.0</field>
<field name="amount_fix">1000.0</field>
</record>
```
task-6033101This update simplifies a technical component within the Stock Barcode module, resulting in a slight performance improvement. The change focuses on internal processes and doesn't directly impact users. It's a routine maintenance update to ensure the module continues to operate efficiently.
Original PR description
community https://github.com/odoo/odoo/pull/253890
This update enforces a critical rule: each pay structure must have unique salary rule codes. Previously, duplicate codes caused errors, and the system would use only one. Now, a validation error alerts users to duplicates, and the system adds '(copy)' to the code to differentiate them, ensuring accurate payroll calculations.
Original PR description
Before: - Salary rules with the same code could exist in the same pay structure. - Only one of them was used during payroll computation. - Duplicated salary rules kept the same code. After: - Salary rule codes must be unique within a pay structure. - A validation error is shown when a duplicate code is used. - Duplicated salary rules now get `(copy)` added to the code. task-5424386
This update fixes a minor visual issue in the VoIP call history by moving the 'Open full history' button back to its original position. Previously, the button was hidden due to the infinite scrolling design of the tab, now it's more easily accessible. This improves the user experience for accessing the full call history.
Original PR description
Commit [1] moved the top-right icon-button in the recent calls tab to the bottom of the tab as a real "Open full history" button. The problem is that this tab is an infinite scroll one... so this button is never reachable in real use-cases. This moves it back at the top-right, with the same icon as the Odoo list view. Note: we discussed keeping both buttons and limiting the infinite scrolling but it was judged not worth the lines of code, as it is not an important button to discover. [1]: https://github.com/odoo/enterprise/commit/8be431afdfd9450155535a4b4552e2e774d291c6 task-5475238
This update resolves an issue where the annual report generated from the accountant_knowledge module was not fully translated, displaying only the title and index in the selected language. By restoring the original field definition, the full content of the report sections is now correctly translated, ensuring consistent localization for all users.
Original PR description
### Issue before this commit: When changing the system language, the annual report generated from the accountant_knowledge module was only partially translated. While the index and article titles…
### Issue before this commit: When changing the system language, the annual report generated from the accountant_knowledge module was only partially translated. While the index and article titles were correctly displayed in the selected language, the content of each section remained in English. This behavior was also visible in the exported PDF version of the report, resulting in a document where only structural elements were localized while the body text of the report sections was not. ### Steps to reproduce the issue: 1. Install another language than english and switch to that one 2. Install Accounting app and audit modules 3. Go to Accounting > Revision > Annual Report 4. Create an Annual Report and click on it 5. Index is in the correct language but the text inside a title is not ### Cause of the issue: The issue was caused by a modification in the knowledge_article model where the template_body field definition was changed. In the previous implementation, the field was defined as a Text field with translate=html_translate, which allowed the HTML content of the template body to be extracted and processed by Odoo’s translation system. In the modified version, the field was converted to an Html field without specifying the translate parameter. As a result, the content stored in template_body was no longer marked as translatable, preventing the translation extraction mechanism from generating translation entries for the article body. ### Reason to introduce the fix: Restoring the translation capability for the template_body field ensures that the full content of the annual report can be localized according to the user’s selected language. opw-5958383
This update fixes a potential issue where incorrect payroll property settings could lead to inconsistent payroll calculations. The change enforces validation rules to prevent setting properties on incompatible salary rules, ensuring more reliable and accurate payroll processing. This improves the overall stability and trustworthiness of the Odoo Enterprise payroll system.
Original PR description
Issue: - Payroll properties could be set on salary rules not configured for employee inputs, leading to inconsistent behavior during payroll computation. Fix: - Raise a validation error when attempting to set a payroll property on an invalid salary rule. - Remove incorrect test usages relying on unsupported salary rules. - Align payroll property update logic with employee input configuration. Task: 5410254
This update corrects a visual issue where the subscription status badge was incorrectly aligned to the left side of the form. A recent UI change caused a default width issue, and this commit restores the intended right alignment. This ensures a consistent and professional appearance for users.
Original PR description
A recent UI framework update caused `o_field_widget` containers outside of groups to default to 100% width. This broke the `float-end` class on the subscription state badge, forcing it to render on the left side of the form sheet. This commit adds the `w-auto` class to the field to constrain its width to its content. This restores the intended right-aligned floating behavior. task: 6030343
This update resolves a bug in the Saudi payroll module that caused salary rules to reset unexpectedly. The issue stemmed from a file name error, which prevented the correct data from loading. This fix ensures accurate salary rule calculations for Saudi users.
Original PR description
[FIX] l10n_sa_hr_payroll: fix salary rule reseting Bug reproduction: Select Saudi l18n, payroll app -> salary rules -> edit one of Saudi salary rules -> there will be reset button -> press to that -> traceback Bug cause: hr_salary_advance_and_loan_data such file is tried to be loaded but there is not such a file. Bug solution: The name of that file is hr_salary_rule_salary_advance_and_loan_data indeed. I fixed the name only to load the correct data back. task - 6040484
This update corrects a bug that prevented the creation of 'Cash Supplement' cash moves in German POS systems. The original code incorrectly capitalized the type string, causing an error with the Fiskaly accounting system. Now, the correct casing is maintained, ensuring proper cash move processing and avoiding errors.
Original PR description
When creating a cash move of type "Cash Supplement", the type sent was "Zuschussecht" instead of "ZuschussEcht", which caused is not an allowed type. Steps to reproduce: ------------------- * Setup a PoS with a TSS for a German localization * Start a session and open the cash control popup * Create a cash move of type "Cash Supplement" * Close the session > Observation: You get an error from Fiskaly that the type is not allowed Why the fix: ------------ When doing `.capitalize()` on a string it would make the first letter uppercase and the rest lowercase. In this case "ZuschussEcht" would become "Zuschussecht", which is not the correct type expected by Fiskaly We now keep the original casing for all the type. opw-5462364 Forward-Port-Of: odoo/enterprise#110270 Forward-Port-Of: odoo/enterprise#109235
This update simplifies the IoT connection process by removing a temporary feature that disabled longpolling after connection errors. Now, the system assumes a correctly configured network, allowing for faster reconnection attempts. This change aligns with our new recommendation for LNA clients.
Original PR description
We used to disable longpolling for 5 min after a failure, in order not to lose time while making requests to an unreachable device, and jump directly to WebSocket. As we now recommand using LNA, clients should have a correctly configured network: if an error occurs the next one should work correctly. We then removed the longpolling auto disable feature. Forward-Port-Of: odoo/enterprise#110158 Forward-Port-Of: odoo/enterprise#108335
This update fixes an issue where users could successfully cancel subscriptions that already had invoices generated. The change adds a check to ensure subscriptions with active invoices cannot be cancelled after they've been closed, preventing potential revenue discrepancies. This ensures accurate subscription management and billing.
Original PR description
Steps to reproduce: -------------------------------- 1. Install Subscription module 2. Create a new subscription quotation and confirm it 3. Generate an invoice for the subscription 4. Attempt to…
Steps to reproduce: -------------------------------- 1. Install Subscription module 2. Create a new subscription quotation and confirm it 3. Generate an invoice for the subscription 4. Attempt to cancel the subscription * A ValidationError is correctly raised 5. Close the subscription by selecting any close (churn) reason 6. Attempt to cancel the same closed subscription again Observation: -------------------------------- The subscription is successfully cancelled even though it already has invoices Issue: -------------------------------- In the following code: https://github.com/odoo/enterprise/blob/9e39b4b85fcb9f6ed5b21b942796b76b8a6eefdb/sale_subscription/models/sale_order.py#L741-L742 The cancellation logic does not check whether a subscription is already churned and still has active invoices Solution: -------------------------------- Added an additional condition to prevent cancelling churned subscriptions that still have active invoices opw-5479719 Forward-Port-Of: odoo/enterprise#109755 Forward-Port-Of: odoo/enterprise#106596
This update resolves a delay issue experienced on iOS devices when interacting with the Point of Sale system. The fix involves adjusting how the system responds to user touches, specifically addressing differences between iOS and Android devices. Additionally, pinch-zoom functionality has been temporarily disabled to ensure optimal performance.
Original PR description
On IOS devices, there was a latency issue when hitting different elements in the POS and self. Actually, the issue is because IOS devices don't react in the same way as Android devices. IOS adds a delay of +/-300ms when the element is not considered as a button. Instead of replacing a lot of elements with a button element we can add the parameter role="button". I also disabled the pinch zoom in the POS, self and preparation display. It's mandatory to add the parameter touch-action: pan-x pan-y to the * selector. task: 5976364 community pr : https://github.com/odoo/odoo/pull/251198 Forward-Port-Of: odoo/enterprise#110627 Forward-Port-Of: odoo/enterprise#109483
This update incorporates Uzbek translations from Odoo 19.0 into the enterprise version. The translations were applied directly to specific modules, focusing on correcting missing translations and ensuring consistency. A key focus was on verifying the accuracy of the translations within each module to maintain quality.
Original PR description
Copying translations from 19.0, only direct module matches. I.e. Missing translations were not filled in + moved terms were not matched across modules (i.e. no translation context to ensure correctness) Forward-Port-Of: odoo/enterprise#110497
This update resolves an issue where employee skills weren't being copied to newly created appraisals generated by the automated appraisal process. The fix adds a necessary step to ensure skills are correctly populated when appraisals are initially created in the 'pending' state, guaranteeing accurate appraisal data.
Original PR description
Steps to reproduce: ------------------------------------- 1. Install `hr_appraisal_skills` module 2. Create a new employee and assign at least one skill to the employee 3. Set the Next Appraisal Date…
Steps to reproduce: ------------------------------------- 1. Install `hr_appraisal_skills` module 2. Create a new employee and assign at least one skill to the employee 3. Set the Next Appraisal Date to today 4. Go to Scheduled Actions > Appraisal: Run employee appraisal > Run Manually 5. Open the newly created appraisal for the employee Observation: ------------------------------------- In the Skills tab, the employee's skills are not populated even though the appraisal is already in the confirmed stage Issue: ------------------------------------- When the cron `_run_employee_appraisal_plans` creates an appraisal, it is created directly in `pending` state via `create()`. The skill-copying logic only lived in the `write()` override, which triggers on state transitions from 'new' to 'pending'. Since `create()` bypasses `write()`, Employee skills were never copied to cron-created appraisals https://github.com/odoo/enterprise/blob/451dce92a087086fc3d5d5f610626312f32bcd13/hr_appraisal_skills/models/hr_skills.py#L12-L15 Solution: ------------------------------------- Add a `create()` override to call `_copy_skills_when_confirmed` when an appraisal is created directly in the `pending` state, ensuring employee skills are properly copied. opw-5491433 Forward-Port-Of: odoo/enterprise#110601 Forward-Port-Of: odoo/enterprise#107760
This update resolves a limitation in the Odoo Report Editor where certain field types were not properly supported. Previously, the /field command in the report editor couldn't handle properties, leading to incorrect report configurations. This change ensures that all field types can be correctly selected, improving report customization capabilities.
Original PR description
Properties are not supported in ir.qweb but only as t-out, while t-field doesn't support them. For this reason and the fact that properties have a path the model field selector barely handles we do not allow those field to be selected in the /field command task-5999790 Forward-Port-Of: odoo/enterprise#110561 Forward-Port-Of: odoo/enterprise#109486
This update fixes a visual issue where payslip PDFs appeared as 'draft' even after payruns were validated. The change ensures the correct, finalized PDF is displayed in the foreground, eliminating confusion for users. It also updates the default attachment used when generating the final PDF.
Original PR description
When creating a payrun and using the Test Print button, the pdfs with the yellow banner saying that the payslip is still draft are generated correctly. When validating the payrun a cron runs to generate the real pdfs. In 19.2 there is a preliminary problem (fixed here) where the payslips are not marked for pdf creation and therefore are not taken by the cron (in master they are correctly marked for it). After that, the pdfs are correctly computed but the pdf in the foreground remains the draft one, generating confusion. With this PR we also change the default attachment when we generate de final pdf, solving the problem. Task: 6023186 Forward-Port-Of: odoo/enterprise#110604
A test was failing due to a mismatch between the user's language setting (French) and the tour content (originally written for English). This commit resolved the test failure by ensuring the tour correctly displays regardless of the user's language preference. This prevents potential issues with the web_studio feature.
Original PR description
Before this commit, a test set the language of the user to French and then opened the browser with that user and that language. The tour in question, written for English failed. After this commit, the tour doesn't fail runbot-error-241983 Forward-Port-Of: odoo/enterprise#110765
This update fixes an issue where the system incorrectly calculated demand for dependent components within the MRP planning process. Previously, it defaulted to the oldest BoM, leading to inaccurate forecasts. Now, the system uses the BoM selected by the user within the MPS, ensuring accurate demand calculations and updated component quantities.
Original PR description
## Issue: When computing the product tree, the system would use `_bom_find` to find the BoM. However, it's possible to have multiple BoM for the same product, and the user should have chosen which…
## Issue:
When computing the product tree, the system would use `_bom_find` to find the BoM. However, it's possible to have multiple BoM for the same product, and the user should have chosen which BoM he wants to use. `_bom_find` ignores the user configuration in MPS, and simply select the first (oldest) BoM in the list. This means that the components in the MPS would not be correctly updated.
---
## How to reproduce:
https://github.com/user-attachments/assets/c7e6f4d4-332a-4e2b-a40a-1b831daeb6c8
- Create Products FNS & CMP
- Create BoM for FNS without bom line (V1)
- Create BoM for FNS with CMP in bom lines (V2)
- Add FNS to MPS using bom V2
- Set Forecast Qty of FNS to 10
- => Indirect Demand Qty for CMP is not shown (because it's 0)
---
## Test Result without fix:
```
2026-03-05 15:00:24,601 52396 INFO oes_test_18.0 odoo.addons.mrp_mps.tests.test_mrp_mps: Starting TestMpsMps.test_indirect_multiple_boms ...
2026-03-05 15:00:24,742 52396 INFO oes_test_18.0 odoo.addons.mrp_mps.tests.test_mrp_mps: ======================================================================
2026-03-05 15:00:24,742 52396 ERROR oes_test_18.0 odoo.addons.mrp_mps.tests.test_mrp_mps: FAIL: TestMpsMps.test_indirect_multiple_boms
Traceback (most recent call last):
File "/home/odoo/Odoo/src/18.0/enterprise/mrp_mps/tests/test_mrp_mps.py", line 1556, in test_indirect_multiple_boms
self.assertEqual(forecast_cmp['forecast_ids'][0]['indirect_demand_qty'], 10)
AssertionError: 0.0 != 10
```
---
OPW-5979738
Forward-Port-Of: odoo/enterprise#110526
Forward-Port-Of: odoo/enterprise#109693This update fixes a performance issue in the Web Studio module by ensuring binary asset bundles are pregenerated during test runs. Previously, tests repeatedly regenerated these bundles, slowing down the testing process. Now, bundles are created once and reused, significantly improving test execution speed and stability.
Original PR description
The commit odoo/odoo@a5c02da5c24bfc85b3bbb7d1410d489d3c7185b8 introducing binary asset bundle support overlooked the pregeneration of said bundles for the tests runs. This leads to hot-regeneration of those bundles during tests runs on the runbot (multiple hundreds of times) instead of only once and reusing them. This commit adds support for those binary bundles during pregeneration. Forward-Port-Of: odoo/enterprise#110555
This update fixes a key issue preventing UK users from correctly setting up their Stripe accounts for expense reimbursement. The team added specific instructions for UK account creation and implemented a secondary check for Euro currency settings to ensure users in the UK receive the appropriate funding instructions. This improves the user experience and ensures compliance with Stripe's UK implementation.
Original PR description
### [IMP] hr_expense_stripe: Rework tests for UK Rework the test framework to handle the United Kingdom specific tests ### [FIX] hr_expense_stripe: Fix UK account creation Add UK account creation funding instructions as it was made available to us by Stripe ### [FIX] hr_expense_stripe: Fix funding instruction EU Before this commit: The funding instructions were using the country group Europe as a reference to see if the country should use the EU funding instructions The issue comes from the fact that a lot of people remove their country from that country group, locking themselves out of stripe issuing EU. This adds second way of telling the user is in the EU flow if their stripe currency is set to Euros. Forward-Port-Of: odoo/enterprise#110416 Forward-Port-Of: odoo/enterprise#109667
Features or functions removed from Odoo
This pull request addresses minor formatting inconsistencies within the Odoo Enterprise rental module. The changes remove unnecessary whitespace from XML files, improving code readability and maintainability. This is a routine maintenance task that ensures the codebase remains clean and consistent.
This update removes an outdated and unused QUnit test framework from the web_studio module. This streamlining simplifies the codebase and reduces maintenance overhead. The removal does not impact any existing functionality.
Original PR description
Remove the now useless legacy QUnit test framework.
Code cleanup and technical improvements
This pull request enhances the Odoo Enterprise website's live chat functionality by streamlining the connection between live chat visitors and helpdesk channel members. Specifically, it moves relevant data fields to the channel level, improving organization and efficiency for support teams. This change ensures a smoother experience for both visitors and agents.
Original PR description
PR community: https://github.com/odoo/odoo/pull/242575
This update combines the Mexican reporting modules into a single, streamlined package. This simplifies maintenance and installation for users needing Mexican accounting reports, ensuring consistent reporting across the Odoo Enterprise platform. It maintains existing functionality without impacting current operations.
Original PR description
This PR merges the `l10n_mx_reports_closing` and `l10n_mx_xml_polizas` modules into `l10n_mx_reports`, as they all provide Mexican accounting reports and are required for standard reporting flows for any company. This consolidation keeps all existing features unchanged while simplifying module maintenance and installation. Related PR-https://github.com/odoo/odoo/pull/247185 Upgrade PR-https://github.com/odoo/upgrade/pull/9202/ task-5431997
This update streamlines the integration with UrbanPiper by consolidating related modules and making the data synchronization process more efficient. The changes improve how order and store information is sent to UrbanPiper, leading to smoother delivery operations and better data management.
Original PR description
- Merged UrbanPiper modules into the `pos_urban_piper` module:
- `pos_urban_piper_enhancements`
- `pos_urban_piper_ubereats`
- Modularized the integration code.
Each model now exposes its own methods for handling UrbanPiper data, such as:
- `get_urban_piper_data` for preparing payloads sent to UrbanPiper.
- Webhook event handlers implemented directly in their respective models:
- Order-related events in `pos.order`
- Store-related events in `pos.config`
- Removed the `product.urban.piper.status` model.
Sync information is now stored in a JSON field: `urbanpiper_synced_json`.
Related: https://github.com/odoo/upgrade/pull/8966
task-[5361075](https://www.odoo.com/odoo/project/1737/tasks/5361075)This pull request updates the tests for the l10n_mx_edi module to align with recent changes in Mexican VAT reporting requirements. This ensures the Odoo Enterprise system continues to accurately handle and validate invoices related to Mexican e-invoicing (CFDI).
Original PR description
Enterprise counter-part. https://github.com/odoo/odoo/pull/253922