Daily updates from Odoo
Wednesday, May 27, 2026
54 changes · master
New functionality added to Odoo
This update allows users to import their existing websites directly from Ghost, a popular blogging platform. Users will need to provide their Ghost API key during the import process. This expands website generation options and simplifies content migration.
Original PR description
Allows the user to import website from the Ghost blog platform. They must provide their API key for this service.
This update introduces a new feature allowing users to dictate messages within the AI chat interface. Simultaneously, the underlying voice recording system has been strengthened to support this functionality. This improves accessibility and efficiency for users interacting with the AI chat.
Original PR description
This commit adds a native voice-to-text dictation feature, while hardening the underlying community voice recorder architecture to support it. task-5948112 community https://github.com/odoo/odoo/pull/253611
This update introduces a new module for connecting with Obox devices, which are similar to the Odoo FDM for Belgium. The primary function is to allow users to register and view basic information about their Obox devices, including their IP address and available services, paving the way for future device management capabilities.
Original PR description
The Obox (same platform as the Odoo FDM for Belgium) will allow interfacing with hardware devices, and is intended to replace the functionality of the IoT box. This commit only adds the ability to pair an Obox to the database, and see its IP and available services. Community: https://github.com/odoo/odoo/pull/254208 Forward-Port-Of: odoo/enterprise#110834
Enhancements to existing features
This update simplifies how contract availability is displayed in the Gantt view, making it easier to visualize resource scheduling. The changes include refactoring test cases and adding new functionality to integrate contract unavailabilities directly into the Gantt chart. This improves the overall planning process and resource management.
Original PR description
<h3><b>[REF] planning: refactor changes from planning_contract</b></h3> Contract unavailabilities have been simplified using gantt unavailabilities. The hoot test cases have been refactored as we have unified the mock models. Moved a test case to community. --- <h3><b>[IMP] project_enterprise_hr: add contract based graying in gantt view</b></h3> Added contract unavailabilities through gantt unavailabilities. Added some hoot test cases. task-3885152
This update refactors the existing Hong Kong AutoPay module to create a more flexible and extensible system. The changes broaden support beyond just HSBC, allowing for easier integration with other banks in Hong Kong and future expansion. This improves the overall automation of payment processing for Hong Kong businesses.
Original PR description
Refactor the hsbcnet module, aiming to: - Transform it into a general 'Hong Kong AutoPay' module, covering more than just HSBC - Re-design the module to be easily extensible for future support of extra banks. task-6007861
This update provides users with the option to view financial changes between periods as either a percentage or a precise monetary amount. Previously, only percentage changes were available, which could be misleading when tracking large financial impacts. This change offers a more direct and accurate representation of the actual financial difference.
Original PR description
Right now the period-comparison filter allows for a % change to be visible as an additional column between two periods. Sometimes, if you are trying to keep track of large figures and want to see the real world financial impact of changes between periods, a percentage can't help. This commit allows for users to decide if they want a **Percentage** comparison (the default that preserves the current behavior) or an absolute **Amount** shown via the comparison filter. As we are dealing with currency, the amount column will show the real v1 - v2 difference displayed as a monetary field and works off the source column to properly support multi-currency reports. In addition, it takes into account the rounding unit for better display views. The column header switches between "Change (%)" and "Change (<currency_symbol>)". task-6116196
This update enhances the usability of the Manufacturing, Quality, and Shop Floor apps by refining the Gantt view scales and improving the Quality Point form. Specifically, the Quality Check form now includes access to worksheets and attachments, streamlining the inspection process and aligning the Shop Floor interface for a more consistent user experience.
Original PR description
This PR improves the user experience in the Manufacturing, Quality and Shop Floor app and adds the worksheet to the quality check form. Task-id: 6164381
This update ensures that new employees in Belgian companies automatically receive their payslips in the local language (French, Dutch, or German) if the company's environment uses one of these languages. This improves the user experience and compliance with Belgian regulations, making payslips easier to understand for employees.
Original PR description
After this commit, when a new employee is created in a Belgian company, their payslip's language defaults to the environment's language if this language is one of the Belgian national languages i.e. French, Dutch or German. A test has been added to verify the correctness of the behaviour. task-6234693
This update introduces a new system for managing salary rules within Odoo's payroll, allowing for more flexible and granular control over employee compensation. Specifically, it enables the definition of multiple 'structures' associated with salary rules, improving the handling of diverse payroll scenarios and supporting more complex business requirements. This change enhances the accuracy and adaptability of payroll calculations.
This update enhances the Odoo Enterprise website's SEO capabilities, allowing users to review and optimize their website's search engine ranking for each language they've enabled. This improvement ensures better visibility and potential customer acquisition across all supported languages, aligning with our global business strategy.
Original PR description
*: appointment_hr, test_appointment_full This commit ensures the user is able to review his SEO for each language installed for the website. task-4876478
This update streamlines how Odoo manages email activities by moving data handling to a more efficient store. Previously, a less effective method was used, and this change improves performance and stability of the mail system. The update also includes necessary updates to tests and mock servers.
Original PR description
Replace the `activity_format` ORM method with a `mail.activity` store handler in `/mail/store`.
Both `ActivityListPopover` and `AttendeeCalendarActivityListPopover` now call `store.fetchStoreData("mail.activity", { ids })` instead of going through `orm.call`. The mock server and tests are updated accordingly.
task-4676531This update ensures that companies can now initiate signature requests directly from the contact form, mirroring the functionality available for individual contacts. Previously, companies were excluded from this feature, which has now been implemented to align with their ability to act as signers. This improves the user experience for all company users.
Original PR description
The signature requests smart button on the contact form was previously hidden for companies and only displayed on individual contacts. Companies can also be signers, so the button is now shown for them as well. task-6235242
This update adjusts the order in which planning slots are displayed, prioritizing slots based on their start date and then by priority and ID. This change ensures that the most relevant planning slots are presented first, streamlining the planning process and improving efficiency.
Original PR description
This commit changes the default order set on `planning.slot` model to first order by start_datetime then priority and id. task-6176314
Resolved issues and error corrections
This update corrects a display issue where VoIP call durations were incorrectly shown in hours. The change converts the duration to store in seconds and displays it in a user-friendly format, eliminating potential rounding errors and simplifying the display. This ensures accurate call duration information for users.
Original PR description
Currently, duration on voip.call is stored in hours. But when we show the duration, we always need to show the seconds. This can cause several potential issues like rounding errors, unnecessary conversions. In this commit, we convert the duration field to store in seconds, also we convert type from float to integer. Task-[6128312](https://www.odoo.com/odoo/5778/tasks/6128312) COMPR: https://github.com/odoo/odoo/pull/264031 UPGPR: https://github.com/odoo/upgrade/pull/10199
This update fixes a technical issue related to the way invoice PDF legends are configured in Odoo. The field was incorrectly set to be company-dependent, which caused unexpected behavior. This change reverts the field to a standard computed value, ensuring consistent invoice generation.
Original PR description
The field `l10n_ar_invoice_pdf_legend` of res.company being company dependent was a mistake. We should change it back to a normal computed field. commit it was added: odoo/enterprise@c72681b5e1036f53de71ac422282127a95a2adc9
This update resolves a problem where WebP image formats in the demo data were causing errors when generating PDFs. The team has switched to using standard JPEG images, ensuring consistent and reliable PDF output for the sales demo.
Original PR description
WebP images used in the demo data caused issues in PDFs. Use JPEG instead.
This update resolves a minor visual issue in the Odoo Enterprise view editor. The XML mode within the editor previously lacked the correct background color, which has now been corrected. This ensures a consistent and professional user experience when designing views.
Original PR description
Following https://github.com/odoo/enterprise/issues/103707 which introduced a little bug, causing the xml editor of the view editor to not have the correct background color after this commit, the background color is corrects
This update simplifies the process of creating intercompany sales and purchase documents. The previous system unnecessarily generated document names, which has now been removed. This change improves the system's flexibility and efficiency.
Original PR description
The intercompany sale and purchase document creation explicitly calls next_by_code to generate document names, even though sequence assignment is already handled in create(). This explicit sequence generation is redundant and reduces the extensibility of the sequence flow. Remove the redundant next_by_code calls and rely on the standard create() flow for sequence assignment.
This update fixes a confusing naming issue within the Tax Returns page of Odoo Enterprise. The breadcrumbs now display correctly, ensuring a smoother user experience when navigating between tax return records. This change improves clarity and usability for users managing tax returns.
Original PR description
The "Tax Returns" page/breadcrumbs are currently called "Tax Return". This creates a confusing naming scheme with the breadcrumbs if you click into a new page from within an individual tax return after opening it from the Tax Returns page. Without the fix, the breadcrumbs would appear as "Tax Return/Tax Return" After the fix, they will appear as "Tax Returns/Tax Return". The page name has also been changed to "Tax Returns" with this fix.
This update simplifies the Gantt chart by removing a previously unnecessary feature. Previously, users couldn't easily select all records or expand all groups. Now that both options are available, this redundant element has been removed, streamlining the user experience.
Original PR description
Following the PR #179887, we introduced the possibility to remove the default group by. This was useful because: * The select all only selected the visible records * There was no possibility to expand all groups But now we can do both. This commit thus removes the default_group_by facet from all views and adapts the unit tests relying on it. community PR: https://github.com/odoo/odoo/pull/265574 task-6218432
This update resolves an issue where the 'Off-Cycle' button was unexpectedly displayed during new pay run batch creation. The fix ensures this button is hidden, streamlining the payroll process for users and preventing potential confusion. This improves the user experience and data accuracy.
Original PR description
The "Off-Cycle" button appears when selecting employees for a new pay run batch. Fixed by passing `hide_off_cycle_btn: true` inside the JS file context and evaluating it inside the XML button's `invisible` attribute. Task: 6240692
This update ensures that currency selection is now properly available when generating financial reports within Odoo Enterprise. Previously, this functionality was missing, leading to potential inaccuracies in reporting. This change improves the reliability and accuracy of financial data for users.
Original PR description
https://github.com/odoo/odoo/pull/262209
This update removes unnecessary scrollbars from the employee and manager feedback frames, resulting in a cleaner and more user-friendly experience on desktop views. Previously, the layout forced double scrollbars when content exceeded the screen size. Now, only the main page scrollbar is visible, improving readability and usability.
Original PR description
Prior to this commit, the employee and manager feedback frames were bound to the layout using 'vh-100' and 'scrollable-section'. This forced aa double-scrollbar layout on desktop views when text exceeded the screen size. This commit removes these layout classes from the XML view, allowing the feedback frames to expand vertically with their content so that only the main page scrollbar remains. Task: 6237029
This update fixes a limitation where basic users couldn't create new spreadsheets using the 'New' > 'Spreadsheet' option. By granting all users access to templates, this change enables basic users to create and manage spreadsheets, improving their workflow and functionality.
Original PR description
Basic document user can already create spreadsheet either by using the "New" button or uploading a document. The "New" > "Spreadsheet" button from document doesn't work because we don't have access to template. This task give access to their template to all users. It also allows basic user to create template as they will be able to create spreadsheets. Task: 6022218
This update ensures that payment notifications, receipts, and emails are sent to the correct contact – the invoice contact – when a partner has an invoice associated with them. This corrects a previous issue where payments were incorrectly sent to the commercial partner, maintaining accurate accounting records and reporting.
Original PR description
**Context:** Before this commit `account.payment.partner_id` was restricted (by domain) to commercial partners. When a partner has an invoice contact child (`type='invoice'`), checks, receipts and outgoing emails end up addressed to the parent partner instead of the intended invoicing contact. Accounting entries must still be linked to the commercial partner to preserve reporting & reconciliation integrity. **Solution:** The invoice model (`account.move`) already solves the same problem: `partner_id` stores the communication contact, `commercial_partner_id` is the stored compute used for accounting. This commit mirrors that architecture on `account.payment`. task-6123823
This update prevents errors during inventory counts when a company doesn't have a default warehouse. Now, users are automatically redirected to create a warehouse if one isn't already set up, ensuring a smoother inventory process. This improves usability and avoids disruptions.
Original PR description
In this [commit](https://github.com/odoo/odoo/commit/100cab4b1093ead8b35ec73c7fd41d90647cabbc), we introduced a flow where a warehouse is automatically created only for the first company. For subsequent companies, no warehouse is created by default. When no warehouse exists, adding a product during an inventory count in the barcode module raises a traceback because it tries to access a non-existent warehouse location. This improvement handles the case by giving the user an option to redirect to the warehouse view and create a new one. Community PR: https://github.com/odoo/odoo/pull/258129 TaskId-6098303
This update adjusts the stock management test to align with recent changes in Odoo (odoo/odoo#250422) that introduced new data keys for the product catalog. This ensures the test accurately reflects the current functionality and avoids potential issues related to unit testing.
Original PR description
This commit adapts for the changes in odoo/odoo#250422, which adds new keys to the data dict used by product catalog. Task-5917766
This update removes a default selection toggle within the salary rule configuration, streamlining the process for users. The change ensures the first option is automatically selected as the default, aligning with updated system logic. This simplifies configuration and reduces potential user confusion.
Original PR description
[IMP] hr_payroll: remove salary rule selection input default
There was a default toggle in the selection input for determining the input_default_selection.
I removed it and according to the sequence, the first one is selected as default.
task - 6023720This update fixes a technical issue related to the Thailand tax reporting module (l10n_th_reports). It replaces outdated references to tax tags with a more flexible system that connects to report expression records. This ensures accurate and consistent VAT reporting for Thai businesses.
Original PR description
Following the tax tag renaming in l10n_th, replace hardcoded tag name strings with lookups on report expression records. Community PR: https://github.com/odoo/odoo/pull/266327 task-6002110
This update corrects a faulty test within the Odoo payroll system. The previous test was unreliable (flaky) and its steps were incorrect, preventing accurate identification of issues. This fix ensures the tour test functions correctly, improving the stability of the payroll module.
Original PR description
The test is flaky, and the steps are wrong, we are missing the continue steps. task-6238273
This update resolves an issue where Odoo branches were incorrectly inheriting VAT information from their parent companies, leading to manual VAT adjustments. The change now defaults branches to no VAT, ensuring the parent company remains the key provider and simplifies the system for users. Key settings are also restricted to the base group for improved security.
Original PR description
Branches copied the parent's VAT, which made them their own signing entity and forced users to clear the VAT so the branch would reuse the parent's keys. Default branches to no VAT so the parent remains the key provider. Setting a VAT on a branch still exposes the key settings for the rare case separate keys are needed. Also restrict the key settings to base.group_system task_id - 6087168 Forward-Port-Of: odoo/enterprise#117986
This update ensures that canteen costs are accurately calculated when an employee has multiple workdays with the same canteen code on a single payslip. Previously, the system didn't account for this, leading to potential inaccuracies in monthly pay calculations. This fix corrects this issue, ensuring accurate payroll processing.
Original PR description
Before this commit, canteen costs for the monthly pay did not take into account that multiple worked day lines with the same code can be present on the same payslip. no related task Forward-Port-Of: odoo/enterprise#118020
This update fixes an issue preventing users from importing emissions data within the ESG module. The change allows the 'import' action to appear in the COG menu, even with the 'create' attribute disabled, ensuring seamless data import functionality. This improves the usability of the ESG reporting features.
Original PR description
Before this commit, the "import" action of emissions in the ESG module was not visible in the COG menu. It is because the "create" attribute of the list view is disabled, which prevents the menu item from being displayed. With this commit, we override the standard behavior in this particular action, by allowing the import action to show up in the COG menu, even if the "create" attribute is disabled. version-19.1 Forward-Port-Of: odoo/enterprise#118004
This update fixes a warning that appeared during payrun creation, specifically when running multiple payruns or adjusting payroll schedules. The issue stemmed from an error in how the system processed domain settings, which has now been corrected to prevent the warning and ensure stable payrun functionality.
Original PR description
[FIX] hr_payroll: fix payrun warning bug Bug reproduction: When we select Employee Type and all employees and create a payrun. Do this twice at least. Then set your schedule in the dashboard of payroll app. Error will appear. Bug cause: There was ast.literal_eval(action['domain']) part where action refers to action_hr_payslip_run but action['domain'] is False and ast.literal_eval(action['domain']) throws and error Bug solution: I said ast.literal_eval(action['domain'] or '[]'), in case action['domain'] is False, we should return [] domain to prevent throwback. task - 6227118 Forward-Port-Of: odoo/enterprise#117595
This update fixes a bug where Preparation Displays (PDIS) weren't correctly updated during table actions like transferring or merging orders. Previously, new PDIS were created instead of reusing existing ones, leading to inconsistencies. Now, PDIS are synchronized across all table actions, ensuring accurate order information on both the POS and kitchen screens.
Original PR description
Task: [#5005179](https://www.odoo.com/odoo/1737/tasks/5005179) --- When executing table actions such as transfer, merge, link, or unlink, the related Preparation Displays (PDIS) were not being updated. This caused inconsistencies between the POS orders and the kitchen screens. Also, when merging or linking orders and cancelling some lines, a new `pdis_order` was created instead of reusing the existing one. This fix ensures that PDIS are correctly synchronized and notified on any table actions. Forward-Port-Of: odoo/enterprise#99975 Forward-Port-Of: odoo/enterprise#98374
This update corrects a bug where refund processing triggered the unintended cancellation of original invoices within the Mexican CFDI integration. The fix adds a check to ensure the automatic cancellation flow only applies to invoice replacements, preventing credit notes from causing incorrect cancellations. This ensures accurate accounting and avoids disruptions for users.
Original PR description
Issue: Implementation of automatic CFDI cancel flow of an invoice substituted by a new one accidentally resulted in sending credit notes created from an invoice also triggering cancellation of the original. Solution: adding a check to only apply to invoice replacements and not refunds. ticket-6245456 Forward-Port-Of: odoo/enterprise#118327
This update ensures that signatories receive the signed document and Certificate of Completion (COC) as email attachments after completing a signature request via WhatsApp. Previously, the system only sent a WhatsApp link, causing delays in receiving the official signed document. This change improves the user experience and compliance with standard document delivery processes.
Original PR description
Previously, if a signature request was completed via the WhatsApp channel, the system only sent a WhatsApp message containing a link to the document. It bypassed standard email delivery entirely, meaning signatories never received the actual signed PDF or the Certificate of Completion (COC) as attachments. This commit improves the completion flow across both the backend and the generated reports: - **Backend:** Refactored `_send_completed_documents_message` to always call `super()`. This ensures the final signed document and COC are reliably delivered as email attachments, even after the WhatsApp link is sent. - **Reports:** Inherited the `sign_request_logs` QWeb template. When `send_channel == 'whatsapp'`, the PDF now dynamically replaces the "Email Verification" headers and footnotes with "Phone Verification". Additionally, it replaces the generic checkmark with the signer's masked phone number. Task: 5951833
This update ensures that when a food delivery order is cancelled through the aggregator (Atlas), the corresponding order in the POS system is also correctly marked as cancelled. Previously, the POS order remained in an active state, leading to confusion. This change improves order visibility and accuracy for both staff and customers.
Original PR description
pos*: pos_urban_piper, pos_enterprise When a food delivery order is cancelled from the aggregator side, the PoS order remains active on the frontend instead of reflecting the cancelled state. Steps to reproduce: - Configure UrbanPiper with Atlas - Place an order via Atlas - Open the order from the notification bar - Cancel the order from Atlas Issues: - Cancelled orders continue to appear in `Draft` - Accepted/preparation orders are not cancelled on the preparation display Fix: - Synchronise the PoS order state with the delivery state on cancellation - Update preparation display orders when delivery orders are cancelled Task-6217704 Forward-Port-Of: odoo/enterprise#118294 Forward-Port-Of: odoo/enterprise#117374
This update fixes a bug where VoIP call tickets weren't accurately counting open tickets associated with the parent partner. Now, when a child partner has an open ticket linked to a call, the parent partner's ticket count will also be updated. This ensures a more complete view of open support requests.
Original PR description
Unlike most of *_count fields on res.partner, for example ticket_count, open_ticket_count didn't take into account of its child partners. To reproduce: 1. create parent parent P and child partner C 2. create a ticket for partner C and put it in a unfold stage 3. call partner P and open form view of this call the open ticket count on the smart button is 0 instead of 1 In this commit, we change it that when a child partner has open tickets, they will also be counted as parent partner's. Forward-Port-Of: odoo/enterprise#118102 Forward-Port-Of: odoo/enterprise#115303
This update corrects a technical issue where VIES validation was incorrectly triggered during tax return creation. The fix ensures that VIES checks only occur for tax returns related to invoices with valid VAT information, improving data accuracy and preventing unnecessary errors. This resolves a previous problem impacting VAT reporting.
Original PR description
Vies validation should only occurs with moves having fiscal position with vat required Steps: - With base_vat, and european l10n like BE installed - Make a bill for a partner with no vat or invalid vat - Create a tax return - Open the return -> the 'check_partner_vies' fails opw-6200246 Forward-Port-Of: odoo/enterprise#117913
This update fixes an error that occurred when the automated payroll update process ran after a customer contact was deleted. Specifically, the system was unable to find a reference to the deleted contact in a key data file. This change ensures the payroll update process continues to function correctly, even when customer records are removed.
Original PR description
Currently, a traceback occurs when the cron "Payroll: Update data" runs after a referenced partner record has been deleted. Steps to reproduce the error: - Install ``l10n_us_hr_payroll`` module with…
Currently, a traceback occurs when the cron "Payroll: Update data" runs after a referenced partner record has been deleted. Steps to reproduce the error: - Install ``l10n_us_hr_payroll`` module with demo data - Switch to ``My US Company`` - Go to Contacts > Delete ``Internal Revenue Service (IRS)`` contact - Run the cron ``Payroll: Update data`` Traceback: ```py ValueError: External ID not found in the system: l10n_us_hr_payroll.res_partner_irs ``` ```py ParseError: while parsing /home/odoo/src/enterprise/ saas-19.3/l10n_us_hr_payroll/data/hr_salary_rule_data.xml:322, somewhere inside ``` https://github.com/odoo/enterprise/blob/21477b333f7a33cb582cd806236e4f9f8346d022/l10n_us_hr_payroll/models/hr_payslip.py#L12-L21 The issue occurs because the cron ``Payroll: Update data`` calls ``_get_data_files_to_update`` method, which loads the ``data/hr_salary_rule_data.xml`` file containing a reference to the deleted partner record at [1]. Since the external ID no longer exists, loading the XML file raises the traceback. [1]: https://github.com/odoo/enterprise/blob/21477b333f7a33cb582cd806236e4f9f8346d022/l10n_us_hr_payroll/data/hr_salary_rule_data.xml#L484 sentry-7496380516 Forward-Port-Of: odoo/enterprise#118018
This update fixes an issue where the French 2033 A and B reports were incorrectly available to all companies in a multi-company setup. The change ensures these reports are properly associated with French companies, resolving a potential reporting discrepancy. This improves the accuracy of financial reporting for French clients.
Original PR description
When installing the French localisation in a multi-company, multi-coa environment, the 2033 A report was available for every company, instead of just the French ones. Forward-Port-Of: odoo/enterprise#116751
This update resolves an issue where the timesheet timer wouldn't function when accessed from a subtask. The fix ensures the timer correctly opens and pre-fills with the subtask's project details, preventing a 'missing record' error. This improves the user experience for managing timesheets on subtasks.
Original PR description
**Problem:** Clicking the timesheet timer in the systray while viewing a subtask raises a MissingError, preventing the user from starting the timer. **Steps to reproduce:** 1. Open a project task…
**Problem:** Clicking the timesheet timer in the systray while viewing a subtask raises a MissingError, preventing the user from starting the timer. **Steps to reproduce:** 1. Open a project task that has subtasks 2. Click the subtasks smart button and open a subtask 3. Click the timesheet timer icon in the systray 4. Observe the "missing record" error **Current behavior:** The systray RPC fails with MissingError. **Expected behavior:** The timer opens, with the subtask's project and task prefilled. **Cause of the issue:** The frontend sends `currentState.active_id` regardless of the model it refers to. When the user navigates to a subtask via the smart button, `active_id` is the parent task's id. The systray controller then does `request.env['project.project'].browse(active_id)`, which returns a truthy recordset for an id that does not exist in `project_project`. Reading `.allow_timesheets` on that recordset triggers the DB fetch and raises MissingError. The same pattern exists in the `helpdesk_timesheet` override for both the `project.task` and `helpdesk.ticket` branches. **Fix:** Adding `.exists()` after the browse validates the recordset before any field access, so a stray `active_id` falls through to the task's own project (or ticket's project) instead of crashing. opw-6169548 Forward-Port-Of: odoo/enterprise#117039
This update resolves a bug where the Gantt view incorrectly displayed working hours for employees on public holidays. The fix converts all time zone calculations to UTC, ensuring accurate representation of unavailable time slots. This prevents employees from being incorrectly scheduled to work on holidays.
Original PR description
[FIX] hr_attendance_gantt: fix gantt view with public holidays Bug reproduction: 1 - Select flex schedule employee (or change its schedule to 40h flex one) and make its contract before 01/01/2026 2 -…
[FIX] hr_attendance_gantt: fix gantt view with public holidays
Bug reproduction:
1 - Select flex schedule employee (or change its schedule to 40h flex one) and make its contract before 01/01/2026
2 - Create a new public holiday on 01/01/2026 (from 00.00 to 23.59 or 23.55 (depends on version, it does not matter))
3 - in attendance app the cell from 00.00 to 01.00 seems white for that day and for selected employee (this cell seems like not holiday and employee can work)
Bug cause:
1 - After a long traceback, _gantt_unavailability in hr_attendance_gantt/HrAttendance, if an employee is flexible then unavailable_intervals is calculated with the Brussel time zone
2 - All other unavailable intervals are converted to the UTC in the function of _gantt_unavailability except in the final lines of the function.
3 - When the employee is flexible and since the conversion is not done in the final lines, it remains 1 hour more (UTC+1), it is from 1 am to 1 am of next day instead of 0 am to 23.59.
Bug solution:
1 - I converted the timezone to UTC to solve the problem.
task - 6067070
Forward-Port-Of: odoo/enterprise#112493This update restricts the AI button's functionality within the website builder to only 'website.page' records. Previously, it was enabled across all website pages, leading to potential misuse. The change includes a tooltip to explain the restriction and hides the button when the translation sidebar is open.
Original PR description
Previously, the AI button was enabled across all pages in the website builder, including contexts where its usage is not applicable. This PR introduces the following changes: 1. Disable the AI button for pages not linked to "website.page" records with a tooltip explaining the restriction. 2. Hides the AI button when the sidebar is open in translation mode. task-6148588 Forward-Port-Of: odoo/enterprise#115746
This update resolves an issue where a system error was incorrectly triggering a fallback mechanism for IoT connections. The fix ensures that errors related to failed longpolling requests are only flagged when the request genuinely failed, not when a new listener was added. This improves the stability and reliability of the IoT service.
Original PR description
In odoo/odoo#260931, new logic was added to raise an 'unreachable' error in the case where a longpolling listen request failed. This error was then used by the IoT HTTP service to fallback to a websocket listener. However, due to an oversight this 'unreachable' error was also being triggered whenever the longpolling listen request was aborted, which happens whenever a new listener is added. This commit fixes the issue by checking the error type and only sending the 'unreachable' error if the request was not aborted. opw-6175686 Forward-Port-Of: odoo/enterprise#118210 Forward-Port-Of: odoo/enterprise#117905
This update fixes a visual issue in the termination fees report for the Belgian payroll module. The report layout was previously misaligned due to a rigid design. The fix dynamically adjusts the report's appearance, ensuring a clean and professional look for all termination slips.
Original PR description
**Steps to Reproduce:** 1. Generate a termination slip for an employee 2. The generated payslip pdf layout looks clumsy and misaligned. **Bug Cause:** 1. The notice duration has rowspan="3" expecting 3 lines. When there are less than 3 lines, the following rows are affected and misaligned. 2. The border is missing. **Solution:** Added dynamic sizing for notice duration instead of static rowspan="3". Used index instead of line_count for both notice duration and banks to stay consistent and simple. Added table-bordered class as borders are not automatically applied like in previous versions. **Task:** 6193558 Forward-Port-Of: odoo/enterprise#118180 Forward-Port-Of: odoo/enterprise#116627
A recent update to Odoo's document signing process caused errors when downloading signed documents. This fix addresses a compatibility issue with the pypdf library, ensuring that documents are correctly compressed and downloaded. The change ensures a smoother user experience for signing and retrieving documents.
Original PR description
This [related PR] introduced a compression pass after calls to mergePage(). However in newer versions of pypdf (>=3.5.2), compress_content_streams() can only be called on pages of PdfWriter. An error would be raised when called on pages of a PdfReader. Steps to reproduce ----- 1. Run Odoo with pypdf>=3.5.2 2. Sign and download a document in the Sign app 3. Traceback occurs Fix ---- This commit moves the compression to the writer object, after the merged page has been added. Related pr: https://github.com/odoo/odoo/pull/261879 runbot-937761 Forward-Port-Of: odoo/enterprise#118280 Forward-Port-Of: odoo/enterprise#117756
Features or functions removed from Odoo
This update removes an outdated salary rule, "Taxable Salary," from the Hong Kong payroll structures. This simplifies the system and addresses potential issues with the salary configurator, ensuring accurate payroll calculations. The change improves the stability and reliability of the Hong Kong payroll processing.
Original PR description
this commit removes an unused salary rule "Taxable Salary" in the hk "CAP57: Employees Monthly Pay" salary structure. task-5964405
Code cleanup and technical improvements
This update adapts the composer date picker within the O-Spreadsheet module to a recent change in how references are handled. The team removed an older reference system and switched to a more efficient signal-based approach. This ensures the date picker continues to function correctly with the latest O-Spreadsheet updates.
Original PR description
In o-spreadsheet, we removed `t-custom-ref` and replaced it with `t-ref` that use signal. This commit adapt the composer date picker to this change.
This update refactors the Australian Payroll API code to improve its efficiency. By using a more streamlined method for data retrieval, the change enhances the speed and reliability of the API, ensuring smoother integration with payroll systems. This results in faster processing times and a more stable experience.
Original PR description
https://github.com/odoo/odoo/pull/264765
This update streamlines order changes within the Point of Sale system by replacing a previous tracking method with new models for order and preparation lines. All order changes are now calculated on the client-side, enhancing flexibility and responsiveness for users. This change is part of a larger effort to improve the user experience for order management.
This update adapts the composer date picker within the O-Spreadsheet module to a recent change in how references are handled. The team removed an older reference system and switched to a more efficient signal-based approach. This ensures the date picker continues to function correctly with the latest O-Spreadsheet updates.
Original PR description
In o-spreadsheet, we removed `t-custom-ref` and replaced it with `t-ref` that use signal. This commit adapt the composer date picker to this change.
This pull request updates the core Odoo codebase by importing tools from the tools.sql library. This refactoring enhances the internal structure and maintainability of Odoo, ensuring consistent code practices and facilitating future development. It primarily impacts internal development processes.
Original PR description
https://github.com/odoo/odoo/pull/264861