Friday, September 11, 2026
68 changes · master
Enhancements to existing features
The attendance menu now shows a more compact review, with details expanded only when needed, making it easier for employees and managers to use. The kiosk also keeps users on the break entry screen when a break is too long, so mistakes can be corrected immediately without starting over, and break totals now match the attendance records shown.
Original PR description
This PR brings a few improvements to the attendance review of the systray so that it takes less room and only details an attendance on demand. It also fixes the break duration of the kiosk: 1. Enable "Break Management on Checkout" in Settings > Attendances and open the attendance kiosk 2. Identify as an employee to check in, then identify again to check out 3. On the goodbye screen, click "Add my break times" and enter a duration longer than the attendance that was just closed 4. Confirm -> the error is shown but the kiosk has already gone back to its main screen, so the break has to be entered again from scratch With this PR, the duration is checked against the attendance before being sent and the dialog stays open until it fits. Task-6542050
Website editors can now choose a rounded icon style in addition to the existing outlined and sharp options. The setting is easier to understand with added guidance, loads only the selected icon font for better efficiency, and now applies consistently in the media dialog.
Original PR description
[IMP] web, website: add rounded icon style for the website --- __Before this commit__ The user could only choose between Outlined and Sharp icon style fonts. __After this commit__ - The rounded…
[IMP] web, website: add rounded icon style for the website --- __Before this commit__ The user could only choose between Outlined and Sharp icon style fonts. __After this commit__ - The rounded Material Symbols style font is added as a choice in the website builder. - The option is moved to the *Advanced* section since it's a once in a website lifetime change. - Some tooltips are added because the differences are subtle, especially at small font sizes. [IMP] web, website: fetch only a single icon style font in the frontend --- __Problem__ It's possible to choose the icon style in the Theme tab of the website builder. However, all the Material Symbols style fonts are currently fetched regardless of which is selected. __Fix__ Add a `_get_icon_font_family` method on the website that allows to retrieve which icon style is used and call this method to replace the font asset with the right one. [FIX] html_editor, website: use website icon font in Media dialog --- __Problem__ It's possible to choose the icon style in the Theme tab of the website builder. However, the icons inside the Media Dialog aren't reflecting the icon style of the current website. __Fix__ Pass the current document to `IconSelector` to retrieve the current icon font family and use this font for the Media Dialog icons.
The Sales menu has been reorganized to reduce clutter and make commonly used options easier to find. This improves navigation across sales, delivery, loyalty, and eCommerce-related areas, helping users work more efficiently.
Original PR description
*: delivery,loyalty,sale,sale_loyalty,sale_management,
website_sale,website_sale_loyalty
Sales menu was cluttered with too many things. This change is meant to simplify it.
task-6523967Employees using both Attendance and Timesheets now see a more compact systray menu with better-organized tabs and actions. The update also prevents both tab contents from appearing at the same time after checking out and back in, making the experience clearer and less cluttered.
Original PR description
This PR brings a few improvements to the systray of an employee who has both the attendance and the timesheets features, reorganising its tabs and the actions around them to take less vertical room. It also fixes the tabs themselves: 1. Enable both the attendance and the timesheets systray for an employee and check them in 2. Open the systray and go to the "Attendance" tab 3. Unfold the running attendance, set a "Check Out" and save -> the employee is checked out, so the tabs disappear, as expected 4. Click "Check in" without closing the systray -> the tabs are back but the "Timesheets" and the "Attendance" panes are displayed one under the other With this PR, the active tab is tracked by the component instead of the bootstrap tab plugin, which cannot keep up with panes that come and go. Task-6542050
The Sales and Rental apps now have cleaner menus, with commission options simplified and rental promotions grouped together. This makes it easier for users to find related sales, rental, and promotion features with less menu clutter.
Original PR description
As an extension of the sales menu simplification we also grouped the Promotions in the Rental app. Community PR: https://github.com/odoo/odoo/pull/285971
Bank reconciliation users can now select one or more lines and specify the amount to assign to each account. This gives accounting teams more flexibility and accuracy when splitting or matching statement lines.
Original PR description
This commit will add a new feature to be able to have a set account where we choose the amount we want to set. Clicking the line will do a basic set account. Selecting the line will enable the edit on the amount, and so you will be able to select multiple lines and choose an amount for each. task-6307681
Time-off accrual plans can now be linked to work entry types and working schedules, making it easier to compensate employees for extra worked days. When work exceeds the company reference schedule, the system can automatically create the appropriate accrual allocation, reducing manual HR adjustments.
Original PR description
Task#6360628
Field-level access groups defined in code are now shown in the Access Rights tab, matching what the system already enforces behind the scenes. This improves transparency for administrators reviewing model fields and prevents confusion when configuring or auditing access rights.
Original PR description
**Purpose**: Fields defined in Python with a groups attribute (e.g., `test_field = fields.Char(...,groups='base.group_user')`) did not display associated groups in the "Access Rights" tab, although access was enforced at runtime. **Specification**: Display the group(s) under the Access Rights tab of `base.view_model_fields_form`. To do this, a new method `_reflect_field_groups()` reads the groups attribute from base fields, finds the real group from the XML ID, and populates the `ir_model_fields_group_rel relation`. task-4285741 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Buying, manufacturing, and subcontracting routes are once again managed at the warehouse level, so products can be prepared for these flows by adding the relevant vendor or bill of materials instead of manually selecting routes. This simplifies day-to-day product configuration while related automated tests were updated to match the intended behavior.
Existing payroll accrual plans now include the appropriate work entry type information introduced by a related payroll model update. This helps ensure leave and accrual data stays consistent across localized payroll setups for supported countries.
Original PR description
Populate the work entry type field on existing accrual plans following its addition to the accrual plan model in the related community commit. Task#6360628
Point of Sale now applies employee role permissions more consistently across planning, settle-due, appointment, barcode lookup, sales planning, and UrbanPiper-related screens. This helps businesses limit sensitive actions to authorized staff and reduce operational mistakes at checkout and order management.
Original PR description
**= planning, settle_due, urban_piper Following this commit: ==== - Restricted POS features based on the employee's assigned role. task-6317141 Community PR : https://github.com/odoo/odoo/pull/284182 Upgrade PR : https://github.com/odoo/upgrade/pull/11117
AI agents can now create and update automations more reliably, with clearer validation, previews, and run logs. Agent profiles also get a broader avatar set and more consistent first-person descriptions, while a preview crash for empty selection fields is fixed.
Original PR description
Add a dedicated ai_tool_create_update_automation tool so agents manage base.automation records without going through the generic create/update tools: it takes model and field names instead of ids,…
Add a dedicated ai_tool_create_update_automation tool so agents manage base.automation records without going through the generic create/update tools: it takes model and field names instead of ids, validates the trigger and the ai_action_prompt against the target model, and shows a single preview instead of one per underlying record. Log automation runs properly in their own chat: post a kickoff note with field placeholders resolved to the record's actual values instead of their labels, log "has run <automation>" when triggered from the chat, and steer the agent to update the right automation when asked to change one. Forbid Markdown in ai_action_prompt (the field only renders HTML) and fall back to converting it when the model writes it anyway. Ship the full agent avatar set: 3 silhouettes x 5 colors x 8 job roles, under a consistent AvatarN-<Color>[-<Role>] naming. An agent gets a random silhouette on creation; picking a role via the Self Update skill redraws it in the same color and number. Rewrite the standard agent subtitles in the first person, and align the Self Update skill so agent-generated subtitles follow the same voice. Fix a crash in ai_tool_update_records's preview when a Selection field being updated is currently unset (e.g. res.partner.type, ai.agent.avatar_role): field._selection[value] raised a KeyError on a falsy value instead of falling back to displaying "None". task-6512101
Bank statement imports in CAMT, OFX, and QIF formats now populate transaction details with a clearer, formatted view of the imported values. This helps accounting users review imported bank transactions more easily and consistently with CODA imports.
Original PR description
Fill the `transaction_details` field as we do with coda to display a well formated version of the values. task-4744298
AI agents can now build their knowledge from attachments, documents, knowledge articles, and web pages without first copying everything into attachments. This makes the AI knowledge system more flexible, improves cross-source answers, and avoids showing not-yet-processed content in search results.
Original PR description
Before, `ai.embedding` was geared specifically towards `ai.agent.source` and its attachments: every source had to materialise an `ir.attachment` before it could be vectorised, and RAG retrieval could…
Before, `ai.embedding` was geared specifically towards `ai.agent.source` and its attachments: every source had to materialise an `ir.attachment` before it could be vectorised, and RAG retrieval could only look at one model at a time. This PR generalises the embedding layer so that any model can be embedded and retrieved, and converts the existing source types to use it. ### `ai.embedding.mixin` New mixin owning the `embedding_ids` one2many and the embedding lifecycle. A model inheriting it implements the hooks: content extraction, chunking (tabular-aware), duplicate detection by checksum, domain of the records to embed, and the embedding models to use. Embedding creation is cron-driven, which supersedes `_update_sources_status`. `ai.embedding` itself loses `attachment_id`/`checksum` and gains `res_model`/`res_id`, so a chunk can point at any record. ### Direct embedding of every source type | Source | Before | Now | |---|---|---| | Attachment | embedding logic carried by `ir.attachment` | `ir.attachment` inherits the mixin | | Document | copied into an attachment, then embedded | `documents.document` embedded directly | | Knowledge article | HTML extracted into an attachment | `knowledge.article` embedded directly | | Web page | fetched into an attachment | `ai.web.page` embedded directly | The attachment-copy flows (`_sync_sources_content`, `_recreate_attachments_for_sources`) are dropped. Each model only picks up the records actually linked to an agent source. ### Retrieval - `_get_similar_chunks` now takes a `target_by_model` mapping instead of a single `res_model`, so one similarity search spans embeddings of heterogeneous models. `ai.agent.source._get_rag_target` is the overridable hook returning the (model, id) pair a source is embedded through, and `_get_models_map` builds the mapping. - Chunks whose `embedding_vector` is still NULL are excluded from retrieval. Their similarity was NULL and `NULLS FIRST` is the default for `ORDER BY ... DESC`, so between the creation of a source and the next cron run they outranked every genuine match and took all the `top_n` slots. ### Citations Inline citations reference `ai.agent.source` ids instead of attachment ids, and the link rendering is delegated to `_get_source_link`, implemented per source type (attachment/url in `ai`, document in `ai_documents_source`, article in `ai_knowledge`) instead of a hardcoded `/web/content` URL. The prompt instructions are updated accordingly. ### Also in this PR - `ai.agent.source.type` becomes a computed field, derived from whichever record field is set (`attachment_id`, `web_page_id`, ...). - `ai_app` accepts `.md` files as agent sources: the allowed extensions are extracted into a single `allowedExtensions` getter used both by the file input `accept` attribute and by the client-side validation. Markdown attachments are indexed as plain text, so no server-side change is needed. task-6283960 Upgrade PR: odoo/upgrade#10929
Test coverage was updated across manufacturing, quality, rental, inter-company sales, and subscription stock flows to match recent changes in warehouse-specific routing. This helps ensure business processes continue to select the correct warehouse routes consistently after related platform updates.
Original PR description
*: sale_{mrp_renting, purchase_stock_inter_company_rules, stock_renting, subscription_stock}
Update the test cases stay consistent with community changes.
Community PR:- https://github.com/odoo/odoo/pull/280682
TaskId:- 6442488Approval requests no longer require approvers to act in a predefined sequence, so any assigned approver can approve when ready. This removes waiting statuses and next-approver handoffs, making approval workflows faster and less dependent on a strict order.
Original PR description
Previously, there was a sequence or ordering in approvals, the user was not able to approve if it is order hasn't come yet. 1 - Sequence field is deleted, there is no waiting status anymore. 2 - Setting the next approver mechanisms are dropped Test: Unit test to check random ordering in approvals task-6563332
Odoo Box actions are now kept for 24 hours instead of 3 hours. This gives teams more time to investigate and troubleshoot issues from the previous day, improving support and debugging without changing day-to-day user workflows.
Original PR description
We now keep obox actions for 24h instead of 3h to be able to debug until one day after. Forward-Port-Of: odoo/enterprise#130965
Payroll runs now open directly on the payslips step, removing the previous multi-step flow and making payroll processing more direct. Key payroll actions have been moved to the main toolbar, with list and kanban views updated to keep important status, journal, and action information easy to access.
Original PR description
This PR aims to to completely remove the payrun steps logic (which could be visualized as bubbles in the header of any payrun views). Instead of having the `versions -> time -> payslips` flow, we now…
This PR aims to to completely remove the payrun steps logic (which could be visualized as bubbles in the header of any payrun views). Instead of having the `versions -> time -> payslips` flow, we now always end up on the payslips step by default, which is now the only step left! The payrun button used to validate/mark as paid/pay the payrun has been moved next to the "New" button at the top right corner. Since it relied on a custom compiler and rendering context, we had to move all of that from the payrun layout/payrun mixing to the payrun control panel. Other minor UI changes have been introduced, such as: - Added the states and the journal button in the payrun list view - Added back the action buttons (the one needing a custom compiler) on the kanban view cards - Added some columns on the payrun list view - Added back the paid time off allocation wizard - Added a variant to the t-menu of the kanban cards (that gets generated to a PayRunButtonBox) to make its three vertical dots render as a "More" button instead. - etc. (see the task's escalidraw) task-6486910
Odoo’s PayPal integration now supports guided seller onboarding, more local and alternative payment methods, and saved payment details for eligible merchants. This helps businesses activate PayPal faster, offer customers more ways to pay, and support repeat or subscription-style payments more easily.
Original PR description
**[IMP] payment_paypal: add seller onboarding via OAuth** First party Integrated Sign-Up enables partners to integrate the seller onboarding into their software allowing to seamlessly and securely…
**[IMP] payment_paypal: add seller onboarding via OAuth** First party Integrated Sign-Up enables partners to integrate the seller onboarding into their software allowing to seamlessly and securely onboard sellers before activating PayPal payments. In this commit, we integrate First party Integrated Sign-Up to Odoo. --- **[IMP] payment_paypal: add payment methods** We currently only support PayPal Wallet, but PayPal can also be integrated as a regular payment provider, offering many payment methods, and worldwide coverage. In this commit, we add the following payment methods: - Via PayPal's JS SDK: Pay Later, Venmo, and Advanced Credit and Debit Cards. - Via Orders API: Bancontact, BLIK, EPS, iDEAL, Multibanco, MyBank, Przelewy24, and Trustly. We also migrate PayPal Wallet integration from JS SDK to Orders API to uniformize the look of payment methods through different payment providers. --- **[IMP] payment_paypal: add tokenization support** Before this commit, customers had to re-enter their payment details for every PayPal transaction, and merchants could not charge them offline (e.g., for subscriptions or invoice follow-ups). This commit introduces the ability to tokenize PayPal Wallet and PayPal-provided cards. Tokenization is available if the merchant's account has the advanced vaulting capability enabled. We also handle the case where PayPal creates the vault asynchronously, generating the token via a webhook rather than the immediate checkout response. --- task-6095035
Work entry categories are simplified so unpaid work entries use a clearer single “Unassimilated” category where relevant. This improves HR payroll classification, reporting, and search by aligning categories, DMFA codes, and related filters more consistently.
Original PR description
Purpose: Currently in the system, we have categories for `Unpaid and unassimilated` and `Unpaid and assimilated` but we only need one category because if the time type is paid, it's assimilated by default. So we only need to have a category for `Unassimilated` to differenciate between unpaid types. - removed category `Unpaid and Assimilated` - renamed category `Unpaid and Unassimilated` to `Unassimilated` - corrected category and dmfa code on some work entry types - added a filter for assimilated work entries and allowed to search with dmfa code and salary rule categories - added an `Unassimilated` for some work entry types that become unassimilated after 9 or 12 months task-id: 6478968 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update improves how Odoo handles social media direct messages through Discuss and Live Chat, including conversations that arrive when no operator is available. It also makes failed message sending clearer for users by showing the reason for the failure and improves several messaging views for easier customization.
Original PR description
Purpose ======= Improve the form view of the mail guest Move code from the controller to the model to be able to re-use it in enterprise. Allow to change reaction on mail message without specifying…
Purpose ======= Improve the form view of the mail guest Move code from the controller to the model to be able to re-use it in enterprise. Allow to change reaction on mail message without specifying the emoji (in Facebook / Instagram, we can react only once per message, and when we remove the reaction, we don't know the emoji). When posting a message on discuss, if an error occurred, we can retry to send the message. But in some cases, it's useful to know why it failed, and so we show the error message. Allow creating a channel without operator. For social, we would like to be able to create a channel without operator. For website, we don't show the chat button if no operator (human, script, AI) are available, but for social, users can send messages when no operators are available. For the chatbot script, we have a related archived partner, same for AI. So we skip the creation of the member if we have no operator partner. Set the "left channel" message as "notification type". Improve the view of the live channel. Task-5948062
The status bar design has been refined to better align with Odoo's new Frost visual layout. This improves visual consistency in web and mail views without changing business workflows.
Original PR description
This commit refines the status bar styling to better match the new Frost layout. task-6545990 Requires: - https://github.com/odoo/enterprise/pull/130906 | Before | After | |--------|--------| | <img width="366" height="53" alt="Screenshot 2026-09-10 at 11 28 04" src="https://github.com/user-attachments/assets/7602ff8d-ae89-4232-b01e-20d60c93f6e8" /> | <img width="377" height="49" alt="Screenshot 2026-09-10 at 11 27 45" src="https://github.com/user-attachments/assets/93efa0af-ec4a-4d57-b15d-f1c71ec7567f" /> | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Belgian payroll tax reports now use a configurable mapping table instead of hard-coded payroll rules. This makes it easier for support teams to update fiscal reporting logic, including reports 281.45 and 273S, without requiring code changes.
Original PR description
l10n.be.281.mapping: one row per (year range, tag, declaration), pointing at a salary rule, a python expression, or a sum of other rows. 281.45 and 273S are both rebuilt on it. Adding a rule to a report is a data change Salary rule and total links are real relations now (many2one/many2many). Also added a Fiscal Nature field on hr.salary.rule showing which mapping rows use it, and a debug-only menu so support can edit the mapping table directly. Task 6413391
Belgian payroll now makes employee seniority easier to manage by grouping related information and allowing a custom fictive hire date. End-of-collaboration notice durations can also be adjusted manually, helping HR teams better reflect individual employment situations.
Original PR description
- Moving seniority information in dedicated group under employee Payroll tab. - New fictive hire date field in orer to use a custom seniority. - Using year + month to set seniority at hire. - Notice duration manually editable in end of collaboration wizard. Task: 6381058
Belgian payroll now uses one clearer “Unassimilated” category for unpaid absence types, removing duplicate classification. This improves payroll reporting accuracy by correcting relevant work entry categories and DMFA codes, and makes it easier to find assimilated or unassimilated entries.
Original PR description
Purpose: Currently in the system, we have categories for `Unpaid and unassimilated` and `Unpaid and assimilated` but we only need one category because if the time type is paid, it's assimilated by default. So we only need to have a category for `Unassimilated` to differenciate between unpaid types. - removed category `Unpaid and Assimilated` - renamed category `Unpaid and Unassimilated` to `Unassimilated` - corrected category and dmfa code on some work entry types - added a filter for assimilated work entries and allowed to search with dmfa code and salary rule categories - added an `Unassimilated` for some work entry types that become unassimilated after 9 or 12 months task-id: 6478968
The Partners filter in accounting reports now shows how many partners or partner categories are selected. This makes it easier for users to see active report filters at a glance without opening the filter menu.
Original PR description
Before this commit: In partners related reports, there was no way user can know if there are any partners and partner categories selected or not in Partners filter without opening the Partners filter. After this commit: In Partners filter, display number of partners and partner categories selected if any selected or else display "Partners" like before. [task-6504449](https://www.odoo.com/odoo/my-tasks/6504449)
The Belgian advance payment return screen now shows the relevant checks directly and includes the payment setup within the same view, reducing the need to open a separate wizard. Users also receive a clearer warning when a missing VAT number would prevent correct payment communication.
Original PR description
Embed the advance payment return wizard into the return/checks view The advance payment return view previously did not display any checks and only allowed opening a separate configuration wizard. task-5490631
The status bar has been visually refined to better align with Odoo's new Frost layout. This creates a cleaner, more consistent interface for users without changing business workflows or functionality.
Original PR description
This commit refines the status bar styling to better match the new Frost layout. task-6545990 Requires: - https://github.com/odoo/odoo/pull/287341 | Before | After | |--------|--------| | <img width="356" height="58" alt="Screenshot 2026-09-10 at 11 28 14" src="https://github.com/user-attachments/assets/3cc9e02c-6f53-4664-87e3-f3a76f9f88c7" /> | <img width="357" height="55" alt="Screenshot 2026-09-10 at 11 27 41" src="https://github.com/user-attachments/assets/d3b5dd06-14cd-458d-bf3f-aca472670df4" /> | | <img width="358" height="51" alt="Screenshot 2026-09-10 at 11 28 24" src="https://github.com/user-attachments/assets/b3170dec-d103-49f7-93d4-471dc57fdaee" /> | <img width="356" height="59" alt="Screenshot 2026-09-10 at 11 27 27" src="https://github.com/user-attachments/assets/6786bb28-a174-482c-9d6c-7bb52c78cef8" /> |
Tax return types can now store separate profit and loss accounts for small rounding differences in tax closing entries. This prepares the accounting setup for a later update that will automatically reconcile differences between declared tax report amounts and cleared tax account balances.
Original PR description
Add two company-dependent accounts on account.return.type holding the rounding difference of the tax closing entry (a profit and a loss account), together with their configuration on the return type form. These fields are introduced on their own, ahead of the freeze. An upcoming task, merged after the freeze, computes the tax closing entry from the tax report and reconciles the difference between the amount the report declares and the balances actually cleared from the tax accounts onto these two accounts. Landing the fields now lets that later change stay purely functional, without a model addition on a post-freeze branch.
Spanish balance sheet and profit and loss reports now better match the official Spanish accounting plan. The update adds abbreviated report formats and corrects existing full and SME versions, helping Spanish companies produce more accurate statutory reports.
Original PR description
Spanish PGC defines three distinct balance sheet and profit and loss reports: full, abbreviated and PYMES(SMES). Until now this module only had the pymes and full report data. This commit adds the abbreviated and corrects the full and pymes reports which were not updated to the accounting spanish plan. A matching entry for the abbreviated balance sheet was added to test_balance_sheet_balanced.py
This update improves Odoo VoIP reliability when users receive calls across multiple browser tabs or devices, reducing duplicate call records and missed rings. It also adds QR-code setup for Linphone mobile calling and exposes a protected recovery payload so phone service tenants can be rebuilt if accidentally deleted.
Employee, payroll, and project document folders are now created and connected to the right business records automatically, reducing setup gaps and manual synchronization. HR and payroll access now relies on role-based groups, so new officers can access the relevant company folders without extra updates, while uploaded documents are linked to the correct employee or project more reliably.
Original PR description
### HR refactor Every feature of the HR bridges had to check `documents_hr_settings` and the existence of the company folder before doing anything. Those guards were fragile, easy to forget, and made…
Invoices and sales orders in the South Korea localization can now record the proof of issuance used for each transaction, such as tax invoice, credit card, or cash receipt. This improves VAT report accuracy and reduces manual setup by using customer or vendor defaults while simplifying the tax list businesses need to manage.
Original PR description
South Korean tax law classifies each transaction under a specific proof of issuance (세금계산서, 계산서, 신용카드, 현금영수증, ...), and which VAT report box a transaction is reported under depends on that…
South Korean tax law classifies each transaction under a specific proof of issuance (세금계산서, 계산서, 신용카드, 현금영수증, ...), and which VAT report box a transaction is reported under depends on that classification, not just on its taxes. Add `l10n_kr_issuance_type` to `account.move` so this can be recorded per invoice and used to drive VAT report generation. Since a given customer or vendor typically uses the same proof of issuance across transactions, add `l10n_kr_default_issuance_type` on `res.partner` (under Customer Invoices) so users don't have to pick it manually every time. `sale.order` carries the same field and passes it along when an invoice is created from the order, so issuance type can be set from the Sales app without needing access to Accounting. Also add: - `l10n_kr_edocument_number` on `account.move`, next to Customer Reference, to record the e-document number issued for the transaction. - South Korea's Tax ID label (`res.country.vat_label`) as "BRN" (Business Registration Number), matching local terminology. Now that proof of issuance is tracked separately, the `account.tax` templates no longer need one tax per rate/issuance-type combination: collapsed ~64 taxes (e.g. separate `10% TI`, `10% CR`, `10% Card` sales taxes) down to ones keyed only by rate and nature (standard, zero-rated, exempt, fixed-asset, non-deductible, deemed/recycled input VAT, ...), carrying just the base VAT tag. `general_tax_report.xml` and `simplified_tax_report.xml` were updated to derive their per-issuance-type boxes from `l10n_kr_issuance_type` on the move directly instead. [task-6216393](https://www.odoo.com/odoo/my-tasks/6216393)
Website shoppers can now search for products by barcode, including variant barcodes and barcodes on single-variant products. Matching searches take users directly to the relevant product or variant page, making product lookup faster and reducing friction for barcode-driven workflows.
Original PR description
Barcode search was not supported on the website product search, making it difficult to find products directly using their barcode values. This update adds support for searching products using: - Variant barcode - Single-variant product barcode The search now redirects users to the matching product or product variant page. Additionally, the Barcode and Reference fields are kept visible on product templates even when variants exist. task-6213261 For upgrade PR see : https://github.com/odoo/upgrade/pull/10895
Email composers can now choose whether to include the standard notification header. This helps businesses send simpler, cleaner emails when the default header is unnecessary.
Original PR description
When sending emails, we sometimes don't want to include the default header to keep the email clean and simple. This commit adds the email_notification_allow_header field to the mail composer to control the header visibility. Task-6065493
Website tours can now be marked inactive instead of being deleted. This helps teams keep old or temporarily unused tours available for later while preventing them from appearing in searches or starting automatically.
Original PR description
Allows disabling a tour without deleting it, so it no longer shows up in searches or gets suggested/played automatically. Task-id: 6563776
Korean VAT reports now alert users when invoices or bills in the filing period are missing proof of issuance, helping prevent transactions from being left out of the return unnoticed. The update also completes VAT return setup for general and simplified taxpayers with the correct filing periods.
Original PR description
The VAT report boxes now dispatch on `l10n_kr_issuance_type` rather than on the taxes alone, so an invoice or bill left without a proof of issuance (발행 증빙) belongs to no box at all and silently disappears from the return. Nothing on the report itself signals this, so a user could file a return missing entire transactions without ever noticing. Attach a custom handler to both VAT reports raising a warning when moves of the period are missing the field, with a link to the offending records so they can be fixed before the return is closed. While at it, complete the return types, which were only stubbed: - Rename `kr_tax_return_type` to "VAT Return" and give it the trimester deadline periodicity general taxpayers actually file on. - Add the yearly "VAT Return (Simplified Taxpayer)" type for the simplified report. [task-6216393](https://www.odoo.com/odoo/my-tasks/6216393)
Users can now download a fiscal declaration template, fill it in, and import the data back into the French fiscal reporting workflow. Existing declaration values are included in the template, making updates easier and reducing manual re-entry.
Original PR description
This commit will add a way for users to import data into the fiscal declaration. For that, we give a template that the user has to follow. If the user already has value in a line, it will be put in the template. task-5914069
Belgian companies can now record their NSSO immatriculation date in payroll settings. The payroll dashboard warns users when this date is missing, helping ensure first-hire reductions can be checked correctly.
Original PR description
The NSSO immatriculation date is required to properly check the first hires reduction for Belgian companies. This change adds the NSSO immatriculation date to the company and a warning to the payroll dashboard if that date is not set. task-6527410
Users who are allowed to create products can now use barcode lookup to create products without needing administrator access. This makes inventory and barcode workflows more consistent with existing product creation permissions.
Original PR description
Currently, the barcode lookup functionality is available only for users with administrator right. However, in user access rights we have a setting that allows users to be able to create products without being admins. Due to that, even if user can create a product from Inventory or other apps, they are not able to do it via barcodelookup. This commit ensures that such users are able to create products. task-6005042
The website generator has been updated to use the latest snippet package for Odoo 20. This gives users access to refreshed and newly available website building blocks when generating websites.
Original PR description
Updated the version number to get the updated and new snippets
This update records failures when automatic cancellation of Mexican electronic invoicing documents cannot be completed. This gives support and accounting teams better information to investigate cancellation issues without changing the user workflow.
Original PR description
In the current state, when an edi document is set to cancelled, the journal entry will attempt to cancel. However, if the cancellation throws a `UserError`, the flow simply continues. This PR adds a logger call to record the failure and help investigate the potential causes. Forward-Port-Of: odoo/enterprise#123511
UK reporting is being prepared to better support companies that operate with multiple legal entities. This update adds the underlying company settings needed for a later rollout, with no immediate change expected for day-to-day users.
Original PR description
These fields will be used in another branch (#[12854](https://github.com/odoo/enterprise/pull/128542)2) that will be merged post-freeze.
Czech invoicing now supports a dedicated QR code method and lets companies set a preferred QR code option on customer or vendor records. When an invoice is created, the partner preference is applied automatically, helping streamline payment setup and reduce manual choices.
Original PR description
- Introduce a new QR code method for Czech localization. - Make the 'qr_code_method' field of account.move compute stored. - Add a QR code method field to partners. - Automatically apply the partner's QR code method to the invoice when configured. task-[6024259](https://www.odoo.com/odoo/project/967/tasks/6024259)
Invoices can now show a partner's company registry identifier when no valid VAT number is available. This helps businesses include the best available official identification on invoice documents across affected localizations.
Original PR description
Adding functionality for displaying multi ID of "Company Registry" type for partners that do not have a valid VAT provided, if available. task-6152210 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Manufacturing work centers can now have their own barcode. This makes it easier for shop floor users to quickly select the right work center by scanning it, reducing manual selection time and potential mistakes.
Original PR description
This commit adds a `barcode` field on workcenter model. The purpose is to be able to scan it to select the workcenter in Shopfloor. task-6545274 **Enterprise PR**: odoo/enterprise#131006
This change makes system logs display the actual clock time even when tests simulate a different date or time. It helps teams reviewing runbot logs understand when events really happened and better analyze long-running test behavior.
Original PR description
When using faketime the logs are not showing the real time but the faketime one which can be confusing when listed in the runbot interface. Before the usage of the JSONFormatter, the logs were using the PostgreSQL time, which is the real time. This restores the previous behaviour. Having the faked time oustide JsonFromater is also painful: long running faketimed tests end up with most of their logs stamped to nearly the same real date, preventing any analysis of execution time based on the logs. One drawback of this change is the inability to identify at first sight whether a log was faketimed or not, but at this point it is just a tradeoff, and the faked_created field on the record still allows getting this info if needed. Forward-Port-Of: odoo/odoo#287455 Forward-Port-Of: odoo/odoo#287159
The accounting dashboard has been simplified to focus on the most useful indicators, with clearer receivable and payable cards and more direct links to relevant audit views. Margin reporting and sales/purchase graphs were adjusted for more accurate, easier-to-read business insights, while dashboard cards were improved for tablet layouts.
Original PR description
[IMP] account: improve dashboard KPIs - redirect some cards directly to their relevant audits - split receivable and payable into separate cards and redirect them to open items with receivable or payable selected accordingly - remove the net margin card to make the dashboard less overwhelming for the users and to keep only the important kpi cards - change the gross margin formula to use cost of revenue instead of expenses becuase this is the accurate one, using expenses here was not correct - simplify sale and purchase graphs to show monthly totals - enhance journal cards responsivity to show two cards per row for ipad screen size - highlight the invoice layout setup card task-[6526878](https://www.odoo.com/odoo/project/967/tasks/6526878) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Companies can now choose whether customers receive confirmation emails when field service shifts are published. This helps reduce unnecessary notifications for long-running projects while still allowing businesses to keep emails enabled and customize the template when needed.
Original PR description
- Publishing a shift always sends a confirmation email to the customer. This is too noisy for long-running projects (e.g. construction). - Add a company-specific setting (enabled by default) to control whether the email is sent and which template is used. Archiving or deleting the selected template disables the option. task-6420326
Planning now includes standard, morning, afternoon, and night shift templates by default. This helps new users get started faster by reducing the manual setup needed when configuring schedules.
Original PR description
Add standard, morning, afternoon, and night shift templates by default to make the initial Planning setup easier. task-6180740
Adds an option to generate sample live-location data for field service planning when demo data and debug mode are enabled. This helps teams showcase and test the live map with located resources, without affecting normal users.
Original PR description
This commit adds geolocation to some resources so to show their live location on the live map. task-6460606
Invoice templates for Mexico and Peru were adjusted to stay compatible with the updated shared invoice layout. This helps localized invoices continue to render correctly when using the newer template structure.
Original PR description
Adjusting Enterprise l10n templates to work with updated main template. task-6152210
Shop floor users can now scan a workcenter barcode to quickly select the correct workcenter. This reduces manual selection steps and helps operators move faster with fewer selection mistakes during production.
Original PR description
Allow the user to scan a workcenter barcode to select the workcenter in shopfloor.. [Task 6545274](https://www.odoo.com/odoo/project/966/tasks/6545274) Community PR: odoo/odoo#287683
Users can now open related records shown in embedded list sections in a full page view. This makes business tools like search filters, grouping, export, and bulk actions available without extra configuration.
Original PR description
Before this commit, the records of an x2many could only be consulted through the sub view embedded in the form. The search panel, the groupbys, the export and the multi-record actions are features of a full blown action, and none of them was reachable from there. After this commit, every x2many displayed as a list gets a button in the header of the table, next to the optional columns dropdown, which opens its records in an act_window on the comodel. It is a property of the field itself, so it comes for free on all of them, without any widget or option in the arch. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Belgian payroll now uses the standard work location setup for DMFA location units, reducing duplicate configuration and making payroll reporting easier to maintain. This helps companies keep Belgian social security reporting aligned with employee work locations more consistently.
Original PR description
task-6476798
Mobile calendar navigation is smoother because scrolling and swiping are now kept separate, reducing accidental day changes and jittery movement. The update also improves mobile layouts for calendar headers, sync status, and the homeworking location wizard, including clearer employee setup guidance when needed.
Original PR description
[IMP] calendar,hr_calendar: UX improvements Several smaller ux improvements: - Updated the homeworking location wizard to work with mobile view - Updated header and sync status for mobile view - In…
[IMP] calendar,hr_calendar: UX improvements Several smaller ux improvements: - Updated the homeworking location wizard to work with mobile view - Updated header and sync status for mobile view - In the worklocation wizard, if the user doesn't have a linked employee_id but has the rights to set one, they now see a button redirecting them to the employees view [IMP] web: prevent scrolling and swiping at the same time In the calendar view on mobile devices, if the user starts scrolling vertically and then switches to horizontal swiping, both motions are triggered at the same time, leading to some very janky movements. When scrolling up/down, the swiper input is very sensitive to left/right motions, which means you can very easily accidentally swipe to the next day when scrolling The idea behind this change is to: - scroll down or up OR left or right - NEVER both at the same time This commit introduces an `axis lock` which only enables scrolling in one direction at a time. Test changes: The drag called in tests performs an initial movement to start up the dragging motion. This motion can happen on either axis, which can trigger the axis lock before the actual drag we want to test happens. The change to the test removes this initial motion. When calling navigate, the swipe was performed from (0, 0) to the middle right of the target element. This introduced a significant Y offset to the drag, and was considered a vertical scroll. With this update, we start the swipe in the center of the element to ensure a ~0 Y delta. Task-6396805
This update combines the usual work location group with the work location information in the HR app. It makes employee location details easier to manage and reduces confusion for HR users.
Original PR description
task-6476798 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
Loyalty programs can now set an expiration period for earned points, helping businesses manage outstanding rewards more accurately. Customers can see when their points expire, and the system uses points nearing expiration first so balances better reflect usable rewards.
Original PR description
Loyalty points had no expiry, and `loyalty.history` was only a log kept beside the balance: `loyalty.card.points` was a stored column, and the rows recorded what an order earned and spent without either side being authoritative. Expiring points needs to know which points are which, so the history becomes the balance itself. `points` is now computed from it, and a row records one movement in one direction. A line spending points links to the award it draws from, so it stops counting once those points expire, and a spend with no award behind it never expires. Awards are drawn from oldest expiry first, so the points closest to lapsing are used before the ones that are not. Programs of type `loyalty` gain an `expire_after` delay in days, and the portal shows the customer when each award expires. task-4711900 Enterprise PR: https://github.com/odoo/enterprise/pull/125634 Upgrade PR: https://github.com/odoo/upgrade/pull/10869
Support, website support, and subscription loyalty flows were updated to keep working correctly after loyalty card points became calculated on demand rather than saved. This helps ensure coupon generation and subscription-related loyalty behavior continue to show accurate point information without disrupting users.
Original PR description
_* = helpdesk_sale_loyalty, website_helpdesk_sale_loyalty. adapt as the field `points` on `loyalty.card` is non-stored. task-4711900 Community PR: https://github.com/odoo/odoo/pull/206048 Upgrade PR: https://github.com/odoo/upgrade/pull/10869
Kanban cards now show a complete highlighted border when users hover over them, including in grouped views. Document cards have also been visually aligned with the standard Kanban card style for a more consistent interface.
Original PR description
Prior to this commit, there was a border issue when hovering a grouped Kanban card: the entire border was not always emphasized on hover. This commit ensures that the entire Kanban card border is…
Prior to this commit, there was a border issue when hovering a grouped Kanban card: the entire border was not always emphasized on hover. This commit ensures that the entire Kanban card border is consistently highlighted on hover. It also updates the Documents card border to align its design with the general Kanban card design. task-6517831 | Before | After | |--------|--------| | <img width="415" height="435" alt="Screenshot 2026-09-07 at 10 20 47" src="https://github.com/user-attachments/assets/b40e4614-954f-4d7b-94cb-e0a9b629def8" /> | <img width="416" height="433" alt="Screenshot 2026-09-07 at 10 21 55" src="https://github.com/user-attachments/assets/de112c8a-aa7c-4583-8127-3de1a099bda8" /> | | <img width="342" height="242" alt="Screenshot 2026-09-07 at 10 20 59" src="https://github.com/user-attachments/assets/99320ea4-aae4-44aa-b2c4-ed2b6582a99a" /> | <img width="341" height="243" alt="Screenshot 2026-09-07 at 10 22 02" src="https://github.com/user-attachments/assets/ae5e32fd-9221-40eb-baf8-2fb4f0341536" /> | | <img width="688" height="267" alt="Screenshot 2026-09-07 at 10 21 06" src="https://github.com/user-attachments/assets/2f5196f3-b557-4422-9113-1679f5296e9a" /> | <img width="679" height="261" alt="Screenshot 2026-09-07 at 10 22 15" src="https://github.com/user-attachments/assets/67de11bb-8706-4992-87a2-9b9b91c99143" /> |
The appointment calendar share option has been moved into the main control panel menu on mobile. This removes an extra bottom sheet, making the mobile calendar experience simpler and less cluttered for users.
Original PR description
Moving the button to the control panel removes the extra bottom sheet from the mobile view. Instead, the button is shown only with the vertical dots menu in the control panel Task-6396805
The HR module removes older wage helper logic to streamline how contract wage information is handled. This is an internal cleanup that should make the system easier to maintain without changing everyday HR workflows.
Original PR description
Task-5043999
The delivery planning Gantt view for fleet-related stock operations has been improved to make scheduling easier to read and manage. This helps teams coordinate delivery batches and fleet resources more efficiently.
Original PR description
WIP task-6542620
Field service planners can now use a combined map and schedule view to see where jobs are located alongside their timing. This makes it easier to coordinate technician assignments, routes, and availability in one place.
Original PR description
Proof of Concept: this commit introduces a customization of the map view that combines a map and a gantt views for planning field service. task-6273718
Ecuador electronic invoicing settings now use a provider contact instead of a free-text system value for the billing software provider RUC. This helps ensure the RUC is properly validated and gives users non-blocking reminders when the provider is not configured.
Original PR description
Purpose: Users can now configure the billing software provider's RUC for electronic invoicing in stable thanks to this PR: https://github.com/odoo/enterprise/pull/129456. In stable, it introduced a system parameter to store the RUC for the database, but there was no validation enforced on the RUC. To improve this, the system parameter storing the RUC is replaced with a many2one res.partner field, so the user can add the billing software provider contact instead. Configuring the RUC on the contact enforces the RUC validation. Non-blocking warnings are added to the flow to remind users to configure the billing provider in settings if empty. task-6432810
The timesheet access level descriptions have been updated to be clearer for users and administrators. This helps people better understand what each access level allows when configuring timesheet permissions.
Original PR description
Update the access level tooltips for the timesheet --- task-6353758
The access level descriptions for Helpdesk, Planning, and Field Service have been updated to make permissions easier to understand. This helps administrators choose the right access levels with clearer in-product guidance, without changing the underlying permissions.
Original PR description
Update the access level tooltips for the helpdesk and planning --- task-6353758
ESG metric screens and wizards are now clearer and easier to use, with better guidance, improved layouts, and support for creating partners during stakeholder reviews. Businesses can also archive outdated or duplicate metrics instead of deleting them, helping preserve history while keeping current workspaces tidy.
Original PR description
This commit improves the ESG metrics wizards and views by making the following changes: - Added help text to the `revenues_value` and `assets_value` fields in the `metrics_ai_generation_wizard` - Updated the score gap warning messages in the esg_metric model to provide clearer guidance to users. - Improved the layout and organization of the metric views. - Allow the creation of partners from the stakeholder review wizard. task-6333207
Original PR description
In this [PR](https://github.com/odoo/odoo/pull/223685), the Buy, Manufacture and Resupply Subcontractor on Order routes were made warehouse routes to simplify product configuration. Adding a vendor…
In this [PR](https://github.com/odoo/odoo/pull/223685), the Buy, Manufacture and Resupply Subcontractor on Order routes were made warehouse routes to simplify product configuration. Adding a vendor or a BoM is enough to make a product ready to buy or manufacture, without manually selecting the corresponding route on the product. Later, this [PR](https://github.com/odoo/odoo/pull/274672) made the ORM check the comodel domain when linking records to x2many fields and set `product_selectable` to [True](https://github.com/odoo/odoo/pull/274672/changes/c758a2dcd9ecf464ca8b9aa8f19dfadf30bf4755#diff-e018fe59e11c4e0078e9bc19879f9e98c731bb84c71766ef360ccc482c59d2d8), making these routes available for selection on the product form again. This commit makes routes as warehouse routes [again](https://github.com/odoo/odoo/pull/280682/changes#diff-e018fe59e11c4e0078e9bc19879f9e98c731bb84c71766ef360ccc482c59d2d8L393) to simplify product configuration and updates the affected tests to explicitly enable `product_selectable` when they need to assign a route to a product. Enterprise PR:- https://github.com/odoo/enterprise/pull/126863 TaskId:- 6442488
### HR refactor Every feature of the HR bridges had to check `documents_hr_settings` and the existence of the company folder before doing anything. Those guards were fragile, easy to forget, and made the bridges harder to extend. As recently done for the other bridges, an installed bridge is now always used: the "Employees" folder of a company is required and created with it, and every employee of an active company gets their folder(s). Sharing relies on functional groups rather than on a copy of the HR (resp. payroll) officers on each folder, so a new officer reaches the folders of their companies without any resynchronisation. All payroll documents now end up in the employee's Payroll folder, which belongs to documents_hr_payroll alone. ### Documents mixin for employees and projects Employee and Project *folders* are now also linked to the record they belong to and documents inherit that link from their parent folder. Therefore, documents uploaded in such folders will automatically be linked to the record. Task-6344800 Task-6310302