Tuesday, September 15, 2026
68 changes · master
Enhancements to existing features
The online store price selector is now presented as a simple site-wide customer choice in the header or footer, rather than as a technical “pricelist” control on individual shopping pages. Businesses can also show tax-included or tax-excluded prices by customer segment, with defaults better aligned to local market expectations.
Original PR description
The eCommerce currently exposes its selectable pricelists through a dropdown labelled "Pricelist:". A pricelist is a backend configuration concept that means nothing to a customer, and the label also…
The eCommerce currently exposes its selectable pricelists through a dropdown labelled "Pricelist:". A pricelist is a backend configuration concept that means nothing to a customer, and the label also takes the naming decision away from the user, who may well want to present that choice as a currency, a country or a market. This PR removes the label, leaving a plain dropdown listing the pricelists by name. It is then up to the user to name them however fits their audience. The selector also moves out of the shop, product and event pages, and is rendered next to the language selector in the website header and footer: both are site-wide preferences, so customers look for them in the same place. Each of the two can be toggled from the website builder. A few notable points on the implementation: - The current pricelist is exposed as a `website.pricelist_id` field, computed from the session and writable through its inverse, so templates and controllers no longer reach into the session cache keys themselves. `website.currency_id` now derives from it. - The price filter bounds are converted only when the currency actually changed, instead of whenever the pricelist changed, since several pricelists can share a currency. - A keyboard typeahead was added to the dropdown, as these lists get long once pricelists are named after countries or currencies. On a related topic, the tax display (tax-included vs. tax-excluded pricing) can now be overridden per pricelist. It is currently decided once for the whole website, which forces users selling to both consumers and businesses to pick one audience: either their B2C visitors see prices without their taxes, or their business customers see prices they have to compute back. They can now keep their website tax included by default and show prices tax excluded for the pricelist assigned to their business partners. Finally, the default tax display is inverted to tax included, except for Canada and the United States which keep tax excluded through two new bridge modules, l10n_ca_website_sale and l10n_us_website_sale. eCommerce shows prices tax included in most countries, so the previous default had most users starting from the wrong display, and the Argentinian and Brazilian localizations each had to opt back into it. Only the default changes: the field is stored, so websites with an explicit value keep theirs. task-4826932 See also: - https://github.com/odoo/enterprise/pull/128613 - https://github.com/odoo/upgrade/pull/10715
The accounting dashboard now highlights the most useful KPIs for freelancers, replacing broader company metrics with clearer invoice, cash, receivable, and payable views. Dashboard cards now link to more relevant reports, and the visual design is simplified to reduce clutter and make key financial information easier to act on.
Original PR description
the dashboard is mainly useful for freelancers and not large companies so changing it to align more with what a freelancer might need - replace Revenue with Invoices and redirect it to Invoice Analysis, this is much cleared and straight to the point - replace Cash In/Out with a single net Cash value card to match the pattern of the other cards and also now it's more clear - redirect Receivable and Payable to their respective aged reports - remove Gross Margin and obsolete multi-value card handling as it's not that important and we wanna keep only the most important kpis and to not get the user overwhelmed - lighten sale/purchase graph bars to be like the color of the Bank journal, to have a better look for the dashboard overall task-[6571051](https://www.odoo.com/odoo/project/967/tasks/6571051) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update prepares Appointment scheduling for multi-calendar use and aligns related enterprise tests with recent calendar changes. It also includes small fixes to keep appointment forms, Google Calendar synchronization tests, and AI mail-related tests working reliably after the refactoring.
Original PR description
Enterprise part of the multicalendar feature. Includes adjustments to existing enterprise tests and edits based on refactoring from community Community PR: https://github.com/odoo/odoo/pull/261571
When a subscription is duplicated, it no longer keeps the dates from the original contract. The new subscription receives its start date when confirmed and its end date is based on the quotation template, making dates easier to review before activation.
Original PR description
Duplicating a subscription carried the original start date over to the new record, which then began on a date belonging to the previous contract. The field sat in the Other Info tab, so the mistake was easy to miss. The dates are no longer carried over. A duplicate gets its start date when it is confirmed, and its end date follows from the duration of the quotation template. The start date now sits next to the recurring plan and the end date, where it can be reviewed and adjusted before confirming. task-6515131
Subscription payment reminder timing can now be adjusted in settings instead of being fixed in the system. This helps businesses tailor failed-payment and missing-payment-method reminders to their own customer follow-up policies, with clearer day numbering to reduce configuration mistakes.
Original PR description
Before: - Payment-failure and no-token reminder days were hardcoded ([2, 7, 14] and [0, 1, 2, 7, 14, -2, -7, -14]), and user was not able to configure it. - In the no-token reminder path, a positive day number meant "days before the payment is due" and a negative number meant "days after it's overdue" which reads backwards and is easy to get wrong when configuring or extending it. After: - Two system parameters (payment_failed_reminder_days, no_token_reminder_days), added in Settings, to allow user to configure the reminder days. - The no-token reminder path's day numbers now read the natural way: positive means days late, negative means days early including its catch-up logic for missed cron runs, which does the same date math and needed the same fix. task-6421393
Pricelist setup is now cleaner and avoids creating unnecessary duplicates when configuring platform order providers. Demo pricing data for online rentals is also improved, making test and demonstration environments more consistent.
Original PR description
Improves the pricelist setup, with and without demo data. task-4826932 See also: - https://github.com/odoo/odoo/pull/265605 - https://github.com/odoo/upgrade/pull/10715
This update refreshes internal query counter expectations used to monitor Odoo performance. It helps keep automated checks aligned with current system behavior, reducing false alarms without changing day-to-day user workflows.
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 Manufacturing Order overview now shows one clear MO Cost instead of multiple competing cost figures, helping users quickly understand expected or actual production cost. It also flags overconsumed materials and operations that take longer than planned, making production variances easier to spot and act on.
Original PR description
The MO overview currently displays three different cost values: MO Cost, BoM Cost, and Real Cost. This makes common manufacturing use cases harder to read, as users have to compare multiple values to identify the relevant MO cost. With this commit: - Keep a single MO Cost that represents the planned cost before the MO is completed and the actual cost once it is completed. - Highlight the component quantity and consumed quantity when they exceed what was planned, making overconsumption easier to identify. - Highlight the operation duration when it exceeds the expected duration, making extra operation time easier to identify. Enterprise PR: odoo/enterprise#127411 TaskID-6432201
This update makes payroll-related screens easier to use by improving how employee leave and work entry types are displayed and managed. It helps HR and payroll teams review time off and payroll inputs more clearly, reducing friction in day-to-day payroll preparation.
Original PR description
UX Improvement for payroll Task:6456624 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 Sri Lankan localization now includes tax invoice compliance directly in the main module, so businesses no longer need a separate add-on for these requirements. Withholding tax setup and VAT registration detection were also improved to reduce manual corrections and better support contacts missing country details.
Original PR description
This PR consolidates and improves the Sri Lankan localization (l10n_lk) module by merging tax invoice features, updating withholding tax definitions, and refining VAT detection rules. **Commit 1:** Merged Invoice Module Integrated l10n_lk_invoice into l10n_lk so all Sri Lankan tax invoice compliance requirements are available out-of-the-box in the main module. **Commit 2:** Withholding Tax Updates Set the is_withholding_tax flag on AIT taxes to match updated withholding handling rules. **Commit 3:** Improved VAT Detection Removed the country_id dependency for l10n_lk_vat_registered so partners without a set country are still properly flagged based on their VAT number. task-6373062 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
POS payment methods can now be updated and new payment methods can be added without closing an active session, making setup changes such as payment terminal configuration less disruptive. Accounting-critical settings and removal of linked payment methods remain restricted during open sessions to protect session closing and financial reporting.
Original PR description
..., l10n_us_hr_payroll_account --- Before this, almost any change to a payment method, or to the set of payment methods linked to a POS, was blocked while a session using it was open. In practice this forced closing a client's ongoing session just to, for example, configure a payment terminal. Payment methods can now be edited, and new ones can be linked to a POS, while a session is open. Only the fields that determine where money gets booked (type, journal, outstanding account, intermediary account) stay locked, since changing them mid-session could corrupt the session's accounting. Removing a payment method from a POS is still forbidden while a session is open, for the same reason: the session's accounting and closing report rely on that link staying intact until the session is closed. --- Task: https://www.odoo.com/odoo/project/1737/tasks/6471242
The fields list view no longer shows the Index column, reducing visual clutter for users reviewing field definitions. The index setting remains available in the detailed field form, so functionality is preserved while the overview is easier to scan.
Original PR description
The Index column is unnecessary in the fields list view and adds visual clutter. Remove it while keeping the property available in the field form. Follow up on: task-6507120 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Payroll and time-off planning screens have been refined to make routine payroll work clearer and easier to complete. The update improves Gantt-based holiday visibility, payslip batch workflows, and guidance around payroll warnings so HR teams can act with more confidence.
Original PR description
UX Improvement for payroll Task:6456624
Production Analysis reports now separate work center costs from total operation costs, making manufacturing cost measures easier to understand. Per-unit cost calculations and labels were also cleaned up so business users can compare expected and actual costs more reliably.
Original PR description
The Production Analysis measures did not clearly distinguish work center costs from combined operation costs. Some per-unit measures also used unnecessary "Average" prefixes, making the measure list harder to understand. Separate work center and operation costs, align their expected measures, and simplify the labels displayed in the report. This commit's changes: - Rename work center-only fields and SQL helpers to `workcenter_cost`, `unit_workcenter_cost`, and `_get_workcenter_cost`. - Add `operation_cost` and `unit_operation_cost` as the sum of work center and employee costs. - Rename the expected work center measure to `expected_workcenter_cost_unit` and use `expected_operation_cost_unit` for the combined expected cost. - Apply quantity-weighted aggregation to employee and operation costs per unit. - Remove unnecessary "Average" and redundant view strings. - Update the HR and subcontracting report views and report tests. task-6425682
Manufacturing order overview costs now present a single cost total that reflects the order status. Once production is completed, employee time from work orders is included in that total, giving business users a more consistent and complete cost view.
Original PR description
The MO overview costing is simplified in mrp to use a single MO Cost based on the production state. Since mrp_workorder contributes employee time costs to the MO overview, this commit updates the workorder report so employee time costs are included in MO Cost once the manufacturing order is completed, keeping the enterprise overview consistent with the simplified costing behavior from mrp. Community PR: odoo/odoo#281486 TaskID-6432201
Businesses can now adjust payment methods and add new ones to a Point of Sale while a sales session is still open, avoiding unnecessary session closures for setup changes such as payment terminals. Accounting-critical fields and removal of payment methods remain restricted during open sessions to protect financial reporting accuracy.
Original PR description
..., l10n_us_hr_payroll_account --- Before this, almost any change to a payment method, or to the set of payment methods linked to a POS, was blocked while a session using it was open. In practice this forced closing a client's ongoing session just to, for example, configure a payment terminal. Payment methods can now be edited, and new ones can be linked to a POS, while a session is open. Only the fields that determine where money gets booked (type, journal, outstanding account, intermediary account) stay locked, since changing them mid-session could corrupt the session's accounting. Removing a payment method from a POS is still forbidden while a session is open, for the same reason: the session's accounting and closing report rely on that link staying intact until the session is closed. --- Task: https://www.odoo.com/odoo/project/1737/tasks/6471242
The separate Open Items menu has been removed to simplify the reporting menu. Users can now access the same open item functionality directly from the Aged Receivable and Aged Payable reports, reducing clutter while keeping the workflow available.
Original PR description
In order to reduce some clutter in the reporting menu we removed the Open Items menu from the reporting tab and added its functionality to the Aged receivable/payable reports instead of the `Statement` button. task-4603708
US Balance Sheet and Profit and Loss reports were updated to better match business reporting needs. The changes add optional cash-basis reporting, improve default hierarchy and total alignment, rename Income to Revenue, and add a cumulative translation adjustment section.
Original PR description
- Make cash basis available (but not checked/enabled) by default on US BS & PL. - Enable Account/Parent hierarchy by default on BS. - Rename "Income" to "Revenue" in the PL report. - Add a Cumulative Translation Adjusments section to the BS, similar to the one that exists in the generic report. - Rearrangement of the Revenue section in the PL. task-6468767
Some restaurant appointment demo bookings now include notes, making sample data more realistic and easier to understand during demonstrations. This helps users and evaluators see how booking notes can appear in typical restaurant appointment scenarios.
Original PR description
Add notes to some demo bookings. --- Task: https://www.odoo.com/odoo/project/1737/tasks/6569809
The point of sale system now separates the logic that turns receipt images into printer-ready output. This makes the same printing preparation reusable for both order changes and receipts, helping keep receipt-related features consistent and easier to maintain.
Original PR description
We extract image to epos raster xml generation to allow reusing for both order change and order receipts. see odoo/enterprise#130184
Subcontracting receipts created without a purchase order now use the supplier price to assign the extra cost. This helps keep manufacturing and inventory valuation more accurate when teams receive subcontracted products through manual or non-standard flows.
Original PR description
When a subcontracting product is received from a subcontractor without a purchase order, the extra_cost is assigned based on the product's supplierinfo price_unit. Task 6527490
When a customer's address is changed, Odoo now refreshes their saved geographic coordinates if they already had location data. This helps keep travel fee calculations and Field Service planning accurate without slowing down bulk address updates.
Original PR description
Currently, updating the address of a res.partner does not refresh its coordinates. The old (stale) coordinates are silently kept, which is especially problematic in Field Service flows where travel fees invoiced to customers rely on those coordinates. This commit ensures that partners are re-geolocalized whenever their address change *if and only if* they already were geolocalized. This avoids forcing the geolocalization on every write, if it is not required. The re-geolocalization is deferred to an asynchronous cron so that mass edits do not block the users. task-6563828
Product tracking options are now presented more clearly so users can distinguish between storable products tracked by quantity and products that are not storable. This reduces confusion when configuring inventory and manufacturing products, while keeping the underlying behavior consistent across forms, lists, and filters.
Original PR description
In order to be set as unstorable, a product's tracking field must be unset (False under the hood; distinct from 'none', which corresponds to tracking by quantity for storables). This is unclear for some users who might not realise that they need to clear the value of the field to unset it, as opposed to picking an option from the dropdown menu. Changing it on the view by modifying the selection widget doesn't cover how it's grouped in list views or the way it's handled in custom filters. Thus, here we add a new unstored computed field to be used in form views and searches to set the `tracking` and `is_storable` fields, for visual clarity. Task ID: [6106458](https://www.odoo.com/odoo/my-tasks/6106458)
Product names now appear centered on POS product cards when no product image is available. This creates a cleaner, more balanced product grid while still allowing longer names to wrap properly without overflowing.
Original PR description
Products without an image currently display their name aligned to the top-left, which leaves awkward empty space and unbalanced product cards in the POS. Centering the text improves the visual layout, while the safe alignment ensures that longer names still wrap and display correctly without overflowing.
This update simplifies how product tracking settings are handled by removing a confusing internal option while keeping the same workflow for users on product forms. It helps make inventory, manufacturing, sales, and service-related processes more consistent without changing the expected business behavior.
Original PR description
The 'none' option for the `tracking` selection representing the 'tracking by quantity' setting is replaced with the state of `tracking = False` and `is_storable = True`. The product form view workflow is preserved in an unstored and computed field that sets `tracking` and `is_storable` under the hood. `tracking` (but not `is_storable`) is now an internal technical field. Task ID: [6106458](https://www.odoo.com/odoo/my-tasks/6106458)
Mobile self-ordering can now automatically print customer receipts when auto-printing is enabled. This helps restaurants and stores keep receipt handling consistent by using the connected proxy printing device.
Original PR description
We now allow printing order receipts in mobile self ordering if auto print is enabled, using the proxy device. see odoo/odoo#286255
Documents linked to attachments are now preserved by being archived when those attachments are deleted from chatter or when related records are removed. Users also get clearer audit messages directly on affected documents, making it easier to understand why a document was archived.
Original PR description
…re deleted Previously, documents.unlink.mixin was used to protect documents from cascade deletion when their shared attachments were removed. To extend this protection to all business models (and…
…re deleted
Previously, documents.unlink.mixin was used to protect documents from cascade deletion when their shared attachments were removed. To extend this protection to all business models (and not just those inheriting from the mixin), we have moved this logic to mail.thread.
We also prevent the deletion of documents when their associated attachments are deleted via the chatter (through the _delete_and_notify method).
Co-authored-by: Florian Charlier <flch@odoo.com>
Instead of moving the unlink.mixin in mail.thread, we apply the logic to all models (archiving document when the document attachment is deleted because of the deletion of a record associated with the attachment).
Co-authored-by: Debauche Stéphane <std@odoo.com>
[IMP] {test_}documents{_full}: improve traceability of indirect archiving
Currently, when a document is archived indirectly, logs are only available in the parent folder. This commit adds direct traceability within the document's own chatter.
A message is now logged on the document to specify the cause of archiving:
- Attachment removal from a record's chatter.
- Deletion of the attachment associated record (orphan attachment).
This provides users with a clear audit trail directly on the affected document.
Task-5155496Turkish invoice withholding setup is simplified by separating the official withholding reason from individual tax options. This reduces confusing tax choices on invoice lines and helps electronic invoices report withholding reasons more accurately.
Original PR description
The GİB reason a withholding is levied under, a code between 601 and 627, was stored on the tax, so the localization shipped one tax per (ratio, reason) pair: 138 withholding taxes in the dropdown of…
The GİB reason a withholding is levied under, a code between 601 and 627, was stored on the tax, so the localization shipped one tax per (ratio, reason) pair: 138 withholding taxes in the dropdown of every invoice line. It also asked at the wrong level, since an invoice carries one reason for all of its lines. The seven ratios now ship as fiscal positions, `Withholding 2/10` through `Withholding 10/10`, mapping the domestic 20% VAT to the matching withholding group through the `fiscal_position_ids` and `original_tax_ids` columns the tax template already had. A `Domestic` position ships at the lowest sequence, otherwise a withholding one wins `_compute_domestic_fiscal_position_id` and flips `is_domestic` across the chart. The invoice type and the available reasons read the taxes on the lines, not the position. A position only reaches the lines on `Update Taxes and Accounts`, so reading it made the reasons move to the newly picked ratio while the lines still withheld at the previous one, and required a reason before the tax it describes existed. `default='SATIS'` also pre-empted its own compute at create, so the invoice type never derived anything. The reason reuses `account.move.l10n_tr_exemption_code_id`, limited to the codes describing the ratio the lines withhold, kept while it fits and dropped once the ratio changes. Only imported codes are listed, so a missing one is created from the field itself, and an invoice withholding at several ratios cannot be sent. The export attaches the reason to the `9015` category, the only marker of the withheld portion, and keeps it out of `0015`, where the same field means an exemption. `l10n_tr_nilvera_edispatch` is touched because its tests build their invoice through the shared fixture in `l10n_tr_nilvera_einvoice`, which used a 2/10 withholding tax as its plain 20% one: their reference files declared `SATIS` while carrying a `9015` withheld subtotal. The fixture now uses the domestic tax and both files are regenerated. task-6368193 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Documents placed in an employee's folder or its subfolders are now automatically connected to the right employee record. This makes document handling more consistent whether users upload files from the Documents app or from the employee profile, while preserving existing links when files move to regular folders.
Original PR description
Previously, documents uploaded directly in the Documents app within an employee's folder were not automatically linked to the employee record. The link was only established when accessing the Documents app via the employee's smart button. This commit implements an automatic linking mechanism based on the folder hierarchy: - When a document is created or moved into an employee's directory (or its sub-folders), the system automatically associates it with the corresponding 'hr.employee' record. - If a document is moved to a standard folder (non-employee), any existing `res_model`/`res_id` link (including link to 'hr.employee') is kept untouched to preserve existing document associations. This provides a consistent user experience regardless of the entry point. Task-6310302
Manufacturing teams can now include draft manufacturing orders in planning workflows and confirm selected draft orders directly from the list view. This makes production planning smoother by removing extra manual steps and ensuring unplanned orders are easier to find and schedule.
Original PR description
The To Plan filter excluded draft manufacturing orders, while selected draft orders could not be confirmed in bulk from the list view. The Plan MO popup also enforced a fixed state domain. This commit's changes: - add a Confirm action that only confirms selected draft MOs - make the To Plan filter depend only on `is_planned` - replace the Plan MO popup's fixed state domain with the default Confirmed and To Plan filters task-6446072 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 web interface now uses the existing phone icon instead of keeping a duplicate call icon that looked the same. This reduces unnecessary icon assets and helps keep the interface resources cleaner without changing the user experience.
Original PR description
odoo/odoo@36bf562 added the `call` icon to the subset. However the `phone` icon was already in it and is exactly the same. + Enterprise PR: odoo/enterprise#131224
The gift card email and website presentation has been adjusted so the card image fits correctly again. This restores a previous visual asset state and prevents broken or awkward gift card layouts for customers.
Original PR description
This PR adjusts the gift card template layout to better fit the gift card image. The image had been replaced in a previous commit (f37504d5142ff8459a9620a7a80d5393569d82cb) to remove unnecessary whitespace, but this broke the layout on the website; it has therefore been restored to its original state. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The HR time off screens now use the label "Company Holidays" instead of "Closure Days". This makes the wording clearer because these dates may be official company holidays without necessarily meaning the business is closed.
Original PR description
A previous task renamed 'Public Holidays' display name into 'Closure Days' but that label can be misleading since these days are not necessarily days when the company is closed. So, to make terminology clearer, 'Closure Days' label is being changed into 'Company Holidays' to better represent its purpose. task-6524048 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Accounting reports can now use a consolidation availability setting so they appear only when multiple companies are selected and affected. This helps users see the most relevant report variant for multi-company consolidation scenarios while keeping other contexts uncluttered.
Original PR description
With the related enterpise pr, add a new variant availability "consolidation" which makes the report visible only if it is impacted by several companies (company selector has at least 2 companies selected and options['companies'] is more than 1. This new type of variant should prioritize the other types in the selection. task-6398453 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Belgian payroll now assigns remunerations to the fiscal period in which they must be declared, rather than relying on case-by-case rules tied to the pay period. This improves accuracy for tax declarations such as 274.XX, 273S and 281.XX, and adds a safer modification flow when already filed periods need corrections.
Original PR description
In Belgian fiscality the period a remuneration is declared in is not always the period it is paid for. That difference was hardcoded case by case, through the arrears flag and a deferral of the…
In Belgian fiscality the period a remuneration is declared in is not always the period it is paid for. That difference was hardcoded case by case, through the arrears flag and a deferral of the intellectual property of a correction. Two fields carry it instead. The fiscal date of a payslip says which period its remuneration is declared in: the pay period, deferred to the confirmation date once the pay period has been declared. The follow pay period policy of a salary rule says how its own amounts behave, resolved per payslip line against the delta they bring and overridable by hand, so a benefit in kind stays in the pay period whichever period its payslip lands in. The 274.XX, 273S and 281.XX declarations select payslips and add up amounts through that attribution. They rebuild their base from the lines and worked days it is made of instead of reading the aggregate line, so an amount is declared in the period it is attached to rather than the one its aggregate landed in. The 274.XX also gains a modification flow: a declaration is filed against a Belcotax reference, a modification declares only what its predecessors left out of the period, and confirming a payslip of an already filed period flags it.
Employee documents are now organized consistently for all employees, whether or not they have system access. Payroll documents are placed in a dedicated Payroll subfolder, making sensitive HR records easier for authorized teams to find and manage.
Original PR description
This PR unifies the documents centralization for employees, regardless of their user status. * All employees get a dedicated folder for their documents. * Payroll documents are posted inside a new Payroll subfolder. Some fixes, cleanups, tests along the way. Details in individual commits. Task-6344800
Manufacturing users can now confirm draft manufacturing orders directly from the work order planning Gantt view when those draft orders are present. This reduces extra navigation and helps teams move planned production into confirmed execution more quickly.
Original PR description
The work order Gantt view could contain work orders from draft manufacturing orders, but users could not confirm those orders directly from the view. This commit adds a conditional Confirm Planning button that confirms the draft manufacturing orders represented by the current Gantt records. This commit's changes: - create a getter for draft manufacturing order IDs - display Confirm Planning only when draft orders are present - call `action_confirm` on draft orders when the Confirm Planning button is clicked. task-6446072
Enterprise sales and accounting screens now align with recent core improvements to how products and descriptions are handled. This keeps related workflows more consistent across apps and reduces confusion when editing orders, invoices, subscriptions, and localized accounting documents.
Original PR description
Adapt enterprise overrides of the product and description logic to follow the cleaner and more consistent logic introduced in the community changes. task-6241473 See also: - https://github.com/odoo/odoo/pull/286196
Mobile users can now use the Log out button directly from the Barcode app. This improves convenience for shared or handheld devices, and helps users return to the Barcode main screen after logging back in on smaller displays.
Original PR description
The existing 'Log out' button intended for scoped apps is now enabled for mobile use as well. Using it from the normal web interface will make the next login redirect to the same Barcode main screen if the device display is sufficiently small. Task ID: [6472390](https://www.odoo.com/odoo/my-tasks/6472390)
The VoIP interface now uses the existing phone icon name instead of a duplicate call icon name. This keeps the interface visually unchanged while simplifying maintenance and reducing unnecessary duplication.
Original PR description
odoo/odoo@36bf562 added the call icon to the subset. However the phone icon was already in it and is exactly the same. This commit replaces the `call` icon occurences in `voip` to the `phone` icon. + Community PR: odoo/odoo#287792
Financial reports can now show consolidation-specific variants when multiple companies are selected, making group-level reporting easier to access. Multi-company filtering is also more precise, so country and chart-of-accounts report variants are based on the main company rather than secondary companies.
Original PR description
1) Add a new variant availability "consolidation" which makes the report visible only if it is impacted by several companies (company selector has at least 2 companies selected and options['companies'] is more than 1. This new type of variant should prioritize the other types in the selection. 2) Activate by default the "consolidation" filter in multi-company. 3) In multi-company, the variants of availability type "Coa match" or "Country match" should only be visible if they match the main company, not the secondary ones. task-6398453
Odoo’s core web server now uses a more robust request-handling component for its gevent-based server. This should improve stability and maintainability for deployments without changing day-to-day user workflows.
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
Purchasing teams can now create vendor-specific purchase agreement templates that contain standard terms, sections, and notes without requiring predefined products. This makes recurring purchase forms easier to reuse while keeping product choices flexible for each order.
Original PR description
In this commit we allow preconfigured purchase templates without products; just with terms and conditions/sections and notes to give the user the flexibility of having a template with the same form everytime from a specific vendor while not being tied down by a product. Task: 4391726 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Manufacturing teams can now see work center block and unblock actions recorded in the activity history, improving traceability. Users also get cleaner bills of materials screens and color-coded availability information, making it easier to spot whether stock is sufficient for sales and production decisions.
Original PR description
This commit's changes: - Log work center block and unblock actions in the chatter. - Hide the Operations Performance smart button on BoMs without operations. - Display forecasted and available quantities in green when sufficient and red when insufficient. task-4277084 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
When scheduling an employee's end of collaboration, the employee contract end date is now automatically filled using the departure date. This reduces manual work and helps HR teams keep employee payroll and contract information consistent after departures are planned.
Original PR description
Currently, after creating an end of collaboration, the contract end date on employee is not defaulted. Since, the end date results comes from complex calculation process. In this, PR expected to help user by defaulting the contract end date based on the departure date from the end of collaboration wizard. How to test: 1. Open employee app 2. Select any employee, 3. Click gear button next to "New" 3. Select End of collaboration 4. Click Schedule 5. Look at the payroll tab task-6396218 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
Cancelled manufacturing orders remain accessible from the related sales order smart button. This helps users find and review cancelled production records directly from the sales order instead of losing that link.
Original PR description
Keep cancelled MOs linked to the SO smart button so the cancelled MO remains visible and users can access it directly from the SO. TaskID-6479345
Belgian payroll settings now capture additional external provider information, including worker accident insurance, group insurance, and prevention/protection service details. This improves payroll documentation and reporting, while demo data is corrected to avoid a validation error for a Belgian employee payslip.
Original PR description
Add fields for the infos of accident insurance for workers, group insurance, External Service for Prevention and Protection at Work Name (SEPPT). Rename the old accidental insurance fields to indicate that they're for employees. Task-6562739
Belgian payroll users can now mark a sickness relapse directly when managing time off in the Gantt schedule view. This makes the scheduling view consistent with the time off form and reduces extra steps for HR teams.
Original PR description
Sickness relapse was already introduced in the time off form but it couldn't be set from the gantt view. This commit adds the option to the gantt view. Task-6544579
Users can now drag an item by clicking anywhere on its row in the Gantt side panel, including the name, instead of needing to grab a small handle icon. This makes scheduling items faster and more intuitive, especially when working with many events.
Original PR description
Previously, users could only drag an event to schedule it by grabbing the handle icon next to its name. Clicking and dragging the event name itself did nothing. Now the whole row is draggable, not just the handle icon, making it easier to schedule events from the side panel. Task-6458712
The grid views used for timesheets have been visually refined to better match the redesigned Odoo interface. Columns now have clearer spacing, softer rounded styling, and improved readability, making timesheet grids easier and more pleasant to scan.
Original PR description
This PR aims to finetune the `web_grid` design after the webclient one to ensure it remains consistent. This first step address the most striking changes, adding a consistent roundness and a small gap in-between each column. task-6517392 ### My timesheet | Post redesign | This PR | |--------|--------| | <img width="1724" height="893" alt="image" src="https://github.com/user-attachments/assets/6311fa71-0ef2-425c-a158-059893a79296" /> | <img width="1719" height="820" alt="image" src="https://github.com/user-attachments/assets/f963f586-c86e-4624-bef2-b5cb2f5a97ed" /> | ### All timesheet | Post redesign | This PR | |--------|--------| | <img width="1722" height="922" alt="image" src="https://github.com/user-attachments/assets/67099abe-460c-4bed-aacd-62f5af3b639a" /> | <img width="1726" height="926" alt="image" src="https://github.com/user-attachments/assets/50742ff1-580c-4e76-b925-d3cddd01f6fc" /> |
Website editors can now use the AI chat while working on product pages, including product variants. This helps users generate content or images in context and keeps them on the correct product page when AI actions trigger a reload.
Original PR description
The Website Builder AI chat was only available on `website.page` records, so users could not ask the AI for help while editing a product page. Extend `isPageAiEditable` to `product.template`, add dedicated `ai.composer` records for the product page and its variants (with a "Help me generate an image" prompt button and the website builder agent so it uses the builder tools), and patch the Website Builder to launch the AI chat scoped to the current product — the currently displayed variant when the storefront exposes it, otherwise the template. Also edit the `reload` client tool to the builder plugin's iframe reload whenever the builder is open, so tool-triggered reloads keep the current product page instead of soft-reloading the whole builder action back to the homepage. task-6229094
When scheduling an end of collaboration in Belgian payroll, the employee contract end date is now filled in automatically from the departure date. This reduces manual follow-up and helps keep payroll records accurate after an employee leaves.
Original PR description
Currently, after creating an end of collaboration, the contract end date on employee is not defaulted. Since, the end date results comes from complex calculation process. In this, PR expected to help user by defaulting the contract end date based on the departure date from the end of collaboration wizard. How to test: 1. Open employee app 2. Select any employee, 3. Click gear button next to "New" 3. Select End of collaboration 4. Click Schedule 5. Look at the payroll tab task-6396218
The base system now returns the identifier of a newly generated API key, supporting OAuth server integration work. This helps connected services reliably reference and manage newly created keys, improving integration flows for upcoming authentication features.
Original PR description
Introduce OAuth server. For the architecutre, check commit message. Enterprise PR: https://github.com/odoo/enterprise/pull/125132 IAP PR: https://github.com/odoo/iap-apps/pull/1838 task-6312868
Odoo Studio now makes it easier to rearrange notebook tabs when customizing forms. This improves the form editing experience by letting users organize tab layouts more smoothly and fixes related tab selection behavior during editing.
Payroll calculation internals were adjusted to avoid automatically injecting salary rule categories into the calculation context. This helps make payroll rules clearer and more predictable, with related Belgian payroll data updated to match the new behavior.
The VoIP softphone interface has been refreshed with clearer keypad buttons, updated tab layouts, improved spacing, and a subtle background gradient. These changes make calling tools easier to scan and more polished for users, while reducing cramped layouts and unnecessary scrolling.
Original PR description
- Keypad: "circle" centered buttons (color contrast to review) - Tab entries: boxes instead of flat borders (grouped/ungrouped) - Tab buttons at the bottom: prettier active state - Trying other spacings (avoid scrolls, etc) - Trying slight gradient background
This update refreshes the spreadsheet component and allows spreadsheet sessions to be reloaded when needed by the server. This helps users recover from situations where the spreadsheet state needs to be synchronized again, improving stability and continuity.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/a0cd1e19e [IMP] session: allow server to force reload [task: 6236595](https://www.odoo.com/odoo/2328/tasks/6236595) 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 Documents app now lets users preview documents directly from the secondary list used when adding files. The view is also simplified by hiding extra section actions that were not needed there, reducing confusion and helping users choose the right documents faster.
Original PR description
- Hide the searchpanel section actions in the secondary list view, as the primary purpose of this list is to add documents. Displaying these actions is unnecessary and can be confusing. - Add document preview functionality to the secondary list view. Task-6293704
This update adds a notes field to system views, giving teams a place to record context or guidance about view customizations. It helps administrators and implementers document changes more clearly without affecting day-to-day users.
Original PR description
Task~6571312 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
Website forms now offer a Send a Copy option so visitors can receive an email record of what they submitted. The feature reuses an existing email field when available, adds one when needed, and includes safeguards such as rate limiting and excluding uploaded file attachments to reduce abuse risk.
Original PR description
**Previously,** website forms did not allow visitors to receive a copy of their submission by email. This reduced transparency and created extra effort when visitors needed to keep a record of…
**Previously,** website forms did not allow visitors to receive a copy of their submission by email. This reduced transparency and created extra effort when visitors needed to keep a record of submitted data. **After this improvement,** all website forms include a "Send a Copy" option. When enabled, the form sends a copy of the submission to the email address provided in the "Send a Copy Email" field. ### Behavior of the option: - If the form already contains an email field, it is reused as the "Send a Copy Email" field. - If no email field exists, a new optional email field is added automatically. - Once a field is designated as the "Send a Copy Email" field, the following restrictions apply: - Duplicate and Delete actions are disabled for that field. - "Type" and "Input Type" options are no longer editable. - If the email field is optional and left empty, no email will be sent. ### Security considerations: - A rate limit is applied to prevent abuse, such as mail bombing. - Users are advised to configure CAPTCHA on forms when using this feature. - To avoid sending malicious content, uploaded files are not attached. Instead, only file information is included as text. Upgrade PR: https://github.com/odoo/upgrade/pull/9808 task-[4364668](https://www.odoo.com/odoo/all-tasks/4364668) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Customers can now see task tracking logs, such as stage changes and who made them, directly in the customer portal. This improves transparency and collaboration by sharing relevant task updates that were previously hidden as internal notes.
Original PR description
Currently, customers are lacking an overview of the changes that were done to a task, namely when the stage was changed and by whom. This makes collaboration difficult, as these tracking logs traditionally default to internal notes that are hidden from external users. task: 6453523 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Calendar users can now review and send cancellation emails from more places, including list and appointment views, with edits preserved before sending. A new draft state lets organizers save unfinished events without notifying attendees or syncing them to external calendars until the event is confirmed.
Original PR description
\* = google_calendar, microsoft_calendar, web This PR allows the edition and sending of the cancellation email when deleting and archiving calendar events everywhere these actions can be triggered…
\* = google_calendar, microsoft_calendar, web This PR allows the edition and sending of the cancellation email when deleting and archiving calendar events everywhere these actions can be triggered from the UI. Previously, it was only available on the calendar and form views. From now on, it can also be triggered from the list view and appointment's views. The existing codes allowing the deletion and to display the email composer is rewritten to make it more reusable as it is expected on more views. This PR also creates the draft state for the calendar events. When it is set, it prevents notifications from being sent to the attendees of the event and allows the authors to save the events without notifying attendees with incomplete information as they may need more time to gather all the information about the event. The draft state can only be set at the creation of the events. Otherwise, some issues can occur with the flow of events' notifications, and could prevent sending the cancellation email for booked events for instance. Draft recurring events are not allowed for a technical reason. The draft state cannot appeard in the form as users should not be able the reset it, so when it is unset it is not possible to easily propagate that change to the other events of the recurrence. Draft events are not synchronized with the external calendar as some of the them do not have that feature and will sent confirmation emails for the draft events but it should not be the case as they must not yet be confirmed to their attendees. Enterprise PR: https://github.com/odoo/enterprise/pull/110517 Upgrade PR: https://github.com/odoo/upgrade/pull/10271/ Task-5914191
Service teams can now open a service request form and plan unplanned shifts directly from there. The planning view opens with the right resource grouping and role filter, and the shift to schedule is highlighted at the top so planners can act faster.
Original PR description
Allow service requests to be planned directly from their form. - Make the service request list non-editable and open the form view. - Add a Plan button for shifts without a planned date. - Open the Gantt view grouped by resource with the selected role as default filter. - Display the To Schedule side panel with the shift to plan highlighted and displayed at the top of the list. task-6393079
The Ecuadorian localization settings have been moved higher on the Accounting settings page. This makes key electronic invoicing configuration visible immediately when users are redirected from dashboards or warnings, reducing time spent searching or scrolling.
Original PR description
Purpose: Moving the Ecuadorian Localization section higher in the settings ensures that when a user is redirected from the Accounting Dashboard or from warnings, the relevant EDI configuration is immediately visible without scrolling. task-6571794
Users can now review and send cancellation emails when deleting appointment-related calendar events from more places in the interface. The change also prevents appointments from being saved as drafts, reducing process complexity and keeping appointment status handling more consistent.
Original PR description
This PR allows the edition and sending of the cancellation email when deleting calendar events everywhere these actions can be triggered from the UI. This PR also prevents appointments from being saved as draft. Otherwise, it may create complexities related to the appointment_status and archive attributes and the draft does not bring much in the process of the appointments. Community PR: https://github.com/odoo/odoo/pull/253345/ Upgrade PR: https://github.com/odoo/upgrade/pull/10271/ Task-5914191
The worksheet template setup now labels the section as "Worksheet Fields" and adds short guidance explaining that these are the fields technicians complete. It also shows each field’s type directly in the list, making templates easier to review and configure without opening each field.
Original PR description
- Rename `Worksheets Properties` to `Worksheet Fields` and add italic muted help between the header and the properties: the fields technicians will fill out for this worksheet. - Display the type icon and label beside worksheet properties so the selected field type is visible without opening the definition. task-6542816
Restaurant appointment lists now better support moving several records at once through drag and drop. This keeps the appointment scheduling interface aligned with the latest list reordering behavior, making bulk organization smoother for users.
Original PR description
This commit adapts the moveRecord override to the new multi-resequence code added in https://github.com/odoo/odoo/pull/284988 task-6432283
Users can now select several records and move them together in list and kanban views. This speeds up organizing work across rows, groups, and columns while preserving the selected records' order.
Original PR description
*: account, crm, mrp, sale_management This commit adds support for selecting and dragging multiple records simultaneously in both list and kanban views. **Key Features:** * **Unified Drag Payload:** Selected records are visually gathered into a single generic row/card element during the drag sequence. * **Sequence Preservation:** Maintains the relative order of all selected records upon drop. * **Cross-Group Support:** Seamlessly handles moving multi-record selections across different groups or columns. task-6432283