Thursday, September 3, 2026
29 changes · master
Enhancements to existing features
Companies can now optionally record unpaid breaks in employee attendance, including from the systray and kiosk checkout flow. Breaks are deducted from worked hours, daily totals and overtime, helping payroll and managers get more accurate time records with less manual correction.
Original PR description
Description of the issue/feature this PR addresses: Attendance records only represented check-in and check-out times. Unpaid breaks therefore required manual time corrections and were not…
Description of the issue/feature this PR addresses: Attendance records only represented check-in and check-out times. Unpaid breaks therefore required manual time corrections and were not consistently reflected in worked hours, overtime, the attendance systray or the kiosk flow. Current behavior before PR: - The complete check-in/check-out interval is treated as worked time. - Employees cannot review and correct attendance details from the systray. - Kiosk users cannot record their total break after checking out. Desired behavior after PR is merged: Add an optional company-level break management setting and store the total break duration on each attendance. Validate that breaks apply only to closed attendances, are non-negative and do not exceed the attendance duration. Deduct breaks from worked hours, daily attendance totals and overtime. Recompute overtime when a break changes and expose the break information in the relevant attendance and employee views. Add an attendance review to the systray showing today's sessions, check-in and check-out details, locations, breaks and total worked duration. Allow permitted users to edit attendance details using explicit Save and Discard actions. Pending changes are saved before switching sessions or checking in or out, while validation failures keep the draft available for correction. Update the kiosk checkout flow with a dedicated dialog for recording break minutes on the attendance that was just closed. Preserve manual, PIN and barcode identification and keep server-side validation authoritative if the attendance changes before the break is saved. Add backend and HOOT coverage for break validation, worked-hours and overtime calculations, attendance review editing and synchronization, and kiosk break updates. task-5252996 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Attendance breaks are now deducted consistently from worked time, overtime, work entries, payroll calculations, and the combined Timesheets/Attendance menu. This helps employees, managers, and payroll teams see accurate totals when checkout breaks are used, while keeping scheduled contract work entries intact.
Original PR description
Attendance breaks reduce worked and overtime hours in hr_attendance, but attendance-based work entries and the combined Attendance/Timesheets systray still treated the complete check-in/check-out interval as worked time. Deduct the break duration when building attendance work-entry intervals, together with refused overtime, and skip intervals fully consumed by those deductions. Keep scheduled work entries for calendar-based contracts while applying breaks to their overtime intervals. Integrate the attendance review into the Timesheets systray with separate Attendance Review and Time Recording tabs. Route checkout through the shared attendance action, preserve the Timesheets discard flow, and display total and expected hours consistently in the footer. Cover reduced and fully consumed attendance intervals, calendar-based contracts, approved overtime and downstream payroll overtime totals. task-5252996
Belgian payroll now limits the daily value paid for political leave using a monthly cap. This helps ensure political leave payments follow the configured payroll limit and remain consistent with Belgian payroll rules.
Original PR description
This commit caps the value of a work day of type political leave (LEAVE1749) based on a monthly cap defined as a salary rule parameter. TaskID: 6486038
This change makes it easier for Odoo to allow selected properties of standard fields to be edited when needed. It supports future customization needs, such as AI-related settings, without broadly changing how fields work for users.
Original PR description
Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The stock app now opens the specific delivered move lines from a lot's transfers button instead of the broader transfer record. This gives teams clearer traceability for recalls or customer follow-up, and adds a direct option to email the concerned customer.
Original PR description
For better traceability and complete information consistency, instead of showing the whole transfer we show the move lines. The move lines shown, are the final move lines that were delivered including the current selected `lot_id`. This is useful in many cases, for example a product recall; Product recalls need very precise information about the product being recalled. Knowing the final delivered product move line is vital, as one product can be a component in many different products. 'Send Email' action was also added in order to directly send an email to the concerned customer. Task: 6435027 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Users can now configure date and datetime fields to show warnings when a selected date is in the past, in addition to the existing future-date warning. This helps teams prevent mistakes on deadlines, end dates, and similar time-sensitive fields, while Studio field options have been reorganized for easier configuration.
Original PR description
Before this change, date and datetime fields only supported a warning for future dates. There was no option to warn users when a past date based on today, which is useful for fields such as deadlines or end dates. After this change, a new warning option is introduced to support past date warnings in addition to the existing future date warning, giving users more flexibility when configuring date fields. Field-specific options in Studio are also reorganized Enterprise PR: https://github.com/odoo/enterprise/pull/125963 Documentation PR: https://github.com/odoo/documentation/pull/19158 Upgrade PR: https://github.com/odoo/upgrade/pull/11147 Task-6366295 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Customers can now view their event registrations and download tickets directly from the customer portal. Access is limited to the sales order customer or the registered attendee, making ticket access convenient while avoiding weaker email-based matching.
Original PR description
Purpose ======= Give the possibility to users to see their event registration tickets from the customer portal. Specification ============= Users will be able to see a registration and download its ticket if: - the current user is the SO customer OR - the registration partner is the current user The idea of showing registrations where the email matches the current user's was discussed, but then dropped. The criterion is too weak, it could introduce security issues and isn't robust enough given potential email formatting inconsistencies. Task-5384734 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Project and timesheet portal pages now show durations and dates in a more readable, consistent format. This makes it easier for customers and employees to understand logged time, remaining work, and related project timelines at a glance.
Original PR description
- Replaced float_time with the duration widget using the narrow format to display durations in a more human-readable way (e.g. 1h 20m). - Updated datetime widget formatting across the affected portal views to use the required medium date and medium date + short time formats for consistent date/time presentation. - Fixed hide_seconds being ignored when a named format (medium/long/full) was passed alongside it in ir.qweb.field.datetime. task-6197942
Landed costs can now be limited to the specific products they apply to instead of being spread across every item in a transfer or manufacturing order. Businesses can predefine target products on landed cost items, reducing manual adjustments, errors, and improving inventory valuation accuracy.
Original PR description
Currently, landed costs are distributed across all products of the selected transfers. In practice, some costs (e.g., customs duties or special handling fees) may apply only to specific products…
Currently, landed costs are distributed across all products of the selected transfers. In practice, some costs (e.g., customs duties or special handling fees) may apply only to specific products only, forcing users to manually adapt the adjustment lines after computation, which is error-prone and time-consuming. - When creating a Landed Cost Product, users can predefine the products it should apply to when the cost is known to always target specific products. - When this landed cost product is added to a cost line, the predefined products are automatically added to Apply On if they are present in the selected transfers/MO, removing the need for manual selection. - Users can still manually add other products from the transfers/MO when the cost should also apply to products that were not predefined. With this change, landed costs can be applied only to relevant products, eliminating manual adjustments, reducing user errors, and improving valuation accuracy and usability. task-5214058
Product catalog filters have been streamlined across sales, purchase, manufacturing, repair, and accounting flows. This reduces duplicate logic behind the scenes, making catalog filtering easier to maintain and more consistent for users working with orders and related documents.
Original PR description
* Move the selected section filter to `account` since it's where the (sub)sections logic is defined * Introduce `catalog_is_in_order` in the `module`, factorizing the logic of multiple fields: * `product_catalog_product_is_in_bom` * `product_catalog_product_is_in_mo` * `is_in_purchase_order` * `product_catalog_product_is_in_repair` * `product_catalog_product_is_in_sale_order` * Drop the compute methods as they are not used nor useful (their only purpose was to disable field storage) * Rely on the orm subquery abilities (`_search`) See also odoo/upgrade#11174
AI-related field settings can now be customized not only for manually added fields, but also for standard fields already provided by Odoo. This gives teams more flexibility when configuring AI behavior across existing business data without needing custom-created fields.
Signature requests now show which signers are missing an email address instead of only displaying a generic warning. This makes it faster for users to complete documents with multiple signers and avoid checking each signer manually.
Original PR description
When a signature request had a signer without an email address, saving it only said that all signers must have a valid email address, so on a document with several signers there was no way to tell which one was incomplete without checking them one by one. The error now names them. task-6515178
Users can now configure date and datetime fields to warn when a selected date is in the past, in addition to the existing future-date warning. This helps teams catch outdated deadlines, end dates, or similar entries earlier, while Studio’s field options are reorganized for easier configuration.
Original PR description
Before this change, date and datetime fields only supported a warning for future dates. There was no option to warn users when a past date based on today, which is useful for fields such as deadlines or end dates. After this change, a new warning option is introduced to support past date warnings in addition to the existing future date warning, giving users more flexibility when configuring date fields. Field-specific options in Studio are also reorganized Community PR: https://github.com/odoo/odoo/pull/279010 Documentation PR: https://github.com/odoo/documentation/pull/19158 Task-6366295
The test suite now checks the latest document in the same order users see in the interface, rather than relying on internal cache order. This reduces confusing test behavior and helps prevent false failures when validating Mexican electronic invoicing for point of sale flows.
Original PR description
Because of missing `sorted()`, we were asserting the last document using the cache order and not the order in which they are in the UI. That brings confusion when reading the code and leads to failing tests if, for some reason, the cache is refreshed.
Belgian payroll now supports the correct 274.13 and 281.13 reports for economic unemployment allocations and related taxes. This ensures these amounts are no longer included in the older 274.10 and 281.10 reports, improving compliance and reporting accuracy.
Original PR description
- previously economic unemployment allocations / taxes were reported in the 274/281.10 - now with the support of 274/281.13 they are reported correctly. - new pdf for 281.13, reporting lines in UI. Task#6003360
Polish VAT EU reporting is now part of the main Polish reports module instead of being maintained as a separate add-on. This simplifies installation and maintenance while keeping the reporting behavior available in one place.
Original PR description
Description of the issue this commit addresses: Recently, the l10n_pl_reports_vat_eu has been added to stable versions for a new behavior. In master, that module can be merged into l10n_pl_reports. --- Desired behavior after this commit is merged: This commit merges the two modules together into l10n_pl_reports. --- task-6368808 upgrade pr: https://github.com/odoo/upgrade/pull/11183
The Sign app now follows the updated Frost visual design used across Odoo, with consistent colors, borders, and dark mode behavior. This makes signing workflows look more polished and aligned with the rest of the backend, including template cards, sidebars, document lists, and PDF viewing.
Original PR description
The webclient redesign (odoo/odoo#282516, odoo/enterprise#127955) did not cover Sign, which kept painting its own colors and borders. The app drifted away from the rest of the backend, as whites and grays that stayed light in dark mode, a stray line across the middle of the Documents list, template cards showing only half of their border, hard divider lines in the editor sidebar, and a PDF viewer still using the previous dark palette. Sign now reuses what the other apps already do. Colors come from the palette instead of being written by hand, so light and dark stay consistent on their own and nearly all the dark-mode overrides could go. task-6518558
Customer portal pages now show dates, times, and work durations in easier-to-read formats. This improves consistency across helpdesk, project, and timesheet-related pages and makes time information quicker for customers to understand.
Original PR description
*_ = helpdesk{,_sale_timesheet}, sale_timesheet_enterprise
- Replaced float_time with the duration widget using the narrow format to display durations in a more human-readable way (e.g. 1h 20m).
- Updated datetime widget formatting across the affected portal views to use the required medium date and medium date + short time formats for consistent date/time presentation.
task-6197942The Belgian payroll module description was updated to direct users to the official documentation. This helps customers and support teams find the right guidance more easily without changing payroll functionality.
Original PR description
Change the module description to refer to the official documentation. Task-6485101
Belgian payroll now uses clearer establishment unit terminology and validates that employee contracts and payslips align with the correct establishment unit location dates. It also reduces manual entry by auto-filling competences when possible and adds easier access to employees linked to an establishment unit.
Original PR description
1. Renamed DMFA work locations into Establishment unit 2. Added checks to make sure employees don't start their contract before the location period of an establishment unit 3. Added a warning on Payroll, blocking payslips if the establishment unit location date isn't correct 4. Added automatic completion for competences: when selecting a working address, the competence is filled automatically. 5. Added a smart button 'Employee' on Establishment unit. 6. Added address_id as required field. 7. Prevent autofill on l10n_be_hr_payroll when there are multiple establishment units for the same company. __ task-6432041
Odoo's web interface framework was updated to a newer version, improving how background component setup is completed when parts of the page are removed. This helps prevent editor callbacks from running for content that is no longer present, making embedded content handling more reliable.
Original PR description
Release notes: https://github.com/odoo/owl/releases/tag/v3.0.0-alpha.48 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#285995
Updates the Sri Lanka accounting configuration with a more complete chart of accounts, clearer reporting tags, and depreciation models for fixed assets. This helps companies align with LKFRS for SMEs and keeps financial reports reliable even when account numbers are changed.
Original PR description
The chart of accounts was missing several accounts required by LKFRS for SMEs, and the financial reports classified accounts by code prefix, which breaks as soon as a customer renumbers or adds an account. Renumber and extend the chart of accounts, add the account tags used to identify finance costs, income tax expense and other comprehensive income, and add depreciation models for the fixed asset accounts. task-6497298 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Belgian profit sharing payroll runs now better exclude ineligible employees, including those with short service, specific categories, serious misconduct dismissals, or resignations. Payroll teams also get blocking dashboard warnings for key eligibility issues, and withholding tax is skipped when the employee is marked as exempt.
Original PR description
In this commit, we introduced few improvements for the profit sharing feature. - Profit sharing payruns are excluding CP999, employees with less than 1 year of service, employees that have been fired for serious misconduct, and resigned employees. - 2 blocking payslips warnings (on dashboard) for wrong ONSS employer category and employees with less than 1 year of service. - No withholding tax for profit sharing bonus (low and high) if the employee no_withholding_taxe field is set to true. task-6481237
Belgian HR payroll now includes a dedicated family-section field to record dependents who need specific care. This helps HR teams enter the information needed for professional withholding tax calculations more accurately and reduces manual payroll adjustments.
Original PR description
This commit will add a new field to the employee form to track the number of dependents requiring specific care within the family context. ### Why: For Belgian payroll and tax calculations, the number of dependents who are needing care significantly impacts the calculation of professional withholding tax. Previously, there was no dedicated field in the family section to capture this specific count, requiring manual adjustments during payroll processing. ### What: - Added a new integer field `other_need_care_senior_dependent` to the hr.version model. - Extended the employee form view to include this field under the 'Family' section, specifically within the Belgian localization context. task-6133227
Sri Lanka balance sheet and profit and loss reports now classify accounts using account types and localization tags instead of fixed account code prefixes. This makes the reports more flexible, improves LKFRS for SMEs coverage, and separates other comprehensive income and translation adjustments for clearer reporting.
Original PR description
The balance sheet and profit and loss relied on account code prefixes, which made them inflexible and left several LKFRS for SMEs captions unmapped. Rewrite both reports on the domain engine, classifying accounts by account type and by the tags added in l10n_lk, and report other comprehensive income and cumulative translation adjustments separately. task-6497298
Introduces light user access so employees can use Barcode and Shop Floor workflows without needing broader system access. This helps businesses give operational staff the right permissions to complete inventory and manufacturing tasks while limiting access to other areas.
Original PR description
Light users can now perform the same stock and manufacturing actions as regular users, while only seeing direct access to the Shop Floor and Barcode apps. This simplifies access management for operational staff who need warehouse or production capabilities without a full app menu.
Original PR description
Light users can do every action normal users can do, the difference is that they only have direct access 2 apps; shopfloor and barcode. Which means Regular user is now implied by light user. Task: 6469225 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Frontdesk visitor records now assign a single host instead of allowing multiple hosts. This simplifies check-in ownership and related SMS notifications, making host responsibilities clearer for reception teams.
Original PR description
This commit changes the `host_ids` field on `frontdesk.visitor` from a many2many field to a many2one field `host_id`.
Refunds for point of sale orders with scheduled deliveries now handle stock operations based on whether the original delivery was completed. This avoids unnecessary negative stock movements and keeps inventory records aligned with the actual delivery status.
Original PR description
Before this commit: - Refund orders of scheduled (with shipping date) orders always generated a new picking with negative quantities, even when the original delivery had not been completed. - This…
Before this commit:
- Refund orders of scheduled (with shipping date) orders always generated a new picking with negative quantities, even when the original delivery had not been completed.
- This could lead to incorrect stock movements and negative quantity computations for undelivered pickings.
After this commit:
- When processing a refund of a scheduled (with shipping date) order, the behavior now depends on the state of the original picking:
- If the picking has already been delivered, a return picking is created with the corresponding negative quantities.
- If the picking has not been delivered, the original picking is updated instead:
- The picking is cancelled for a full refund.
- Refunded product moves are removed from the picking for a partial refund.
- This prevents unnecessary negative stock movements and ensures stock operations remain consistent with the delivery status.
Task-5902424
Forward-Port-Of: odoo/odoo#282576
Forward-Port-Of: odoo/odoo#271506Light users are only allowed to access shopfloor/Barcode apps, while still being able to perform all actions through them. Task: 6469225