Daily updates from Odoo
Thursday, June 25, 2026
60 changes · master
New functionality added to Odoo
This update introduces a new debugging tool within the POS system that allows users to quickly assess the status of all connected IoT devices. The tool groups device information by IoT box, providing a clear overview of device health and enabling faster troubleshooting. This improves operational efficiency and reduces downtime related to IoT integrations.
Original PR description
This commit adds a button to the Debug widget that tests every IoT device configured in the POS. The device statuses are grouped by IoT box and displayed to the user. task-6322718 <img width="622" height="360" alt="image" src="https://github.com/user-attachments/assets/e778946b-5ad6-40cc-bd76-729a58755551" />
This update adds a new command introduced in the recent o-spreadsheet update to the list of publicly available commands. This ensures users can easily access and utilize the latest functionality within the spreadsheet module. It's a straightforward addition to improve usability.
Original PR description
Last o-spreadsheet update added a new command, so we need to add it to the public command list.
This update introduces the ability to define and use 'computed measures' within Odoo's spreadsheet edition. This allows users to automatically calculate new metrics based on existing data, providing more sophisticated reporting and analysis capabilities directly within the spreadsheet interface. It improves the flexibility and power of the spreadsheet functionality.
Enhancements to existing features
The POS blackbox module was updated to follow a change in how POS sessions are identified. This ensures the module keeps working correctly when checking whether a session exists, which helps avoid issues with future orders.
Original PR description
This commit adapts the pos_blackbox_be module to the changes in the community PR. The change is that the has_active_session is now defining if a config has a session that is opened or in closing_control but to check if a session exists, we have to check current_session_id instead of has_active_session. task-id: 6034751 Community PR: https://github.com/odoo/odoo/pull/254408
The Point of Sale IoT test dialog now shows more complete diagnostics for each IoT box. It checks connection types, reports network speed, and displays when the test was run, making it easier to spot connection issues and verify device health.
Original PR description
This commit adds the following extra functionality to the IoT test dialog: - The longpolling and websocket connection of each IoT box is tested - The network speed is reported, like the IoT test button in the backend - The timestamp of the test is shown task-6329619
The customer portal task view has been cleaned up to show only the most relevant information. This makes the page easier to scan, displays full task names without cutting them off, and uses the task name in the browser tab for a clearer experience.
Original PR description
- Update `_task_get_searchbar_sortings` override to match the parent method signature. task-6197616
Manufacturing orders tied to a project will now only create employee productivity analytic costs when the manufacturing cost setting is enabled. This helps prevent duplicate project cost postings when the same project already receives costs from sales or purchases.
Original PR description
Manufacturing orders linked to a project could generate duplicate analytic entries when costs were already posted through another flow, such as sale COGS or purchase costs linked to the same project. This complements the analytic costs toggle added on manufacturing operation picking types by applying it to employee productivity analytic entries. This commit's changes: - uses the MO project's analytic distribution only when analytic_costs is enabled, while keeping cleanup behaviour task-5130915
The payrun kanban and layout views now include a toggleable chatter panel. This makes it easier to review messages and follow discussions for the selected payrun without leaving the main screen.
Original PR description
Add a toggleable chatter side panel to the payrun kanban view and to the payrun layout. The panel displays the chatter of the selected paryn. task-6192099
This update adds support for the ONSS reduction for employers hiring artists. It estimates the reduction on payslips and includes it in DMFA reports, helping payroll records and submissions reflect the benefit more accurately.
Original PR description
For employers hiring artists they can get ONSS reduction (Target group reduction RGC) what's new ? calculations to show an estimated amount on the payslip, with relative salary rule. added the reduction to the dmfa (pdf, xml). a new model to store the reduction lines ( employee, amount ) on the dmfa tab. Task#6174405
This update enhances the tracking of sickness leave by allowing a relapse leave to be linked to its original leave. This simplifies payroll calculations and improves the user experience by providing better visibility into leave history. The changes also automate the selection of the previous day's leave as the default for relapse leaves.
Original PR description
We wanted to add a new field to hr_leave to link a relapse leave to the origin leave, to ease tracking, payroll calculations and improve UX. -Added a new M2O field to link the origin leave. -Adeed a new M2M field to compute the allowed origin leaves to choose from. -default the origin leave if exist a leave the day before the new leave start date. Task#6209556
This update adds a payment reference to invoices generated from Amazon orders. This enhancement improves traceability and simplifies reconciliation between Amazon sales data and Odoo invoices, leading to more accurate financial reporting.
Original PR description
Set `payment_reference` on invoices from `amazon_order_ref` during invoice creation to improve traceability and reconciliation for Amazon orders. Task: 6140292
This update simplifies the 'Print Planning' action within the Project app, renaming it to 'Print' for clarity. It also removes an unnecessary header from the printed schedule, allowing the full page to be used for the table. This improves the user experience and presentation of project schedules.
Original PR description
The Gantt and Calendar "Print Planning" action lives in the Project app and is confusing alongside the Planning app, so rename it to simply "Print". The printed schedule also uses `web.internal_layout`, which adds a date/company/ page header and reserves top margin for it. Switch the report to `web.basic_layout` so the header is removed and the table can use the full page. task-6186527
This update enhances the Gantt view's user experience by improving the display of pill titles and adding a toggle to show dependencies. It also introduces finer-grained time precision for scheduling tasks, resulting in a more intuitive and accurate planning tool.
Original PR description
*: web_studio, planning, planning_field_service, pos_appointment, project_enterprise, sale_planning, hr_holidays_gantt Refines the Gantt view layout and interaction model with the following updates: - Clip pill titles cleanly on overflow rather than displaying an ellipsis. - Map double-clicks directly to the form dialog wrapper, buffering single clicks to isolate the popover action. - Introduce a "Show dependencies" action toggle in the reschedule dropdown (persisted in localStorage). - Hide all connector lines when the dependency toggle is disabled, unless their anchor pill is actively hovered. - Propagate connector line highlighting whenever its source or target pill is hovered. - Adapt the pill and connector highlight style to their color. - Widen the connector bullet hitbox to facilitate interaction. - Add a new quarter-day (6h) cell precision configuration for week and month view scales. - Remove useless divs from the gantt_renderer_controls file. task-6159075
This update strengthens the connection between employee records and their associated documents. Now, when uploading documents, they're automatically linked to the employee, and employees can easily view all their linked documents regardless of location. This streamlines document access and management for HR staff.
Original PR description
This commit adds more synchronization between the documents and the employee by implementing the points below. - Add the support of the `hr.employee` model in the res_model of documents. - When coming from the context of the employee, uploading the file leads to linking the employee by default to the res_model. - Open the base action_open_documents for employee when the bridge is enabled, allowing to show all documents linked to the employee irrespective of their location (See Task-5948278). Task-6072094
This update enhances the user experience on the Helpdesk portal by simplifying search functionality and improving ticket display. Specifically, the search now prioritizes ticket descriptions and messages, and ticket names are no longer truncated, providing a clearer view for support agents and customers.
Original PR description
This commit: - Replace search on "Customer" and "Helpdesk Team" with "Description" and "Messages". - Display folded stage's pill in green. - Allow ticket names to wrap instead of being truncated. task-6197601
This update simplifies tax management for records where taxes are calculated externally. The toggle to manually set included/excluded taxes has been hidden to prevent user interference and ensure accurate calculations, particularly when integrated with Avalara for US and EDI for Brazil. This change maintains data consistency and avoids potential tax filing errors.
Original PR description
A new way to manage price-included/-excluded taxes was recently added [1]. We hide the toggle if taxes are calculated externally, because for these records the tax calculator is in charge and the user shouldn't be tempted to change what they determined. Doing so doesn't have the intended effect anyway: - Confirming the record will recalculate the taxes anyway, - If you somehow force it to be different, Odoo won't be in sync with Avalara which causes unexpected tax filing (for US) or EDI (for Brazil), [1] https://github.com/odoo/enterprise/pull/114100 task-6327486
This update adds a 'Print Yield Copy' button to delivery guides in Chile, aligning with local regulations. This allows for the physical signing of fiscal documents, ensuring compliance with Chilean tax requirements. The change improves the functionality of delivery guides for businesses operating in Chile.
Original PR description
*: _stock Purpose: In Chile, all fiscal PDF documents printed also needs to print a "yield copy." The copy has an extra block of information that allows fiscal documents to be signed physically (yielded). Since Electronic Delivery Guides are fiscal valid PDFs, a yield copy needs to be implemented. When a delivery guide is created for a delivery order, a "Print Yield Copy" button will appear next to "Print Delivery Guide" button. This button will print the yield copy of the delivery guide when clicked. task-6180890
This update introduces a standardized method for extracting VAT numbers from various Odoo modules, simplifying VAT reporting and reconciliation. The change creates a reusable function to remove country codes from VAT numbers, ensuring consistency and accuracy across different reports and localization modules. This improves data quality and reduces manual effort for users.
Original PR description
In this commit: - Create a new generic method '_get_clean_vat_number' in res_partner - This method will be used to extract the numeric part of a VAT number by removing its country_code prefix. Community PR: https://github.com/odoo/odoo/pull/229461 Task [link](https://www.odoo.com/odoo/project.task/5117804) task-5117804
This update adds functionality to accurately calculate and report Belgian withholding tax exemptions for overtime hours (natures 44-59) within the 274.XX declaration. It leverages validated payslips and existing hour caps to ensure accurate calculations, streamlining the reporting process for Belgian employees.
Original PR description
Compute the withholding-tax exemption for overtime hours (natures 44–59) within the Belgian 274.XX declaration. Overtime worked-day lines are collected from validated payslips, bucketed by rate and sector (CP124/CP302/immovable work), and allocated to the appropriate nature codes while respecting each employee's annual hour cap. Hours already declared in earlier months of the same year are carried forward so the cap is enforced cumulatively. The exemption rate is stored as an updatable rule parameter. A white-cash-register flag on the company controls the higher cap for CP302 employees. New work-entry types, an XLS extra-hours sheet, a PDF section, and extended tests are included. Task Id: 5430988
This update allows users to easily duplicate existing website appointment menus, streamlining the process of creating similar appointment pages. Previously, this functionality required a manual step. This change improves efficiency and simplifies website management for the team.
Original PR description
The corresponding community PR makes it possible to duplicate multi-level template menus but The duplication function needs to be explicitly called. Task-6030210
This update enhances payroll reports to accurately reflect data for all companies within a branch structure. Previously, reports only included data for the root company. Now, reports automatically include data from the root company and all its child companies, ensuring more complete and accurate reporting. Thorough testing has been conducted to verify data integrity.
Original PR description
This tasks was about switching from a (1 report - 1 company) paradigm to a (1 report - many companies). The implementation is done in two parts: 1 - first ensure that the report is created with a…
This tasks was about switching from a (1 report - 1 company) paradigm to a (1 report - many companies). The implementation is done in two parts: 1 - first ensure that the report is created with a root company as company_id 2 - include that root company and all child companies in the reported data 1 -> This was done by enforcing the user to have a root company as self.env.company. It looked easier and safer, therefore more robust. 2 -> This was done by creating a new computed property __branch_ids__ and extending the search domain for related payslips or data. When relevant, the field company_id was added in the views. As well as search filters and group_by. (Cases where it's not relevant is for instance that the report is a pdf) **Testing** - Two tests were created for each report: - One to ensure you cannot generate a report from a branch / child company. (exception for social balance sheet) - One to make ensure that - only employees from the relevant companies (root + children) are included in the reported data - employees from root and all children are included in the reported data task-6220264
This update enhances the reliability of communication between our Self and POS systems and OBOX devices. It now includes a timeout feature, allowing jobs to be awaited even when devices aren't on the same network, ensuring smoother operations and preventing delays when devices are offline.
Original PR description
Is now possible to await OBOX jobs with a specific timeout in PoS ans Self Order. This is usefull when the user device isn't connected on the same network as the OBOX and others hardware. taskId: 6248159 Forward-Port-Of: odoo/enterprise#118646
Resolved issues and error corrections
This change removes an unintended extra padding in the bank reconciliation widget. It makes the layout look more consistent and improves the display of statement lines for users working in accounting.
Original PR description
Since this commit: https://github.com/odoo/odoo/commit/185b70434091d7c20b3993d59dad6490a8a77a6e it seems that kanban record have an extra padding to it. This pr will remove it in the bank rec widget at least. no task id
When users switch the Gantt timeline between day, week, month, or year views, the chart now stays centered on the same point they were looking at instead of jumping back to today. This makes it easier to continue planning or reviewing work without losing context.
Original PR description
*: project_enterprise This commit ensures that switching the Gantt view scale (day, week, month, year) anchors the new time period around the date currently centered in the viewport, rather than defaulting back to "today". Two coordinated changes make this possible: * **Range Selection:** `selectRangeId` now passes `getCurrentFocusDate()` (the pixel-computed center of the viewport) to `getRangeFromDate` instead of defaulting to `DateTime.now()`. * **Viewport Scrolling:** `focusDate` has been refactored to scroll the targeted date directly to the center of the viewport rather than its left edge. This is achieved by subtracting half the visible cell area width from the computed scroll position. The focusGroup behavior is removed since it is obsolete due to the fact that the default period only shows 1 group instead of 3. task-6314686
This change updates how automated tests clean up test components so they remove whole test apps only when appropriate. It prevents tests from accidentally tearing down shared pieces of the interface, which makes the test suite more stable and reduces flaky failures.
Original PR description
- Community: https://github.com/odoo/odoo/pull/271765 Before this commit, 'destroy' was used to destroy individual components in unit tests. The issue is that this helper is meant to destroy the entire app, which creates weird situations when several components are spawned under the same app in a same test. This commit ensures the 2 following scenarios: - the previous component is entirely replaced, and 'destroy' is used legitimately; - or multiple components have been aggregated under a common parent, and are then mounted/unmounted through reactivity.
This update resolves a stability issue in the Gantt chart module. Enabling user chatter previously caused test crashes due to missing data. This commit adds the necessary model changes to ensure compatibility and reliable operation.
Original PR description
Enabling user chatter caused crashes in tests because the mock user model was missing expected fields. This commit adds the necessary model inheritances to provide those fields. **Community PR:** odoo/odoo#265502 **Task**: 4933086
This update streamlines the layout of quantity buttons within the Odoo inventory barcode interface. Previously, a confusing button arrangement and inconsistent delete functionality caused user friction. Now, the layout is more intuitive, and the delete button's behavior has been clarified to only remove lines from the view, improving the user experience.
Original PR description
This commit improves the layout of quantity buttons in barcode in both cases of physical inventory and transfers. ### Before this commit: 1- The fulfill button disappeared if `quantity done == demand…
This commit improves the layout of quantity buttons in barcode in both cases of physical inventory and transfers. ### Before this commit: 1- The fulfill button disappeared if `quantity done == demand - 1` which causes the increment and decrement buttons to shift their positions, that caused confusion to the user. 2- The delete button (red trash button) in case of physical inventory count was used to set the count of the product to 0 and remove the line from barcode view. 3- The "?" button (to mark the quantity as not set yet while inventory count) appeared whether the quantity on line was set to a number >= 0. 4- The button for registering components was among the lower buttons (increment, decrement, and fulfill). ### After this commit: 1- The fulfill button still disappears when `quantity done == demand - 1` but an empty spacer replaces it, which causes other buttons to hold positions. 2- The delete button now only appears when the user adds a product by themselves using the form or scanning the product (not while the product is in an inventory request). Also the functionality is of the button is now different, it just removes the line from the barcode view without affecting the inventory count at all. 3- The "?" button now only appears if the quantity = 0. 4- The button for registering components is no next to the edit button. Upgrade PR: https://github.com/odoo/upgrade/pull/10224 Task-6095725
This update resolves an issue where the website link wasn't correctly populated when creating a lead through the AI-powered CRM tool. The fix ensures that the visitor's website information is accurately captured, improving the lead generation process. This prevents missing website data from being associated with new leads.
Original PR description
see: https://github.com/odoo/odoo/pull/252766 ERROR: Subtest TestAiCrmLivechatTools.test_create_lead_tool_from_livechat (login='public_user') Traceback (most recent call last): File…
see: https://github.com/odoo/odoo/pull/252766
ERROR: Subtest TestAiCrmLivechatTools.test_create_lead_tool_from_livechat (login='public_user') Traceback (most recent call last):
File "/data/build/odoo/odoo/tools/safe_eval/evaluation.py", line 431, in safe_eval
return unsafe_eval(c, globals_dict, None)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "ir.actions.server(272,)", line 1, in <module>
File "/data/build/odoo/odoo/tools/safe_eval/runtime.py", line 659, in safe_call
return callee(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^
File "/data/build/enterprise/ai_crm/models/crm_lead.py", line 16, in _ai_create_lead
self.create(self._ai_prepare_lead_creation_values({
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/data/build/enterprise/ai_crm_livechat/models/crm_lead.py", line 21, in _ai_prepare_lead_creation_values
if 'website' in self.env and (visitor := channel.livechat_visitor_id):
^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'discuss.channel' object has no attribute 'livechat_visitor_id'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/data/build/odoo/odoo/tests/common.py", line 2949, in with_users
func(self, *args, **kwargs)
File "/data/build/enterprise/ai_crm_livechat/tests/test_ai_crm_livechat_tools.py", line 17, in test_create_lead_tool_from_livechat
tool.with_context({'discuss_channel': livechat_channel})._ai_tool_run(None, {
File "/data/build/enterprise/ai/models/ir_actions_server.py", line 288, in _ai_tool_run
self._run_action_code_multi(eval_context=eval_context)
File "/data/build/odoo/odoo/addons/base/models/ir_actions.py", line 1012, in _run_action_code_multi
safe_eval(self.code.strip(), eval_context, mode="exec", filename=str(self))
File "/data/build/odoo/odoo/tools/safe_eval/evaluation.py", line 437, in safe_eval
raise ValueError('%r while evaluating\n%r' % (e, expr))
ValueError: AttributeError("'discuss.channel' object has no attribute 'livechat_visitor_id'") while evaluating "ai['result'] = record.sudo()._ai_create_lead(name, contact_name, description, email, phone, team_id, tag_ids, priority, country_id, state_id, city, zip_code, street, job_position)"This update resolves an issue where users assigned to sign requests ('Own Templates' group) were encountering an 'Access Error' when attempting to sign documents. The fix utilizes `sudo()` to correctly access document counts, ensuring these users have the necessary permissions to open and sign documents. This improves the user experience for sign requests created with the 'Own Templates' access right.
Original PR description
Steps to Reproduce: 1. create a new user (UserB) and grant the 'User: Own Templates' access right. 2. send a new Sign Request to UserB. 3. log in with the UserB account and try to sign the document. Issue: An 'Access Error' message is displayed instead of opening the document to sign. Cause: `go_to_document` and `go_to_signable_document` read `self.template_id.document_ids` to compute `document_count`, and the `sign.template` record rule for `group_sign_user` only grants access to the template owner. Users assigned to sign request created from that template do not have access to the template itself, so reading `document_ids` raises an `AccessError` before the document can be opened. Solution: Used `sudo()` in both methods to compute document_count.
This update resolves an issue preventing proper grouping in the resource search view based on job position. The fix ensures that users can now filter and group resources accurately, improving search efficiency. This enhancement streamlines resource management within the Enterprise module.
Original PR description
In a recent commit, we added the job position to the resource search view. However, the group by was not working because the field was not stored. This is now fixed in this commit. task-6329358
A previous bug caused an unwanted 'Uninstall modules' prompt to appear after saving settings, specifically when the Website Form module was installed. This fix ensures the module remains installed regardless of the Website Form setting, as it's now essential for displaying Field Service information in the portal. This prevents unnecessary user disruption.
Original PR description
Steps to reproduce: - 1. Install `website` and `planning_field_service` (so `website_planning_field_service` auto-installs). 2. Open Settings and click Save. Issue: - An "Uninstall modules" wizard…
Steps to reproduce: - 1. Install `website` and `planning_field_service` (so `website_planning_field_service` auto-installs). 2. Open Settings and click Save. Issue: - An "Uninstall modules" wizard pops up offering to remove `website_planning_field_service`. Cause: - Since the module is now `auto_install` with its `post_init_hook` removed, it is installed alongside `website` and `planning_field_service` while the setting remains disabled by default. On Save, `set_values` re-derives the `module_website_planning_field_service` field from a company `search_count`, setting it to False when no company has the feature enabled, even though the module is installed. Base `execute()` then sees `module_* = False` on an installed module and re-offers the uninstalls. Fix: - Make `set_values` install-only: enabling the setting still installs the module, but disabling it no longer attempts to uninstall it. The module is now also used to show or hide Field Service information in the portal, so it must remain installed even when the Website Form feature is disabled. task-6330718
This update resolves issues where AI record creation and updates were failing due to missing history data, leading to blank responses for users. Additionally, the system was incorrectly duplicating AI search filters during record reloads. The fix ensures AI history is properly captured and filters are applied only once, improving the reliability and performance of AI-powered record operations.
Original PR description
## Issue Pending tool results were missing from history we read for create/update, potentially producing empty responses. Also the create/ update soft reload actions are duplicating the AI search filters in the records' search view if the view is already open and filters are already set. ## Fix Refresh the session history after pending tool calls and avoid reapplying AI search criteria when restoring existing search state. task-id-6329071
This update fixes an issue where shift report PDFs displayed unnecessarily large pills for single-line shift names. The change ensures shift pill sizes are now correctly optimized for single-line names while still accommodating longer names that wrap to multiple lines. This improves the visual clarity and consistency of shift reports.
Original PR description
### Steps to reproduce: 1. Go to Planning. 2. Create a shift with a short name that easily fits on a single line. 3. Click Actions > Print to generate the PDF report. 4. Observe the printed shift pill. ### Issue: Single-line shift pills look unusually large because they take up unnecessary vertical space on the printed report. ### After: The pill now correctly shrinks to fit a single-line name natively, while still expanding downward if a longer name wraps to a second line. task-5062148
A recent update to Odoo's user interface broke the way certain fields, specifically the VAT field, are displayed. This fix corrects the broken XPath expressions, ensuring the VAT field is correctly rendered across multiple Odoo localization modules. This resolves a display issue impacting financial reporting.
Original PR description
The refactor of identifiers on both the partner and company views broke some xpaths. This commits aims at repairing those. See https://github.com/odoo/odoo/pull/262274 See https://github.com/odoo/enterprise/pull/115838 task-none
This update resolves a critical issue where salary rounding wasn't correctly applied in Belgian payroll tests due to a missing company country setting. Additionally, a fix was implemented to address overlapping test data in scheduling tests, preventing errors and ensuring accurate shift splitting. These changes improve the reliability of payroll calculations and scheduling functionality.
This update resolves an issue where sign templates with auto-filled fields would incorrectly display placeholders instead of the actual values, or fail to generate documents. The fix ensures falsy auto-filled values are properly preserved, preventing errors and guaranteeing accurate sign document generation.
Original PR description
Version: - 19.0 Steps to reproduce: - Create a sign template with a readonly sign item linked to an auto field. - Use a reference record where the linked field value is empty or False. - Send the…
Version: - 19.0 Steps to reproduce: - Create a sign template with a readonly sign item linked to an auto field. - Use a reference record where the linked field value is empty or False. - Send the document for signing. - Complete the signing flow. Issue: - Readonly sign items linked to auto-filled values could not properly handle falsy values. Empty values could trigger the error "Some required items are not filled" and completed sign requests displayed the sign item placeholder instead of the actual auto-filled value. - completed document generation could fail when rendering falsy values for textarea sign items. Cause: - Falsy auto-filled values were ignored during constant item population and replaced by the sign item placeholder. Additionally, readonly constant items were included in required field validation and completed sign requests continued to display placeholders when the stored value was empty. - document rendering assumed sign item values were always strings for textarea sign items but when auto field is empty it value can be False. Fix: - Preserve falsy values when populating readonly constant items, exclude constant items from signer validation, and hide placeholders for empty auto-filled constant items when displaying completed sign requests. - Normalize falsy values to prevent crashes and allow completed documents to be generated correctly. Forward-Port-Of: odoo/enterprise#121299 Forward-Port-Of: odoo/enterprise#121009
This update fixes a scheduling issue with semi-monthly payrolls. Previously, payslips were incorrectly aligned with the month's halves, resulting in overlapping periods. The change now ensures payslips start on the 16th of the month, accurately reflecting the payroll schedule.
Original PR description
Issue: ---------------------------------------- The start date of semi-monthly payslips on second half of the month is the 15 which is also the end date of the first half of the month. Steps to reproduce: ---------------------------------------- - Have an employee with a semi-monthly payroll - When in the first half of the month, create a payslip for this employee - The payslip is from 1st to 15th - Do the same when in the second half of the month - The payslip is from 15th to end of the month Cause: ---------------------------------------- In `_schedule_period_start()` we set the start date to th 15th for semi-monthly payslips. Solution: ---------------------------------------- Set it to the 16th. opw-6281556 Forward-Port-Of: odoo/enterprise#120887 Forward-Port-Of: odoo/enterprise#120172
This update fixes an issue where the system incorrectly rejected zero measurements from caliper devices in IoT data. This ensures accurate reporting of measurements, particularly when a device isn't detecting anything. The update also includes a minor typo correction.
Original PR description
Fix a check on the IoT response that incorrectly rejected valid measurements of 0 from caliper devices Also fix a typo opw-6184669 Forward-Port-Of: odoo/enterprise#121226 Forward-Port-Of: odoo/enterprise#121116
This update resolves an issue where users were encountering access errors when using the timesheet suggestion dropdown. The fix prevents the timer from suggesting tasks the user no longer has permission to view, ensuring a smoother timesheet experience. This improves usability and prevents potential disruptions for users.
Original PR description
Steps to reproduce: - 1. Log in as a user who can see their own timesheets and has already logged time on tasks that are now in projects they can no longer read (e.g. Marc Demo in the demo data). 2. Open the Timesheets timer in the systray and check in. 3. Click the task field to open the suggestions dropdown. Issue: - An access error is raised when the task dropdown is opened. Cause: - The timer's `project.task` `name_search` override suggests recently used tasks via `account.analytic.line.sudo()._get_recently_used_records()`. The sudo surfaces task ids the user can no longer read. `name_search` returns them, raising the access error. Fix: - Filter the aggregation result so only tasks the user can read are returned. task-6319815 Forward-Port-Of: odoo/enterprise#121345
A minor typo in the payroll warning system was causing incorrect alerts. This update corrects the typo, ensuring that payroll warnings are accurately identified and displayed to users. This resolves a potential disruption to payroll reporting.
Original PR description
The DMFA submission payroll warning was incorrectly matched by _get_payroll_translation because of a small typo task-6326554
This update resolves an issue where PrintRec components could receive incorrect data values. Previously, these components weren't properly validated, which could lead to unexpected behavior. This fix ensures data integrity for PrintRec components, particularly when used in production environments.
Original PR description
This commit fixes the props validation of PrintRec* components since they can receive `false` on some property. Before the components were not validated because they were mounted with a production mode app.
This update resolves a technical issue impacting work order duration calculations. A recent code change shifted a related function, but a critical component – accounting for travel time – was missed. This fix, triggered by a runbot error, ensures accurate work order duration reporting.
Original PR description
get_duration was moved from mrp_workorder to mrp in odoo/odoo#267113 and odoo/enterprise#118753 However, _intervals_duration missed the trip This solves runbot error 940411
This update enhances the helpdesk system by adding tests to ensure auto-reminder emails are sent correctly before tickets are automatically closed. It also corrects a calculation error in the reminder timer, preventing delays in sending these important notifications. This improves the efficiency of our support process and ensures timely communication with customers.
Original PR description
- add tests for the auto reminder email before auto-closing tickets - fix issue with the reminder timer calculation --- task-5438678 Forward-Port-Of: odoo/enterprise#120540
This update resolves a technical issue impacting the performance of the Gantt chart within the Enterprise module. Specifically, a variable name was corrected to enhance the functionality and stability of the underlying planning service. This change ensures smoother chart operation for users.
Original PR description
task-6200248
This update corrects a bug in how appointment invitations are sent, ensuring they are only triggered for 'booked' or 'requested' appointments. Previously, invitations were incorrectly sent for cancelled appointments or when status was updated. This ensures accurate and timely appointment notifications for users.
Original PR description
This PR fix three issues related to the sending of the appointment invitations. Each one has its own commit: - Commit 1 sends invitations only if the event either "booked" or "request". Previously they were sent even if the appointment was cancelled. - Commit 2 prevents the sending of regular invitations and always sends appointment invitation to new attendees of existing booked appointments. - Commit 3 sent appointment invitations if the status of an existing event is set "request". It also add the status change in the log as it would have been if it was done at the creation. Community PR: https://github.com/odoo/odoo/pull/260073 Task-6139036 Forward-Port-Of: odoo/enterprise#121381 Forward-Port-Of: odoo/enterprise#114304
This update resolves a stability issue in the point-of-sale tour. Previously, the tour could fail due to asynchronous order processing, leading to duplicate requests. By adding a delay to ensure requests are fully completed, this fix prevents race conditions and improves the reliability of the tour.
Original PR description
The tour could fail because `sendOrderInPreparationUpdateLastChange` is asynchronous when sending the order to the kitchen. The test was continuing to the next steps before the request was fully resolved, which could lead to sending the order again while the previous call was still in progress. This commit updates the tour to explicitly wait for the async call to complete before continuing, by adding a delay step after clicking the order button. This prevents race conditions during the test. --- Runbot Error: https://runbot.odoo.com/odoo/runbot.build.error/181846 Forward-Port-Of: odoo/enterprise#121237 Forward-Port-Of: odoo/enterprise#110909
A recent update to the Odoo Enterprise system (version 19.2 and later) caused a test for the 'hr_holidays_gantt' module to fail. This was due to an issue with a payroll-related field in the test's configuration. This fix ensures the test runs successfully, maintaining the functionality of the holiday Gantt chart.
Original PR description
__ ## Error description When the test runs with only the module `hr_holidays_gantt` installed, it fails. ## Origin of the issue There's a payroll related field in the `read_specification` variable. ### Note The error is only triggered since 19.2. __ original commit: https://github.com/odoo/odoo/pull/256636 Forward-Port-Of: odoo/enterprise#121119
Features or functions removed from Odoo
This update removes redundant app creation within Odoo, streamlining the system and reducing potential errors. By eliminating unnecessary app instances, we minimize the risk of configuration issues and simplify debugging, ultimately improving stability.
Original PR description
See commit messages for detail - https://github.com/odoo/odoo/pull/267998
Code cleanup and technical improvements
This change removes an old fallback that could silently pick the wrong website when a URL was requested. It helps ensure the correct site is used more reliably and reduces inconsistent behavior in related website features and tests.
Original PR description
Removed the legacy fallback mechanism that used threading to retrieve a URL inside get_current_website. This hidden mechanism masked structural architectural flaws by systematically falling back to the first website record found, even when it didn't match the requested URL. By eliminating this permissive behavior, we expose hidden design issues and resolve long-standing test inconsistencies caused by non-deterministic fallbacks.
This change updates the VoIP softphone interface to use the newer input binding approach required by the latest framework version. It helps keep the calling experience compatible and maintainable as the platform evolves, without changing the user-facing behavior.
Original PR description
As part of the migration from `owl 2` to `owl 3`, this commit replaces uses of `t-custom-model` with `t-model` or `t-model.proxy`.
The return check screen was updated to use the newer embedded action structure introduced elsewhere in the product. This keeps the interface working consistently after the internal refactor, with no expected change to business behavior.
Original PR description
Following the refactoring of embedded actions, this commit adapts the AccountReturnCheckControlPanel to utilize the new logic. Changes: - Created a new `AccountReturnCheckEmbeddedActions` component that extends `EmbeddedActionsPanel`. - Moved the `isEmbeddedActionVisible` method to AccountReturnCheckEmbeddedActions. - Moved the XML replacement for the embedded actions dropdown to the new component's template. - Registered the new embedded actions panel within the control panel components. Task~4277541 Related: odoo/odoo#269040
Replaced \`useLayoutEffect\` with \`onMounted\` because \`useLayoutEffect\` is deprecated in OWL3. The effect used an empty dependency array (\`() => []\`), meaning it ran exactly once after the first render — which maps directly to \`onMounted\`. No reactive tracking or DOM measurement was needed, so \`onMounted\` is the correct and minimal replacement. The \`useLayoutEffect\` refactored in this PR has test coverage — below are some tests that failed when the effect was commented out: - @docu
Original PR description
Replaced \`useLayoutEffect\` with \`onMounted\` because \`useLayoutEffect\` is deprecated in OWL3. The effect used an empty dependency array (\`() => []\`), meaning it ran exactly once after the first render — which maps directly to \`onMounted\`. No reactive tracking or DOM measurement was needed, so \`onMounted\` is the correct and minimal replacement. The \`useLayoutEffect\` refactored in this PR has test coverage — below are some tests that failed when the effect was commented out: - @documents/kanban_view/Check actions with preview - @documents/kanban_view/Download button availability - @documents/kanban_view/Ensure previewer shows correct name after renaming a document see runbot build: https://runbot.odoo.com/runbot/batch/2593689/build/114684050
This update removes an outdated code element (`useLayoutEffect`) that was causing instability in the Knowledge module. Replacing it with `onMounted` ensures the module functions reliably and aligns with current Odoo standards. Successful automated tests confirm the change.
Original PR description
Replaced `useLayoutEffect` with `onMounted` because `useLayoutEffect` is deprecated in OWL3. The effect called `toggler.click()` once when the toggler element became available on mount. `onMounted` is the correct replacement: the toggler ref's el is present at mount time, so a single `onMounted(() => this.toggler.el?.click())` fires synchronously at the same lifecycle point, matching the original timing without the deprecated hook. The useLayoutEffect refactored in this PR has test coverage — below are some tests that failed when the effect was commented out, and are now passing: - @knowledge/options_dropdown/Move Article - FAIL: WebSuite.test_unit_desktop (in html_editor,knowledge suite) - FAIL: MobileWebSuite.test_unit_mobile (in html_editor,knowledge suite) see commented-out runbot build: https://runbot.odoo.com/runbot/batch/2596678/build/114854269
This update replaces an outdated code component with a modern version compatible with Odoo's latest framework (OWL3). This ensures the appointment screen functions correctly and avoids potential issues with deprecated code. The change was verified through automated testing, confirming the functionality remains intact.
Original PR description
Replaced `useLayoutEffect` with `useEffect` (OWL3) because `useLayoutEffect` is deprecated in OWL3. The single `useLayoutEffect` was reacting to `this.props.actionName`: when `actionName ===…
Replaced `useLayoutEffect` with `useEffect` (OWL3) because `useLayoutEffect` is deprecated in OWL3. The single `useLayoutEffect` was reacting to `this.props.actionName`: when `actionName === 'manage-booking'` it makes an async `data.call` to open the booking gantt view, then dispatches `doAction` / `switchView`. This is not derived state and does not load data into component state — it dispatches an action, making OWL3 `useEffect` the correct replacement. OWL3 `useEffect` auto-tracks reactive values read in its body, so `this.props.actionName` is tracked automatically without an explicit dep array. The `useLayoutEffect` refactored in this PR has test coverage — below are some tests that failed when the effect was commented out, and are now passing: - `@pos_appointment/unit/screens/action_screen/ActionScreen => useEffect`: Expected gantt view action, received null - `FAIL: TestFrontend.test_appointment_kanban_view_date_filter`: Tour failed at 'Go to kanban view' step - `FAIL: TestUi.test_pos_restaurant_appointment_tour_basic`: Tour failed at 'Check that the booking gantt view is shown' see commented-out runbot build: https://runbot.odoo.com/runbot/batch/2596700/build/114854622
This update improves the way mock server data is structured and serialized, aligning it with recent changes in the Odoo Enterprise platform. Specifically, the mock models used in various modules (ai, approvals, voip, whatsapp, etc.) have been updated to use a new field list DSL and `as_dict()` serialization, ensuring better compatibility and data consistency. This change enhances the reliability of the mock server environment for testing and development.
Original PR description
Enterprise companion of the community commit "[REF] mail, *: match mock server Store to python implementation". Migrate the mock server mock models to the new `_store_<name>_fields` field list DSL and `as_dict()` serialization. https://github.com/odoo/odoo/pull/271117
This update simplifies the underlying model structure within Odoo's Web Studio. As part of a larger migration to a newer version (Owl 3), the team has replaced older model definitions with more modern `t-model` and `t-model.proxy` structures. This change improves the long-term maintainability and stability of Web Studio applications.
Original PR description
As part of the migration from `owl 2` to `owl 3`, this commit replaces uses of `t-custom-model` with `t-model` or `t-model.proxy`.
This update centralizes the configuration for printing IoT reports using a standardized registry. This change enhances flexibility and maintainability by allowing for easier updates and modifications to report printing methods for IoT printers, without requiring direct code changes.
Original PR description
we now use the registry to define the method to print reports using IoT printers. see odoo/odoo#271560
This update simplifies the codebase by replacing older model structures (`t-custom-model`) with newer, more efficient ones (`t-model` and `t-model.proxy`) as part of the ongoing migration to Owl 3. This change improves the underlying system's performance and maintainability.
Original PR description
* = [ai_website] As part of the migration from `owl 2` to `owl 3`, this commit replaces uses of `t-custom-model` with `t-model` or `t-model.proxy`.
This update simplifies the underlying data structure within the Enterprise module by replacing older model types with newer, more efficient `t-model` and `t-model.proxy` structures. This change is part of a larger migration from `owl 2` to `owl 3`, ensuring the system remains current and optimized for future development.
Original PR description
As part of the migration from `owl 2` to `owl 3`, this commit replaces uses of `t-custom-model` with `t-model` or `t-model.proxy`.
This update changes how processors within Odoo handle data transformation. Previously, processors were limited in returning falsy values, now they can explicitly return null or undefined to signal no processing or a deliberate choice. This allows for more flexible and controlled data flow within Odoo's modules.
Original PR description
*: knowledge, web_studio Previously, `processThrough` used `|| item` to fall back to original value if a processor returned a falsy value. This prevented processors from intentionally returning falsy values (e.g. null, undefined). Now each processor is responsible for returning a value explicitly: - Return the transformed value if processing occurred. - Return the original item if no processing is needed or processing is in place. - Return null/undefined to intentionally pass a falsy value. Community PR: https://github.com/odoo/odoo/pull/255801 task-6030633